diff --git a/packages/types/src/providers/openai-codex.ts b/packages/types/src/providers/openai-codex.ts index 72b909591a6..f8d9bd25df3 100644 --- a/packages/types/src/providers/openai-codex.ts +++ b/packages/types/src/providers/openai-codex.ts @@ -68,6 +68,20 @@ export const openAiCodexModels = { supportsTemperature: false, description: "GPT-5.3 Codex: OpenAI's flagship coding model via ChatGPT subscription", }, + "gpt-5.3-codex-spark": { + maxTokens: 8192, + contextWindow: 128000, + includedTools: ["apply_patch"], + excludedTools: ["apply_diff", "write_to_file"], + supportsImages: false, + supportsPromptCache: true, + supportsReasoningEffort: ["low", "medium", "high", "xhigh"], + reasoningEffort: "medium", + inputPrice: 0, + outputPrice: 0, + supportsTemperature: false, + description: "GPT-5.3 Codex Spark: Fast, text-only coding model via ChatGPT subscription", + }, "gpt-5.2-codex": { maxTokens: 128000, contextWindow: 400000, diff --git a/src/api/providers/__tests__/openai-codex.spec.ts b/src/api/providers/__tests__/openai-codex.spec.ts index 26a0e83c45c..2e164fe469f 100644 --- a/src/api/providers/__tests__/openai-codex.spec.ts +++ b/src/api/providers/__tests__/openai-codex.spec.ts @@ -3,7 +3,7 @@ import { OpenAiCodexHandler } from "../openai-codex" describe("OpenAiCodexHandler.getModel", () => { - it.each(["gpt-5.1", "gpt-5", "gpt-5.1-codex", "gpt-5-codex", "gpt-5-codex-mini"])( + it.each(["gpt-5.1", "gpt-5", "gpt-5.1-codex", "gpt-5-codex", "gpt-5-codex-mini", "gpt-5.3-codex-spark"])( "should return specified model when a valid model id is provided: %s", (apiModelId) => { const handler = new OpenAiCodexHandler({ apiModelId }) @@ -23,4 +23,14 @@ describe("OpenAiCodexHandler.getModel", () => { expect(model.id).toBe("gpt-5.3-codex") expect(model.info).toBeDefined() }) + + it("should use Spark-specific limits and capabilities", () => { + const handler = new OpenAiCodexHandler({ apiModelId: "gpt-5.3-codex-spark" }) + const model = handler.getModel() + + expect(model.id).toBe("gpt-5.3-codex-spark") + expect(model.info.contextWindow).toBe(128000) + expect(model.info.maxTokens).toBe(8192) + expect(model.info.supportsImages).toBe(false) + }) })