mirror of
https://gitee.com/dify_ai/dify.git
synced 2024-12-04 04:07:47 +08:00
fix: minimax streaming function_call message (#4271)
This commit is contained in:
parent
a80fe20456
commit
8cc492721b
@ -144,7 +144,6 @@ class MinimaxChatCompletionPro:
|
||||
"""
|
||||
handle stream chat generate response
|
||||
"""
|
||||
function_call_storage = None
|
||||
for line in response.iter_lines():
|
||||
if not line:
|
||||
continue
|
||||
@ -158,54 +157,41 @@ class MinimaxChatCompletionPro:
|
||||
msg = data['base_resp']['status_msg']
|
||||
self._handle_error(code, msg)
|
||||
|
||||
# final chunk
|
||||
if data['reply'] or 'usage' in data and data['usage']:
|
||||
total_tokens = data['usage']['total_tokens']
|
||||
message = MinimaxMessage(
|
||||
minimax_message = MinimaxMessage(
|
||||
role=MinimaxMessage.Role.ASSISTANT.value,
|
||||
content=''
|
||||
)
|
||||
message.usage = {
|
||||
minimax_message.usage = {
|
||||
'prompt_tokens': 0,
|
||||
'completion_tokens': total_tokens,
|
||||
'total_tokens': total_tokens
|
||||
}
|
||||
message.stop_reason = data['choices'][0]['finish_reason']
|
||||
minimax_message.stop_reason = data['choices'][0]['finish_reason']
|
||||
|
||||
if function_call_storage:
|
||||
choices = data.get('choices', [])
|
||||
if len(choices) > 0:
|
||||
for choice in choices:
|
||||
message = choice['messages'][0]
|
||||
# append function_call message
|
||||
if 'function_call' in message:
|
||||
function_call_message = MinimaxMessage(content='', role=MinimaxMessage.Role.ASSISTANT.value)
|
||||
function_call_message.function_call = function_call_storage
|
||||
function_call_message.function_call = message['function_call']
|
||||
yield function_call_message
|
||||
|
||||
yield message
|
||||
yield minimax_message
|
||||
return
|
||||
|
||||
# partial chunk
|
||||
choices = data.get('choices', [])
|
||||
if len(choices) == 0:
|
||||
continue
|
||||
|
||||
for choice in choices:
|
||||
message = choice['messages'][0]
|
||||
|
||||
if 'function_call' in message:
|
||||
if not function_call_storage:
|
||||
function_call_storage = message['function_call']
|
||||
if 'arguments' not in function_call_storage or not function_call_storage['arguments']:
|
||||
function_call_storage['arguments'] = ''
|
||||
continue
|
||||
else:
|
||||
function_call_storage['arguments'] += message['function_call']['arguments']
|
||||
continue
|
||||
else:
|
||||
if function_call_storage:
|
||||
message['function_call'] = function_call_storage
|
||||
function_call_storage = None
|
||||
|
||||
minimax_message = MinimaxMessage(content='', role=MinimaxMessage.Role.ASSISTANT.value)
|
||||
|
||||
if 'function_call' in message:
|
||||
minimax_message.function_call = message['function_call']
|
||||
|
||||
# append text message
|
||||
if 'text' in message:
|
||||
minimax_message.content = message['text']
|
||||
|
||||
minimax_message = MinimaxMessage(content=message['text'], role=MinimaxMessage.Role.ASSISTANT.value)
|
||||
yield minimax_message
|
Loading…
Reference in New Issue
Block a user