fix(gemini): map Gemini 3.7 Flash minimum thinking to low

This commit is contained in:
Sunner Sun 2026-09-01 19:16:24 +08:00
parent ec3f8183c3
commit 17cd787414
2 changed files with 16 additions and 3 deletions

View file

@ -862,9 +862,10 @@ class VertexGeminiConfig(VertexAIBaseConfig, BaseConfig):
# Covers gemini-3-flash, gemini-3-flash-preview, gemini-3.1-flash, gemini-3.1-flash-lite-preview,
# gemini-3.5-flash, and any future 3.x-flash variants.
is_gemini3flash: Final = model and ("flash" in model.lower() and "gemini-3" in model.lower())
is_gemini37flash: Final = model and "gemini-3.7-flash" in model.lower()
is_gemini31pro: Final = model and ("gemini-3.1-pro-preview" in model.lower())
if reasoning_effort == "minimal":
if is_gemini3flash:
if is_gemini3flash and not is_gemini37flash:
return {"thinkingLevel": "minimal", "includeThoughts": True}
else:
return {"thinkingLevel": "low", "includeThoughts": True}
@ -879,13 +880,13 @@ class VertexGeminiConfig(VertexAIBaseConfig, BaseConfig):
return {"thinkingLevel": "high", "includeThoughts": True}
elif reasoning_effort == "disable":
# Gemini 3 cannot fully disable thinking, so we use "minimal" for gemini-3-flash-preview, "low" for others
if is_gemini3flash:
if is_gemini3flash and not is_gemini37flash:
return {"thinkingLevel": "minimal", "includeThoughts": False}
else:
return {"thinkingLevel": "low", "includeThoughts": False}
elif reasoning_effort == "none":
# For gemini-3-flash-preview, use "minimal" instead of "low"
if is_gemini3flash:
if is_gemini3flash and not is_gemini37flash:
return {"thinkingLevel": "minimal", "includeThoughts": False}
else:
return {"thinkingLevel": "low", "includeThoughts": False}

View file

@ -2666,6 +2666,18 @@ def test_reasoning_effort_maps_to_thinking_level_gemini_3():
assert result["thinkingConfig"]["includeThoughts"] is False
@pytest.mark.parametrize("reasoning_effort", ["minimal", "disable", "none"])
def test_gemini_37_flash_uses_low_minimum_thinking_level(reasoning_effort: str):
result = VertexGeminiConfig().map_openai_params(
non_default_params={"reasoning_effort": reasoning_effort},
optional_params={},
model="vertex_ai/gemini-3.7-flash",
drop_params=False,
)
assert result["thinkingConfig"]["thinkingLevel"] == "low"
def test_reasoning_effort_dict_format_gemini_3():
"""
Test that reasoning_effort works when passed as dict format from OpenAI Agents SDK.