From 33e2af486882663dd8497849f90f2f53656ba510 Mon Sep 17 00:00:00 2001 From: cloudyun888 <15502132060@163.com> Date: Wed, 15 Apr 2026 21:22:04 +0800 Subject: [PATCH] fix(lib): prevent memory leak by removing TypeVar subscript in construct_type_unchecked Pydantic model_rebuild fails for TypeVar-subscripted generics like ParsedResponse[TextFormatT] because TextFormatT is unresolved at runtime. This causes model_rebuild(raise_errors=False) to return False on every call, preventing _built_memo caching and allocating a new SchemaValidator/SchemaSerializer on every parse_response() call. Fix: use non-parameterized base classes (ParsedResponseOutputText, ParsedResponseOutputMessage, ParsedResponse) which Pydantic can resolve at runtime. Fixes #3084 --- src/openai/lib/_parsing/_responses.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openai/lib/_parsing/_responses.py b/src/openai/lib/_parsing/_responses.py index 8853a0749f..d198d73c24 100644 --- a/src/openai/lib/_parsing/_responses.py +++ b/src/openai/lib/_parsing/_responses.py @@ -78,7 +78,7 @@ def parse_response( output_list.append( construct_type_unchecked( - type_=ParsedResponseOutputMessage[TextFormatT], + type_=ParsedResponseOutputMessage, value={ **output.to_dict(), "content": content_list, @@ -130,7 +130,7 @@ def parse_response( output_list.append(output) return construct_type_unchecked( - type_=ParsedResponse[TextFormatT], + type_=ParsedResponse, value={ **response.to_dict(), "output": output_list,