From c437ddf7027282febe93af74d99fe3eaeab6aaaf Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Sat, 22 Aug 2026 00:42:43 +0800 Subject: [PATCH 1/3] feat(models): add Gemini 3.5 Flash Lite and 3.1 Flash Lite to Gemini API provider Adds the two new stable Flash Lite models so users can select them directly instead of relying on gemini-flash-lite-latest (#1251). Model ids, limits and pricing verified against the official Gemini API docs and the OpenRouter catalog. --- .../types/src/__tests__/google-models.test.ts | 31 +++++++++++++++++++ packages/types/src/providers/gemini.ts | 28 +++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/packages/types/src/__tests__/google-models.test.ts b/packages/types/src/__tests__/google-models.test.ts index 674fb5d83c..166ae66c3e 100644 --- a/packages/types/src/__tests__/google-models.test.ts +++ b/packages/types/src/__tests__/google-models.test.ts @@ -10,3 +10,34 @@ describe.each([ expect(model.cacheWritesPrice).toBe(0.5) }) }) + +describe.each([ + ["gemini-3.5-flash-lite", geminiModels["gemini-3.5-flash-lite"]], + ["gemini-3.1-flash-lite", geminiModels["gemini-3.1-flash-lite"]], +])("Gemini 3.x Flash Lite model %s", (_modelId, model) => { + it("is registered with the documented limits and multimodal support", () => { + expect(model.maxTokens).toBe(65_536) + expect(model.contextWindow).toBe(1_048_576) + expect(model.supportsImages).toBe(true) + expect(model.supportsPromptCache).toBe(true) + expect(model.supportsReasoningBudget).toBe(false) + }) +}) + +it("exposes the documented thinking levels and pricing for Gemini 3.5 Flash Lite", () => { + const model = geminiModels["gemini-3.5-flash-lite"] + expect(model.supportsReasoningEffort).toEqual(["minimal", "low", "medium", "high"]) + expect(model.inputPrice).toBe(0.3) + expect(model.outputPrice).toBe(2.5) + expect(model.cacheReadsPrice).toBe(0.03) + expect(model.cacheWritesPrice).toBe(1.0) +}) + +it("exposes the documented thinking levels and pricing for Gemini 3.1 Flash Lite", () => { + const model = geminiModels["gemini-3.1-flash-lite"] + expect(model.supportsReasoningEffort).toEqual(["low", "medium", "high"]) + expect(model.inputPrice).toBe(0.25) + expect(model.outputPrice).toBe(1.5) + expect(model.cacheReadsPrice).toBe(0.025) + expect(model.cacheWritesPrice).toBe(1.0) +}) diff --git a/packages/types/src/providers/gemini.ts b/packages/types/src/providers/gemini.ts index d3051a8229..7b6f0b43b8 100644 --- a/packages/types/src/providers/gemini.ts +++ b/packages/types/src/providers/gemini.ts @@ -145,6 +145,34 @@ export const geminiModels = { outputPrice: 3.0, cacheReadsPrice: 0.05, }, + // 3.x Flash Lite models + "gemini-3.5-flash-lite": { + maxTokens: 65_536, + contextWindow: 1_048_576, + supportsImages: true, + supportsPromptCache: true, + supportsReasoningEffort: ["minimal", "low", "medium", "high"], + reasoningEffort: "medium", + inputPrice: 0.3, + outputPrice: 2.5, + cacheReadsPrice: 0.03, + cacheWritesPrice: 1.0, + supportsReasoningBudget: false, + }, + "gemini-3.1-flash-lite": { + maxTokens: 65_536, + contextWindow: 1_048_576, + supportsImages: true, + supportsPromptCache: true, + supportsReasoningEffort: ["low", "medium", "high"], + reasoningEffort: "medium", + inputPrice: 0.25, + outputPrice: 1.5, + cacheReadsPrice: 0.025, + cacheWritesPrice: 1.0, + supportsReasoningBudget: false, + }, + // 2.5 Pro models "gemini-2.5-pro": { maxTokens: 64_000, From e63c4327ab224d21e835c7b3713f901ec9df2ac3 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Sat, 22 Aug 2026 02:24:23 +0800 Subject: [PATCH 2/3] fix(models): support minimal thinking level for Gemini 3.1 Flash Lite The official model docs list minimal, low, medium, and high thinking levels for gemini-3.1-flash-lite; add the missing minimal level (CodeRabbit review on #1334). --- packages/types/src/__tests__/google-models.test.ts | 4 +++- packages/types/src/providers/gemini.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/types/src/__tests__/google-models.test.ts b/packages/types/src/__tests__/google-models.test.ts index 166ae66c3e..64eb9aebd9 100644 --- a/packages/types/src/__tests__/google-models.test.ts +++ b/packages/types/src/__tests__/google-models.test.ts @@ -35,7 +35,9 @@ it("exposes the documented thinking levels and pricing for Gemini 3.5 Flash Lite it("exposes the documented thinking levels and pricing for Gemini 3.1 Flash Lite", () => { const model = geminiModels["gemini-3.1-flash-lite"] - expect(model.supportsReasoningEffort).toEqual(["low", "medium", "high"]) + // https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/gemini/3-1-flash-lite + // "choosing from minimal, low, medium, or high thinking levels" + expect(model.supportsReasoningEffort).toEqual(["minimal", "low", "medium", "high"]) expect(model.inputPrice).toBe(0.25) expect(model.outputPrice).toBe(1.5) expect(model.cacheReadsPrice).toBe(0.025) diff --git a/packages/types/src/providers/gemini.ts b/packages/types/src/providers/gemini.ts index 7b6f0b43b8..4ab8b6358a 100644 --- a/packages/types/src/providers/gemini.ts +++ b/packages/types/src/providers/gemini.ts @@ -164,7 +164,7 @@ export const geminiModels = { contextWindow: 1_048_576, supportsImages: true, supportsPromptCache: true, - supportsReasoningEffort: ["low", "medium", "high"], + supportsReasoningEffort: ["minimal", "low", "medium", "high"], reasoningEffort: "medium", inputPrice: 0.25, outputPrice: 1.5, From 401c56f1be695c7dd20d12006d86f8e409ebe05f Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Sat, 22 Aug 2026 03:58:58 +0800 Subject: [PATCH 3/3] fix(models): default Flash Lite reasoning effort to minimal The documented API defaults are On (minimal) for gemini-3.5-flash-lite and minimal is the lowest supported level for gemini-3.1-flash-lite; defaulting to medium would raise unset users above the cheap tier. Addressed via CodeRabbit review on #1334. --- packages/types/src/__tests__/google-models.test.ts | 5 +++++ packages/types/src/providers/gemini.ts | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/types/src/__tests__/google-models.test.ts b/packages/types/src/__tests__/google-models.test.ts index 64eb9aebd9..80ee7c98ce 100644 --- a/packages/types/src/__tests__/google-models.test.ts +++ b/packages/types/src/__tests__/google-models.test.ts @@ -27,6 +27,9 @@ describe.each([ it("exposes the documented thinking levels and pricing for Gemini 3.5 Flash Lite", () => { const model = geminiModels["gemini-3.5-flash-lite"] expect(model.supportsReasoningEffort).toEqual(["minimal", "low", "medium", "high"]) + // The documented API default is On (minimal): + // https://ai.google.dev/gemini-api/docs/thinking + expect(model.reasoningEffort).toBe("minimal") expect(model.inputPrice).toBe(0.3) expect(model.outputPrice).toBe(2.5) expect(model.cacheReadsPrice).toBe(0.03) @@ -38,6 +41,8 @@ it("exposes the documented thinking levels and pricing for Gemini 3.1 Flash Lite // https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/gemini/3-1-flash-lite // "choosing from minimal, low, medium, or high thinking levels" expect(model.supportsReasoningEffort).toEqual(["minimal", "low", "medium", "high"]) + // Lowest supported level, matching the cheap/free Flash Lite tier. + expect(model.reasoningEffort).toBe("minimal") expect(model.inputPrice).toBe(0.25) expect(model.outputPrice).toBe(1.5) expect(model.cacheReadsPrice).toBe(0.025) diff --git a/packages/types/src/providers/gemini.ts b/packages/types/src/providers/gemini.ts index 4ab8b6358a..b65f842a59 100644 --- a/packages/types/src/providers/gemini.ts +++ b/packages/types/src/providers/gemini.ts @@ -152,7 +152,8 @@ export const geminiModels = { supportsImages: true, supportsPromptCache: true, supportsReasoningEffort: ["minimal", "low", "medium", "high"], - reasoningEffort: "medium", + // Matches the documented API default thinking level (On (minimal)). + reasoningEffort: "minimal", inputPrice: 0.3, outputPrice: 2.5, cacheReadsPrice: 0.03, @@ -165,7 +166,9 @@ export const geminiModels = { supportsImages: true, supportsPromptCache: true, supportsReasoningEffort: ["minimal", "low", "medium", "high"], - reasoningEffort: "medium", + // Lowest level of the supported set: keeps the cheap/free tier's + // default latency and cost in line with the Flash Lite tier. + reasoningEffort: "minimal", inputPrice: 0.25, outputPrice: 1.5, cacheReadsPrice: 0.025,