feat(openai): add gpt-5.4 support for API and Codex OAuth (#36590)

* feat(openai): add gpt-5.4 support and priority processing

* feat(openai-codex): add gpt-5.4 oauth support

* fix(openai): preserve provider overrides in gpt-5.4 fallback

* fix(openai-codex): keep xhigh for gpt-5.4 default

* fix(models): preserve configured overrides in list output

* fix(models): close gpt-5.4 integration gaps

* fix(openai): scope service tier to public api

* fix(openai): complete prep followups for gpt-5.4 support (#36590) (thanks @dorukardahan)

---------

Co-authored-by: Tyler Yust <TYTYYUST@YAHOO.COM>
This commit is contained in:
dorukardahan
2026-03-06 08:01:37 +03:00
committed by GitHub
parent 8c85ad540a
commit 5d4b04040d
27 changed files with 913 additions and 178 deletions

View File

@@ -114,6 +114,59 @@ describe("loadModelCatalog", () => {
expect(spark?.reasoning).toBe(true);
});
it("adds gpt-5.4 forward-compat catalog entries when template models exist", async () => {
mockPiDiscoveryModels([
{
id: "gpt-5.2",
provider: "openai",
name: "GPT-5.2",
reasoning: true,
contextWindow: 1_050_000,
input: ["text", "image"],
},
{
id: "gpt-5.2-pro",
provider: "openai",
name: "GPT-5.2 Pro",
reasoning: true,
contextWindow: 1_050_000,
input: ["text", "image"],
},
{
id: "gpt-5.3-codex",
provider: "openai-codex",
name: "GPT-5.3 Codex",
reasoning: true,
contextWindow: 272000,
input: ["text", "image"],
},
]);
const result = await loadModelCatalog({ config: {} as OpenClawConfig });
expect(result).toContainEqual(
expect.objectContaining({
provider: "openai",
id: "gpt-5.4",
name: "gpt-5.4",
}),
);
expect(result).toContainEqual(
expect.objectContaining({
provider: "openai",
id: "gpt-5.4-pro",
name: "gpt-5.4-pro",
}),
);
expect(result).toContainEqual(
expect.objectContaining({
provider: "openai-codex",
id: "gpt-5.4",
name: "gpt-5.4",
}),
);
});
it("merges configured models for opted-in non-pi-native providers", async () => {
mockSingleOpenAiCatalogModel();