diff --git a/.changeset/add-gpt-5-4.md b/.changeset/add-gpt-5-4.md new file mode 100644 index 00000000..b38a81e9 --- /dev/null +++ b/.changeset/add-gpt-5-4.md @@ -0,0 +1,5 @@ +--- +"perstack": patch +--- + +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 7af934df..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", @@ -110,6 +124,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..2b765c76 100644 --- a/packages/core/src/known-models/model-tiers.test.ts +++ b/packages/core/src/known-models/model-tiers.test.ts @@ -27,13 +27,13 @@ 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", () => { - 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", () => { @@ -48,13 +48,13 @@ 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") 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", () => {