Skip to content

type error when trying to process agent: Agent[None, BaseModel] as a type on BaseModel #2471

@NorthIsUp

Description

@NorthIsUp

this seems like something that testing might have caught, so I'm still looking for how it could be my local setup, but any thoughts are appreciated.

Initial Checks

Description

this:

from pydantic import BaseModel
from pydantic_ai import Agent


class ImBroke(BaseModel):
    agent: Agent[None, BaseModel]

produces the error:

TypeError: string indices must be integers, not 'typing.TypeVar'
Unable to evaluate type annotation 'ToolsPrepareFunc[AgentDepsT] | None'.

using 0.6.1 and python 3.13

repo with uv.lock for reproduction: https://github.com/NorthIsUp/pydantic-ai-issue1

$ uv run main.py
Traceback (most recent call last):
  File "/Users/adam/src/pydantic-ai-issue/main.py", line 5, in <module>
    class ImBroke(BaseModel):
        agent: Agent[None, BaseModel]
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_model_construction.py", line 237, in __new__
    complete_model_class(
    ~~~~~~~~~~~~~~~~~~~~^
        cls,
        ^^^^
    ...<3 lines>...
        create_model_module=_create_model_module,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_model_construction.py", line 597, in complete_model_class
    schema = gen_schema.generate_schema(cls)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 711, in generate_schema
    schema = self._generate_schema_inner(obj)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 1004, in _generate_schema_inner
    return self._model_schema(obj)
           ~~~~~~~~~~~~~~~~~~^^^^^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 837, in _model_schema
    {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()},
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 1206, in _generate_md_field_schema
    common_field = self._common_field_schema(name, field_info, decorators)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 1372, in _common_field_schema
    schema = self._apply_annotations(
        source_type,
        annotations + validators_from_decorators,
    )
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 2297, in _apply_annotations
    schema = get_inner_schema(source_type)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_schema_generation_shared.py", line 83, in __call__
    schema = self._handler(source_type)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 2279, in inner_handler
    schema = self._generate_schema_inner(obj)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 1009, in _generate_schema_inner
    return self.match_type(obj)
           ~~~~~~~~~~~~~~~^^^^^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 1123, in match_type
    return self._match_generic_type(obj, origin)
           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 1135, in _match_generic_type
    return self._dataclass_schema(obj, origin)  # pyright: ignore[reportArgumentType]
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py", line 1942, in _dataclass_schema
    fields = collect_dataclass_fields(
        dataclass,
        typevars_map=typevars_map,
        config_wrapper=self._config_wrapper,
    )
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_fields.py", line 384, in collect_dataclass_fields
    ann_type, evaluated = _typing_extra.try_eval_type(dataclass_field.type, globalns, localns)
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_typing_extra.py", line 378, in try_eval_type
    return eval_type_backport(value, globalns, localns), True
           ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_typing_extra.py", line 429, in eval_type_backport
    return _eval_type_backport(value, globalns, localns, type_params)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_typing_extra.py", line 466, in _eval_type_backport
    return _eval_type(value, globalns, localns, type_params)
  File "/Users/adam/src/pydantic-ai-issue/.venv/lib/python3.13/site-packages/pydantic/_internal/_typing_extra.py", line 496, in _eval_type
    return typing._eval_type(  # type: ignore
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
        value, globalns, localns, type_params=type_params
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/adam/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/typing.py", line 474, in _eval_type
    return t._evaluate(globalns, localns, type_params, recursive_guard=recursive_guard)
           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/adam/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/typing.py", line 1081, in _evaluate
    eval(self.__forward_code__, globalns, localns),
    ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 1, in <module>
TypeError: string indices must be integers, not 'typing.TypeVar'
Unable to evaluate type annotation 'ToolsPrepareFunc[AgentDepsT] | None'.

Example Code

from pydantic import BaseModel
from pydantic_ai import Agent


class ImBroke(BaseModel):
    agent: Agent[None, BaseModel]

Python, Pydantic AI & LLM client version

uv run python --version
Python 3.13.3

pydantic-ai>=0.6.1

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions