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 202789b8f..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-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",