Skip to content

PrefectAgent with gemini-3-pro-preview crashesΒ #3477

@jsmits

Description

@jsmits

Initial Checks

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions