fix: minimax streaming function_call message (#4271)

This commit is contained in:
Weaxs 2024-05-11 21:07:22 +08:00 committed by GitHub
parent a80fe20456
commit 8cc492721b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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