fix codex context window and add a few tests

This commit is contained in:
Markus Ylisiurunen 2026-03-05 21:17:55 +02:00 committed by Mario Zechner
parent 8a6384a925
commit f8d731a134
4 changed files with 90 additions and 11 deletions

View file

@ -2287,6 +2287,23 @@ export const MODELS = {
contextWindow: 128000,
maxTokens: 32000,
} satisfies Model<"azure-openai-responses">,
"gpt-5.4": {
id: "gpt-5.4",
name: "GPT-5.4",
api: "azure-openai-responses",
provider: "azure-openai-responses",
baseUrl: "",
reasoning: true,
input: ["text", "image"],
cost: {
input: 2.5,
output: 15,
cacheRead: 0.25,
cacheWrite: 0,
},
contextWindow: 272000,
maxTokens: 128000,
} satisfies Model<"azure-openai-responses">,
"o1": {
id: "o1",
name: "o1",
@ -5420,6 +5437,23 @@ export const MODELS = {
contextWindow: 128000,
maxTokens: 32000,
} satisfies Model<"openai-responses">,
"gpt-5.4": {
id: "gpt-5.4",
name: "GPT-5.4",
api: "openai-responses",
provider: "openai",
baseUrl: "https://api.openai.com/v1",
reasoning: true,
input: ["text", "image"],
cost: {
input: 2.5,
output: 15,
cacheRead: 0.25,
cacheWrite: 0,
},
contextWindow: 272000,
maxTokens: 128000,
} satisfies Model<"openai-responses">,
"o1": {
id: "o1",
name: "o1",
@ -5677,6 +5711,23 @@ export const MODELS = {
contextWindow: 128000,
maxTokens: 128000,
} satisfies Model<"openai-codex-responses">,
"gpt-5.4": {
id: "gpt-5.4",
name: "GPT-5.4",
api: "openai-codex-responses",
provider: "openai-codex",
baseUrl: "https://chatgpt.com/backend-api",
reasoning: true,
input: ["text", "image"],
cost: {
input: 2.5,
output: 15,
cacheRead: 0.25,
cacheWrite: 0,
},
contextWindow: 272000,
maxTokens: 128000,
} satisfies Model<"openai-codex-responses">,
},
"opencode": {
"big-pickle": {
@ -6104,6 +6155,23 @@ export const MODELS = {
contextWindow: 400000,
maxTokens: 128000,
} satisfies Model<"openai-responses">,
"gpt-5.3-codex-spark": {
id: "gpt-5.3-codex-spark",
name: "GPT-5.3 Codex Spark",
api: "openai-responses",
provider: "opencode",
baseUrl: "https://opencode.ai/zen/v1",
reasoning: true,
input: ["text"],
cost: {
input: 1.75,
output: 14,
cacheRead: 0.175,
cacheWrite: 0,
},
contextWindow: 128000,
maxTokens: 128000,
} satisfies Model<"openai-responses">,
"gpt-5.4": {
id: "gpt-5.4",
name: "GPT-5.4",
@ -6118,7 +6186,7 @@ export const MODELS = {
cacheRead: 0.25,
cacheWrite: 0,
},
contextWindow: 1050000,
contextWindow: 272000,
maxTokens: 128000,
} satisfies Model<"openai-responses">,
"kimi-k2.5": {
@ -7987,13 +8055,13 @@ export const MODELS = {
reasoning: true,
input: ["text", "image"],
cost: {
input: 0.41,
output: 2.06,
cacheRead: 0.07,
input: 0.44999999999999996,
output: 2.2,
cacheRead: 0.22499999999999998,
cacheWrite: 0,
},
contextWindow: 262144,
maxTokens: 4096,
maxTokens: 65535,
} satisfies Model<"openai-completions">,
"nex-agi/deepseek-v3.1-nex-n1": {
id: "nex-agi/deepseek-v3.1-nex-n1",
@ -10333,9 +10401,9 @@ export const MODELS = {
reasoning: true,
input: ["text"],
cost: {
input: 0.6,
output: 1.9,
cacheRead: 0.119,
input: 0.7999999999999999,
output: 2.56,
cacheRead: 0.16,
cacheWrite: 0,
},
contextWindow: 202752,

View file

@ -231,7 +231,7 @@ describe("openai-codex streaming", () => {
await streamResult.result();
});
it("clamps gpt-5.3-codex minimal reasoning effort to low", async () => {
it.each(["gpt-5.3-codex", "gpt-5.4"])("clamps %s minimal reasoning effort to low", async (modelId) => {
const tempDir = mkdtempSync(join(tmpdir(), "pi-codex-stream-"));
process.env.PI_CODING_AGENT_DIR = tempDir;
@ -303,8 +303,8 @@ describe("openai-codex streaming", () => {
global.fetch = fetchMock as typeof fetch;
const model: Model<"openai-codex-responses"> = {
id: "gpt-5.3-codex",
name: "GPT-5.3 Codex",
id: modelId,
name: modelId,
api: "openai-codex-responses",
provider: "openai-codex",
baseUrl: "https://chatgpt.com/backend-api",

View file

@ -14,6 +14,12 @@ describe("supportsXhigh", () => {
expect(supportsXhigh(model!)).toBe(false);
});
it("returns true for GPT-5.4 models", () => {
const model = getModel("openai-codex", "gpt-5.4");
expect(model).toBeDefined();
expect(supportsXhigh(model!)).toBe(true);
});
it("returns false for OpenRouter Opus 4.6 (openai-completions API)", () => {
const model = getModel("openrouter", "anthropic/claude-opus-4.6");
expect(model).toBeDefined();