-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
As reported in #3217 (comment).
Introduced by #3217 / googleapis/python-genai#1509. The issue is likely that google-genai is closing the client while we're still using it in another Agent/GoogleModel/GoogleProvider instance.
from pydantic_ai import Agent
async def main():
agent = Agent('google-gla:gemini-2.5-flash-lite')
result = await agent.run('What is the capital of France?')
print(result.output)
agent = Agent('google-gla:gemini-2.5-flash-lite')
result = await agent.run('What is the capital of Mexico?')
print(result.output)
if __name__ == '__main__':
import asyncio
asyncio.run(main())The capital of France is **Paris**.
Traceback (most recent call last):
File "/home/DouweM/pydantic-ai/scratch/scratchpads/__globalScratchpads__/scratch24.py", line 17, in <module>
asyncio.run(main())
File "/home/DouweM/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/runners.py", line 195, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/home/DouweM/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/scratch/scratchpads/__globalScratchpads__/scratch24.py", line 10, in main
result = await agent.run('What is the capital of Mexico?')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/pydantic_ai_slim/pydantic_ai/agent/abstract.py", line 235, in run
async for node in agent_run:
File "/home/DouweM/pydantic-ai/pydantic_ai_slim/pydantic_ai/run.py", line 150, in __anext__
next_node = await self._graph_run.__anext__()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/pydantic_graph/pydantic_graph/graph.py", line 758, in __anext__
return await self.next(self._next_node)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/pydantic_graph/pydantic_graph/graph.py", line 731, in next
self._next_node = await node.run(ctx)
^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/pydantic_ai_slim/pydantic_ai/_agent_graph.py", line 416, in run
return await self._make_request(ctx)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/pydantic_ai_slim/pydantic_ai/_agent_graph.py", line 458, in _make_request
model_response = await ctx.deps.model.request(message_history, model_settings, model_request_parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/pydantic_ai_slim/pydantic_ai/models/google.py", line 239, in request
response = await self._generate_content(messages, False, model_settings, model_request_parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/pydantic_ai_slim/pydantic_ai/models/google.py", line 388, in _generate_content
return await func(model=self._model_name, contents=contents, config=config) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/google/genai/models.py", line 6762, in generate_content
response = await self._generate_content(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/google/genai/models.py", line 5597, in _generate_content
response = await self._api_client.async_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/google/genai/_api_client.py", line 1348, in async_request
result = await self._async_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/google/genai/_api_client.py", line 1293, in _async_request
return await self._async_retry( # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 111, in __call__
do = await self.iter(retry_state=retry_state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 153, in iter
result = await action(retry_state)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/tenacity/_utils.py", line 99, in inner
return call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/tenacity/__init__.py", line 418, in exc_check
raise retry_exc.reraise()
^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/tenacity/__init__.py", line 185, in reraise
raise self.last_attempt.result()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 114, in __call__
result = await fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/google/genai/_api_client.py", line 1266, in _async_request_once
client_response = await self._async_httpx_client.request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/DouweM/pydantic-ai/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1616, in send
raise RuntimeError("Cannot send a request, as the client has been closed.")
RuntimeError: Cannot send a request, as the client has been closed.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working