@@ -463,15 +463,16 @@ T["Gemini adapter"]["No Streaming"]["can output for the inline assistant"] = fun
463463 h .expect_starts_with (" Elegant, dynamic." , adapter .handlers .inline_output (adapter , json ).output )
464464end
465465
466- T [" Gemini adapter" ][" form_parameters sets thinkingConfig as object for reasoning models" ] = function ()
467- local levels = {
466+ T [" Gemini adapter" ][" form_parameters maps thinkingLevel to thinkingBudget for Gemini 2.5 Flash" ] = function ()
467+ adapter .schema .model .default = " gemini-2.5-flash"
468+ local cases = {
468469 { level = " none" , budget = 0 },
469470 { level = " low" , budget = 1024 },
470471 { level = " medium" , budget = 8192 },
471472 { level = " high" , budget = 24576 },
472473 }
473474
474- for _ , tc in ipairs (levels ) do
475+ for _ , tc in ipairs (cases ) do
475476 adapter .temp = { thinkingLevel = tc .level }
476477 local params = adapter .handlers .form_parameters (adapter , {}, {})
477478 h .eq (
@@ -482,6 +483,45 @@ T["Gemini adapter"]["form_parameters sets thinkingConfig as object for reasoning
482483 end
483484end
484485
486+ T [" Gemini adapter" ][" form_parameters refuses to disable thinking on Gemini 2.5 Pro" ] = function ()
487+ adapter .schema .model .default = " gemini-2.5-pro"
488+ adapter .temp = { thinkingLevel = " none" }
489+ local params = adapter .handlers .form_parameters (adapter , {}, {})
490+ -- 2.5 Pro cannot disable thinking; the field must be omitted entirely.
491+ h .eq (nil , params .generationConfig )
492+
493+ adapter .temp = { thinkingLevel = " high" }
494+ params = adapter .handlers .form_parameters (adapter , {}, {})
495+ h .eq ({ thinkingBudget = 24576 }, params .generationConfig .thinkingConfig )
496+ end
497+
498+ T [" Gemini adapter" ][" form_parameters maps thinkingLevel for Gemini 3.x reasoning models" ] = function ()
499+ adapter .schema .model .default = " gemini-3.1-pro-preview"
500+ local cases = {
501+ { level = " high" , expected = " high" },
502+ { level = " medium" , expected = " high" },
503+ { level = " low" , expected = " low" },
504+ }
505+
506+ for _ , tc in ipairs (cases ) do
507+ adapter .temp = { thinkingLevel = tc .level }
508+ local params = adapter .handlers .form_parameters (adapter , {}, {})
509+ h .eq (
510+ { thinkingLevel = tc .expected },
511+ params .generationConfig .thinkingConfig ,
512+ string.format (" thinkingLevel '%s' should map to '%s'" , tc .level , tc .expected )
513+ )
514+ end
515+ end
516+
517+ T [" Gemini adapter" ][" form_parameters omits thinkingConfig when disabling on Gemini 3.x" ] = function ()
518+ adapter .schema .model .default = " gemini-3.1-pro-preview"
519+ adapter .temp = { thinkingLevel = " none" }
520+ -- Gemini 3.x does not support disabling thinking; the field is omitted.
521+ local params = adapter .handlers .form_parameters (adapter , {}, {})
522+ h .eq (nil , params .generationConfig )
523+ end
524+
485525T [" Gemini adapter" ][" form_parameters does not set thinkingConfig when thinkingLevel is absent" ] = function ()
486526 adapter .temp = {}
487527 local params = adapter .handlers .form_parameters (adapter , {}, {})
0 commit comments