Skip to content

fix(curator): honor curator.auxiliary.{provider,model} override (#17572) - #17781

Closed
yonefive71 wants to merge 1 commit into
NousResearch:mainfrom
yonefive71:fix/curator-auxiliary-config
Closed

fix(curator): honor curator.auxiliary.{provider,model} override (#17572)#17781
yonefive71 wants to merge 1 commit into
NousResearch:mainfrom
yonefive71:fix/curator-auxiliary-config

Conversation

@yonefive71

Copy link
Copy Markdown

Summary

Fixes #17572. The curator's _run_llm_review() resolved provider and model exclusively from cfg["model"], silently ignoring the curator.auxiliary.{provider, model} schema documented in hermes_cli/config.py:950-955. As a result the curator always ran on the user's main model — for Opus users this means weekly runs on the most expensive model when the whole point of an auxiliary slot is to pin a cheaper one.

The bug

agent/curator.py:761-763 (before this patch):

_m = _cfg.get("model", {}) if isinstance(_cfg.get("model"), dict) else {}
_provider = _m.get("provider") or "auto"
_model_name = _m.get("default") or _m.get("model") or ""

No reference to cfg["curator"]["auxiliary"] anywhere in the resolution path, even though the default config block reserves it:

# Optional per-task override for the curator's aux model. Leave null
# to use Hermes' main auxiliary client resolution.
auxiliary:
  provider: null
  model: null

Fix

Read curator.auxiliary first and fall back to the main model fields when either side is null. Provider and model can be overridden independently (provider-only override keeps the main model, and vice versa).

Tests

Three new cases in tests/agent/test_curator.py:

  • auxiliary unset → main model (current behavior preserved)
  • both fields set → aux wins
  • partial override (provider only) → main model retained

pytest tests/agent/test_curator.py → 34 passed.

Notes

  • Behavior when both aux fields are null is byte-identical to today.
  • resolve_runtime_provider() is still called with the resolved provider+model, so credential pool / OAuth / pool-backed flows continue to work for the aux model.
  • No config schema change — the auxiliary block has been in DEFAULT_CONFIG for a while; this just wires it up.

The curator's _run_llm_review() resolved provider+model exclusively
from cfg['model'], silently ignoring the documented
curator.auxiliary.{provider,model} schema (config.py:950-955).
As a result the curator always ran on the user's main model — for
Opus users this means weekly runs on the most expensive model when
the whole point of an auxiliary slot is to pin a cheaper one.

This patch reads curator.auxiliary first and falls back to the main
model fields when either side is null, matching the schema comment
('Leave null to use Hermes' main auxiliary client resolution').
Provider and model can be overridden independently.

Tests cover three cases:
- auxiliary unset → main model (current behavior preserved)
- both fields set → aux wins
- partial override (provider only) → main model retained

Fixes NousResearch#17572
@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint labels Apr 30, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

Likely duplicate of #17584 — both fix curator.auxiliary config being ignored in _run_llm_review(), targeting #17572.

@alt-glitch

Copy link
Copy Markdown
Collaborator

Likely duplicate of #17584.

@teknium1

Copy link
Copy Markdown
Contributor

Thanks @yonefive71 — superseded by PR #17868 (merged on main as 0da968e), which fixes #17572 by unifying curator config under auxiliary.curator. Closing.

@teknium1 teknium1 closed this Apr 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint P2 Medium — degraded but workaround exists type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: curator.auxiliary config is dead — curator always runs on main model

3 participants