Skip to content

Fix how PreTrainedModel checks annotations on Python 3.14+#44165

Closed
alexmalyshev wants to merge 1 commit intohuggingface:mainfrom
alexmalyshev:annotations
Closed

Fix how PreTrainedModel checks annotations on Python 3.14+#44165
alexmalyshev wants to merge 1 commit intohuggingface:mainfrom
alexmalyshev:annotations

Conversation

@alexmalyshev
Copy link
Copy Markdown
Contributor

With Python 3.14 and PEP 649, you can no longer expect cls.__dict__["__annotations__"] to contain annotations for the exact class, it will be loaded lazily and can make it seem like the class doesn't have any annotations.

The recommended tools all load annotations for the entire class hierarchy. What we can do is to compute the annotation for a class and for its parent, then compare them. If they're different, then we know we have a dedicated annotation on the child class.

With Python 3.14 and PEP 649, you can no longer expect
`cls.__dict__["__annotations__"]` to contain annotations for the exact class, it
will be loaded lazily and can make it seem like the class doesn't have any
annotations.

The recommended tools all load annotations for the entire class hierarchy.  What
we can do is to compute the annotation for a class and for its parent, then
compare them.  If they're different, then we know we have a dedicated annotation
on the child class.
@Rocketknight1
Copy link
Copy Markdown
Member

This one touches some very core code so cc maintainers @ArthurZucker @Cyrilvallez @vasqu

@alexmalyshev
Copy link
Copy Markdown
Contributor Author

@ArthurZucker @Cyrilvallez @vasqu -- Gentle nudge to take a look at this, thanks!

@Cyrilvallez
Copy link
Copy Markdown
Member

I see it has been superseded by #44672 which provided a simpler fix!

@alexmalyshev alexmalyshev deleted the annotations branch March 20, 2026 17:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants