From 3a82ae8da5ec0a3eab055e08a7039a2ba341ce74 Mon Sep 17 00:00:00 2001 From: Dong_master <2213070223@qq.com> Date: Wed, 6 Aug 2025 23:00:57 +0800 Subject: [PATCH] fix: the bug in the "remove_think" function. --- pkg/provider/modelmgr/requesters/chatcmpl.py | 20 +++++++++------- .../modelmgr/requesters/modelscopechatcmpl.py | 24 +++++++++++-------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/pkg/provider/modelmgr/requesters/chatcmpl.py b/pkg/provider/modelmgr/requesters/chatcmpl.py index 35d1ff92..dfe2ed71 100644 --- a/pkg/provider/modelmgr/requesters/chatcmpl.py +++ b/pkg/provider/modelmgr/requesters/chatcmpl.py @@ -85,16 +85,14 @@ class OpenAIChatCompletions(requester.ProviderAPIRequester): if 'role' not in delta or delta['role'] is None: delta['role'] = 'assistant' - reasoning_content = delta['reasoning_content'] if 'reasoning_content' in delta else None + reasoning_content = delta['reasoning_content'] delta['content'] = '' if delta['content'] is None else delta['content'] - # print(reasoning_content) # deepseek的reasoner模型 if reasoning_content is not None and idx == 0: - if reasoning_content != '': - delta['content'] += f'\n{reasoning_content}' - is_think = True + delta['content'] += f'\n{reasoning_content}' + is_think = True elif reasoning_content is None and idx != 0: if is_content: delta['content'] = delta['content'] @@ -102,7 +100,7 @@ class OpenAIChatCompletions(requester.ProviderAPIRequester): delta['content'] = f'\n\n\n{delta["content"]}' is_content = True is_think = False - else: + elif reasoning_content is not None and reasoning_content != '': delta['content'] = reasoning_content message = llm_entities.MessageChunk(**delta) @@ -157,10 +155,16 @@ class OpenAIChatCompletions(requester.ProviderAPIRequester): else: # 流式chunk模式 delta = chunk.delta.model_dump() if hasattr(chunk, 'delta') else {} + print(delta) + reasoning_content = delta['reasoning_content'] if 'reasoning_content' in delta else None + delta['reasoning_content'] = reasoning_content if remove_think: - reasoning_content = delta['reasoning_content'] if 'reasoning_content' in delta else None - if reasoning_content is not None: + if delta['reasoning_content'] is not None: continue + if ((delta['content'] == '' or delta.get('content',None) is None) and + (delta.get('reasoning_content',None) is None or delta['reasoning_content'] == '') and + chunk_idx == 0): # 此处将第一条空消息排除,大部分模型第一条消息携带的是role,但是在role直接处理为ass + continue # 处理流式消息 delta_message,is_content,is_think = await self._make_msg_chunk(delta, chunk_idx, diff --git a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py index f5db54a1..e02b0d07 100644 --- a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py +++ b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py @@ -184,24 +184,24 @@ class ModelScopeChatCompletions(requester.ProviderAPIRequester): if 'role' not in delta or delta['role'] is None: delta['role'] = 'assistant' - reasoning_content = delta['reasoning_content'] if 'reasoning_content' in delta else None + reasoning_content = delta['reasoning_content'] delta['content'] = '' if delta['content'] is None else delta['content'] # print(reasoning_content) # deepseek的reasoner模型 + if reasoning_content is not None and idx == 0: - if reasoning_content != '': - delta['content'] += f'\n{reasoning_content}' - is_think = True - elif reasoning_content == '' and idx != 0: + delta['content'] += f'\n{reasoning_content}' + is_think = True + elif reasoning_content is None and idx != 0: if is_content: delta['content'] = delta['content'] elif is_think: delta['content'] = f'\n\n\n{delta["content"]}' is_content = True is_think = False - else: + elif reasoning_content is not None: delta['content'] = reasoning_content message = llm_entities.MessageChunk(**delta) @@ -256,12 +256,16 @@ class ModelScopeChatCompletions(requester.ProviderAPIRequester): else: # 流式chunk模式 delta = chunk.delta.model_dump() if hasattr(chunk, 'delta') else {} - print(delta) + reasoning_content = delta['reasoning_content'] if 'reasoning_content' in delta else None + delta['reasoning_content'] = None if reasoning_content == '' else reasoning_content # 直接不管有没有思考消息,构造一个,方便去除思考判断 if remove_think: - reasoning_content = delta['reasoning_content'] if 'reasoning_content' in delta else None - if reasoning_content != '': + if delta['reasoning_content'] is not None: continue - # 处理流式消息 + if ((delta['content'] == '' or delta.get('content', None) is None) and + (delta.get('reasoning_content', None) is None or delta['reasoning_content'] == '') and + chunk_idx == 0): # 此处将第一条空消息排除,大部分模型第一条消息携带的是role,但是在role直接处理为ass + continue + # 处理流式消息 delta_message, is_content, is_think = await self._make_msg_chunk(delta, chunk_idx, is_content,