Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions langfuse/openai.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,15 @@ class OpenAiDefinition:
]


def _resolve_format_metadata(key: str, kwargs: Any) -> dict:
if key not in kwargs:
return {}
value = kwargs[key]
if isclass(value) and issubclass(value, BaseModel):
return {key: value.model_json_schema()}
return {key: value}


class OpenAiArgsExtractor:
def __init__(
self,
Expand All @@ -201,13 +210,11 @@ def __init__(
self.args = {}
self.args["metadata"] = (
metadata
if "response_format" not in kwargs
if "response_format" not in kwargs and "text_format" not in kwargs
else {
**(metadata or {}),
"response_format": kwargs["response_format"].model_json_schema()
if isclass(kwargs["response_format"])
and issubclass(kwargs["response_format"], BaseModel)
else kwargs["response_format"],
**_resolve_format_metadata("response_format", kwargs),
**_resolve_format_metadata("text_format", kwargs),
}
)
self.args["name"] = name
Expand All @@ -232,6 +239,7 @@ def get_openai_args(self) -> Any:
# OpenAI does not support non-string type values in metadata when using
# model distillation feature
self.kwargs["metadata"].pop("response_format", None)
self.kwargs["metadata"].pop("text_format", None)

return self.kwargs

Expand Down