diff --git a/src/google/adk/models/lite_llm.py b/src/google/adk/models/lite_llm.py index d968f56e..1a65727f 100644 --- a/src/google/adk/models/lite_llm.py +++ b/src/google/adk/models/lite_llm.py @@ -497,6 +497,8 @@ def _part_has_payload(part: types.Part) -> bool: return True if part.file_data and (part.file_data.file_uri or part.file_data.data): return True + if part.function_response: + return True return False diff --git a/tests/unittests/models/test_litellm.py b/tests/unittests/models/test_litellm.py index 3dad4045..e50b2cf7 100644 --- a/tests/unittests/models/test_litellm.py +++ b/tests/unittests/models/test_litellm.py @@ -24,6 +24,7 @@ from unittest.mock import AsyncMock from unittest.mock import Mock import warnings +from google.adk.models.lite_llm import _append_fallback_user_content_if_missing from google.adk.models.lite_llm import _content_to_message_param from google.adk.models.lite_llm import _FILE_ID_REQUIRED_PROVIDERS from google.adk.models.lite_llm import _FINISH_REASON_MAPPING @@ -990,6 +991,28 @@ async def test_generate_content_async_adds_fallback_user_message( ) +def test_append_fallback_user_content_ignores_function_response_parts(): + llm_request = LlmRequest( + contents=[ + types.Content( + role="user", + parts=[ + types.Part.from_function_response( + name="add", response={"result": 6} + ) + ], + ) + ] + ) + + _append_fallback_user_content_if_missing(llm_request) + + assert len(llm_request.contents) == 1 + assert len(llm_request.contents[0].parts) == 1 + assert llm_request.contents[0].parts[0].function_response is not None + assert llm_request.contents[0].parts[0].text is None + + litellm_append_user_content_test_cases = [ pytest.param( LlmRequest(