From 2f52cf7716db0a78d6b589604c4d5fa0fe5f892e Mon Sep 17 00:00:00 2001 From: Maximilian Noller Date: Sun, 26 Apr 2026 18:37:33 +0200 Subject: [PATCH 1/3] feat: add gpt-5.5 and gpt-5.5-pro to static model registry Register the OpenAI GPT-5.5 family (released 2026-04-23) so HybridAI can resolve their context windows and vision capability without a discovery round-trip. Both models report a 1M token context window per OpenAI's release notes. --- src/providers/hybridai-models.ts | 5 +++++ tests/hybridai-models.test.ts | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/providers/hybridai-models.ts b/src/providers/hybridai-models.ts index f4a6965a9..504da58ad 100644 --- a/src/providers/hybridai-models.ts +++ b/src/providers/hybridai-models.ts @@ -18,6 +18,8 @@ const STATIC_VISION_CAPABLE_MODELS = new Set([ 'gpt-5.4-mini', 'gpt-5.3-codex', 'gpt-5.4', + 'gpt-5.5', + 'gpt-5.5-pro', 'claude-opus-4-6', 'claude-opus-4.6', @@ -73,6 +75,9 @@ const STATIC_MODEL_CONTEXT_WINDOWS: Record = { 'gpt-5.4': 400_000, 'gpt-5.3-codex': 400_000, 'gpt-5.3-codex-spark': 128_000, + 'gpt-5.5': 1_000_000, + 'gpt-5.5-chat-latest': 128_000, + 'gpt-5.5-pro': 1_000_000, }; function collectModelLookupCandidates(modelName: string): string[] { diff --git a/tests/hybridai-models.test.ts b/tests/hybridai-models.test.ts index 9a3a34bde..3b82ae6bd 100644 --- a/tests/hybridai-models.test.ts +++ b/tests/hybridai-models.test.ts @@ -40,6 +40,8 @@ test('resolveModelContextWindowFallback resolves known defaults', () => { expect(resolveModelContextWindowFallback('openai-codex/gpt-5.4')).toBe( 400_000, ); + expect(resolveModelContextWindowFallback('gpt-5.5')).toBe(1_000_000); + expect(resolveModelContextWindowFallback('gpt-5.5-pro')).toBe(1_000_000); expect(resolveModelContextWindowFallback('anthropic/claude-opus-4-6')).toBe( 200_000, ); @@ -63,6 +65,8 @@ test('isStaticModelVisionCapable returns true for known vision models', () => { expect(isStaticModelVisionCapable('gpt-4.1-mini')).toBe(true); expect(isStaticModelVisionCapable('gpt-5.4-mini')).toBe(true); expect(isStaticModelVisionCapable('gpt-5.3-codex')).toBe(true); + expect(isStaticModelVisionCapable('gpt-5.5')).toBe(true); + expect(isStaticModelVisionCapable('gpt-5.5-pro')).toBe(true); expect(isStaticModelVisionCapable('claude-opus-4-6')).toBe(true); expect(isStaticModelVisionCapable('gemini-3-pro')).toBe(true); }); From 27e8ca22135cd9b7ae0454fcf2e0be3f30106301 Mon Sep 17 00:00:00 2001 From: Maximilian Noller Date: Sun, 26 Apr 2026 19:36:00 +0200 Subject: [PATCH 2/3] feat: add openai-codex/gpt-5.5 to codex discovery GPT-5.5 also rolled out to Codex on 2026-04-23. Register it as a forward-compat entry templated on gpt-5.4 / gpt-5.3-codex so existing Codex users pick it up automatically, and seed it into the default codex model list for fresh installs. --- src/config/runtime-config.ts | 1 + src/providers/codex-discovery.ts | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/config/runtime-config.ts b/src/config/runtime-config.ts index b33635698..1dea8dff9 100644 --- a/src/config/runtime-config.ts +++ b/src/config/runtime-config.ts @@ -872,6 +872,7 @@ const DEFAULT_CODEX_MODEL_LIST = [ 'openai-codex/gpt-5-codex', 'openai-codex/gpt-5.3-codex', 'openai-codex/gpt-5.4', + 'openai-codex/gpt-5.5', 'openai-codex/gpt-5.3-codex-spark', 'openai-codex/gpt-5.2-codex', 'openai-codex/gpt-5.1-codex-max', diff --git a/src/providers/codex-discovery.ts b/src/providers/codex-discovery.ts index 381f85d4d..be162d664 100644 --- a/src/providers/codex-discovery.ts +++ b/src/providers/codex-discovery.ts @@ -45,6 +45,14 @@ const CODEX_FORWARD_COMPAT_MODELS = [ 'openai-codex/gpt-5.2-codex', ], }, + { + model: 'openai-codex/gpt-5.5', + templateModels: [ + 'openai-codex/gpt-5.4', + 'openai-codex/gpt-5.3-codex', + 'openai-codex/gpt-5.2-codex', + ], + }, ] as const; function normalizeCodexModelName(modelId: string): string { From ec8d33739fc49c5beef7b6d4ea4a04d3fcfb64da Mon Sep 17 00:00:00 2001 From: Maximilian Noller Date: Sun, 26 Apr 2026 19:59:37 +0200 Subject: [PATCH 3/3] test: extend codex discovery fixtures for gpt-5.5 Forward-compat now appends openai-codex/gpt-5.5 whenever gpt-5.4 (or another template) is in the discovered set, so the existing exact-list and modelCount assertions need to reflect the extra entry. --- tests/gateway-status.test.ts | 4 ++-- tests/model-catalog.test.ts | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/gateway-status.test.ts b/tests/gateway-status.test.ts index a238bb87f..d5a5e71b4 100644 --- a/tests/gateway-status.test.ts +++ b/tests/gateway-status.test.ts @@ -208,7 +208,7 @@ test('getGatewayStatus includes Codex auth state', async () => { expect(status.providerHealth?.codex).toMatchObject({ kind: 'remote', reachable: true, - modelCount: 8, + modelCount: 9, }); const codexRequest = fetchMock.mock.calls .map(([input, init]) => ({ @@ -308,7 +308,7 @@ test('getGatewayAdminModels discovers Codex models from the models endpoint', as const result = await getGatewayAdminModels(); expect(result.providerStatus?.codex).toMatchObject({ - modelCount: 8, + modelCount: 9, }); const codexRequest = fetchMock.mock.calls .map(([input, init]) => ({ diff --git a/tests/model-catalog.test.ts b/tests/model-catalog.test.ts index 5be4a103d..e5642cbaa 100644 --- a/tests/model-catalog.test.ts +++ b/tests/model-catalog.test.ts @@ -417,6 +417,7 @@ test('available model catalog discovers Codex models from the models endpoint', 'openai-codex/gpt-5.3-codex-spark', 'openai-codex/gpt-5.4', 'openai-codex/gpt-5.4-mini', + 'openai-codex/gpt-5.5', ]); const codexRequest = fetchMock.mock.calls .map(([input, init]) => ({ @@ -738,6 +739,7 @@ test('available model catalog discovers Codex models from the current models pay 'openai-codex/gpt-5.3-codex-spark', 'openai-codex/gpt-5.4', 'openai-codex/gpt-5.4-mini', + 'openai-codex/gpt-5.5', ]); expect(catalog.getAvailableModelList('codex')).not.toContain( 'openai-codex/GPT-5.2 Codex (Preview)',