mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-09-05 10:41:58 +03:00
refactor(agent): remove loop iteration state (#5549)
* refactor(agent): remove loop iteration state * docs(my): remove stale iteration guidance
This commit is contained in:
@@ -201,10 +201,6 @@ class AgentLoop:
|
||||
5. Sends responses back
|
||||
"""
|
||||
|
||||
@property
|
||||
def current_iteration(self) -> int:
|
||||
return self._current_iteration
|
||||
|
||||
@property
|
||||
def tool_names(self) -> list[str]:
|
||||
return self.tools.tool_names
|
||||
@@ -464,7 +460,6 @@ class AgentLoop:
|
||||
if model_preset:
|
||||
self.set_model_preset(model_preset, publish_update=False)
|
||||
self._register_default_tools(provider_snapshot_loader=provider_snapshot_loader)
|
||||
self._current_iteration: int = 0
|
||||
self.commands = CommandRouter()
|
||||
register_builtin_commands(self.commands)
|
||||
|
||||
@@ -1172,7 +1167,6 @@ class AgentLoop:
|
||||
session_key=active_session_key,
|
||||
workspace=effective_scope.project_path,
|
||||
tool_hint_max_length=self.tool_hint_max_length,
|
||||
on_iteration=lambda iteration: setattr(self, "_current_iteration", iteration),
|
||||
registered_hook_factories=self._hook_factories,
|
||||
turn_hook_factories=list(hook_factories or []),
|
||||
registered_hooks=self._extra_hooks,
|
||||
|
||||
@@ -31,7 +31,6 @@ class AgentProgressHook(AgentHook):
|
||||
*,
|
||||
session_key: str | None = None,
|
||||
tool_hint_max_length: int = 40,
|
||||
on_iteration: Callable[[int], None] | None = None,
|
||||
) -> None:
|
||||
super().__init__(reraise=True)
|
||||
self._on_progress = on_progress
|
||||
@@ -39,7 +38,6 @@ class AgentProgressHook(AgentHook):
|
||||
self._on_stream_end = on_stream_end
|
||||
self._session_key = session_key
|
||||
self._tool_hint_max_length = tool_hint_max_length
|
||||
self._on_iteration = on_iteration
|
||||
self._stream_buf = ""
|
||||
self._think_extractor = IncrementalThinkExtractor()
|
||||
self._reasoning_open = False
|
||||
@@ -96,8 +94,6 @@ class AgentProgressHook(AgentHook):
|
||||
self._think_extractor.reset()
|
||||
|
||||
async def before_iteration(self, context: AgentHookContext) -> None:
|
||||
if self._on_iteration:
|
||||
self._on_iteration(context.iteration)
|
||||
logger.debug(
|
||||
"Starting agent loop iteration {} for session {}",
|
||||
context.iteration,
|
||||
|
||||
@@ -28,8 +28,6 @@ RUNTIME_SNAPSHOT_KEYS = frozenset({
|
||||
"workspace",
|
||||
"provider_retry_mode",
|
||||
"max_tool_result_chars",
|
||||
"current_iteration",
|
||||
"_current_iteration",
|
||||
"tool_names",
|
||||
"web_config",
|
||||
"exec_config",
|
||||
@@ -59,7 +57,6 @@ class RuntimeSnapshot:
|
||||
workspace: Path | str
|
||||
provider_retry_mode: str
|
||||
max_tool_result_chars: int
|
||||
current_iteration: int
|
||||
tool_names: list[str]
|
||||
web_config: dict[str, object]
|
||||
exec_config: dict[str, object]
|
||||
@@ -77,8 +74,6 @@ class RuntimeSnapshot:
|
||||
"workspace": self.workspace,
|
||||
"provider_retry_mode": self.provider_retry_mode,
|
||||
"max_tool_result_chars": self.max_tool_result_chars,
|
||||
"current_iteration": self.current_iteration,
|
||||
"_current_iteration": self.current_iteration,
|
||||
"tool_names": self.tool_names,
|
||||
"web_config": self.web_config,
|
||||
"exec_config": self.exec_config,
|
||||
@@ -141,9 +136,6 @@ class _RuntimeControlTarget(Protocol):
|
||||
@property
|
||||
def workspace(self) -> Path: ...
|
||||
|
||||
@property
|
||||
def current_iteration(self) -> int: ...
|
||||
|
||||
@property
|
||||
def tool_names(self) -> list[str]: ...
|
||||
|
||||
@@ -179,7 +171,6 @@ class AgentRuntimeControl:
|
||||
),
|
||||
provider_retry_mode=target.provider_retry_mode,
|
||||
max_tool_result_chars=target.max_tool_result_chars,
|
||||
current_iteration=target.current_iteration,
|
||||
tool_names=list(target.tool_names),
|
||||
web_config=_snapshot_web_config(target.web_config),
|
||||
exec_config=_snapshot_exec_config(target.exec_config),
|
||||
|
||||
@@ -88,8 +88,6 @@ class MyTool(Tool):
|
||||
READ_ONLY = frozenset({
|
||||
"subagents", # observable but replacing it would break the system
|
||||
"tool_names",
|
||||
"current_iteration",
|
||||
"_current_iteration", # updated by runner only
|
||||
"exec_config", # inspect allowed (e.g. check sandbox), modify blocked
|
||||
"web_config", # inspect allowed (e.g. check enable), modify blocked
|
||||
"model_presets", # config-derived catalog; changes require config reload
|
||||
@@ -152,8 +150,6 @@ class MyTool(Tool):
|
||||
"(e.g. 'web_config.enable').\n"
|
||||
"- set (key, value): change config or store notes in your scratchpad. "
|
||||
"Scratchpad keys persist across turns but not restarts.\n"
|
||||
"Key values: _current_iteration (current progress), "
|
||||
"max_iterations - _current_iteration = remaining iterations.\n"
|
||||
"Current routing metadata is available read-only via request.channel, "
|
||||
"request.chat_id, and request.sender_id.\n"
|
||||
"Use model_preset for session-scoped model or context changes; direct "
|
||||
@@ -441,7 +437,6 @@ class MyTool(Tool):
|
||||
"workspace",
|
||||
"provider_retry_mode",
|
||||
"max_tool_result_chars",
|
||||
"_current_iteration",
|
||||
"web_config",
|
||||
"exec_config",
|
||||
"subagents",
|
||||
|
||||
@@ -32,7 +32,6 @@ class AgentTurnHookSpec:
|
||||
session_key: str | None = None
|
||||
workspace: Path | None = None
|
||||
tool_hint_max_length: int = 40
|
||||
on_iteration: Callable[[int], None] | None = None
|
||||
registered_hook_factories: list[AgentTurnHookFactory] = field(default_factory=list)
|
||||
turn_hook_factories: list[AgentTurnHookFactory] = field(default_factory=list)
|
||||
registered_hooks: list[AgentHook] = field(default_factory=list)
|
||||
@@ -50,7 +49,6 @@ def build_agent_turn_hook(spec: AgentTurnHookSpec) -> AgentHook:
|
||||
on_stream_end=spec.on_stream_end,
|
||||
session_key=spec.session_key,
|
||||
tool_hint_max_length=spec.tool_hint_max_length,
|
||||
on_iteration=spec.on_iteration,
|
||||
)
|
||||
if spec.ephemeral and not spec.run_extra_hooks_for_ephemeral:
|
||||
return progress_hook
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: my
|
||||
description: Inspect and optionally adjust the agent's runtime state. Use to check the current model or preset, context window, iteration progress and limits, workspace and tool configuration, subagent status, and request routing metadata such as channel, chat ID, and sender ID; diagnose unavailable capabilities; change allowed runtime settings; or store temporary session scratchpad values.
|
||||
description: Inspect and optionally adjust the agent's runtime state. Use to check the current model or preset, context window and runtime limits, workspace and tool configuration, subagent status, and request routing metadata such as channel, chat ID, and sender ID; diagnose unavailable capabilities; change allowed runtime settings; or store temporary session scratchpad values.
|
||||
---
|
||||
|
||||
# Self-Awareness
|
||||
@@ -9,7 +9,7 @@ description: Inspect and optionally adjust the agent's runtime state. Use to che
|
||||
|
||||
1. **Identify the situation** from the categories below
|
||||
2. **Call the my tool** with the appropriate action
|
||||
3. **If set**, warn the user before changing impactful settings (model, iterations)
|
||||
3. **If set**, warn the user before changing impactful settings such as the model or runtime limits
|
||||
4. **For detailed examples**, read [references/examples.md](references/examples.md)
|
||||
|
||||
## When to check
|
||||
|
||||
Reference in New Issue
Block a user