-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Initial Checks
- I confirm that I'm using the latest version of Pydantic AI
- I confirm that I searched for my issue in https://github.com/pydantic/pydantic-ai/issues before opening this issue
Description
When I run my Prefect Agent with google-gla:gemini-3-pro-preview, it fails with AttributeError: 'GoogleModel' object has no attribute '_url'. It works fine with models from Anthropic and OpenAI. When I use that gemini model with a regular Agent in a Python shell, it also works fine.
Here's the traceback:
22:03:34.463 | ERROR | prefect.engine - Execution of flow run 'bea4e0ee-e4cc-41a1-9fd4-fd7a6030fe9c' exited with unexpected exception
Traceback (most recent call last):
File "/home/user/.venv/lib/python3.13/site-packages/prefect/engine.py", line 57, in handle_engine_signals
yield
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1661, in run_flow_with_env
asyncio.run(maybe_coro)
~~~~~~~~~~~^^^^^^^^^^^^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/asyncio/runners.py", line 195, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1451, in run_flow_async
return engine.state if return_type == "state" else await engine.result()
^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 950, in result
raise self._raised
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1387, in run_context
yield self
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1449, in run_flow_async
await engine.call_flow_fn()
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1401, in call_flow_fn
result = await call_with_parameters(self.flow.fn, self.parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/src/prefect_flows/main.py", line 37, in main_flow
links_result = await find_links(query_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1451, in run_flow_async
return engine.state if return_type == "state" else await engine.result()
^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 950, in result
raise self._raised
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1387, in run_context
yield self
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1449, in run_flow_async
await engine.call_flow_fn()
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1401, in call_flow_fn
result = await call_with_parameters(self.flow.fn, self.parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/src/prefect_flows/find_links.py", line 77, in find_links
result = await prefect_agent.run(
^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/durable_exec/prefect/_agent.py", line 296, in run
return await wrapped_run_flow()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1451, in run_flow_async
return engine.state if return_type == "state" else await engine.result()
^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 950, in result
raise self._raised
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1387, in run_context
yield self
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1449, in run_flow_async
await engine.call_flow_fn()
File "/home/user/.venv/lib/python3.13/site-packages/prefect/flow_engine.py", line 1401, in call_flow_fn
result = await call_with_parameters(self.flow.fn, self.parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/durable_exec/prefect/_agent.py", line 277, in wrapped_run_flow
result = await super(WrapperAgent, self).run(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<13 lines>...
)
^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/agent/abstract.py", line 225, in run
async with self.iter(
~~~~~~~~~^
user_prompt=user_prompt,
^^^^^^^^^^^^^^^^^^^^^^^^
...<10 lines>...
builtin_tools=builtin_tools,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
) as agent_run:
^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 235, in __aexit__
await self.gen.athrow(value)
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/durable_exec/prefect/_agent.py", line 815, in iter
async with super().iter(
~~~~~~~~~~~~^
user_prompt=user_prompt,
^^^^^^^^^^^^^^^^^^^^^^^^
...<10 lines>...
toolsets=toolsets,
^^^^^^^^^^^^^^^^^^
) as run:
^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 235, in __aexit__
await self.gen.athrow(value)
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/agent/wrapper.py", line 205, in iter
async with self.wrapped.iter(
~~~~~~~~~~~~~~~~~^
user_prompt=user_prompt,
^^^^^^^^^^^^^^^^^^^^^^^^
...<11 lines>...
builtin_tools=builtin_tools,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
) as run:
^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 235, in __aexit__
await self.gen.athrow(value)
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/agent/__init__.py", line 649, in iter
async with graph.iter(
~~~~~~~~~~^
inputs=user_prompt_node,
^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
infer_name=False,
^^^^^^^^^^^^^^^^^
) as graph_run:
^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 235, in __aexit__
await self.gen.athrow(value)
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_graph/beta/graph.py", line 270, in iter
async with GraphRun[StateT, DepsT, OutputT](
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
graph=self,
^^^^^^^^^^^
...<3 lines>...
traceparent=traceparent,
^^^^^^^^^^^^^^^^^^^^^^^^
) as graph_run:
^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_graph/beta/graph.py", line 423, in __aexit__
await self._async_exit_stack.__aexit__(exc_type, exc_val, exc_tb)
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 768, in __aexit__
raise exc
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 749, in __aexit__
cb_suppress = cb(*exc_details)
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 162, in __exit__
self.gen.throw(value)
~~~~~~~~~~~~~~^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_graph/beta/graph.py", line 978, in _unwrap_exception_groups
raise exception
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_graph/beta/graph.py", line 750, in _run_tracked_task
result = await self._run_task(t_)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_graph/beta/graph.py", line 779, in _run_task
output = await node.call(step_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_graph/beta/step.py", line 253, in _call_node
return await node.run(GraphRunContext(state=ctx.state, deps=ctx.deps))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 548, in run
async with self.stream(ctx):
~~~~~~~~~~~^^^^^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 221, in __aexit__
await anext(self.gen)
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 562, in stream
async for _event in stream:
pass
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 680, in _run_stream
async for event in self._events_iterator:
yield event
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 641, in _run_stream
async for event in self._handle_tool_calls(ctx, tool_calls):
yield event
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 696, in _handle_tool_calls
async for event in process_tool_calls(
...<8 lines>...
yield event
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 894, in process_tool_calls
async for event in _call_tools(
...<10 lines>...
yield event
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 1030, in _call_tools
if event := await handle_call_or_result(coro_or_task=task, index=index):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 993, in handle_call_or_result
(await coro_or_task) if inspect.isawaitable(coro_or_task) else coro_or_task.result()
^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_agent_graph.py", line 1066, in _call_tool
tool_result = await tool_manager.handle_call(tool_call)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_tool_manager.py", line 119, in handle_call
return await self._call_function_tool(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<8 lines>...
)
^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_tool_manager.py", line 250, in _call_function_tool
tool_result = await self._call_tool(
^^^^^^^^^^^^^^^^^^^^^^
...<4 lines>...
)
^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/_tool_manager.py", line 171, in _call_tool
result = await self.toolset.call_tool(name, args_dict, ctx, tool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/toolsets/combined.py", line 90, in call_tool
return await tool.source_toolset.call_tool(name, tool_args, ctx, tool.source_tool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/toolsets/combined.py", line 90, in call_tool
return await tool.source_toolset.call_tool(name, tool_args, ctx, tool.source_tool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/pydantic_ai/durable_exec/prefect/_mcp_server.py", line 58, in call_tool
return await self._call_tool_task.with_options(name=f'Call MCP Tool: {name}', **self._task_config)(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
name, tool_args, ctx, tool
^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/task_engine.py", line 1561, in run_task_async
async with engine.start(task_run_id=task_run_id, dependencies=dependencies):
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 214, in __aenter__
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/task_engine.py", line 1410, in start
async with self.initialize_run(
~~~~~~~~~~~~~~~~~~~^
task_run_id=task_run_id, dependencies=dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
File "/home/user/.pyenv/versions/3.13.7/lib/python3.13/contextlib.py", line 214, in __aenter__
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/task_engine.py", line 1328, in initialize_run
self.task_run = await self.task.create_local_run(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<6 lines>...
)
^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/tasks.py", line 1020, in create_local_run
k: collect_task_run_inputs_sync(v) for k, v in parameters.items()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/engine.py", line 161, in collect_task_run_inputs_sync
visit_collection(
~~~~~~~~~~~~~~~~^
expr,
^^^^^
...<2 lines>...
max_depth=max_depth,
^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/collections.py", line 503, in visit_collection
values = [visit_nested(getattr(expr, f.name)) for f in expr_fields]
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/collections.py", line 401, in visit_nested
return visit_collection(
expr,
...<4 lines>...
_seen=_seen,
)
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/collections.py", line 503, in visit_collection
values = [visit_nested(getattr(expr, f.name)) for f in expr_fields]
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/collections.py", line 401, in visit_nested
return visit_collection(
expr,
...<4 lines>...
_seen=_seen,
)
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/collections.py", line 503, in visit_collection
values = [visit_nested(getattr(expr, f.name)) for f in expr_fields]
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/collections.py", line 401, in visit_nested
return visit_collection(
expr,
...<4 lines>...
_seen=_seen,
)
File "/home/user/.venv/lib/python3.13/site-packages/prefect/utilities/collections.py", line 503, in visit_collection
values = [visit_nested(getattr(expr, f.name)) for f in expr_fields]
~~~~~~~^^^^^^^^^^^^^^
AttributeError: 'GoogleModel' object has no attribute '_url'
22:03:37.953 | ERROR | prefect.flow_runs.runner - Process for flow run 'flying-goldfish' exited with status code: 1
Example Code
Python, Pydantic AI & LLM client version
Python: 3.13.7
Pydantic AI: 1.20.0
LLM: Google (gemini-3-pro-review)
Prefect: 3.6.2
dorukgezici
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working