Pydantic seems to be fast (in the context, it’s written in rust) so it might make sense to keep using pydantic for performance reasons.
Pydantic docs do clearly state that multple levels of nesting of Pydantic objects can make it much slower, so it isn't particularly surprising that such models were slow.