[eric] models: gpt-5.6 sol/terra/luna + restored gpt-5.5 codex sub lanes, all live-probed on the 0.3.60 pin

This commit is contained in:
ciregenz
2026-07-26 22:59:44 -07:00
parent 596a85e87d
commit 67997653eb
2 changed files with 26 additions and 13 deletions
+19 -4
View File
@@ -92,7 +92,21 @@ BUILTIN_MODELS: dict[str, list[dict[str, Any]]] = {
],
"OpenAI": [
# 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.
# Codex sub lanes re-probed 2026-07-26: cx/gpt-5.6-{sol,terra,luna} AND the previously pulled
# cx/gpt-5.5 all return real completions on the pinned 0.3.60 (the old 404 healed upstream;
# the cx translator forwards to the ChatGPT Responses backend, which now serves them).
{"value": "gpt-5.6", "label": "GPT-5.6 Sol",
"context_window": 1_000_000, "router_model_id": "cx/gpt-5.6-sol",
"api": "codex", "subscription_only": True, "reasoning": True},
{"value": "gpt-5.6-terra", "label": "GPT-5.6 Terra",
"context_window": 1_000_000, "router_model_id": "cx/gpt-5.6-terra",
"api": "codex", "subscription_only": True, "reasoning": True},
{"value": "gpt-5.6-luna", "label": "GPT-5.6 Luna",
"context_window": 1_000_000, "router_model_id": "cx/gpt-5.6-luna",
"api": "codex", "subscription_only": True, "reasoning": True},
{"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},
{"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},
@@ -104,9 +118,7 @@ BUILTIN_MODELS: dict[str, list[dict[str, Any]]] = {
# so the old Responses-only HOLD is lifted for the API-key lane: the ids ride the proven
# cp-openai passthrough, whose scrubs prefix-match "gpt-5" (max_tokens rename, sampling strip,
# and the reasoning_effort-with-tools drop that 5.6 still requires on /chat/completions).
# 1M+ ctx, 128k out; $5/$30 Sol, $2.50/$15 Terra, $1/$6 Luna per 1M. The cx SUBSCRIPTION
# entries stay pulled: 0.3.60's cx registry predates 5.6 (same 404 class as gpt-5.5's pulled
# cx row); restore them with the 9router bump.
# 1M+ ctx, 128k out; $5/$30 Sol, $2.50/$15 Terra, $1/$6 Luna per 1M.
{"value": "gpt-5.6-api", "label": "GPT-5.6 Sol (API key)",
"context_window": 1_000_000, "router_model_id": "cp-openai/gpt-5.6-sol", "model_id": "gpt-5.6-sol",
"api": "openai", "reasoning": True, "route": "api"},
@@ -405,6 +417,9 @@ COST_PER_1M_TOKENS: dict[tuple[str, str], tuple[float, float]] = {
("OpenAI", "gpt-5.6-terra-api"): (2.5, 15.0),
("OpenAI", "gpt-5.6-luna-api"): (1.0, 6.0),
# OpenAI; Codex subscription path, user pays nothing per token
("OpenAI", "gpt-5.6"): (0.0, 0.0),
("OpenAI", "gpt-5.6-terra"): (0.0, 0.0),
("OpenAI", "gpt-5.6-luna"): (0.0, 0.0),
("OpenAI", "gpt-5.5"): (0.0, 0.0),
("OpenAI", "gpt-5.4"): (0.0, 0.0),
("OpenAI", "gpt-5.4-mini"): (0.0, 0.0),
+7 -9
View File
@@ -665,18 +665,16 @@ def test_dashboard_get_strips_only_orphan_session_cards():
def test_banned_models_not_offered():
"""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.)"""
can't serve it, AI Studio key 429s pro-preview. (gpt-5.5's cx entry left
this list 2026-07-26: the pinned 0.3.60's old 404 healed upstream and a
live probe returned a real completion, so both its lanes work. Fable 5
left 2026-07-02 after its ban lifted.)"""
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", "gpt-5.5"):
for dead in ("gemini-3.1-pro", "gemini-3.1-pro-api"):
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
assert "gpt-5.5-api" in all_values
assert "gpt-5.5" in all_values # cx lane restored 2026-07-26 (live-probed)
# 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