diff --git a/cron/scheduler.py b/cron/scheduler.py index e164c1f33..33a9b8993 100644 --- a/cron/scheduler.py +++ b/cron/scheduler.py @@ -585,11 +585,9 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]: except Exception as e: logger.warning("Job '%s': failed to load config.yaml, using defaults: %s", job_id, e) - # Reasoning config from env or config.yaml + # Reasoning config from config.yaml from hermes_constants import parse_reasoning_effort - effort = os.getenv("HERMES_REASONING_EFFORT", "") - if not effort: - effort = str(_cfg.get("agent", {}).get("reasoning_effort", "")).strip() + effort = str(_cfg.get("agent", {}).get("reasoning_effort", "")).strip() reasoning_config = parse_reasoning_effort(effort) # Prefill messages from env or config.yaml diff --git a/gateway/run.py b/gateway/run.py index 99c71d915..149b1f59d 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -921,12 +921,11 @@ class GatewayRunner: @staticmethod def _load_reasoning_config() -> dict | None: - """Load reasoning effort from config with env fallback. + """Load reasoning effort from config.yaml. - Checks agent.reasoning_effort in config.yaml first, then - HERMES_REASONING_EFFORT as a fallback. Valid: "xhigh", "high", - "medium", "low", "minimal", "none". Returns None to use default - (medium). + Reads agent.reasoning_effort from config.yaml. Valid: "xhigh", + "high", "medium", "low", "minimal", "none". Returns None to use + default (medium). """ from hermes_constants import parse_reasoning_effort effort = "" @@ -939,8 +938,6 @@ class GatewayRunner: effort = str(cfg.get("agent", {}).get("reasoning_effort", "") or "").strip() except Exception: pass - if not effort: - effort = os.getenv("HERMES_REASONING_EFFORT", "") result = parse_reasoning_effort(effort) if effort and effort.strip() and result is None: logger.warning("Unknown reasoning_effort '%s', using default (medium)", effort) diff --git a/tests/gateway/test_reasoning_command.py b/tests/gateway/test_reasoning_command.py index cb9e01f11..e39ed1123 100644 --- a/tests/gateway/test_reasoning_command.py +++ b/tests/gateway/test_reasoning_command.py @@ -87,7 +87,6 @@ class TestReasoningCommand: ) monkeypatch.setattr(gateway_run, "_hermes_home", hermes_home) - monkeypatch.delenv("HERMES_REASONING_EFFORT", raising=False) runner = _make_runner() runner._reasoning_config = {"enabled": True, "effort": "xhigh"} @@ -108,7 +107,6 @@ class TestReasoningCommand: config_path.write_text("agent:\n reasoning_effort: medium\n", encoding="utf-8") monkeypatch.setattr(gateway_run, "_hermes_home", hermes_home) - monkeypatch.delenv("HERMES_REASONING_EFFORT", raising=False) runner = _make_runner() runner._reasoning_config = {"enabled": True, "effort": "medium"} @@ -138,7 +136,6 @@ class TestReasoningCommand: "api_key": "test-key", }, ) - monkeypatch.delenv("HERMES_REASONING_EFFORT", raising=False) fake_run_agent = types.ModuleType("run_agent") fake_run_agent.AIAgent = _CapturingAgent monkeypatch.setitem(sys.modules, "run_agent", fake_run_agent) @@ -170,55 +167,6 @@ class TestReasoningCommand: assert _CapturingAgent.last_init is not None assert _CapturingAgent.last_init["reasoning_config"] == {"enabled": True, "effort": "low"} - def test_run_agent_prefers_config_over_stale_reasoning_env(self, tmp_path, monkeypatch): - hermes_home = tmp_path / "hermes" - hermes_home.mkdir() - (hermes_home / "config.yaml").write_text("agent:\n reasoning_effort: none\n", encoding="utf-8") - - monkeypatch.setattr(gateway_run, "_hermes_home", hermes_home) - monkeypatch.setattr(gateway_run, "_env_path", hermes_home / ".env") - monkeypatch.setattr(gateway_run, "load_dotenv", lambda *args, **kwargs: None) - monkeypatch.setattr( - gateway_run, - "_resolve_runtime_agent_kwargs", - lambda: { - "provider": "openrouter", - "api_mode": "chat_completions", - "base_url": "https://openrouter.ai/api/v1", - "api_key": "test-key", - }, - ) - monkeypatch.setenv("HERMES_REASONING_EFFORT", "low") - fake_run_agent = types.ModuleType("run_agent") - fake_run_agent.AIAgent = _CapturingAgent - monkeypatch.setitem(sys.modules, "run_agent", fake_run_agent) - - _CapturingAgent.last_init = None - runner = _make_runner() - - source = SessionSource( - platform=Platform.LOCAL, - chat_id="cli", - chat_name="CLI", - chat_type="dm", - user_id="user-1", - ) - - result = asyncio.run( - runner._run_agent( - message="ping", - context_prompt="", - history=[], - source=source, - session_id="session-1", - session_key="agent:main:local:dm", - ) - ) - - assert result["final_response"] == "ok" - assert _CapturingAgent.last_init is not None - assert _CapturingAgent.last_init["reasoning_config"] == {"enabled": False} - def test_run_agent_includes_enabled_mcp_servers_in_gateway_toolsets(self, tmp_path, monkeypatch): hermes_home = tmp_path / "hermes" hermes_home.mkdir()