fix: map empty Gemini tool-call arguments to {} instead of {"type":"object"}

Rebase onto latest upstream main. Fold the missing-key / non-empty
regression cases into the mapped test file (per AGENTS.md) and drop the
standalone test_gemini_empty_arguments.py.

See #43156

Signed-off-by: ding <2756823972@qq.com>
This commit is contained in:
apex-mochen 2026-09-27 02:06:43 +08:00
parent d18fcb09d6
commit bd92a0fded
2 changed files with 28 additions and 6 deletions

View file

@ -1141,9 +1141,7 @@ def _gemini_tool_call_invoke_helper(
if (
isinstance(arguments, str) and len(arguments) == 0
): # pass empty dict, if arguments is empty string - prevents call from failing
arguments_dict = {
"type": "object",
}
arguments_dict = {}
else:
arguments_dict = json.loads(arguments)
function_call: Final = VertexFunctionCall(

View file

@ -607,9 +607,33 @@ def test_vertex_ai_transform_empty_function_call_arguments():
}
result: VertexFunctionCall = _gemini_tool_call_invoke_helper(function_call)
print(result)
assert result["args"] == {
"type": "object",
}
assert result["args"] == {}
def test_gemini_missing_arguments_maps_to_empty_object():
"""When `arguments` key is absent, the helper should yield an empty object (see #43156)."""
from litellm.litellm_core_utils.prompt_templates.factory import (
VertexFunctionCall,
_gemini_tool_call_invoke_helper,
)
result: VertexFunctionCall = _gemini_tool_call_invoke_helper(
{"name": "no_args"}
)
assert result["args"] == {}
def test_gemini_nonempty_arguments_is_parsed():
"""Non-empty arguments string should still be JSON-decoded as before."""
from litellm.litellm_core_utils.prompt_templates.factory import (
VertexFunctionCall,
_gemini_tool_call_invoke_helper,
)
result: VertexFunctionCall = _gemini_tool_call_invoke_helper(
{"name": "get", "arguments": '{"x": 1}'}
)
assert result["args"] == {"x": 1}
@pytest.mark.asyncio