From 3ae2ff125e381615ced62412f2a0d63e814317a4 Mon Sep 17 00:00:00 2001 From: HiranoMasaaki Date: Sun, 15 Mar 2026 16:22:38 +0900 Subject: [PATCH 1/4] feat: add GPT-5.4 to known models for openai provider - 1.05M context window, 128k max output, high tier - Specs from https://developers.openai.com/api/docs/models/gpt-5.4 Co-Authored-By: Claude Opus 4.6 (1M context) --- .changeset/add-gpt-5-4.md | 5 +++++ packages/core/src/known-models/index.ts | 7 +++++++ packages/core/src/known-models/model-tiers.test.ts | 4 ++-- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 .changeset/add-gpt-5-4.md diff --git a/.changeset/add-gpt-5-4.md b/.changeset/add-gpt-5-4.md new file mode 100644 index 00000000..c57918ac --- /dev/null +++ b/.changeset/add-gpt-5-4.md @@ -0,0 +1,5 @@ +--- +"perstack": patch +--- + +feat: add GPT-5.4 to known models for openai provider diff --git a/packages/core/src/known-models/index.ts b/packages/core/src/known-models/index.ts index 7af934df..4d4d31d2 100644 --- a/packages/core/src/known-models/index.ts +++ b/packages/core/src/known-models/index.ts @@ -110,6 +110,13 @@ export const knownModels = [ { provider: "openai", models: [ + // https://developers.openai.com/api/docs/models/gpt-5.4 + { + name: "gpt-5.4", + tier: "high" as const, + contextWindow: 1_050_000, + maxOutputTokens: 128_000, + }, // https://platform.openai.com/docs/models/gpt-5.2-pro { name: "gpt-5.2-pro", diff --git a/packages/core/src/known-models/model-tiers.test.ts b/packages/core/src/known-models/model-tiers.test.ts index b6d0f9ec..c1b78b9c 100644 --- a/packages/core/src/known-models/model-tiers.test.ts +++ b/packages/core/src/known-models/model-tiers.test.ts @@ -27,7 +27,7 @@ describe("@perstack/core: resolveModelTier", () => { it("resolves openai tiers", () => { expect(resolveModelTier("openai", "low")).toBe("gpt-5-nano") expect(resolveModelTier("openai", "middle")).toBe("gpt-5-mini") - expect(resolveModelTier("openai", "high")).toBe("gpt-5.2-pro") + expect(resolveModelTier("openai", "high")).toBe("gpt-5.4") }) it("resolves google tiers", () => { @@ -48,7 +48,7 @@ describe("@perstack/core: resolveModelTier", () => { }) it("falls back to base provider for cloud-hosted providers", () => { - expect(resolveModelTier("azure-openai", "high")).toBe("gpt-5.2-pro") + expect(resolveModelTier("azure-openai", "high")).toBe("gpt-5.4") expect(resolveModelTier("azure-openai", "middle")).toBe("gpt-5-mini") expect(resolveModelTier("azure-openai", "low")).toBe("gpt-5-nano") expect(resolveModelTier("amazon-bedrock", "high")).toBe("claude-opus-4-6") From b9f98dae9dd4b1ca737bf34a39882146c8d231b7 Mon Sep 17 00:00:00 2001 From: HiranoMasaaki Date: Sun, 15 Mar 2026 16:23:43 +0900 Subject: [PATCH 2/4] feat: add GPT-5.4 Pro to known models for openai provider - 1.05M context window, 128k max output, high tier - Enhanced reasoning variant of GPT-5.4 Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/core/src/known-models/index.ts | 7 +++++++ packages/core/src/known-models/model-tiers.test.ts | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/core/src/known-models/index.ts b/packages/core/src/known-models/index.ts index 4d4d31d2..2001427e 100644 --- a/packages/core/src/known-models/index.ts +++ b/packages/core/src/known-models/index.ts @@ -110,6 +110,13 @@ export const knownModels = [ { provider: "openai", models: [ + // https://developers.openai.com/api/docs/models/gpt-5.4-pro + { + name: "gpt-5.4-pro", + tier: "high" as const, + contextWindow: 1_050_000, + maxOutputTokens: 128_000, + }, // https://developers.openai.com/api/docs/models/gpt-5.4 { name: "gpt-5.4", diff --git a/packages/core/src/known-models/model-tiers.test.ts b/packages/core/src/known-models/model-tiers.test.ts index c1b78b9c..c04d223f 100644 --- a/packages/core/src/known-models/model-tiers.test.ts +++ b/packages/core/src/known-models/model-tiers.test.ts @@ -27,7 +27,7 @@ describe("@perstack/core: resolveModelTier", () => { it("resolves openai tiers", () => { expect(resolveModelTier("openai", "low")).toBe("gpt-5-nano") expect(resolveModelTier("openai", "middle")).toBe("gpt-5-mini") - expect(resolveModelTier("openai", "high")).toBe("gpt-5.4") + expect(resolveModelTier("openai", "high")).toBe("gpt-5.4-pro") }) it("resolves google tiers", () => { @@ -48,7 +48,7 @@ describe("@perstack/core: resolveModelTier", () => { }) it("falls back to base provider for cloud-hosted providers", () => { - expect(resolveModelTier("azure-openai", "high")).toBe("gpt-5.4") + expect(resolveModelTier("azure-openai", "high")).toBe("gpt-5.4-pro") expect(resolveModelTier("azure-openai", "middle")).toBe("gpt-5-mini") expect(resolveModelTier("azure-openai", "low")).toBe("gpt-5-nano") expect(resolveModelTier("amazon-bedrock", "high")).toBe("claude-opus-4-6") From 1aa2cf56fb1fd34dca45606f2ce032dd0a46fa07 Mon Sep 17 00:00:00 2001 From: HiranoMasaaki Date: Sun, 15 Mar 2026 16:25:31 +0900 Subject: [PATCH 3/4] revert: remove gpt-5.4-pro (structured outputs not supported) Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/core/src/known-models/index.ts | 7 ------- packages/core/src/known-models/model-tiers.test.ts | 4 ++-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/core/src/known-models/index.ts b/packages/core/src/known-models/index.ts index 2001427e..4d4d31d2 100644 --- a/packages/core/src/known-models/index.ts +++ b/packages/core/src/known-models/index.ts @@ -110,13 +110,6 @@ export const knownModels = [ { provider: "openai", models: [ - // https://developers.openai.com/api/docs/models/gpt-5.4-pro - { - name: "gpt-5.4-pro", - tier: "high" as const, - contextWindow: 1_050_000, - maxOutputTokens: 128_000, - }, // https://developers.openai.com/api/docs/models/gpt-5.4 { name: "gpt-5.4", diff --git a/packages/core/src/known-models/model-tiers.test.ts b/packages/core/src/known-models/model-tiers.test.ts index c04d223f..c1b78b9c 100644 --- a/packages/core/src/known-models/model-tiers.test.ts +++ b/packages/core/src/known-models/model-tiers.test.ts @@ -27,7 +27,7 @@ describe("@perstack/core: resolveModelTier", () => { it("resolves openai tiers", () => { expect(resolveModelTier("openai", "low")).toBe("gpt-5-nano") expect(resolveModelTier("openai", "middle")).toBe("gpt-5-mini") - expect(resolveModelTier("openai", "high")).toBe("gpt-5.4-pro") + expect(resolveModelTier("openai", "high")).toBe("gpt-5.4") }) it("resolves google tiers", () => { @@ -48,7 +48,7 @@ describe("@perstack/core: resolveModelTier", () => { }) it("falls back to base provider for cloud-hosted providers", () => { - expect(resolveModelTier("azure-openai", "high")).toBe("gpt-5.4-pro") + expect(resolveModelTier("azure-openai", "high")).toBe("gpt-5.4") expect(resolveModelTier("azure-openai", "middle")).toBe("gpt-5-mini") expect(resolveModelTier("azure-openai", "low")).toBe("gpt-5-nano") expect(resolveModelTier("amazon-bedrock", "high")).toBe("claude-opus-4-6") From 9e3e60272cd726f426dea5567c9308ec93e5632a Mon Sep 17 00:00:00 2001 From: HiranoMasaaki Date: Sun, 15 Mar 2026 16:27:25 +0900 Subject: [PATCH 4/4] feat: add Gemini 3.1 Pro Preview and Gemini 3.1 Flash Lite Preview to known models Co-Authored-By: Claude Opus 4.6 (1M context) --- .changeset/add-gpt-5-4.md | 2 +- packages/core/src/known-models/index.ts | 14 ++++++++++++++ packages/core/src/known-models/model-tiers.test.ts | 8 ++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/.changeset/add-gpt-5-4.md b/.changeset/add-gpt-5-4.md index c57918ac..b38a81e9 100644 --- a/.changeset/add-gpt-5-4.md +++ b/.changeset/add-gpt-5-4.md @@ -2,4 +2,4 @@ "perstack": patch --- -feat: add GPT-5.4 to known models for openai provider +feat: add GPT-5.4, Gemini 3.1 Pro Preview, and Gemini 3.1 Flash Lite Preview to known models diff --git a/packages/core/src/known-models/index.ts b/packages/core/src/known-models/index.ts index 4d4d31d2..e0f9ee92 100644 --- a/packages/core/src/known-models/index.ts +++ b/packages/core/src/known-models/index.ts @@ -70,6 +70,13 @@ export const knownModels = [ { provider: "google", models: [ + // https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview + { + name: "gemini-3.1-pro-preview", + tier: "high" as const, + contextWindow: 1_048_576, + maxOutputTokens: 65_536, + }, // https://ai.google.dev/gemini-api/docs/models#gemini-3-flash { name: "gemini-3-flash-preview", @@ -98,6 +105,13 @@ export const knownModels = [ contextWindow: 1_048_576, maxOutputTokens: 65_536, }, + // https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-preview + { + name: "gemini-3.1-flash-lite-preview", + tier: "low" as const, + contextWindow: 1_048_576, + maxOutputTokens: 65_536, + }, // https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-lite { name: "gemini-2.5-flash-lite", diff --git a/packages/core/src/known-models/model-tiers.test.ts b/packages/core/src/known-models/model-tiers.test.ts index c1b78b9c..2b765c76 100644 --- a/packages/core/src/known-models/model-tiers.test.ts +++ b/packages/core/src/known-models/model-tiers.test.ts @@ -31,9 +31,9 @@ describe("@perstack/core: resolveModelTier", () => { }) it("resolves google tiers", () => { - expect(resolveModelTier("google", "low")).toBe("gemini-2.5-flash-lite") + expect(resolveModelTier("google", "low")).toBe("gemini-3.1-flash-lite-preview") expect(resolveModelTier("google", "middle")).toBe("gemini-3-flash-preview") - expect(resolveModelTier("google", "high")).toBe("gemini-3-pro-preview") + expect(resolveModelTier("google", "high")).toBe("gemini-3.1-pro-preview") }) it("resolves deepseek tiers", () => { @@ -53,8 +53,8 @@ describe("@perstack/core: resolveModelTier", () => { expect(resolveModelTier("azure-openai", "low")).toBe("gpt-5-nano") expect(resolveModelTier("amazon-bedrock", "high")).toBe("claude-opus-4-6") expect(resolveModelTier("amazon-bedrock", "low")).toBe("claude-haiku-4-5") - expect(resolveModelTier("google-vertex", "high")).toBe("gemini-3-pro-preview") - expect(resolveModelTier("google-vertex", "low")).toBe("gemini-2.5-flash-lite") + expect(resolveModelTier("google-vertex", "high")).toBe("gemini-3.1-pro-preview") + expect(resolveModelTier("google-vertex", "low")).toBe("gemini-3.1-flash-lite-preview") }) it("returns undefined for provider with no matching tier", () => {