Skip to content
This repository was archived by the owner on Aug 5, 2025. It is now read-only.

Commit 86c6969

Browse files
committed
add support for pydantic serialization
1 parent d2cae60 commit 86c6969

File tree

3 files changed

+6
-10
lines changed

3 files changed

+6
-10
lines changed

literalai/api/gql.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,8 @@ def steps_variables_builder(steps: List[Union["StepDict", "Step"]]):
11471147
step["input"] = ensure_values_serializable(step["input"])
11481148
if step.get("output"):
11491149
step["output"] = ensure_values_serializable(step["output"])
1150+
if step.get("metadata"):
1151+
step["metadata"] = ensure_values_serializable(step["metadata"])
11501152
variables.update(serialize_step(step, i))
11511153
return variables
11521154

literalai/callback/langchain_callback.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
from importlib.metadata import version
33
from typing import TYPE_CHECKING, Any, Dict, List, Optional, TypedDict, Union, cast
44

5-
from pydantic import BaseModel
6-
75
from literalai.helper import ensure_values_serializable
86
from literalai.observability.generation import (
97
ChatGeneration,
@@ -150,8 +148,6 @@ def process_content(self, content: Any, root=True):
150148
return [self._convert_message(m) for m in content]
151149
elif self._is_message(content):
152150
return self._convert_message(content)
153-
elif isinstance(content, BaseModel):
154-
return content.model_dump()
155151
elif isinstance(content, dict):
156152
processed_dict = {}
157153
for key, value in content.items():

literalai/helper.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from datetime import datetime
22

3+
from pydantic import BaseModel
4+
35

46
def filter_none_values(data):
57
return {key: value for key, value in data.items() if value is not None}
@@ -9,13 +11,9 @@ def ensure_values_serializable(data):
911
"""
1012
Recursively ensures that all values in the input (dict or list) are JSON serializable.
1113
"""
12-
try:
13-
from openai.types.chat import ChatCompletionMessage
1414

15-
if isinstance(data, ChatCompletionMessage):
16-
return filter_none_values(data.model_dump())
17-
except ImportError:
18-
pass
15+
if isinstance(data, BaseModel):
16+
return filter_none_values(data.model_dump())
1917

2018
try:
2119
from mistralai import UserMessage

0 commit comments

Comments
 (0)