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

Commit 4e67ed2

Browse files
authored
Merge pull request #144 from Chainlit/willy/eng-2113-support-pydantic
add support for pydantic serialization
2 parents d2cae60 + e0c1f4c commit 4e67ed2

File tree

5 files changed

+8
-20
lines changed

5 files changed

+8
-20
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 & 14 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,21 +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
14-
15-
if isinstance(data, ChatCompletionMessage):
16-
return filter_none_values(data.model_dump())
17-
except ImportError:
18-
pass
19-
20-
try:
21-
from mistralai import UserMessage
2214

23-
if isinstance(data, UserMessage):
24-
return filter_none_values(data.model_dump())
25-
except ImportError:
26-
pass
15+
if isinstance(data, BaseModel):
16+
return filter_none_values(data.model_dump())
2717

2818
if isinstance(data, dict):
2919
return {key: ensure_values_serializable(value) for key, value in data.items()}

literalai/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.1.0"
1+
__version__ = "0.1.1"

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name="literalai",
5-
version="0.1.0", # update version in literalai/version.py
5+
version="0.1.1", # update version in literalai/version.py
66
description="An SDK for observability in Python applications",
77
long_description=open("README.md").read(),
88
long_description_content_type="text/markdown",

0 commit comments

Comments
 (0)