-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Closed
Labels
Description
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
- 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
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