From b64b802131ff6db8127d275f242fb0eb09c7af48 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Wed, 8 Jul 2026 07:09:08 -0700 Subject: [PATCH] feat(models): swap curated Tencent Hy3 Preview for GA tencent/hy3, drop owl-alpha (#60943) - OPENROUTER_MODELS: remove openrouter/owl-alpha (free) and tencent/hy3-preview{,:free}; add tencent/hy3 and tencent/hy3:free - _PROVIDER_MODELS[nous]: tencent/hy3-preview -> tencent/hy3 - run_agent.py reasoning-prefix list: tencent/hy3-preview -> tencent/hy3 (prefix match still covers -preview if pinned) - model_metadata: register hy3 context length (262144) alongside hy3-preview - regenerate website/static/api/model-catalog.json - update tokenhub curated-list tests to the new IDs The tencent-tokenhub direct provider still serves hy3-preview and is intentionally unchanged. --- agent/model_metadata.py | 2 ++ hermes_cli/models.py | 7 +++---- run_agent.py | 2 +- .../hermes_cli/test_tencent_tokenhub_provider.py | 16 ++++++++-------- website/static/api/model-catalog.json | 12 ++++-------- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/agent/model_metadata.py b/agent/model_metadata.py index ba87a6dc496..c9a7d5771a8 100644 --- a/agent/model_metadata.py +++ b/agent/model_metadata.py @@ -305,6 +305,8 @@ DEFAULT_CONTEXT_LENGTHS = { # OpenRouter live metadata reports 262144 (256 × 1024); align the # static fallback so cache and offline both agree (issue #22268). "hy3-preview": 262144, + # Tencent — Hy3 (GA successor to Hy3 Preview), same 256K window. + "hy3": 262144, # Nemotron — NVIDIA's open-weights series (128K context across all sizes) "nemotron": 131072, # Arcee diff --git a/hermes_cli/models.py b/hermes_cli/models.py index f8ddf1ab33c..e19b99d4b7c 100644 --- a/hermes_cli/models.py +++ b/hermes_cli/models.py @@ -67,7 +67,7 @@ OPENROUTER_MODELS: list[tuple[str, str]] = [ # Xiaomi ("xiaomi/mimo-v2.5-pro", ""), # Tencent - ("tencent/hy3-preview", ""), + ("tencent/hy3", ""), # StepFun ("stepfun/step-3.7-flash", ""), # NVIDIA @@ -78,9 +78,8 @@ OPENROUTER_MODELS: list[tuple[str, str]] = [ ("openrouter/pareto-code", "auto-routes to cheapest coder meeting openrouter.min_coding_score"), # Free tier ("openrouter/elephant-alpha", "free"), - ("openrouter/owl-alpha", "free"), ("poolside/laguna-m.1:free", "free"), - ("tencent/hy3-preview:free", "free"), + ("tencent/hy3:free", "free"), ("nvidia/nemotron-3-super-120b-a12b:free", "free"), ("nvidia/nemotron-3-ultra-550b-a55b:free", "free"), ("inclusionai/ring-2.6-1t:free", "free"), @@ -211,7 +210,7 @@ _PROVIDER_MODELS: dict[str, list[str]] = { # Xiaomi "xiaomi/mimo-v2.5-pro", # Tencent - "tencent/hy3-preview", + "tencent/hy3", # StepFun "stepfun/step-3.7-flash", # NVIDIA diff --git a/run_agent.py b/run_agent.py index 3be621f217f..a20a7024863 100644 --- a/run_agent.py +++ b/run_agent.py @@ -5337,7 +5337,7 @@ class AIAgent: "google/gemini-2", "google/gemma-4", "qwen/qwen3", - "tencent/hy3-preview", + "tencent/hy3", "xiaomi/", ) return any(model.startswith(prefix) for prefix in reasoning_model_prefixes) diff --git a/tests/hermes_cli/test_tencent_tokenhub_provider.py b/tests/hermes_cli/test_tencent_tokenhub_provider.py index 55ab42244c8..508e803c225 100644 --- a/tests/hermes_cli/test_tencent_tokenhub_provider.py +++ b/tests/hermes_cli/test_tencent_tokenhub_provider.py @@ -191,22 +191,22 @@ class TestTencentTokenhubCanonicalProvider: class TestTencentInOpenRouterAndNous: - """tencent/hy3-preview:free and tencent/hy3-preview should appear in OpenRouter and Nous curated lists.""" + """tencent/hy3:free and tencent/hy3 should appear in OpenRouter and Nous curated lists.""" def test_in_openrouter_fallback(self): from hermes_cli.models import OPENROUTER_MODELS ids = [mid for mid, _ in OPENROUTER_MODELS] - assert "tencent/hy3-preview:free" in ids + assert "tencent/hy3:free" in ids def test_paid_in_openrouter_fallback(self): - """tencent/hy3-preview (paid, no :free suffix) should also be in OpenRouter list.""" + """tencent/hy3 (paid, no :free suffix) should also be in OpenRouter list.""" from hermes_cli.models import OPENROUTER_MODELS ids = [mid for mid, _ in OPENROUTER_MODELS] - assert "tencent/hy3-preview" in ids + assert "tencent/hy3" in ids def test_in_nous_provider_models(self): from hermes_cli.models import _PROVIDER_MODELS - assert "tencent/hy3-preview" in _PROVIDER_MODELS["nous"] + assert "tencent/hy3" in _PROVIDER_MODELS["nous"] # ============================================================================= @@ -433,7 +433,7 @@ class TestTencentTokenhubCLIDispatch: class TestTencentTokenhubModelCatalogJSON: - """Verify tencent/hy3-preview:free and tencent/hy3-preview are present in the website model-catalog.json.""" + """Verify tencent/hy3:free and tencent/hy3 are present in the website model-catalog.json.""" def test_in_model_catalog_json(self): catalog_path = os.path.join( @@ -457,8 +457,8 @@ class TestTencentTokenhubModelCatalogJSON: for provider_entry in providers: for model in provider_entry.get("models", []): all_ids.add(model.get("id", "")) - assert "tencent/hy3-preview:free" in all_ids - assert "tencent/hy3-preview" in all_ids + assert "tencent/hy3:free" in all_ids + assert "tencent/hy3" in all_ids # ============================================================================= diff --git a/website/static/api/model-catalog.json b/website/static/api/model-catalog.json index 180707d9b08..d69dc3af4af 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-01T20:08:52Z", + "updated_at": "2026-07-08T13:38:17Z", "metadata": { "source": "hermes-agent repo", "docs": "https://hermes-agent.nousresearch.com/docs/reference/model-catalog" @@ -105,7 +105,7 @@ "description": "" }, { - "id": "tencent/hy3-preview", + "id": "tencent/hy3", "description": "" }, { @@ -128,16 +128,12 @@ "id": "openrouter/elephant-alpha", "description": "free" }, - { - "id": "openrouter/owl-alpha", - "description": "free" - }, { "id": "poolside/laguna-m.1:free", "description": "free" }, { - "id": "tencent/hy3-preview:free", + "id": "tencent/hy3:free", "description": "free" }, { @@ -227,7 +223,7 @@ "id": "xiaomi/mimo-v2.5-pro" }, { - "id": "tencent/hy3-preview" + "id": "tencent/hy3" }, { "id": "stepfun/step-3.7-flash"