Improve active run timing and turn limits
This commit is contained in:
+5
-5
@@ -27,7 +27,7 @@ from .agent_tool_core import (
|
||||
from .agent_tool_specs.data_agent import build_data_agent_tools
|
||||
from .agent_tool_specs.execution import build_execution_tools
|
||||
from .agent_tool_specs.files import build_file_tools
|
||||
from .agent_types import ToolExecutionResult
|
||||
from .agent_types import DEFAULT_MAX_TURNS, ToolExecutionResult
|
||||
from .data_agent_records import (
|
||||
DataRecordError,
|
||||
confirm_generation_goal,
|
||||
@@ -938,7 +938,7 @@ def default_tool_registry() -> dict[str, AgentTool]:
|
||||
'properties': {
|
||||
'prompt': {'type': 'string'},
|
||||
'label': {'type': 'string'},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': 20},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': DEFAULT_MAX_TURNS},
|
||||
'resume_session_id': {'type': 'string'},
|
||||
'session_id': {'type': 'string'},
|
||||
'depends_on': {
|
||||
@@ -953,7 +953,7 @@ def default_tool_registry() -> dict[str, AgentTool]:
|
||||
},
|
||||
'resume_session_id': {'type': 'string'},
|
||||
'session_id': {'type': 'string'},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': 20},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': DEFAULT_MAX_TURNS},
|
||||
'allow_write': {'type': 'boolean'},
|
||||
'allow_shell': {'type': 'boolean'},
|
||||
'include_parent_context': {'type': 'boolean'},
|
||||
@@ -983,7 +983,7 @@ def default_tool_registry() -> dict[str, AgentTool]:
|
||||
'properties': {
|
||||
'prompt': {'type': 'string'},
|
||||
'label': {'type': 'string'},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': 20},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': DEFAULT_MAX_TURNS},
|
||||
'resume_session_id': {'type': 'string'},
|
||||
'session_id': {'type': 'string'},
|
||||
'depends_on': {
|
||||
@@ -998,7 +998,7 @@ def default_tool_registry() -> dict[str, AgentTool]:
|
||||
},
|
||||
'resume_session_id': {'type': 'string'},
|
||||
'session_id': {'type': 'string'},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': 20},
|
||||
'max_turns': {'type': 'integer', 'minimum': 1, 'maximum': DEFAULT_MAX_TURNS},
|
||||
'allow_write': {'type': 'boolean'},
|
||||
'allow_shell': {'type': 'boolean'},
|
||||
'include_parent_context': {'type': 'boolean'},
|
||||
|
||||
+4
-1
@@ -150,10 +150,13 @@ class AgentPermissions:
|
||||
allow_destructive_shell_commands: bool = False
|
||||
|
||||
|
||||
DEFAULT_MAX_TURNS = 50
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class AgentRuntimeConfig:
|
||||
cwd: Path
|
||||
max_turns: int = 12
|
||||
max_turns: int = DEFAULT_MAX_TURNS
|
||||
command_timeout_seconds: float = 30.0
|
||||
max_output_chars: int = 12000
|
||||
stream_model_responses: bool = False
|
||||
|
||||
+9
-8
@@ -23,6 +23,7 @@ from .agent_types import (
|
||||
AgentPermissions,
|
||||
AgentRuntimeConfig,
|
||||
BudgetConfig,
|
||||
DEFAULT_MAX_TURNS,
|
||||
ModelConfig,
|
||||
ModelPricing,
|
||||
OutputSchemaConfig,
|
||||
@@ -104,7 +105,7 @@ def _add_agent_common_args(parser: argparse.ArgumentParser, *, include_backend:
|
||||
def _build_runtime_config(args: argparse.Namespace) -> AgentRuntimeConfig:
|
||||
return AgentRuntimeConfig(
|
||||
cwd=Path(args.cwd).resolve(),
|
||||
max_turns=getattr(args, 'max_turns', 12),
|
||||
max_turns=getattr(args, 'max_turns', None) or DEFAULT_MAX_TURNS,
|
||||
permissions=AgentPermissions(
|
||||
allow_file_write=args.allow_write,
|
||||
allow_shell_commands=args.allow_shell,
|
||||
@@ -228,7 +229,7 @@ def _append_agent_forwarded_args(
|
||||
include_backend: bool,
|
||||
) -> None:
|
||||
command.extend(['--cwd', str(args.cwd)])
|
||||
command.extend(['--max-turns', str(getattr(args, 'max_turns', 12))])
|
||||
command.extend(['--max-turns', str(getattr(args, 'max_turns', None) or DEFAULT_MAX_TURNS)])
|
||||
if include_backend:
|
||||
command.extend(['--model', str(args.model)])
|
||||
command.extend(['--base-url', str(args.base_url)])
|
||||
@@ -837,13 +838,13 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
|
||||
agent_parser = subparsers.add_parser('agent', help='run the real Python local-model agent')
|
||||
agent_parser.add_argument('prompt')
|
||||
agent_parser.add_argument('--max-turns', type=int, default=12)
|
||||
agent_parser.add_argument('--max-turns', type=int, default=DEFAULT_MAX_TURNS)
|
||||
agent_parser.add_argument('--show-transcript', action='store_true')
|
||||
_add_agent_common_args(agent_parser, include_backend=True)
|
||||
|
||||
background_parser = subparsers.add_parser('agent-bg', help='run the Python local-model agent as a local background session')
|
||||
background_parser.add_argument('prompt')
|
||||
background_parser.add_argument('--max-turns', type=int, default=12)
|
||||
background_parser.add_argument('--max-turns', type=int, default=DEFAULT_MAX_TURNS)
|
||||
background_parser.add_argument('--show-transcript', action='store_true')
|
||||
_add_agent_common_args(background_parser, include_backend=True)
|
||||
|
||||
@@ -851,7 +852,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
background_worker_parser.add_argument('background_id')
|
||||
background_worker_parser.add_argument('prompt')
|
||||
background_worker_parser.add_argument('--background-root', required=True)
|
||||
background_worker_parser.add_argument('--max-turns', type=int, default=12)
|
||||
background_worker_parser.add_argument('--max-turns', type=int, default=DEFAULT_MAX_TURNS)
|
||||
background_worker_parser.add_argument('--show-transcript', action='store_true')
|
||||
_add_agent_common_args(background_worker_parser, include_backend=True)
|
||||
|
||||
@@ -875,7 +876,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
|
||||
daemon_start_parser = daemon_subparsers.add_parser('start', help='launch a local daemon-style background agent session')
|
||||
daemon_start_parser.add_argument('prompt')
|
||||
daemon_start_parser.add_argument('--max-turns', type=int, default=12)
|
||||
daemon_start_parser.add_argument('--max-turns', type=int, default=DEFAULT_MAX_TURNS)
|
||||
daemon_start_parser.add_argument('--show-transcript', action='store_true')
|
||||
_add_agent_common_args(daemon_start_parser, include_backend=True)
|
||||
|
||||
@@ -883,7 +884,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
daemon_worker_parser.add_argument('background_id')
|
||||
daemon_worker_parser.add_argument('prompt')
|
||||
daemon_worker_parser.add_argument('--background-root', required=True)
|
||||
daemon_worker_parser.add_argument('--max-turns', type=int, default=12)
|
||||
daemon_worker_parser.add_argument('--max-turns', type=int, default=DEFAULT_MAX_TURNS)
|
||||
daemon_worker_parser.add_argument('--show-transcript', action='store_true')
|
||||
_add_agent_common_args(daemon_worker_parser, include_backend=True)
|
||||
|
||||
@@ -904,7 +905,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
chat_parser = subparsers.add_parser('agent-chat', help='run an interactive Python local-model chat loop')
|
||||
chat_parser.add_argument('prompt', nargs='?')
|
||||
chat_parser.add_argument('--resume-session-id')
|
||||
chat_parser.add_argument('--max-turns', type=int, default=12)
|
||||
chat_parser.add_argument('--max-turns', type=int, default=DEFAULT_MAX_TURNS)
|
||||
chat_parser.add_argument('--show-transcript', action='store_true')
|
||||
_add_agent_common_args(chat_parser, include_backend=True)
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ from .agent_types import (
|
||||
AgentPermissions,
|
||||
AgentRuntimeConfig,
|
||||
BudgetConfig,
|
||||
DEFAULT_MAX_TURNS,
|
||||
ModelConfig,
|
||||
ModelPricing,
|
||||
OutputSchemaConfig,
|
||||
@@ -204,7 +205,7 @@ def deserialize_runtime_config(payload: JSONDict) -> AgentRuntimeConfig:
|
||||
output_schema_payload = payload.get('output_schema')
|
||||
return AgentRuntimeConfig(
|
||||
cwd=Path(str(payload['cwd'])).resolve(),
|
||||
max_turns=int(payload.get('max_turns', 12)),
|
||||
max_turns=int(payload.get('max_turns', DEFAULT_MAX_TURNS)),
|
||||
command_timeout_seconds=float(payload.get('command_timeout_seconds', 30.0)),
|
||||
max_output_chars=int(payload.get('max_output_chars', 12000)),
|
||||
stream_model_responses=bool(payload.get('stream_model_responses', False)),
|
||||
|
||||
Reference in New Issue
Block a user