mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-10-04 12:07:34 +00:00
test-fireworks-fix
This commit is contained in:
parent
69a52213a1
commit
f9348a6bdf
4 changed files with 210 additions and 2 deletions
|
@ -31,6 +31,8 @@ from openai.types.chat import (
|
|||
ChatCompletionContentPartTextParam as OpenAIChatCompletionContentPartTextParam,
|
||||
)
|
||||
|
||||
from llama_stack.apis.inference.inference import UsageInfo
|
||||
|
||||
try:
|
||||
from openai.types.chat import (
|
||||
ChatCompletionMessageFunctionToolCall as OpenAIChatCompletionMessageFunctionToolCall,
|
||||
|
@ -103,6 +105,7 @@ from llama_stack.apis.inference import (
|
|||
JsonSchemaResponseFormat,
|
||||
Message,
|
||||
OpenAIChatCompletion,
|
||||
OpenAIChatCompletionUsage,
|
||||
OpenAICompletion,
|
||||
OpenAICompletionChoice,
|
||||
OpenAIEmbeddingData,
|
||||
|
@ -277,6 +280,11 @@ def process_chat_completion_response(
|
|||
request: ChatCompletionRequest,
|
||||
) -> ChatCompletionResponse:
|
||||
choice = response.choices[0]
|
||||
usage = UsageInfo(
|
||||
prompt_tokens=response.usage.prompt_tokens,
|
||||
completion_tokens=response.usage.completion_tokens,
|
||||
total_tokens=response.usage.total_tokens,
|
||||
)
|
||||
if choice.finish_reason == "tool_calls":
|
||||
if not choice.message or not choice.message.tool_calls:
|
||||
raise ValueError("Tool calls are not present in the response")
|
||||
|
@ -290,6 +298,7 @@ def process_chat_completion_response(
|
|||
content=json.dumps(tool_calls, default=lambda x: x.model_dump()),
|
||||
),
|
||||
logprobs=None,
|
||||
usage=usage,
|
||||
)
|
||||
else:
|
||||
# Otherwise, return tool calls as normal
|
||||
|
@ -301,6 +310,7 @@ def process_chat_completion_response(
|
|||
content="",
|
||||
),
|
||||
logprobs=None,
|
||||
usage=usage,
|
||||
)
|
||||
|
||||
# TODO: This does not work well with tool calls for vLLM remote provider
|
||||
|
@ -335,6 +345,7 @@ def process_chat_completion_response(
|
|||
tool_calls=raw_message.tool_calls,
|
||||
),
|
||||
logprobs=None,
|
||||
usage=usage,
|
||||
)
|
||||
|
||||
|
||||
|
@ -1375,6 +1386,7 @@ class OpenAIChatCompletionToLlamaStackMixin:
|
|||
user: str | None = None,
|
||||
) -> OpenAIChatCompletion | AsyncIterator[OpenAIChatCompletionChunk]:
|
||||
messages = openai_messages_to_messages(messages)
|
||||
|
||||
response_format = _convert_openai_request_response_format(response_format)
|
||||
sampling_params = _convert_openai_sampling_params(
|
||||
max_tokens=max_tokens,
|
||||
|
@ -1405,9 +1417,10 @@ class OpenAIChatCompletionToLlamaStackMixin:
|
|||
if stream:
|
||||
return OpenAIChatCompletionToLlamaStackMixin._process_stream_response(self, model, outstanding_responses)
|
||||
|
||||
return await OpenAIChatCompletionToLlamaStackMixin._process_non_stream_response(
|
||||
response = await OpenAIChatCompletionToLlamaStackMixin._process_non_stream_response(
|
||||
self, model, outstanding_responses
|
||||
)
|
||||
return response
|
||||
|
||||
async def _process_stream_response(
|
||||
self,
|
||||
|
@ -1476,12 +1489,22 @@ class OpenAIChatCompletionToLlamaStackMixin:
|
|||
self, model: str, outstanding_responses: list[Awaitable[ChatCompletionResponse]]
|
||||
) -> OpenAIChatCompletion:
|
||||
choices = []
|
||||
total_prompt_tokens = 0
|
||||
total_completion_tokens = 0
|
||||
total_tokens = 0
|
||||
|
||||
for outstanding_response in outstanding_responses:
|
||||
response = await outstanding_response
|
||||
completion_message = response.completion_message
|
||||
message = await convert_message_to_openai_dict_new(completion_message)
|
||||
finish_reason = _convert_stop_reason_to_openai_finish_reason(completion_message.stop_reason)
|
||||
|
||||
# Aggregate usage data
|
||||
if response.usage:
|
||||
total_prompt_tokens += response.usage.prompt_tokens
|
||||
total_completion_tokens += response.usage.completion_tokens
|
||||
total_tokens += response.usage.total_tokens
|
||||
|
||||
choice = OpenAIChatCompletionChoice(
|
||||
index=len(choices),
|
||||
message=message,
|
||||
|
@ -1489,12 +1512,19 @@ class OpenAIChatCompletionToLlamaStackMixin:
|
|||
)
|
||||
choices.append(choice)
|
||||
|
||||
usage = None
|
||||
if total_tokens > 0:
|
||||
usage = OpenAIChatCompletionUsage(
|
||||
prompt_tokens=total_prompt_tokens, completion_tokens=total_completion_tokens, total_tokens=total_tokens
|
||||
)
|
||||
|
||||
return OpenAIChatCompletion(
|
||||
id=f"chatcmpl-{uuid.uuid4()}",
|
||||
choices=choices,
|
||||
created=int(time.time()),
|
||||
model=model,
|
||||
object="chat.completion",
|
||||
usage=usage,
|
||||
)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue