From e2248045f56430acbc5bb2759938f4fd5300cb0b Mon Sep 17 00:00:00 2001 From: dpaluy Date: Sat, 25 Apr 2026 14:52:38 -0500 Subject: [PATCH] fix(cron): drop stale env-var override of persisted provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cron jobs were passing os.getenv("HERMES_INFERENCE_PROVIDER") as the "requested" arg to resolve_runtime_provider(), which short-circuited the resolver's own precedence (explicit arg → persisted config → env) and let stale shell/.env values outrank the user's saved provider. Long-lived cron daemons inherit env from the shell that launched them, so a since-changed provider (e.g. DeepSeek) could keep firing for jobs that don't pin provider/model. Same bug class as f0b763c74 fixed for the TUI /model switch. Pass only job.get("provider") and let resolve_requested_provider fall through to persisted config and env in the documented order. Co-Authored-By: Claude Opus 4.7 (1M context) --- cron/scheduler.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cron/scheduler.py b/cron/scheduler.py index 0be6d3623..84c6f2fff 100644 --- a/cron/scheduler.py +++ b/cron/scheduler.py @@ -1004,8 +1004,13 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]: ) from hermes_cli.auth import AuthError try: + # Do not inject HERMES_INFERENCE_PROVIDER here. resolve_runtime_provider() + # already prefers persisted config over stale shell/env overrides when + # no explicit provider is requested. Passing the env var here short- + # circuits that precedence and can resurrect old providers (for + # example DeepSeek) for cron jobs that do not pin provider/model. runtime_kwargs = { - "requested": job.get("provider") or os.getenv("HERMES_INFERENCE_PROVIDER"), + "requested": job.get("provider"), } if job.get("base_url"): runtime_kwargs["explicit_base_url"] = job.get("base_url")