From 8bf27f8177241e3bd27b53740584134ce65260e0 Mon Sep 17 00:00:00 2001 From: Peanut <vvanglro@gmail.com> Date: Thu, 1 Feb 2024 17:07:03 +0800 Subject: [PATCH 1/4] perf: TypeAdapter instantiated once --- src/openai/_models.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/openai/_models.py b/src/openai/_models.py index 48d5624f64..ee5de9265c 100644 --- a/src/openai/_models.py +++ b/src/openai/_models.py @@ -363,7 +363,12 @@ class GenericModel(BaseGenericModel, BaseModel): if PYDANTIC_V2: - from pydantic import TypeAdapter + from functools import lru_cache + from pydantic import TypeAdapter as PyTypeAdapter + + @lru_cache + def TypeAdapter(type_: type[_T]) -> PyTypeAdapter: + return PyTypeAdapter(type_) def _validate_non_model_type(*, type_: type[_T], value: object) -> _T: return TypeAdapter(type_).validate_python(value) From 54829aff6c68be16e47180716eea457e6104e040 Mon Sep 17 00:00:00 2001 From: Peanut <vvanglro@gmail.com> Date: Fri, 2 Feb 2024 03:09:05 +0000 Subject: [PATCH 2/4] style: check ruff --- src/openai/_models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/openai/_models.py b/src/openai/_models.py index ee5de9265c..f705f62b4f 100644 --- a/src/openai/_models.py +++ b/src/openai/_models.py @@ -364,6 +364,7 @@ class GenericModel(BaseGenericModel, BaseModel): if PYDANTIC_V2: from functools import lru_cache + from pydantic import TypeAdapter as PyTypeAdapter @lru_cache From 9070ce2a01198c383320b7000003fcfcfcb6b410 Mon Sep 17 00:00:00 2001 From: Peanut <vvanglro@gmail.com> Date: Fri, 23 Feb 2024 03:31:01 +0000 Subject: [PATCH 3/4] style: typecheck --- src/openai/_models.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/openai/_models.py b/src/openai/_models.py index f705f62b4f..dafea4e71e 100644 --- a/src/openai/_models.py +++ b/src/openai/_models.py @@ -367,9 +367,11 @@ class GenericModel(BaseGenericModel, BaseModel): from pydantic import TypeAdapter as PyTypeAdapter - @lru_cache - def TypeAdapter(type_: type[_T]) -> PyTypeAdapter: + def TypeAdapter(type_: type[_T]) -> PyTypeAdapter[_T]: return PyTypeAdapter(type_) + + if not TYPE_CHECKING: + TypeAdapter = lru_cache(TypeAdapter) def _validate_non_model_type(*, type_: type[_T], value: object) -> _T: return TypeAdapter(type_).validate_python(value) From 6de9041ea50aa85f80445447a2dd850148ae0639 Mon Sep 17 00:00:00 2001 From: Peanut <vvanglro@gmail.com> Date: Mon, 18 Mar 2024 15:18:02 +0000 Subject: [PATCH 4/4] fix: import, type check --- src/openai/_models.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/openai/_models.py b/src/openai/_models.py index 51beabdc94..12eda7bbfd 100644 --- a/src/openai/_models.py +++ b/src/openai/_models.py @@ -3,6 +3,7 @@ import inspect from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, cast from datetime import date, datetime +from functools import lru_cache from typing_extensions import ( Unpack, Literal, @@ -363,15 +364,12 @@ class GenericModel(BaseGenericModel, BaseModel): if PYDANTIC_V2: - from functools import lru_cache - from pydantic import TypeAdapter as PyTypeAdapter - - def TypeAdapter(type_: type[_T]) -> PyTypeAdapter[_T]: - return PyTypeAdapter(type_) - - if not TYPE_CHECKING: - TypeAdapter = lru_cache(TypeAdapter) + if TYPE_CHECKING: + from pydantic import TypeAdapter + else: + from pydantic import TypeAdapter as _TypeAdapter + TypeAdapter = lru_cache(_TypeAdapter) def _validate_non_model_type(*, type_: type[_T], value: object) -> _T: return TypeAdapter(type_).validate_python(value)