From 589099a00516b2b851a8f6f510764ee063902822 Mon Sep 17 00:00:00 2001 From: Bowen Liang Date: Fri, 9 Feb 2024 14:43:38 +0800 Subject: [PATCH] fix: possible unsent function call in the last chunk of streaming response in OpenAI provider (#2422) --- api/core/model_runtime/model_providers/openai/llm/llm.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/api/core/model_runtime/model_providers/openai/llm/llm.py b/api/core/model_runtime/model_providers/openai/llm/llm.py index 56a88884f..92a370e04 100644 --- a/api/core/model_runtime/model_providers/openai/llm/llm.py +++ b/api/core/model_runtime/model_providers/openai/llm/llm.py @@ -497,8 +497,9 @@ class OpenAILargeLanguageModel(_CommonOpenAI, LargeLanguageModel): continue delta = chunk.choices[0] + has_finish_reason = delta.finish_reason is not None - if delta.finish_reason is None and (delta.delta.content is None or delta.delta.content == '') and \ + if not has_finish_reason and (delta.delta.content is None or delta.delta.content == '') and \ delta.delta.function_call is None: continue @@ -520,7 +521,8 @@ class OpenAILargeLanguageModel(_CommonOpenAI, LargeLanguageModel): if assistant_message_function_call: # start of stream function call delta_assistant_message_function_call_storage = assistant_message_function_call - continue + if not has_finish_reason: + continue # tool_calls = self._extract_response_tool_calls(assistant_message_tool_calls) function_call = self._extract_response_function_call(assistant_message_function_call) @@ -534,7 +536,7 @@ class OpenAILargeLanguageModel(_CommonOpenAI, LargeLanguageModel): full_assistant_content += delta.delta.content if delta.delta.content else '' - if delta.finish_reason is not None: + if has_finish_reason: # calculate num tokens prompt_tokens = self._num_tokens_from_messages(model, prompt_messages, tools)