diff --git a/litellm/llms/vertex_ai/gemini/vertex_and_google_ai_studio_gemini.py b/litellm/llms/vertex_ai/gemini/vertex_and_google_ai_studio_gemini.py index d8b1e7ba17c..0593cbe6f36 100644 --- a/litellm/llms/vertex_ai/gemini/vertex_and_google_ai_studio_gemini.py +++ b/litellm/llms/vertex_ai/gemini/vertex_and_google_ai_studio_gemini.py @@ -309,8 +309,6 @@ class VertexGeminiConfig(VertexAIBaseConfig, BaseConfig): "stop", "extra_headers", "seed", - "logprobs", - "top_logprobs", "modalities", "audio", "parallel_tool_calls", @@ -323,6 +321,10 @@ class VertexGeminiConfig(VertexAIBaseConfig, BaseConfig): if self._supports_penalty_parameters(model): supported_params.extend(["frequency_penalty", "presence_penalty"]) + # Gemini 3+ models do not support logprobs on Vertex AI + if not VertexGeminiConfig._is_gemini_3_or_newer(model): + supported_params.extend(["logprobs", "top_logprobs"]) + if supports_reasoning(model): supported_params.append("reasoning_effort") supported_params.append("thinking") diff --git a/tests/test_litellm/llms/vertex_ai/gemini/test_vertex_and_google_ai_studio_gemini.py b/tests/test_litellm/llms/vertex_ai/gemini/test_vertex_and_google_ai_studio_gemini.py index bd07bec900f..b7b7379b99d 100644 --- a/tests/test_litellm/llms/vertex_ai/gemini/test_vertex_and_google_ai_studio_gemini.py +++ b/tests/test_litellm/llms/vertex_ai/gemini/test_vertex_and_google_ai_studio_gemini.py @@ -5568,6 +5568,23 @@ class TestModelResponseIteratorCleanup: mock_response.aclose.assert_awaited_once() +@pytest.mark.parametrize( + "model, expect_logprobs", + [ + ("gemini-2.5-flash", True), + ("gemini-2.5-pro", True), + ("gemini-3.5-flash", False), + ("gemini-3-pro-preview", False), + ("gemini-3.1-flash", False), + ], +) +def test_logprobs_not_advertised_for_gemini_3(model, expect_logprobs): + """Gemini 3+ does not support logprobs on Vertex AI (#31600).""" + params = VertexGeminiConfig().get_supported_openai_params(model) + assert ("logprobs" in params) is expect_logprobs + assert ("top_logprobs" in params) is expect_logprobs + + def test_process_candidates_merges_thought_signatures_and_server_side_tools(): """ thought_signatures and server_side_tool_invocations must both survive in