Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork3k
Open
Description
The following works in pyright, but not in pyrefly, ty, or (which is why I'm here!) mypy:
from __future__importannotationsfromdataclassesimportdataclassfromtyping_extensionsimport (Generic,Sequence,TypeVar,assert_type,)T=TypeVar("T")@dataclassclassAgent(Generic[T]):output_type:Sequence[type[T]]classFoo:passclassBar:pass# pyright - works# mypy - error: Expression is of type "Agent[object]", not "Agent[Foo | Bar]" [assert-type]# pyrefly - assert_type(Agent[Foo], Agent[Bar | Foo]) failed + Argument `list[type[Bar] | type[Foo]]` is not assignable to parameter `output_type` with type `Sequence[type[Foo]]` in function `Agent.__init__`# ty - `Agent[Foo | Bar]` and `Agent[Unknown]` are not equivalent typesassert_type(Agent([Foo,Bar]),Agent[Foo|Bar])# pyright - works# mypy - error: Expression is of type "Agent[Never]", not "Agent[int | str]" [assert-type]# pyrefly - assert_type(Agent[int], Agent[str | int]) failed + Argument `list[type[str] | type[int]]` is not assignable to parameter `output_type` with type `Sequence[type[int]]` in function `Agent.__init__`# ty - `Agent[int | str]` and `Agent[Unknown]` are not equivalent typesassert_type(Agent([int,str]),Agent[int|str])# worksassert_type(Agent[Foo|Bar]([Foo,Bar]),Agent[Foo|Bar])# worksassert_type(Agent[int|str]([int,str]),Agent[int|str])
It would be great to see this work in mypy, but if there's a good reason the other 2 out of 3 typecheckers also don't support this I'd love to understand why!
- This is related to a new PydanticAI feature, if you're curious check outSupport functions as output_type, as well as lists of functions and other types pydantic/pydantic-ai#1785 (comment)
- Issues for other type checkers: