From 62c282f703c0ba25ca8633fc3806407d2b73d6fe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Jul 2026 08:15:51 +0000 Subject: [PATCH 1/2] chore: update model-to-API mapping (2026-07-02) - Fix endpoint support for gpt-5.4, gpt-5.3, gpt-5.2, gpt-5.1: all are in ModelIdsShared (OpenAI OpenAPI spec), meaning they support both /v1/chat/completions and /v1/responses (not responses-only as before). - Fix o4 family: o4-mini is in ModelIdsShared (both endpoints); only o4-mini-deep-research is ResponsesOnlyModel. - Fix gpt-5 family: gpt-5/mini/nano support both endpoints; gpt-5-codex and gpt-5-pro are ResponsesOnlyModel. - Fix gpt-5.1 notes: remove non-existent gpt-5.1-codex-mini; gpt-5.1-codex-max is the real ResponsesOnlyModel variant. - Fix gpt-5.3 notes: remove unconfirmed codex variants; only gpt-5.3-chat-latest exists in the OpenAPI spec. - Enrich gpt-4.1 notes with confirmed sub-models (mini, nano). - Source: openai/openai-openapi ModelIdsShared + ResponsesOnlyModel schemas. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/model-api-mapping.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/model-api-mapping.json b/docs/model-api-mapping.json index 202789b8f..5748f2f89 100644 --- a/docs/model-api-mapping.json +++ b/docs/model-api-mapping.json @@ -1,7 +1,7 @@ { "title": "Model-to-API Endpoint Mapping", "description": "Maps AI model families to their supported API endpoints. Used to determine which endpoint (chat/completions vs responses vs messages) a model requires.", - "lastUpdated": "2026-07-01T08:18:06Z", + "lastUpdated": "2026-07-02T07:56:20Z", "sources": { "openai": "https://platform.openai.com/docs/models", "anthropic": "https://docs.anthropic.com/en/docs/about-claude/models" @@ -28,38 +28,38 @@ { "family": "gpt-5.4", "patterns": ["gpt-5.4*"], - "endpoints": ["responses"], - "notes": "Responses API only." + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints. Includes gpt-5.4-mini, gpt-5.4-nano." }, { "family": "gpt-5.3", "patterns": ["gpt-5.3*"], - "endpoints": ["responses"], - "notes": "Responses API only. Includes gpt-5.3-codex variants." + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints. Only gpt-5.3-chat-latest confirmed in OpenAPI spec; gpt-5.3-codex variants not present." }, { "family": "gpt-5.2", "patterns": ["gpt-5.2*"], - "endpoints": ["responses"], - "notes": "Responses API only." + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints. Includes gpt-5.2-pro." }, { "family": "gpt-5.1", "patterns": ["gpt-5.1*"], - "endpoints": ["responses"], - "notes": "Responses API only. Includes gpt-5.1-codex, gpt-5.1-codex-max, gpt-5.1-codex-mini variants." + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints for gpt-5.1, gpt-5.1-codex, gpt-5.1-mini. gpt-5.1-codex-max is Responses API only (ResponsesOnlyModel)." }, { "family": "gpt-5", "patterns": ["gpt-5", "gpt-5-*"], - "endpoints": ["responses"], - "notes": "Responses API only. Includes gpt-5-mini, gpt-5-nano, gpt-5-pro." + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints for gpt-5, gpt-5-mini, gpt-5-nano. Responses API only for gpt-5-codex and gpt-5-pro (ResponsesOnlyModel)." }, { "family": "o4", "patterns": ["o4*"], - "endpoints": ["responses"], - "notes": "Reasoning model. Responses API only. Includes o4-mini." + "endpoints": ["chat_completions", "responses"], + "notes": "Reasoning model. o4-mini supports both endpoints (ModelIdsShared). o4-mini-deep-research is Responses API only." }, { "family": "o3", @@ -83,7 +83,7 @@ "family": "gpt-4.1", "patterns": ["gpt-4.1*"], "endpoints": ["chat_completions", "responses"], - "notes": "Supports both endpoints." + "notes": "Supports both endpoints. Includes gpt-4.1-mini, gpt-4.1-nano." }, { "family": "gpt-4.5", From 438919872718616ef6f504cf705531f330ccc6f7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Jul 2026 22:48:21 +0000 Subject: [PATCH 2/2] fix: resolve model mapping review findings --- containers/api-proxy/model-api-mapping.json | 40 ++++++++++++++----- .../api-proxy/model-api-mapping.test.js | 26 +++++++++++- docs/model-api-mapping.json | 26 ++++++++++-- 3 files changed, 75 insertions(+), 17 deletions(-) diff --git a/containers/api-proxy/model-api-mapping.json b/containers/api-proxy/model-api-mapping.json index 202789b8f..444aee014 100644 --- a/containers/api-proxy/model-api-mapping.json +++ b/containers/api-proxy/model-api-mapping.json @@ -1,7 +1,7 @@ { "title": "Model-to-API Endpoint Mapping", "description": "Maps AI model families to their supported API endpoints. Used to determine which endpoint (chat/completions vs responses vs messages) a model requires.", - "lastUpdated": "2026-07-01T08:18:06Z", + "lastUpdated": "2026-07-02T22:45:35Z", "sources": { "openai": "https://platform.openai.com/docs/models", "anthropic": "https://docs.anthropic.com/en/docs/about-claude/models" @@ -28,38 +28,56 @@ { "family": "gpt-5.4", "patterns": ["gpt-5.4*"], - "endpoints": ["responses"], - "notes": "Responses API only." + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints. Includes gpt-5.4-mini, gpt-5.4-nano." }, { "family": "gpt-5.3", "patterns": ["gpt-5.3*"], - "endpoints": ["responses"], - "notes": "Responses API only. Includes gpt-5.3-codex variants." + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints. Only gpt-5.3-chat-latest confirmed in OpenAPI spec; gpt-5.3-codex variants not present." }, { "family": "gpt-5.2", "patterns": ["gpt-5.2*"], + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints. Includes gpt-5.2-pro." + }, + { + "family": "gpt-5.1-codex-max", + "patterns": ["gpt-5.1-codex-max"], "endpoints": ["responses"], - "notes": "Responses API only." + "notes": "Responses API only (ResponsesOnlyModel)." }, { "family": "gpt-5.1", "patterns": ["gpt-5.1*"], + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints for gpt-5.1, gpt-5.1-codex, gpt-5.1-mini." + }, + { + "family": "gpt-5-codex/pro", + "patterns": ["gpt-5-codex", "gpt-5-pro"], "endpoints": ["responses"], - "notes": "Responses API only. Includes gpt-5.1-codex, gpt-5.1-codex-max, gpt-5.1-codex-mini variants." + "notes": "Responses API only for gpt-5-codex and gpt-5-pro (ResponsesOnlyModel)." }, { "family": "gpt-5", "patterns": ["gpt-5", "gpt-5-*"], + "endpoints": ["chat_completions", "responses"], + "notes": "Supports both endpoints for gpt-5, gpt-5-mini, gpt-5-nano." + }, + { + "family": "o4-mini-deep-research", + "patterns": ["o4-mini-deep-research"], "endpoints": ["responses"], - "notes": "Responses API only. Includes gpt-5-mini, gpt-5-nano, gpt-5-pro." + "notes": "Responses API only (ResponsesOnlyModel)." }, { "family": "o4", "patterns": ["o4*"], - "endpoints": ["responses"], - "notes": "Reasoning model. Responses API only. Includes o4-mini." + "endpoints": ["chat_completions", "responses"], + "notes": "Reasoning model. o4-mini supports both endpoints (ModelIdsShared)." }, { "family": "o3", @@ -83,7 +101,7 @@ "family": "gpt-4.1", "patterns": ["gpt-4.1*"], "endpoints": ["chat_completions", "responses"], - "notes": "Supports both endpoints." + "notes": "Supports both endpoints. Includes gpt-4.1-mini, gpt-4.1-nano." }, { "family": "gpt-4.5", diff --git a/containers/api-proxy/model-api-mapping.test.js b/containers/api-proxy/model-api-mapping.test.js index eb29dc3f8..120db22e4 100644 --- a/containers/api-proxy/model-api-mapping.test.js +++ b/containers/api-proxy/model-api-mapping.test.js @@ -33,10 +33,32 @@ describe('model-api-mapping', () => { expect(result.endpoints).toEqual(['responses']); }); - it('finds GPT-5.1 as responses-only', () => { + it('finds GPT-5.1 as supporting both endpoints', () => { const result = lookupModelEndpoints('gpt-5.1-codex', 'openai'); expect(result).not.toBeNull(); expect(result.family).toBe('gpt-5.1'); + expect(result.endpoints).toContain('chat_completions'); + expect(result.endpoints).toContain('responses'); + }); + + it('finds GPT-5.1-codex-max as responses-only', () => { + const result = lookupModelEndpoints('gpt-5.1-codex-max', 'openai'); + expect(result).not.toBeNull(); + expect(result.family).toBe('gpt-5.1-codex-max'); + expect(result.endpoints).toEqual(['responses']); + }); + + it('finds GPT-5-codex as responses-only', () => { + const result = lookupModelEndpoints('gpt-5-codex', 'openai'); + expect(result).not.toBeNull(); + expect(result.family).toBe('gpt-5-codex/pro'); + expect(result.endpoints).toEqual(['responses']); + }); + + it('finds o4-mini-deep-research as responses-only', () => { + const result = lookupModelEndpoints('o4-mini-deep-research', 'openai'); + expect(result).not.toBeNull(); + expect(result.family).toBe('o4-mini-deep-research'); expect(result.endpoints).toEqual(['responses']); }); @@ -89,7 +111,7 @@ describe('model-api-mapping', () => { expect(reflect.available).toBe(true); expect(reflect.providers).toContain('openai'); expect(reflect.providers).toContain('anthropic'); - expect(reflect.last_updated).toBe('2026-07-01T08:18:06Z'); + expect(reflect.last_updated).toBe('2026-07-02T22:45:35Z'); expect(reflect.error).toBeNull(); }); }); diff --git a/docs/model-api-mapping.json b/docs/model-api-mapping.json index 5748f2f89..444aee014 100644 --- a/docs/model-api-mapping.json +++ b/docs/model-api-mapping.json @@ -1,7 +1,7 @@ { "title": "Model-to-API Endpoint Mapping", "description": "Maps AI model families to their supported API endpoints. Used to determine which endpoint (chat/completions vs responses vs messages) a model requires.", - "lastUpdated": "2026-07-02T07:56:20Z", + "lastUpdated": "2026-07-02T22:45:35Z", "sources": { "openai": "https://platform.openai.com/docs/models", "anthropic": "https://docs.anthropic.com/en/docs/about-claude/models" @@ -43,23 +43,41 @@ "endpoints": ["chat_completions", "responses"], "notes": "Supports both endpoints. Includes gpt-5.2-pro." }, + { + "family": "gpt-5.1-codex-max", + "patterns": ["gpt-5.1-codex-max"], + "endpoints": ["responses"], + "notes": "Responses API only (ResponsesOnlyModel)." + }, { "family": "gpt-5.1", "patterns": ["gpt-5.1*"], "endpoints": ["chat_completions", "responses"], - "notes": "Supports both endpoints for gpt-5.1, gpt-5.1-codex, gpt-5.1-mini. gpt-5.1-codex-max is Responses API only (ResponsesOnlyModel)." + "notes": "Supports both endpoints for gpt-5.1, gpt-5.1-codex, gpt-5.1-mini." + }, + { + "family": "gpt-5-codex/pro", + "patterns": ["gpt-5-codex", "gpt-5-pro"], + "endpoints": ["responses"], + "notes": "Responses API only for gpt-5-codex and gpt-5-pro (ResponsesOnlyModel)." }, { "family": "gpt-5", "patterns": ["gpt-5", "gpt-5-*"], "endpoints": ["chat_completions", "responses"], - "notes": "Supports both endpoints for gpt-5, gpt-5-mini, gpt-5-nano. Responses API only for gpt-5-codex and gpt-5-pro (ResponsesOnlyModel)." + "notes": "Supports both endpoints for gpt-5, gpt-5-mini, gpt-5-nano." + }, + { + "family": "o4-mini-deep-research", + "patterns": ["o4-mini-deep-research"], + "endpoints": ["responses"], + "notes": "Responses API only (ResponsesOnlyModel)." }, { "family": "o4", "patterns": ["o4*"], "endpoints": ["chat_completions", "responses"], - "notes": "Reasoning model. o4-mini supports both endpoints (ModelIdsShared). o4-mini-deep-research is Responses API only." + "notes": "Reasoning model. o4-mini supports both endpoints (ModelIdsShared)." }, { "family": "o3",