feat(models): add qwen3.8-max to Nous portal + OpenRouter catalogs, replacing qwen3.7-max

Qwen3.8 Max is live on both OpenRouter and the Nous portal
(qwen/qwen3.8-max, 1M context, 131K max output). Per the
newest-max-replaces-last-max convention, it takes qwen3.7-max's slot
in both curated lists.

- hermes_cli/models.py: OPENROUTER_MODELS + _PROVIDER_MODELS[nous]
  swap qwen/qwen3.7-max -> qwen/qwen3.8-max
- agent/model_metadata.py: DEFAULT_CONTEXT_LENGTHS entry for
  qwen3.8-max at 1,000,000 (verified against OpenRouter live
  metadata and Nous /v1/models 2026-08-03)
- tests/test_empty_model_fallback.py: swap incidental catalog fixture
  to the surviving slug
- website/static/api/model-catalog.json: regenerated

Pricing snapshot skipped: both routes bill via official_models_api
(live pricing), verified with resolve_billing_route. Reasoning
timeout floor already covered by the qwen3 prefix (180s).
This commit is contained in:
Teknium 2026-08-03 15:04:31 -07:00
parent a991dfc25d
commit 3c3ae7428d
4 changed files with 10 additions and 9 deletions

View File

@ -472,6 +472,7 @@ DEFAULT_CONTEXT_LENGTHS = {
"llama": 131072,
# Qwen — specific model families before the catch-all.
# Official docs: https://help.aliyun.com/zh/model-studio/developer-reference/
"qwen3.8-max": 1_000_000, # 1M context (OpenRouter & Nous portal, verified 2026-08-03)
"qwen3.6-plus": 1048576, # 1M context (DashScope/Alibaba & OpenRouter)
"qwen3.7-plus": 1048576, # 1M context (DashScope/Alibaba)
"qwen3-coder-plus": 1000000, # 1M context

View File

@ -72,7 +72,7 @@ OPENROUTER_MODELS: list[tuple[str, str]] = [
("deepseek/deepseek-v4-flash", ""),
("deepseek/deepseek-v4-flash-0731", "dated snapshot of v4-flash"),
# Qwen
("qwen/qwen3.7-max", ""),
("qwen/qwen3.8-max", ""),
# MoonshotAI
("moonshotai/kimi-k3", "recommended"),
# MiniMax
@ -244,7 +244,7 @@ _PROVIDER_MODELS: dict[str, list[str]] = {
"deepseek/deepseek-v4-flash",
"deepseek/deepseek-v4-flash-0731",
# Qwen
"qwen/qwen3.7-max",
"qwen/qwen3.8-max",
# MoonshotAI
"moonshotai/kimi-k3",
# MiniMax

View File

@ -27,16 +27,16 @@ class TestGetDefaultModelForProvider:
with patch(
"hermes_cli.model_catalog.get_default_model_from_cache",
return_value="qwen/qwen3.7-max",
return_value="qwen/qwen3.8-max",
):
assert (
models_mod.get_preferred_silent_default_model("nous")
== "qwen/qwen3.7-max"
== "qwen/qwen3.8-max"
)
# nous catalog carries qwen3.7-max, so the full resolver follows.
# nous catalog carries qwen3.8-max, so the full resolver follows.
assert (
models_mod.get_default_model_for_provider("nous")
== "qwen/qwen3.7-max"
== "qwen/qwen3.8-max"
)

View File

@ -1,6 +1,6 @@
{
"version": 1,
"updated_at": "2026-07-31T15:41:39Z",
"updated_at": "2026-08-03T22:03:15Z",
"metadata": {
"source": "hermes-agent repo",
"docs": "https://hermes-agent.nousresearch.com/docs/reference/model-catalog"
@ -101,7 +101,7 @@
"description": "dated snapshot of v4-flash"
},
{
"id": "qwen/qwen3.7-max",
"id": "qwen/qwen3.8-max",
"description": ""
},
{
@ -238,7 +238,7 @@
"id": "deepseek/deepseek-v4-flash-0731"
},
{
"id": "qwen/qwen3.7-max"
"id": "qwen/qwen3.8-max"
},
{
"id": "moonshotai/kimi-k3"