Skip to content

Commit eb5b98f

Browse files
committed
fix: convert Pydantic BaseModel instances to dicts before langchain_dumps serialization (CopilotKit#2158)
1 parent 789ab17 commit eb5b98f

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

sdk-python/copilotkit/langgraph_agent.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,22 @@
1818
from langchain_core.messages import BaseMessage, SystemMessage
1919

2020
from langchain_core.runnables import RunnableConfig, ensure_config
21+
22+
def _serialize_state(state):
23+
"""Recursively convert Pydantic BaseModel instances to dicts for serialization."""
24+
try:
25+
from pydantic import BaseModel as PydanticBaseModel
26+
except ImportError:
27+
return state
28+
29+
if isinstance(state, PydanticBaseModel):
30+
return state.model_dump()
31+
elif isinstance(state, dict):
32+
return {k: _serialize_state(v) for k, v in state.items()}
33+
elif isinstance(state, (list, tuple)):
34+
return type(state)(_serialize_state(item) for item in state)
35+
return state
36+
2137
from langchain_core.messages import HumanMessage
2238

2339
from partialjson.json_parser import JSONParser
@@ -591,6 +607,9 @@ def _emit_state_sync_event(
591607
# Filter by schema keys if available
592608
state = self.filter_state_on_schema_keys(state, 'output')
593609

610+
# Convert Pydantic BaseModel instances to dicts for serialization
611+
state = _serialize_state(state)
612+
594613
return langchain_dumps({
595614
"event": "on_copilotkit_state_sync",
596615
"thread_id": thread_id,

0 commit comments

Comments
 (0)