From 6d83312d2f6c84732b4a9dce85376d6fdb4ba61c Mon Sep 17 00:00:00 2001 From: mateo Date: Sat, 31 Oct 2026 11:14:39 +0000 Subject: [PATCH] fix(gemini): reject nonnumeric candidate counts for long decode Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- litellm/llms/vertex_ai/gemini/long_decode.py | 4 +++- tests/unit/llms/vertex_ai/gemini/test_long_decode.py | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/litellm/llms/vertex_ai/gemini/long_decode.py b/litellm/llms/vertex_ai/gemini/long_decode.py index 25aae70a853..4c4599e5920 100644 --- a/litellm/llms/vertex_ai/gemini/long_decode.py +++ b/litellm/llms/vertex_ai/gemini/long_decode.py @@ -87,7 +87,9 @@ def _int_or_none(value: object) -> int | None: def _asks_for_one_candidate(generation_config: Mapping[str, object]) -> bool: return all( - _int_or_none(generation_config[key] or 1) == 1 for key in _CANDIDATE_COUNT_KEYS if key in generation_config + generation_config[key] is None or _int_or_none(generation_config[key]) in (0, 1) + for key in _CANDIDATE_COUNT_KEYS + if key in generation_config ) diff --git a/tests/unit/llms/vertex_ai/gemini/test_long_decode.py b/tests/unit/llms/vertex_ai/gemini/test_long_decode.py index 3fe9a5c7a92..83603a351f0 100644 --- a/tests/unit/llms/vertex_ai/gemini/test_long_decode.py +++ b/tests/unit/llms/vertex_ai/gemini/test_long_decode.py @@ -518,7 +518,14 @@ async def test_unary_answer_cut_at_the_callers_cap_is_returned_with_its_token_in @pytest.mark.parametrize( "choice_count_request", - [{"max_tokens": 100_000, "n": 2}, {"extra_body": {"generationConfig": {"candidateCount": 2}}}], + [ + {"max_tokens": 100_000, "n": 2}, + {"extra_body": {"generationConfig": {"candidateCount": 2}}}, + {"max_tokens": 100_000, "n": ""}, + {"max_tokens": 100_000, "n": []}, + {"max_tokens": 100_000, "n": {}}, + {"max_tokens": 100_000, "n": "1"}, + ], ) @pytest.mark.parametrize("is_async", [True, False]) @pytest.mark.asyncio