Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

Commit a583818

Browse files
committed
feat: add GPT-5.4 Codex fast mode models (codex, spark variants)
Adds three new model entries to the OpenAI Codex provider: - gpt-5.4-codex: Full GPT-5.4 optimized for agentic coding (1M context) - gpt-5.4-codex-spark: Fast, text-only GPT-5.4 variant (128k context, 8k output) - gpt-5.4-mini-codex-spark: Fast, text-only GPT-5.4 Mini variant (128k context, 8k output) Follows the same pattern as existing gpt-5.3-codex and gpt-5.3-codex-spark models. Closes #12112
1 parent 8b12f21 commit a583818

2 files changed

Lines changed: 92 additions & 12 deletions

File tree

packages/types/src/providers/openai-codex.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,48 @@ export const openAiCodexModels = {
172172
supportsTemperature: false,
173173
description: "GPT-5.1 Codex Mini: Faster version for coding tasks via ChatGPT subscription",
174174
},
175+
"gpt-5.4-codex": {
176+
maxTokens: 128000,
177+
contextWindow: 1_050_000,
178+
includedTools: ["apply_patch"],
179+
excludedTools: ["apply_diff", "write_to_file"],
180+
supportsImages: true,
181+
supportsPromptCache: true,
182+
supportsReasoningEffort: ["low", "medium", "high", "xhigh"],
183+
reasoningEffort: "medium",
184+
inputPrice: 0,
185+
outputPrice: 0,
186+
supportsTemperature: false,
187+
description: "GPT-5.4 Codex: GPT-5.4 optimized for agentic coding via ChatGPT subscription",
188+
},
189+
"gpt-5.4-codex-spark": {
190+
maxTokens: 8192,
191+
contextWindow: 128000,
192+
includedTools: ["apply_patch"],
193+
excludedTools: ["apply_diff", "write_to_file"],
194+
supportsImages: false,
195+
supportsPromptCache: true,
196+
supportsReasoningEffort: ["low", "medium", "high", "xhigh"],
197+
reasoningEffort: "medium",
198+
inputPrice: 0,
199+
outputPrice: 0,
200+
supportsTemperature: false,
201+
description: "GPT-5.4 Codex Spark: Fast, text-only coding model via ChatGPT subscription",
202+
},
203+
"gpt-5.4-mini-codex-spark": {
204+
maxTokens: 8192,
205+
contextWindow: 128000,
206+
includedTools: ["apply_patch"],
207+
excludedTools: ["apply_diff", "write_to_file"],
208+
supportsImages: false,
209+
supportsPromptCache: true,
210+
supportsReasoningEffort: ["low", "medium", "high", "xhigh"],
211+
reasoningEffort: "medium",
212+
inputPrice: 0,
213+
outputPrice: 0,
214+
supportsTemperature: false,
215+
description: "GPT-5.4 Mini Codex Spark: Fast, text-only mini coding model via ChatGPT subscription",
216+
},
175217
"gpt-5.4": {
176218
maxTokens: 128000,
177219
contextWindow: 1_050_000,

src/api/providers/__tests__/openai-codex.spec.ts

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,25 @@
33
import { OpenAiCodexHandler } from "../openai-codex"
44

55
describe("OpenAiCodexHandler.getModel", () => {
6-
it.each(["gpt-5.1", "gpt-5", "gpt-5.1-codex", "gpt-5-codex", "gpt-5-codex-mini", "gpt-5.3-codex-spark"])(
7-
"should return specified model when a valid model id is provided: %s",
8-
(apiModelId) => {
9-
const handler = new OpenAiCodexHandler({ apiModelId })
10-
const model = handler.getModel()
11-
12-
expect(model.id).toBe(apiModelId)
13-
expect(model.info).toBeDefined()
14-
// Default reasoning effort for GPT-5 family
15-
expect(model.info.reasoningEffort).toBe("medium")
16-
},
17-
)
6+
it.each([
7+
"gpt-5.1",
8+
"gpt-5",
9+
"gpt-5.1-codex",
10+
"gpt-5-codex",
11+
"gpt-5-codex-mini",
12+
"gpt-5.3-codex-spark",
13+
"gpt-5.4-codex",
14+
"gpt-5.4-codex-spark",
15+
"gpt-5.4-mini-codex-spark",
16+
])("should return specified model when a valid model id is provided: %s", (apiModelId) => {
17+
const handler = new OpenAiCodexHandler({ apiModelId })
18+
const model = handler.getModel()
19+
20+
expect(model.id).toBe(apiModelId)
21+
expect(model.info).toBeDefined()
22+
// Default reasoning effort for GPT-5 family
23+
expect(model.info.reasoningEffort).toBe("medium")
24+
})
1825

1926
it("should fall back to default model when an invalid model id is provided", () => {
2027
const handler = new OpenAiCodexHandler({ apiModelId: "not-a-real-model" })
@@ -41,4 +48,35 @@ describe("OpenAiCodexHandler.getModel", () => {
4148
expect(model.id).toBe("gpt-5.4-mini")
4249
expect(model.info).toBeDefined()
4350
})
51+
52+
it("should use GPT-5.4 Codex capabilities when selected", () => {
53+
const handler = new OpenAiCodexHandler({ apiModelId: "gpt-5.4-codex" })
54+
const model = handler.getModel()
55+
56+
expect(model.id).toBe("gpt-5.4-codex")
57+
expect(model.info.contextWindow).toBe(1_050_000)
58+
expect(model.info.maxTokens).toBe(128000)
59+
expect(model.info.supportsImages).toBe(true)
60+
expect(model.info.reasoningEffort).toBe("medium")
61+
})
62+
63+
it("should use GPT-5.4 Codex Spark-specific limits and capabilities", () => {
64+
const handler = new OpenAiCodexHandler({ apiModelId: "gpt-5.4-codex-spark" })
65+
const model = handler.getModel()
66+
67+
expect(model.id).toBe("gpt-5.4-codex-spark")
68+
expect(model.info.contextWindow).toBe(128000)
69+
expect(model.info.maxTokens).toBe(8192)
70+
expect(model.info.supportsImages).toBe(false)
71+
})
72+
73+
it("should use GPT-5.4 Mini Codex Spark-specific limits and capabilities", () => {
74+
const handler = new OpenAiCodexHandler({ apiModelId: "gpt-5.4-mini-codex-spark" })
75+
const model = handler.getModel()
76+
77+
expect(model.id).toBe("gpt-5.4-mini-codex-spark")
78+
expect(model.info.contextWindow).toBe(128000)
79+
expect(model.info.maxTokens).toBe(8192)
80+
expect(model.info.supportsImages).toBe(false)
81+
})
4482
})

0 commit comments

Comments
 (0)