From fdc8a2b4fb1ca5d11e460f3408d9ec79585506d8 Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Mon, 24 Nov 2025 10:48:10 +0100 Subject: [PATCH] fix(openai): handle pydantic BaseModel as metadata --- langfuse/openai.py | 5 ++++- tests/test_openai.py | 10 ---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/langfuse/openai.py b/langfuse/openai.py index 1a63835d4..c9d277fa4 100644 --- a/langfuse/openai.py +++ b/langfuse/openai.py @@ -400,7 +400,10 @@ def _get_langfuse_data_from_kwargs(resource: OpenAiDefinition, kwargs: Any) -> A and not isinstance(metadata, NotGiven) and not isinstance(metadata, dict) ): - raise TypeError("metadata must be a dictionary") + if isinstance(metadata, BaseModel): + metadata = metadata.model_dump() + else: + metadata = {} model = kwargs.get("model", None) or None diff --git a/tests/test_openai.py b/tests/test_openai.py index b6bcf29d6..f24bf93cf 100644 --- a/tests/test_openai.py +++ b/tests/test_openai.py @@ -607,16 +607,6 @@ def test_fails_wrong_name(openai): ) -def test_fails_wrong_metadata(openai): - with pytest.raises(TypeError, match="metadata must be a dictionary"): - openai.OpenAI().completions.create( - metadata="metadata", - model="gpt-3.5-turbo-instruct", - prompt="1 + 1 = ", - temperature=0, - ) - - def test_fails_wrong_trace_id(openai): with pytest.raises(TypeError, match="trace_id must be a string"): openai.OpenAI().completions.create(