Models: add native GPT-5.4 mini and nano support (#49289)

* Models: add GPT-5.4 mini and nano support

* Tests: cover OpenAI GPT-5.4 mini and nano extension support
This commit is contained in:
Vincent Koc
2026-03-17 16:21:39 -07:00
committed by GitHub
parent e99963100d
commit 0e4c072f37
11 changed files with 363 additions and 21 deletions

View File

@@ -330,6 +330,38 @@ describe("provider runtime contract", () => {
});
});
it("owns openai gpt-5.4 mini forward-compat resolution", () => {
const provider = requireProviderContractProvider("openai");
const model = provider.resolveDynamicModel?.({
provider: "openai",
modelId: "gpt-5.4-mini",
modelRegistry: {
find: (_provider: string, id: string) =>
id === "gpt-5-mini"
? createModel({
id,
provider: "openai",
api: "openai-responses",
baseUrl: "https://api.openai.com/v1",
input: ["text", "image"],
reasoning: true,
contextWindow: 400_000,
maxTokens: 128_000,
})
: null,
} as never,
});
expect(model).toMatchObject({
id: "gpt-5.4-mini",
provider: "openai",
api: "openai-responses",
baseUrl: "https://api.openai.com/v1",
contextWindow: 400_000,
maxTokens: 128_000,
});
});
it("owns direct openai transport normalization", () => {
const provider = requireProviderContractProvider("openai");
expect(

View File

@@ -38,6 +38,16 @@ export function augmentBundledProviderCatalog(
providerId: OPENAI_PROVIDER_ID,
templateIds: ["gpt-5.2-pro", "gpt-5.2"],
});
const openAiGpt54MiniTemplate = findCatalogTemplate({
entries: context.entries,
providerId: OPENAI_PROVIDER_ID,
templateIds: ["gpt-5-mini"],
});
const openAiGpt54NanoTemplate = findCatalogTemplate({
entries: context.entries,
providerId: OPENAI_PROVIDER_ID,
templateIds: ["gpt-5-nano", "gpt-5-mini"],
});
const openAiCodexGpt54Template = findCatalogTemplate({
entries: context.entries,
providerId: OPENAI_CODEX_PROVIDER_ID,
@@ -64,6 +74,20 @@ export function augmentBundledProviderCatalog(
name: "gpt-5.4-pro",
}
: undefined,
openAiGpt54MiniTemplate
? {
...openAiGpt54MiniTemplate,
id: "gpt-5.4-mini",
name: "gpt-5.4-mini",
}
: undefined,
openAiGpt54NanoTemplate
? {
...openAiGpt54NanoTemplate,
id: "gpt-5.4-nano",
name: "gpt-5.4-nano",
}
: undefined,
openAiCodexGpt54Template
? {
...openAiCodexGpt54Template,

View File

@@ -3,12 +3,16 @@ import { expect } from "vitest";
export const openaiCodexCatalogEntries = [
{ provider: "openai", id: "gpt-5.2", name: "GPT-5.2" },
{ provider: "openai", id: "gpt-5.2-pro", name: "GPT-5.2 Pro" },
{ provider: "openai", id: "gpt-5-mini", name: "GPT-5 mini" },
{ provider: "openai", id: "gpt-5-nano", name: "GPT-5 nano" },
{ provider: "openai-codex", id: "gpt-5.3-codex", name: "GPT-5.3 Codex" },
];
export const expectedAugmentedOpenaiCodexCatalogEntries = [
{ provider: "openai", id: "gpt-5.4", name: "gpt-5.4" },
{ provider: "openai", id: "gpt-5.4-pro", name: "gpt-5.4-pro" },
{ provider: "openai", id: "gpt-5.4-mini", name: "gpt-5.4-mini" },
{ provider: "openai", id: "gpt-5.4-nano", name: "gpt-5.4-nano" },
{ provider: "openai-codex", id: "gpt-5.4", name: "gpt-5.4" },
{
provider: "openai-codex",

View File

@@ -471,6 +471,8 @@ describe("provider-runtime", () => {
entries: [
{ provider: "openai", id: "gpt-5.2", name: "GPT-5.2" },
{ provider: "openai", id: "gpt-5.2-pro", name: "GPT-5.2 Pro" },
{ provider: "openai", id: "gpt-5-mini", name: "GPT-5 mini" },
{ provider: "openai", id: "gpt-5-nano", name: "GPT-5 nano" },
{ provider: "openai-codex", id: "gpt-5.3-codex", name: "GPT-5.3 Codex" },
],
},
@@ -478,6 +480,8 @@ describe("provider-runtime", () => {
).resolves.toEqual([
{ provider: "openai", id: "gpt-5.4", name: "gpt-5.4" },
{ provider: "openai", id: "gpt-5.4-pro", name: "gpt-5.4-pro" },
{ provider: "openai", id: "gpt-5.4-mini", name: "gpt-5.4-mini" },
{ provider: "openai", id: "gpt-5.4-nano", name: "gpt-5.4-nano" },
{ provider: "openai-codex", id: "gpt-5.4", name: "gpt-5.4" },
{
provider: "openai-codex",