Compare commits

...
Author SHA1 Message Date
Aiden Cline c335873950 fix(provider): omit deprecated Gemini sampling defaults 2026-07-26 04:31:39 +00:00
2 changed files with 32 additions and 3 deletions
+6 -3
View File
@@ -516,12 +516,14 @@ export function message(msgs: ModelMessage[], model: Provider.Model, options: Re
return msgs
}
const GEMINI_OMITS_SAMPLING = /gemini-(?:3[.-](?:5-flash-lite|(?:[6-9]|\d{2,}))|(?:[4-9]|\d{2,}))(?:[.-]|$)/
export function temperature(model: Provider.Model) {
const id = model.id.toLowerCase()
if (id.includes("north-mini-code")) return 1.0
if (id.includes("qwen")) return 0.55
if (id.includes("claude")) return undefined
if (id.includes("gemini")) return 1.0
if (id.includes("gemini")) return GEMINI_OMITS_SAMPLING.test(id) ? undefined : 1.0
if (id.includes("glm-4.6")) return 1.0
if (id.includes("glm-4.7")) return 1.0
if (id.includes("minimax-m2")) return 1.0
@@ -538,7 +540,8 @@ export function temperature(model: Provider.Model) {
export function topP(model: Provider.Model) {
const id = model.id.toLowerCase()
if (id.includes("qwen")) return 1
if (["minimax-m2", "gemini", "kimi-k2.5", "kimi-k2p5", "kimi-k2-5"].some((s) => id.includes(s))) {
if (id.includes("gemini")) return GEMINI_OMITS_SAMPLING.test(id) ? undefined : 0.95
if (["minimax-m2", "kimi-k2.5", "kimi-k2p5", "kimi-k2-5"].some((s) => id.includes(s))) {
return 0.95
}
return undefined
@@ -550,7 +553,7 @@ export function topK(model: Provider.Model) {
if (["m2.", "m25", "m21"].some((s) => id.includes(s))) return 40
return 20
}
if (id.includes("gemini")) return 64
if (id.includes("gemini")) return GEMINI_OMITS_SAMPLING.test(id) ? undefined : 64
return undefined
}
@@ -3190,6 +3190,32 @@ describe("ProviderTransform.temperature - Cohere North", () => {
})
})
describe("ProviderTransform sampling defaults - Gemini", () => {
const model = (id: string) =>
({
id: `google/${id}`,
api: { id },
}) as any
test.each(["gemini-3.5-flash-lite", "gemini-3.6-flash", "gemini-4-pro"])(
"omits deprecated sampling controls for %s",
(id) => {
expect(ProviderTransform.temperature(model(id))).toBeUndefined()
expect(ProviderTransform.topP(model(id))).toBeUndefined()
expect(ProviderTransform.topK(model(id))).toBeUndefined()
},
)
test.each(["gemini-2.5-flash", "gemini-3.1-flash-lite", "gemini-3.5-flash"])(
"preserves sampling defaults for %s",
(id) => {
expect(ProviderTransform.temperature(model(id))).toBe(1)
expect(ProviderTransform.topP(model(id))).toBe(0.95)
expect(ProviderTransform.topK(model(id))).toBe(64)
},
)
})
describe("ProviderTransform.reasoningVariants", () => {
const model = (reasoning_options: ModelsDev.Model["reasoning_options"]) => ({ reasoning_options }) as ModelsDev.Model
const target = (npm: string, id = "test-model") =>