From 02d02ccf1b43d734cfd7d1d371f0857a8ff7b6d9 Mon Sep 17 00:00:00 2001 From: Mason Daugherty Date: Thu, 31 Jul 2025 17:08:39 -0400 Subject: [PATCH] feat: enhance serialization for v1 message classes in dump and load modules --- libs/core/langchain_core/load/dump.py | 23 +++++++++++++++++++++++ libs/core/langchain_core/load/load.py | 6 ++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/libs/core/langchain_core/load/dump.py b/libs/core/langchain_core/load/dump.py index b1993c38244..2038eea8ae8 100644 --- a/libs/core/langchain_core/load/dump.py +++ b/libs/core/langchain_core/load/dump.py @@ -19,6 +19,29 @@ def default(obj: Any) -> Any: """ if isinstance(obj, Serializable): return obj.to_json() + + # Handle v1 message classes + from langchain_core.messages.v1 import MessageV1Types + + if type(obj) in MessageV1Types: + import dataclasses + import inspect + + # Get the constructor signature to only include valid parameters + init_sig = inspect.signature(type(obj).__init__) + valid_params = set(init_sig.parameters.keys()) - {"self"} + + # Filter the dataclass fields to only include constructor parameters + all_fields = dataclasses.asdict(obj) + kwargs = {k: v for k, v in all_fields.items() if k in valid_params} + + return { + "lc": 1, + "type": "constructor", + "id": ["langchain_core", "messages", "v1", type(obj).__name__], + "kwargs": kwargs, + } + return to_json_not_implemented(obj) diff --git a/libs/core/langchain_core/load/load.py b/libs/core/langchain_core/load/load.py index 0c2cbf1f65e..0ba2f507c17 100644 --- a/libs/core/langchain_core/load/load.py +++ b/libs/core/langchain_core/load/load.py @@ -156,8 +156,10 @@ class Reviver: cls = getattr(mod, name) - # The class must be a subclass of Serializable. - if not issubclass(cls, Serializable): + # The class must be a subclass of Serializable or a v1 message class. + from langchain_core.messages.v1 import MessageV1Types + + if not (issubclass(cls, Serializable) or cls in MessageV1Types): msg = f"Invalid namespace: {value}" raise ValueError(msg)