From 3c3ae7428dca9693dfea59f5756bf8602225cbde Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:04:31 -0700 Subject: [PATCH] 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). --- agent/model_metadata.py | 1 + hermes_cli/models.py | 4 ++-- tests/test_empty_model_fallback.py | 8 ++++---- website/static/api/model-catalog.json | 6 +++--- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/agent/model_metadata.py b/agent/model_metadata.py index b1701c32e89fb..c147ef126b1a8 100644 --- a/agent/model_metadata.py +++ b/agent/model_metadata.py @@ -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 diff --git a/hermes_cli/models.py b/hermes_cli/models.py index 75597f4602a3a..e2e6c967f9d22 100644 --- a/hermes_cli/models.py +++ b/hermes_cli/models.py @@ -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 diff --git a/tests/test_empty_model_fallback.py b/tests/test_empty_model_fallback.py index 7a0ec903df9f9..3d7f8505ec62c 100644 --- a/tests/test_empty_model_fallback.py +++ b/tests/test_empty_model_fallback.py @@ -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" ) diff --git a/website/static/api/model-catalog.json b/website/static/api/model-catalog.json index 549edb0423051..946ea073cbef7 100644 --- a/website/static/api/model-catalog.json +++ b/website/static/api/model-catalog.json @@ -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"