diff --git a/homeassistant/components/google_generative_ai_conversation/__init__.py b/homeassistant/components/google_generative_ai_conversation/__init__.py index 89fba79fced4b..d1b8467955a88 100644 --- a/homeassistant/components/google_generative_ai_conversation/__init__.py +++ b/homeassistant/components/google_generative_ai_conversation/__init__.py @@ -73,6 +73,9 @@ async def generate_content(call: ServiceCall) -> ServiceResponse: ) as err: raise HomeAssistantError(f"Error generating content: {err}") from err + if not response.parts: + raise HomeAssistantError("Error generating content") + return {"text": response.text} hass.services.async_register( diff --git a/tests/components/google_generative_ai_conversation/test_init.py b/tests/components/google_generative_ai_conversation/test_init.py index daae858259446..7dfa8bebfa5ef 100644 --- a/tests/components/google_generative_ai_conversation/test_init.py +++ b/tests/components/google_generative_ai_conversation/test_init.py @@ -110,6 +110,30 @@ async def test_generate_content_service_error( ) +@pytest.mark.usefixtures("mock_init_component") +async def test_generate_content_response_has_empty_parts( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, +) -> None: + """Test generate content service handles response with empty parts.""" + with ( + patch("google.generativeai.GenerativeModel") as mock_model, + pytest.raises(HomeAssistantError, match="Error generating content"), + ): + mock_response = MagicMock() + mock_response.parts = [] + mock_model.return_value.generate_content_async = AsyncMock( + return_value=mock_response + ) + await hass.services.async_call( + "google_generative_ai_conversation", + "generate_content", + {"prompt": "write a story about an epic fail"}, + blocking=True, + return_response=True, + ) + + async def test_generate_content_service_with_image_not_allowed_path( hass: HomeAssistant, mock_config_entry: MockConfigEntry,