Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
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
17 changes: 15 additions & 2 deletions langfuse/openai.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ def _get_langfuse_data_from_kwargs(resource: OpenAiDefinition, kwargs: Any) -> A

if resource.type == "completion":
prompt = kwargs.get("prompt", None)
elif resource.object == "Responses":
elif resource.object == "Responses" or resource.object == "AsyncResponses":
prompt = kwargs.get("input", None)
elif resource.type == "chat":
prompt = _extract_chat_prompt(kwargs)
Expand All @@ -408,6 +408,12 @@ def _get_langfuse_data_from_kwargs(resource: OpenAiDefinition, kwargs: Any) -> A
else float("inf")
)

parsed_max_completion_tokens = (
kwargs.get("max_completion_tokens", None)
if not isinstance(kwargs.get("max_completion_tokens", float("inf")), NotGiven)
else None
)

parsed_top_p = (
kwargs.get("top_p", 1)
if not isinstance(kwargs.get("top_p", 1), NotGiven)
Expand Down Expand Up @@ -441,6 +447,11 @@ def _get_langfuse_data_from_kwargs(resource: OpenAiDefinition, kwargs: Any) -> A
"frequency_penalty": parsed_frequency_penalty,
"presence_penalty": parsed_presence_penalty,
}

if parsed_max_completion_tokens is not None:
modelParameters.pop("max_tokens", None)
modelParameters["max_completion_tokens"] = parsed_max_completion_tokens

if parsed_n is not None and parsed_n > 1:
modelParameters["n"] = parsed_n

Expand Down Expand Up @@ -672,7 +683,7 @@ def _get_langfuse_data_from_default_response(

completion = choice.text if _is_openai_v1() else choice.get("text", None)

elif resource.object == "Responses":
elif resource.object == "Responses" or resource.object == "AsyncResponses":
output = response.get("output", {})

if not isinstance(output, list):
Expand Down Expand Up @@ -922,6 +933,7 @@ def _finalize(self) -> None:
model, completion, usage, metadata = (
_extract_streamed_response_api_response(self.items)
if self.resource.object == "Responses"
or self.resource.object == "AsyncResponses"
else _extract_streamed_openai_response(self.resource, self.items)
)

Expand Down Expand Up @@ -992,6 +1004,7 @@ async def _finalize(self) -> None:
model, completion, usage, metadata = (
_extract_streamed_response_api_response(self.items)
if self.resource.object == "Responses"
or self.resource.object == "AsyncResponses"
else _extract_streamed_openai_response(self.resource, self.items)
)

Expand Down
Loading