From 2c1921241ca2bdcd2fe48b02f3a93f226cf41ad2 Mon Sep 17 00:00:00 2001 From: Contentment003111 <105841360+Contentment003111@users.noreply.github.com> Date: Thu, 7 May 2026 21:34:48 +0800 Subject: [PATCH] feat(models): add paid tencent/hy3-preview route on OpenRouter (#21077) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add tencent/hy3-preview (without :free suffix) as a paid model route alongside the existing free variant. This allows seamless transition when the model moves from free to paid on OpenRouter — both routes coexist so neither side's timing causes breakage. Changes: - models.py: add ("tencent/hy3-preview", "") to OPENROUTER_MODELS - model-catalog.json: add paid variant entry - tests: add assertions for paid route presence The :free entry can be removed in a follow-up PR once OpenRouter confirms the free route is deprecated. Co-authored-by: simonweng --- hermes_cli/models.py | 1 + tests/hermes_cli/test_tencent_tokenhub_provider.py | 11 +++++++++-- website/static/api/model-catalog.json | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/hermes_cli/models.py b/hermes_cli/models.py index 2e011ef924..e589174910 100644 --- a/hermes_cli/models.py +++ b/hermes_cli/models.py @@ -46,6 +46,7 @@ OPENROUTER_MODELS: list[tuple[str, str]] = [ ("xiaomi/mimo-v2.5-pro", ""), ("xiaomi/mimo-v2.5", ""), ("tencent/hy3-preview:free", "free"), + ("tencent/hy3-preview", ""), ("openai/gpt-5.3-codex", ""), ("google/gemini-3-pro-image-preview", ""), ("google/gemini-3-flash-preview", ""), diff --git a/tests/hermes_cli/test_tencent_tokenhub_provider.py b/tests/hermes_cli/test_tencent_tokenhub_provider.py index b84666e83f..62cecaeb0c 100644 --- a/tests/hermes_cli/test_tencent_tokenhub_provider.py +++ b/tests/hermes_cli/test_tencent_tokenhub_provider.py @@ -192,13 +192,19 @@ class TestTencentTokenhubCanonicalProvider: class TestTencentInOpenRouterAndNous: - """tencent/hy3-preview:free should appear in OpenRouter and Nous curated lists.""" + """tencent/hy3-preview:free and tencent/hy3-preview 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 + def test_paid_in_openrouter_fallback(self): + """tencent/hy3-preview (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 + def test_in_nous_provider_models(self): from hermes_cli.models import _PROVIDER_MODELS assert "tencent/hy3-preview" in _PROVIDER_MODELS["nous"] @@ -420,7 +426,7 @@ class TestTencentTokenhubCLIDispatch: class TestTencentTokenhubModelCatalogJSON: - """Verify tencent/hy3-preview:free is present in the website model-catalog.json.""" + """Verify tencent/hy3-preview:free and tencent/hy3-preview are present in the website model-catalog.json.""" def test_in_model_catalog_json(self): catalog_path = os.path.join( @@ -445,6 +451,7 @@ class TestTencentTokenhubModelCatalogJSON: 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 # ============================================================================= diff --git a/website/static/api/model-catalog.json b/website/static/api/model-catalog.json index 18aefdd89b..61235075af 100644 --- a/website/static/api/model-catalog.json +++ b/website/static/api/model-catalog.json @@ -68,6 +68,10 @@ "id": "tencent/hy3-preview:free", "description": "free" }, + { + "id": "tencent/hy3-preview", + "description": "" + }, { "id": "openai/gpt-5.3-codex", "description": ""