diff --git a/pydantic_ai_slim/pydantic_ai/models/google.py b/pydantic_ai_slim/pydantic_ai/models/google.py index 8411c3b3cf..3dfa2d26f4 100644 --- a/pydantic_ai_slim/pydantic_ai/models/google.py +++ b/pydantic_ai_slim/pydantic_ai/models/google.py @@ -14,7 +14,7 @@ from .._output import OutputObjectDefinition from .._run_context import RunContext from ..builtin_tools import CodeExecutionTool, ImageGenerationTool, UrlContextTool, WebSearchTool -from ..exceptions import UserError +from ..exceptions import ModelHTTPError, UserError from ..messages import ( BinaryContent, BuiltinToolCallPart, @@ -50,7 +50,7 @@ ) try: - from google.genai import Client + from google.genai import Client, errors from google.genai.types import ( BlobDict, CodeExecutionResult, @@ -385,7 +385,12 @@ async def _generate_content( ) -> GenerateContentResponse | Awaitable[AsyncIterator[GenerateContentResponse]]: contents, config = await self._build_content_and_config(messages, model_settings, model_request_parameters) func = self.client.aio.models.generate_content_stream if stream else self.client.aio.models.generate_content - return await func(model=self._model_name, contents=contents, config=config) # type: ignore + try: + return await func(model=self._model_name, contents=contents, config=config) # type: ignore + except errors.APIError as e: + if (status_code := e.code) >= 400: + raise ModelHTTPError(status_code=status_code, model_name=self._model_name, body=e.details) from e + raise # pragma: lax no cover async def _build_content_and_config( self,