From 49078b3c6b854c5428b2dfd8e1aa4eba5d554cde Mon Sep 17 00:00:00 2001 From: Rahul Dhanawade Date: Wed, 11 Feb 2026 23:57:09 +0530 Subject: [PATCH] Fix #20557: Fix Gemini multi-turn tool calling message formatting (#20569) - Add missing 'role' field to tool result ContentType objects - Tool result messages must have role='user' to match Gemini API requirements - Fixes 'contents[2].parts[0].data: required oneof field data' error on second turn - Prevents uninitialized data field in tool result messages --- litellm/llms/vertex_ai/gemini/transformation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/llms/vertex_ai/gemini/transformation.py b/litellm/llms/vertex_ai/gemini/transformation.py index 00b461dcda..e595d8e616 100644 --- a/litellm/llms/vertex_ai/gemini/transformation.py +++ b/litellm/llms/vertex_ai/gemini/transformation.py @@ -500,7 +500,7 @@ def _gemini_convert_messages_with_history( # noqa: PLR0915 messages[msg_i]["role"] not in tool_call_message_roles ): if len(tool_call_responses) > 0: - contents.append(ContentType(parts=tool_call_responses)) + contents.append(ContentType(role="user", parts=tool_call_responses)) tool_call_responses = [] if msg_i == init_msg_i: # prevent infinite loops @@ -510,7 +510,7 @@ def _gemini_convert_messages_with_history( # noqa: PLR0915 ) ) if len(tool_call_responses) > 0: - contents.append(ContentType(parts=tool_call_responses)) + contents.append(ContentType(role="user", parts=tool_call_responses)) if len(contents) == 0: verbose_logger.warning(