From c712e09fbce2c04bbd2afa4cf0a018e80db3f0a5 Mon Sep 17 00:00:00 2001 From: Sydney Runkle Date: Tue, 29 Apr 2025 18:17:33 -0400 Subject: [PATCH] conditional for config --- libs/langgraph/langgraph/graph/schema_utils.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libs/langgraph/langgraph/graph/schema_utils.py b/libs/langgraph/langgraph/graph/schema_utils.py index 4ce4ce83a..878daf6c4 100644 --- a/libs/langgraph/langgraph/graph/schema_utils.py +++ b/libs/langgraph/langgraph/graph/schema_utils.py @@ -1,6 +1,7 @@ import functools import logging import weakref +from dataclasses import is_dataclass from inspect import isclass from typing import ( Annotated, @@ -13,7 +14,8 @@ from typing import ( get_type_hints, ) -from pydantic import BaseModel, TypeAdapter +from pydantic import BaseModel, ConfigDict, TypeAdapter +from typing_extensions import is_typeddict __all__ = ["SchemaCoercionMapper"] @@ -246,7 +248,12 @@ _IDENTITY_TYPES: tuple[type[Any], ...] = ( @functools.lru_cache(maxsize=2048) def _adapter_for(tp: Any) -> Callable[[Any], Any]: # noqa: D401 - return TypeAdapter(tp, config={"arbitrary_types_allowed": True}).validate_python + config = ( + None + if (issubclass(tp, BaseModel) or is_typeddict(tp) or is_dataclass(tp)) + else ConfigDict(arbitrary_types_allowed=True) + ) + return TypeAdapter(tp, config=config).validate_python def _get_adapter(tp: Any) -> Callable[[Any], Any]: