fix(anthropic): live model fetching + adaptive thinking for 4.5+ models

- Add _fetch_anthropic_models() to hermes_cli/models.py — hits the
  Anthropic /v1/models endpoint to get the live model catalog. Handles
  both API key and OAuth token auth headers.

- Wire it into provider_model_ids() so both 'hermes model' and
  'hermes setup model' show the live list instead of a stale static one.

- Update static _PROVIDER_MODELS fallback with full current catalog:
  opus-4-6, sonnet-4-6, opus-4-5, sonnet-4-5, opus-4, sonnet-4, haiku-4-5

- Update model_metadata.py with context lengths for all current models.

- Fix thinking parameter for 4.5+ models: use type='adaptive' instead
  of type='enabled' (Anthropic deprecated 'enabled' for newer models,
  warns at runtime). Detects model version from the model name string.

Verified live:
  hermes model → Anthropic → auto-detected creds → shows 7 live models
  hermes chat --provider anthropic --model claude-opus-4-6 → works
This commit is contained in:
teknium1 2026-03-12 17:04:31 -07:00
parent d51243b6d3
commit cd4e995d54
4 changed files with 67 additions and 5 deletions

View file

@ -363,11 +363,16 @@ def build_anthropic_kwargs(
kwargs["tool_choice"] = {"type": "tool", "name": tool_choice}
# Map reasoning_config to Anthropic's thinking parameter
# Newer models (4.6+) prefer "adaptive" thinking; older models use "enabled"
if reasoning_config and isinstance(reasoning_config, dict):
if reasoning_config.get("enabled") is not False:
effort = reasoning_config.get("effort", "medium")
budget = THINKING_BUDGET.get(effort, 8000)
kwargs["thinking"] = {"type": "enabled", "budget_tokens": budget}
# Use adaptive thinking for 4.5+ models (they deprecate type=enabled)
if any(v in model for v in ("4-6", "4-5", "4.6", "4.5")):
kwargs["thinking"] = {"type": "adaptive", "budget_tokens": budget}
else:
kwargs["thinking"] = {"type": "enabled", "budget_tokens": budget}
kwargs["max_tokens"] = max(effective_max_tokens, budget + 4096)
return kwargs