diff --git a/hermes_cli/models.py b/hermes_cli/models.py index 2617ecf33ab..8af3951ecc0 100644 --- a/hermes_cli/models.py +++ b/hermes_cli/models.py @@ -37,7 +37,7 @@ OPENROUTER_MODELS: list[tuple[str, str]] = [ ("anthropic/claude-sonnet-4.6", ""), ("moonshotai/kimi-k2.6", "recommended"), ("openrouter/pareto-code", "auto-routes to cheapest coder meeting openrouter.min_coding_score"), - ("qwen/qwen3.6-plus", ""), + ("qwen/qwen3.7-max", ""), ("anthropic/claude-haiku-4.5", ""), ("openai/gpt-5.5", ""), ("openai/gpt-5.5-pro", ""), @@ -166,7 +166,7 @@ _PROVIDER_MODELS: dict[str, list[str]] = { "anthropic/claude-opus-4.6", "anthropic/claude-sonnet-4.6", "moonshotai/kimi-k2.6", - "qwen/qwen3.6-plus", + "qwen/qwen3.7-max", "anthropic/claude-haiku-4.5", "openai/gpt-5.5", "openai/gpt-5.5-pro", diff --git a/tests/hermes_cli/test_models.py b/tests/hermes_cli/test_models.py index 78568f81f2c..f4edcaf2af6 100644 --- a/tests/hermes_cli/test_models.py +++ b/tests/hermes_cli/test_models.py @@ -13,7 +13,7 @@ import hermes_cli.models as _models_mod LIVE_OPENROUTER_MODELS = [ ("anthropic/claude-opus-4.6", "recommended"), - ("qwen/qwen3.6-plus", ""), + ("qwen/qwen3.7-max", ""), ("nvidia/nemotron-3-super-120b-a12b:free", "free"), ] @@ -70,7 +70,7 @@ class TestFetchOpenRouterModels: return False def read(self): - return b'{"data":[{"id":"anthropic/claude-opus-4.6","pricing":{"prompt":"0.000015","completion":"0.000075"}},{"id":"qwen/qwen3.6-plus","pricing":{"prompt":"0.000000325","completion":"0.00000195"}},{"id":"nvidia/nemotron-3-super-120b-a12b:free","pricing":{"prompt":"0","completion":"0"}}]}' + return b'{"data":[{"id":"anthropic/claude-opus-4.6","pricing":{"prompt":"0.000015","completion":"0.000075"}},{"id":"qwen/qwen3.7-max","pricing":{"prompt":"0.000000325","completion":"0.00000195"}},{"id":"nvidia/nemotron-3-super-120b-a12b:free","pricing":{"prompt":"0","completion":"0"}}]}' monkeypatch.setattr(_models_mod, "_openrouter_catalog_cache", None) with patch("hermes_cli.models.urllib.request.urlopen", return_value=_Resp()): @@ -78,7 +78,7 @@ class TestFetchOpenRouterModels: assert models == [ ("anthropic/claude-opus-4.6", "recommended"), - ("qwen/qwen3.6-plus", ""), + ("qwen/qwen3.7-max", ""), ("nvidia/nemotron-3-super-120b-a12b:free", "free"), ] @@ -106,14 +106,14 @@ class TestFetchOpenRouterModels: def read(self): # opus-4.6 advertises tools → kept # nano-image has explicit supported_parameters that OMITS tools → dropped - # qwen3.6-plus advertises tools → kept + # qwen3.7-max advertises tools → kept return ( b'{"data":[' b'{"id":"anthropic/claude-opus-4.6","pricing":{"prompt":"0.000015","completion":"0.000075"},' b'"supported_parameters":["temperature","tools","tool_choice"]},' b'{"id":"google/gemini-3-pro-image-preview","pricing":{"prompt":"0.00001","completion":"0.00003"},' b'"supported_parameters":["temperature","response_format"]},' - b'{"id":"qwen/qwen3.6-plus","pricing":{"prompt":"0.000000325","completion":"0.00000195"},' + b'{"id":"qwen/qwen3.7-max","pricing":{"prompt":"0.000000325","completion":"0.00000195"},' b'"supported_parameters":["tools","temperature"]}' b']}' ) @@ -125,7 +125,7 @@ class TestFetchOpenRouterModels: [ ("anthropic/claude-opus-4.6", ""), ("google/gemini-3-pro-image-preview", ""), - ("qwen/qwen3.6-plus", ""), + ("qwen/qwen3.7-max", ""), ], ) monkeypatch.setattr(_models_mod, "_openrouter_catalog_cache", None) @@ -134,7 +134,7 @@ class TestFetchOpenRouterModels: ids = [mid for mid, _ in models] assert "anthropic/claude-opus-4.6" in ids - assert "qwen/qwen3.6-plus" in ids + assert "qwen/qwen3.7-max" in ids # Image-only model advertised supported_parameters WITHOUT tools → must be dropped. assert "google/gemini-3-pro-image-preview" not in ids @@ -158,7 +158,7 @@ class TestFetchOpenRouterModels: return ( b'{"data":[' b'{"id":"anthropic/claude-opus-4.6","pricing":{"prompt":"0.000015","completion":"0.000075"}},' - b'{"id":"qwen/qwen3.6-plus","pricing":{"prompt":"0.000000325","completion":"0.00000195"}}' + b'{"id":"qwen/qwen3.7-max","pricing":{"prompt":"0.000000325","completion":"0.00000195"}}' b']}' ) @@ -168,7 +168,7 @@ class TestFetchOpenRouterModels: ids = [mid for mid, _ in models] assert "anthropic/claude-opus-4.6" in ids - assert "qwen/qwen3.6-plus" in ids + assert "qwen/qwen3.7-max" in ids class TestOpenRouterToolSupportHelper: diff --git a/website/static/api/model-catalog.json b/website/static/api/model-catalog.json index aacd82bb557..1a084917aab 100644 --- a/website/static/api/model-catalog.json +++ b/website/static/api/model-catalog.json @@ -1,6 +1,6 @@ { "version": 1, - "updated_at": "2026-05-11T16:41:16Z", + "updated_at": "2026-05-26T20:49:36Z", "metadata": { "source": "hermes-agent repo", "docs": "https://hermes-agent.nousresearch.com/docs/reference/model-catalog" @@ -33,7 +33,7 @@ "description": "auto-routes to cheapest coder meeting openrouter.min_coding_score" }, { - "id": "qwen/qwen3.6-plus", + "id": "qwen/qwen3.7-max", "description": "" }, { @@ -157,7 +157,7 @@ "id": "moonshotai/kimi-k2.6" }, { - "id": "qwen/qwen3.6-plus" + "id": "qwen/qwen3.7-max" }, { "id": "anthropic/claude-haiku-4.5"