diff --git a/backend/internal/service/openai_codex_models_service.go b/backend/internal/service/openai_codex_models_service.go index 934f770979..911672d5d8 100644 --- a/backend/internal/service/openai_codex_models_service.go +++ b/backend/internal/service/openai_codex_models_service.go @@ -546,6 +546,9 @@ func newConfiguredCodexModelDescriptor(modelID string) configuredCodexModelDescr } descriptor.Slug = modelID descriptor.officialMetadata = openai.CodexGPT61SolMetadata + // The October 12, 2026 Codex/Work default increased to 500k after + // the bundled official snapshot. Explicit upstream metadata still wins. + descriptor.ContextWindow = 500_000 } return descriptor } diff --git a/backend/internal/service/openai_codex_models_service_test.go b/backend/internal/service/openai_codex_models_service_test.go index a825ba2208..1b5d701335 100644 --- a/backend/internal/service/openai_codex_models_service_test.go +++ b/backend/internal/service/openai_codex_models_service_test.go @@ -2403,7 +2403,7 @@ func TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels(t } func TestFetchCodexModelsManifestOAuthPreservesResponsesLite(t *testing.T) { - const manifestBody = ` {"models":[{"slug":"gpt-5.6-sol","use_responses_lite":true}]} ` + const manifestBody = ` {"models":[{"slug":"gpt-5.6-sol","use_responses_lite":true},{"slug":"gpt-6.1-sol","context_window":500000,"max_context_window":1000000,"use_responses_lite":true}]} ` server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { _, _ = w.Write([]byte(manifestBody)) })) @@ -3798,7 +3798,7 @@ func TestGPT61SolOfflineCodexCatalog(t *testing.T) { m := catalog.Models[0] require.Equal(t, "gpt-6.1-sol", m["slug"]) require.Equal(t, "low", m["default_reasoning_level"]) - require.EqualValues(t, 272000, m["context_window"]) + require.EqualValues(t, 500000, m["context_window"]) require.EqualValues(t, 872000, m["max_context_window"]) require.Equal(t, "xhigh", m["multi_agent_reasoning_effort"]) require.Equal(t, "v2", m["multi_agent_version"]) @@ -3851,3 +3851,25 @@ func TestGPT61SolAPIKeyCatalogUsesFullResponses(t *testing.T) { require.Equal(t, false, catalog.Models[0]["use_responses_lite"]) require.Equal(t, "low", catalog.Models[0]["default_reasoning_level"]) } + +func TestGPT61SolAPIKeyCatalogContextWindow(t *testing.T) { + account := &Account{Platform: PlatformOpenAI, Type: AccountTypeAPIKey, Credentials: map[string]any{"base_url": "https://api.openai.com"}} + for _, tc := range []struct { + name string + body string + want int64 + }{ + {"missing uses updated default", `{"models":[{"slug":"gpt-6.1-sol"}]}`, 500_000}, + {"null uses updated default", `{"models":[{"slug":"gpt-6.1-sol","context_window":null}]}`, 500_000}, + {"lower upstream window is preserved", `{"models":[{"slug":"gpt-6.1-sol","context_window":272000}]}`, 272_000}, + {"higher upstream window is preserved", `{"models":[{"slug":"gpt-6.1-sol","context_window":1000000,"max_context_window":1000000}]}`, 1_000_000}, + } { + t.Run(tc.name, func(t *testing.T) { + body, err := completeAPIKeyCodexModelsManifestMetadata([]byte(tc.body), true, account) + require.NoError(t, err) + models := decodeCodexManifestModels(t, body) + require.Len(t, models, 1) + require.EqualValues(t, tc.want, models[0]["context_window"]) + }) + } +}