Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions agent/model_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -1095,6 +1095,7 @@ def _query_anthropic_context_length(model: str, base_url: str, api_key: str) ->
"gpt-5.1-codex-max": 272_000,
"gpt-5.1-codex-mini": 272_000,
"gpt-5.3-codex": 272_000,
"gpt-5.3-codex-spark": 128_000,
"gpt-5.2-codex": 272_000,
"gpt-5.4-mini": 272_000,
"gpt-5.5": 272_000,
Expand Down
2 changes: 2 additions & 0 deletions hermes_cli/codex_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"gpt-5.4-mini",
"gpt-5.4",
"gpt-5.3-codex",
"gpt-5.3-codex-spark",
"gpt-5.2-codex",
"gpt-5.1-codex-max",
"gpt-5.1-codex-mini",
Expand All @@ -26,6 +27,7 @@
("gpt-5.4-mini", ("gpt-5.3-codex", "gpt-5.2-codex")),
("gpt-5.4", ("gpt-5.3-codex", "gpt-5.2-codex")),
("gpt-5.3-codex", ("gpt-5.2-codex",)),
("gpt-5.3-codex-spark", ("gpt-5.3-codex", "gpt-5.2-codex")),
]


Expand Down
28 changes: 16 additions & 12 deletions tests/agent/test_model_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,8 +244,9 @@ def test_dict_is_not_empty(self):
class TestCodexOAuthContextLength:
"""ChatGPT Codex OAuth imposes lower context limits than the direct
OpenAI API for the same slugs. Verified Apr 2026 via live probe of
chatgpt.com/backend-api/codex/models: every model returns 272k, while
chatgpt.com/backend-api/codex/models: most models return 272k, while
models.dev reports 1.05M for gpt-5.5/gpt-5.4 and 400k for the rest.
(Known exception: gpt-5.3-codex-spark is 128k.)
"""

def setup_method(self):
Expand All @@ -259,25 +260,28 @@ def test_fallback_table_used_without_token(self):
"""
from agent.model_metadata import get_model_context_length

expected = {
"gpt-5.5": 272_000,
"gpt-5.4": 272_000,
"gpt-5.4-mini": 272_000,
"gpt-5.3-codex": 272_000,
"gpt-5.3-codex-spark": 128_000,
"gpt-5.2-codex": 272_000,
"gpt-5.1-codex-max": 272_000,
"gpt-5.1-codex-mini": 272_000,
}

with patch("agent.model_metadata.get_cached_context_length", return_value=None), \
patch("agent.model_metadata.save_context_length"):
for model in (
"gpt-5.5",
"gpt-5.4",
"gpt-5.4-mini",
"gpt-5.3-codex",
"gpt-5.2-codex",
"gpt-5.1-codex-max",
"gpt-5.1-codex-mini",
):
for model, expected_ctx in expected.items():
ctx = get_model_context_length(
model=model,
base_url="https://chatgpt.com/backend-api/codex",
api_key="",
provider="openai-codex",
)
assert ctx == 272_000, (
f"Codex {model}: expected 272000 fallback, got {ctx} "
assert ctx == expected_ctx, (
f"Codex {model}: expected {expected_ctx} fallback, got {ctx} "
"(models.dev leakage?)"
)

Expand Down
10 changes: 8 additions & 2 deletions tests/hermes_cli/test_codex_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def test_get_codex_model_ids_falls_back_to_curated_defaults(tmp_path, monkeypatc

assert models[: len(DEFAULT_CODEX_MODELS)] == DEFAULT_CODEX_MODELS
assert "gpt-5.4" in models
assert "gpt-5.3-codex-spark" not in models
assert "gpt-5.3-codex-spark" in models


def test_get_codex_model_ids_adds_forward_compat_models_from_templates(monkeypatch):
Expand All @@ -65,7 +65,13 @@ def test_get_codex_model_ids_adds_forward_compat_models_from_templates(monkeypat

models = get_codex_model_ids(access_token="codex-access-token")

assert models == ["gpt-5.2-codex", "gpt-5.4-mini", "gpt-5.4", "gpt-5.3-codex"]
assert models == [
"gpt-5.2-codex",
"gpt-5.4-mini",
"gpt-5.4",
"gpt-5.3-codex",
"gpt-5.3-codex-spark",
]


def test_model_command_uses_runtime_access_token_for_codex_list(monkeypatch):
Expand Down