feat(cli, agent): add tool generation callback for streaming updates

- Introduced `_on_tool_gen_start` in `HermesCLI` to indicate when tool-call arguments are being generated, enhancing user feedback during streaming.
- Updated `AIAgent` to support a new `tool_gen_callback`, notifying the display layer when tool generation starts, allowing for better user experience during large payloads.
- Ensured that the callback is triggered appropriately during streaming events to prevent user interface freezing.
This commit is contained in:
Teknium
2026-03-23 23:10:55 -07:00
parent 1345e93393
commit 87e2626cf6
2 changed files with 46 additions and 1 deletions

19
cli.py
View File

@@ -1938,6 +1938,7 @@ class HermesCLI:
pass_session_id=self.pass_session_id,
tool_progress_callback=self._on_tool_progress,
stream_delta_callback=self._stream_delta if self.streaming_enabled else None,
tool_gen_callback=self._on_tool_gen_start if self.streaming_enabled else None,
)
# Route agent status output through prompt_toolkit so ANSI escape
# sequences aren't garbled by patch_stdout's StdoutProxy (#2262).
@@ -4633,6 +4634,24 @@ class HermesCLI:
except Exception as e:
print(f" ❌ MCP reload failed: {e}")
# ====================================================================
# Tool-call generation indicator (shown during streaming)
# ====================================================================
def _on_tool_gen_start(self, tool_name: str) -> None:
"""Called when the model begins generating tool-call arguments.
Closes any open streaming boxes (reasoning / response) and prints a
short status line so the user sees activity instead of a frozen
screen while a large payload (e.g. a 45 KB write_file) streams in.
"""
self._flush_stream()
self._close_reasoning_box()
from agent.display import get_tool_emoji
emoji = get_tool_emoji(tool_name, default="")
_cprint(f"{emoji} preparing {tool_name}")
# ====================================================================
# Tool progress callback (audio cues for voice mode)
# ====================================================================