mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-01 01:51:44 +00:00
perf(tui): avoid importing classic CLI during tool discovery
TUI session readiness was still laggy after the gateway-ready fixes. Profiling session.create -> session.info showed the slow phase is background AIAgent construction (~1.1s). A cProfile run of tui_gateway.server::_make_agent showed model_tools/tool discovery importing tools.code_execution_tool, whose module-level EXECUTE_CODE_SCHEMA calls _get_execution_mode(), which imported cli.CLI_CONFIG. That pulled the classic interactive CLI stack (prompt_toolkit/Rich and REPL setup) into every agent startup path, including hermes --tui where it is not used. Replace that with hermes_cli.config.read_raw_config(), which is cached and reads only the raw code_execution section. Existing defaults still apply when the key is absent. Measurements on macOS Terminal.app: - import run_agent: ~466ms -> ~347ms - model_tools import: ~418ms -> ~272ms - _make_agent: ~1452ms -> ~1239ms - session.create -> session.info: ~1167ms -> ~999ms - full hermes --tui ready p50: ~1655ms -> ~1537ms Tests: - scripts/run_tests.sh tests/tools/test_code_execution_modes.py tests/tools/test_code_execution.py
This commit is contained in:
parent
0399d4b976
commit
9e398e1809
2 changed files with 25 additions and 7 deletions
|
|
@ -1309,10 +1309,20 @@ def _kill_process_group(proc, escalate: bool = False):
|
|||
|
||||
|
||||
def _load_config() -> dict:
|
||||
"""Load code_execution config from CLI_CONFIG if available."""
|
||||
"""Load code_execution config without importing the interactive CLI.
|
||||
|
||||
This helper is called while building the module-level execute_code schema
|
||||
during tool discovery. Importing ``cli`` here pulls prompt_toolkit/Rich and
|
||||
a large chunk of the classic REPL onto every agent startup path, including
|
||||
``hermes --tui`` where it is never used. Read the lightweight raw config
|
||||
instead; the config layer already caches by (mtime, size), and an absent
|
||||
key cleanly falls back to DEFAULT_EXECUTION_MODE.
|
||||
"""
|
||||
try:
|
||||
from cli import CLI_CONFIG
|
||||
return CLI_CONFIG.get("code_execution", {})
|
||||
from hermes_cli.config import read_raw_config
|
||||
|
||||
cfg = read_raw_config().get("code_execution", {})
|
||||
return cfg if isinstance(cfg, dict) else {}
|
||||
except Exception:
|
||||
return {}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue