Skip to content

Commit 67324c7

Browse files
authored
fix(openai): support n parameter for multiple choices
1 parent adde8e2 commit 67324c7

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

langfuse/openai.py

+20-9
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,23 @@
1919

2020
import copy
2121
import logging
22-
from inspect import isclass
2322
import types
24-
2523
from collections import defaultdict
2624
from dataclasses import dataclass
25+
from inspect import isclass
2726
from typing import List, Optional
2827

2928
import openai.resources
3029
from openai._types import NotGiven
3130
from packaging.version import Version
31+
from pydantic import BaseModel
3232
from wrapt import wrap_function_wrapper
3333

3434
from langfuse import Langfuse
3535
from langfuse.client import StatefulGenerationClient
3636
from langfuse.decorators import langfuse_context
3737
from langfuse.utils import _get_timestamp
3838
from langfuse.utils.langfuse_singleton import LangfuseSingleton
39-
from pydantic import BaseModel
4039

4140
try:
4241
import openai
@@ -344,12 +343,15 @@ def _get_langfuse_data_from_kwargs(
344343
else None
345344
)
346345

346+
parsed_n = kwargs.get("n", 1) if not isinstance(kwargs.get("n", 1), NotGiven) else 1
347+
347348
modelParameters = {
348349
"temperature": parsed_temperature,
349350
"max_tokens": parsed_max_tokens, # casing?
350351
"top_p": parsed_top_p,
351352
"frequency_penalty": parsed_frequency_penalty,
352353
"presence_penalty": parsed_presence_penalty,
354+
"n": parsed_n,
353355
}
354356
if parsed_seed is not None:
355357
modelParameters["seed"] = parsed_seed
@@ -519,12 +521,21 @@ def _get_langfuse_data_from_default_response(resource: OpenAiDefinition, respons
519521
elif resource.type == "chat":
520522
choices = response.get("choices", [])
521523
if len(choices) > 0:
522-
choice = choices[-1]
523-
completion = (
524-
_extract_chat_response(choice.message.__dict__)
525-
if _is_openai_v1()
526-
else choice.get("message", None)
527-
)
524+
# If multiple choices were generated, we'll show all of them in the UI as a list.
525+
if len(choices) > 1:
526+
completion = [
527+
_extract_chat_response(choice.message.__dict__)
528+
if _is_openai_v1()
529+
else choice.get("message", None)
530+
for choice in choices
531+
]
532+
else:
533+
choice = choices[0]
534+
completion = (
535+
_extract_chat_response(choice.message.__dict__)
536+
if _is_openai_v1()
537+
else choice.get("message", None)
538+
)
528539

529540
usage = response.get("usage", None)
530541

0 commit comments

Comments
 (0)