{"repo":"NousResearch/hermes-agent","public_id":"2453","display_label":"Auxiliary tasks fallback to paid OpenRouter models instead of configured free ones","summary":"Most members concern auxiliary-task model selection (compression, title generation, web tools) falling back to hardcoded or paid OpenRouter defaults rather than honoring user-configured fallback_providers, free-only settings, or session-level model switches. Proposed changes include removing hardcoded defaults, preserving the :free suffix, and propagating model switches.","subsystem":"agent","counts":{"members":17,"open_issues":1,"open_issues_distinct":1,"open_prs":0,"closed_issues":5,"merged_prs":1,"attempt_prs":10},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":2464,"merged_at":"2026-03-22T11:37:02+00:00"},"resolution":{"state":"partially_resolved","by":"pr-2464"},"freshness":{"state":"stale","last_verified_at":"2026-03-22T11:37:02+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.09411764705882353},"fix_edges":[{"issue_number":2453,"pr_number":2464,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-03-22T11:37:02+00:00"}],"members":[{"kind":"issue","number":2453,"title":"[Bug]: Agent uses gemini 3 flash preview from openrouter for ( compression / auxiliary _client and web_tools)","url":null,"state":"closed"},{"kind":"issue","number":24029,"title":"Auxiliary tasks silently fall back to paid OpenRouter models, bypassing user's free-only configuration","url":null,"state":"closed"},{"kind":"issue","number":24039,"title":"Auxiliary fallback chain should reuse fallback_providers, not maintain a separate hardcoded list","url":null,"state":"closed"},{"kind":"issue","number":36759,"title":"Auxiliary fallback ignores session-level model switch and routes to paid model via unselected credential pool","url":null,"state":"closed"},{"kind":"issue","number":44894,"title":"When openrouter key hermes uses paid Auxiliary default models for silly things like session title generation","url":null,"state":"closed"},{"kind":"issue","number":50954,"title":"Auxiliary fallback: make the hardcoded last-resort default genuinely free + add model-selection audit trail (follow-up to #36759)","url":null,"state":"open"},{"kind":"pr","number":2457,"title":"fix(compression): remove hardcoded gemini-3-flash-preview as default summary model","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#2464","number":2464}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":2464,"title":"fix(compression): remove hardcoded gemini-3-flash-preview as default summary model","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["cli.py","hermes_cli/config.py"],"fix_hunks":[{"file":"cli.py","hunks":["@@ -180,7 +180,7 @@ def load_cli_config() -> Dict[str, Any]:\n         \"compression\": {\n             \"enabled\": True,      # Auto-compress when approaching context limit\n             \"threshold\": 0.50,    # Compress at 50% of model's context limit\n-            \"summary_model\": \"google/gemini-3-flash-preview\",  # Fast/cheap model for summaries\n+            \"summary_model\": \"\",  # Model for summaries (empty = use main model)\n         },\n         \"smart_model_routing\": {\n             \"enabled\": False,"]},{"file":"hermes_cli/config.py","hunks":["@@ -159,7 +159,7 @@ def ensure_hermes_home():\n     \"compression\": {\n         \"enabled\": True,\n         \"threshold\": 0.50,\n-        \"summary_model\": \"google/gemini-3-flash-preview\",\n+        \"summary_model\": \"\",  # empty = use main configured model\n         \"summary_provider\": \"auto\",\n         \"summary_base_url\": None,\n     },","@@ -1659,7 +1659,8 @@ def show_config():\n     print(f\"  Enabled:      {'yes' if enabled else 'no'}\")\n     if enabled:\n         print(f\"  Threshold:    {compression.get('threshold', 0.50) * 100:.0f}%\")\n-        print(f\"  Model:        {compression.get('summary_model', 'google/gemini-3-flash-preview')}\")\n+        _sm = compression.get('summary_model', '') or '(main model)'\n+        print(f\"  Model:        {_sm}\")\n         comp_provider = compression.get('summary_provider', 'auto')\n         if comp_provider != 'auto':\n             print(f\"  Provider:     {comp_provider}\")\n"]}]},{"kind":"pr","number":25180,"title":"fix(auxiliary): prefer fallback_providers model for OpenRouter aux tasks","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#36759","number":36759},{"kind":"pr","value":"#50954","number":50954}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":25316,"title":"fix(auxiliary): preserve :free suffix in auxiliary fallback models","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#25180","number":25180}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":36789,"title":"fix(agent): honor declared fallback chain for aux runtime overrides","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":38716,"title":"fix(agent): propagate mid-session model switch to auxiliary client (#36759)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#36759","number":36759},{"kind":"pr","value":"#50954","number":50954}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":44939,"title":"fix(auxiliary): use empty default for OpenRouter auxiliary model (#44894)","url":null,"state":"closed","close_reason":{"category":"silent_close","implication":"active"},"merged":false},{"kind":"pr","number":45077,"title":"fix: When openrouter key hermes uses paid Auxiliary default models for silly things like session title generation (#44894)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#44939","number":44939},{"kind":"pr","value":"#44894","number":44894},{"kind":"pr","value":"#45091","number":45091}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":45091,"title":"fix(provider): OpenRouter key uses paid Auxiliary default models for silly things like session title generation (#44894)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#44939","number":44939},{"kind":"pr","value":"#44894","number":44894}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":45121,"title":"fix(auxiliary): use free default models for auxiliary tasks (#44894)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#44939","number":44939},{"kind":"pr","value":"#44894","number":44894}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":106319,"title":"feat(cli): add profile-scoped free-only OpenRouter choices","url":null,"state":"closed","close_reason":{"category":"silent_close","implication":"active"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}