Skip to content

Commit c1b8393

Browse files
authored
fix(openai): handle async response api input and outputs (#1301)
1 parent 97657c2 commit c1b8393

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

langfuse/openai.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ def _get_langfuse_data_from_kwargs(resource: OpenAiDefinition, kwargs: Any) -> A
391391

392392
if resource.type == "completion":
393393
prompt = kwargs.get("prompt", None)
394-
elif resource.object == "Responses":
394+
elif resource.object == "Responses" or resource.object == "AsyncResponses":
395395
prompt = kwargs.get("input", None)
396396
elif resource.type == "chat":
397397
prompt = _extract_chat_prompt(kwargs)
@@ -408,6 +408,12 @@ def _get_langfuse_data_from_kwargs(resource: OpenAiDefinition, kwargs: Any) -> A
408408
else float("inf")
409409
)
410410

411+
parsed_max_completion_tokens = (
412+
kwargs.get("max_completion_tokens", None)
413+
if not isinstance(kwargs.get("max_completion_tokens", float("inf")), NotGiven)
414+
else None
415+
)
416+
411417
parsed_top_p = (
412418
kwargs.get("top_p", 1)
413419
if not isinstance(kwargs.get("top_p", 1), NotGiven)
@@ -441,6 +447,11 @@ def _get_langfuse_data_from_kwargs(resource: OpenAiDefinition, kwargs: Any) -> A
441447
"frequency_penalty": parsed_frequency_penalty,
442448
"presence_penalty": parsed_presence_penalty,
443449
}
450+
451+
if parsed_max_completion_tokens is not None:
452+
modelParameters.pop("max_tokens", None)
453+
modelParameters["max_completion_tokens"] = parsed_max_completion_tokens
454+
444455
if parsed_n is not None and parsed_n > 1:
445456
modelParameters["n"] = parsed_n
446457

@@ -672,7 +683,7 @@ def _get_langfuse_data_from_default_response(
672683

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

675-
elif resource.object == "Responses":
686+
elif resource.object == "Responses" or resource.object == "AsyncResponses":
676687
output = response.get("output", {})
677688

678689
if not isinstance(output, list):
@@ -922,6 +933,7 @@ def _finalize(self) -> None:
922933
model, completion, usage, metadata = (
923934
_extract_streamed_response_api_response(self.items)
924935
if self.resource.object == "Responses"
936+
or self.resource.object == "AsyncResponses"
925937
else _extract_streamed_openai_response(self.resource, self.items)
926938
)
927939

@@ -992,6 +1004,7 @@ async def _finalize(self) -> None:
9921004
model, completion, usage, metadata = (
9931005
_extract_streamed_response_api_response(self.items)
9941006
if self.resource.object == "Responses"
1007+
or self.resource.object == "AsyncResponses"
9951008
else _extract_streamed_openai_response(self.resource, self.items)
9961009
)
9971010

0 commit comments

Comments
 (0)