From 3ce848d185dd04506969fd33938ea6ad03314e1f Mon Sep 17 00:00:00 2001 From: ciregenz Date: Tue, 7 Jul 2026 01:31:35 -0700 Subject: [PATCH] [eric] models: pull gpt-5.5 subscription entry (cx/gpt-5.5 404s on pinned 9router = broken codex); gpt-5.5-api stays --- backend/apps/agents/providers/registry.py | 5 +---- backend/tests/test_v2_invariants.py | 16 +++++++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/backend/apps/agents/providers/registry.py b/backend/apps/agents/providers/registry.py index 2f41cb33..1b38c21a 100644 --- a/backend/apps/agents/providers/registry.py +++ b/backend/apps/agents/providers/registry.py @@ -85,10 +85,7 @@ BUILTIN_MODELS: dict[str, list[dict[str, Any]]] = { ], "OpenAI": [ - # GPT-5.5 cx/ entry 404s on 9Router 0.3.60 (our pin); API-key route below works. - {"value": "gpt-5.5", "label": "GPT-5.5", - "context_window": 1_000_000, "router_model_id": "cx/gpt-5.5", - "api": "codex", "subscription_only": True, "reasoning": True}, + # GPT-5.5 subscription entry PULLED: cx/gpt-5.5 404s on 9Router 0.3.60 (our pin), so a Codex user who picked it (the newest, top OpenAI option) 404'd every turn = "codex is broken". Same treatment as gemini-3.1-pro (no working lane = not offered). The API-key route (gpt-5.5-api below) works; restore a cx entry only after the pin moves and cx/gpt-5.5 resolves. {"value": "gpt-5.4", "label": "GPT-5.4", "context_window": 1_000_000, "router_model_id": "cx/gpt-5.4", "api": "codex", "subscription_only": True, "reasoning": True}, diff --git a/backend/tests/test_v2_invariants.py b/backend/tests/test_v2_invariants.py index f31b3439..65cd150c 100644 --- a/backend/tests/test_v2_invariants.py +++ b/backend/tests/test_v2_invariants.py @@ -663,14 +663,20 @@ def test_dashboard_get_strips_only_orphan_session_cards(): def test_banned_models_not_offered(): - """Gemini 3.1 Pro (no working lane: AG can't serve it, AI Studio key 429s - pro-preview) stays pulled from the picker. Guard so a refactor can't - silently re-list a model that can't run. (Fable 5 was re-listed 2026-07-02 - after its ban lifted, so it left this list.)""" + """Models with no working lane stay pulled from the picker. Guard so a + refactor can't silently re-list a model that can't run. Gemini 3.1 Pro: AG + can't serve it, AI Studio key 429s pro-preview. gpt-5.5 (subscription): + cx/gpt-5.5 404s on the pinned 9Router 0.3.60, so picking it broke codex + entirely; gpt-5.5-api stays (that lane works). (Fable 5 was re-listed + 2026-07-02 after its ban lifted, so it left this list.)""" from backend.apps.agents.providers.registry import BUILTIN_MODELS all_values = {m["value"] for models in BUILTIN_MODELS.values() for m in models} - for dead in ("gemini-3.1-pro", "gemini-3.1-pro-api"): + for dead in ("gemini-3.1-pro", "gemini-3.1-pro-api", "gpt-5.5"): assert dead not in all_values, f"{dead} is back in the picker" + assert "gpt-5.5-api" in all_values # the working API-key lane must survive the pull + # No dead cx/gpt-5.5 router id survives either (a renamed entry would dodge the value check). + all_router_ids = {m.get("router_model_id") for models in BUILTIN_MODELS.values() for m in models} + assert "cx/gpt-5.5" not in all_router_ids # No '3.1 pro' label survives in any provider group either. all_labels = " | ".join(m["label"].lower() for models in BUILTIN_MODELS.values() for m in models) assert "3.1 pro" not in all_labels