mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-15 14:22:43 +00:00
The -m flag seeds HERMES_MODEL/HERMES_INFERENCE_MODEL for the launched TUI process only. But the per-turn config sync (_sync_agent_model_with_config) computed its target via _config_model_target(), which fell back to those env vars whenever config.yaml had no model.default — the normal state for custom-provider-only setups. The sync then replayed the -m model as a /model switch, and with model.persist_switch_by_default (default true) _persist_model_switch wrote model.default/provider/base_url into config.yaml. A one-shot CLI flag became the permanent global model, visible in every new session and every model picker. Two-sided fix: - _config_model_target() no longer falls back to the env seed. Empty model = config expresses no preference = sync is a no-op. The agent keeps the session-scoped -m model; config.yaml edits still sync. - _apply_model_switch() gains persist_override; all three internal callers (config sync, /moa one-shot swap, /moa post-turn restore) pass persist_override=False so session-mechanical switches can never write config.yaml regardless of the persist-by-default setting. User-typed /model keeps its existing flag/config behavior. E2E-verified against an isolated HERMES_HOME with a custom-provider-only config + -m env seed: sync no longer fires, config.yaml byte-identical, _resolve_model() still returns the seed for the session's own agent. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| entry.py | ||
| event_publisher.py | ||
| git_probe.py | ||
| loop_noise.py | ||
| project_tree.py | ||
| render.py | ||
| server.py | ||
| slash_worker.py | ||
| transport.py | ||
| ws.py | ||