From 99fcde158635f3765ae04938cc662379de6713b8 Mon Sep 17 00:00:00 2001 From: Dong_master <2213070223@qq.com> Date: Tue, 12 Aug 2025 23:20:41 +0800 Subject: [PATCH] fix: in the MessageChunk add msg_sequence ,And obtain the usage in the adapter. --- pkg/platform/sources/dingtalk.py | 8 ++++---- pkg/platform/sources/lark.py | 11 ++++++----- pkg/platform/sources/telegram.py | 8 ++++---- pkg/provider/entities.py | 4 ++++ pkg/provider/runners/localagent.py | 11 ++++++++++- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/pkg/platform/sources/dingtalk.py b/pkg/platform/sources/dingtalk.py index f991f71c..71c7b0d0 100644 --- a/pkg/platform/sources/dingtalk.py +++ b/pkg/platform/sources/dingtalk.py @@ -108,7 +108,7 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter): self.ap = ap self.logger = logger self.card_instance_id_dict = {} - self.seq = 1 + # self.seq = 1 required_keys = [ 'client_id', 'client_secret', @@ -159,9 +159,9 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter): # msg_id = incoming_message.message_id message_id = bot_message.resp_message_id - self.seq += 1 + msg_seq = bot_message.msg_sequence - if (self.seq - 1) % 8 == 0 or is_final: + if (msg_seq - 1) % 8 == 0 or is_final: content, at = await DingTalkMessageConverter.yiri2target(message) @@ -169,7 +169,7 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter): # print(card_instance_id) await self.bot.send_card_message(card_instance, card_instance_id, content, is_final) if is_final and bot_message.tool_calls is None: - self.seq = 1 # 消息回复结束之后重置seq + # self.seq = 1 # 消息回复结束之后重置seq self.card_instance_id_dict.pop(message_id) # 消息回复结束之后删除卡片实例id async def send_message(self, target_type: str, target_id: str, message: platform_message.MessageChain): diff --git a/pkg/platform/sources/lark.py b/pkg/platform/sources/lark.py index c4e5b339..975730b5 100644 --- a/pkg/platform/sources/lark.py +++ b/pkg/platform/sources/lark.py @@ -439,7 +439,7 @@ class LarkAdapter(adapter.MessagePlatformAdapter): "body": {"direction": "vertical", "padding": "12px 12px 12px 12px", "elements": [{"tag": "div", "text": { "tag": "plain_text", - "content": "Langbot", + "content": "LangBot", "text_size": "normal", "text_align": "left", "text_color": "default"}, @@ -681,9 +681,10 @@ class LarkAdapter(adapter.MessagePlatformAdapter): """ 回复消息变成更新卡片消息 """ - self.seq += 1 + # self.seq += 1 message_id = bot_message.resp_message_id - if self.seq % 8 == 0 or is_final: + msg_seq = bot_message.msg_sequence + if msg_seq % 8 == 0 or is_final: lark_message = await self.message_converter.yiri2target(message, self.api_client) @@ -708,14 +709,14 @@ class LarkAdapter(adapter.MessagePlatformAdapter): ContentCardElementRequestBody.builder() # .uuid("a0d69e20-1dd1-458b-k525-dfeca4015204") .content(text_message) - .sequence(self.seq) + .sequence(msg_seq) .build() ) .build() ) if is_final and bot_message.tool_calls is None: - self.seq = 1 # 消息回复结束之后重置seq + # self.seq = 1 # 消息回复结束之后重置seq self.card_id_dict.pop(message_id) # 清理已经使用过的卡片 # 发起请求 response: ContentCardElementResponse = self.api_client.cardkit.v1.card_element.content(request) diff --git a/pkg/platform/sources/telegram.py b/pkg/platform/sources/telegram.py index f113ec26..42279317 100644 --- a/pkg/platform/sources/telegram.py +++ b/pkg/platform/sources/telegram.py @@ -158,7 +158,7 @@ class TelegramAdapter(adapter.MessagePlatformAdapter): self.ap = ap self.logger = logger self.msg_stream_id = {} - self.seq = 1 + # self.seq = 1 async def telegram_callback(update: Update, context: ContextTypes.DEFAULT_TYPE): if update.message.from_user.is_bot: @@ -216,8 +216,8 @@ class TelegramAdapter(adapter.MessagePlatformAdapter): quote_origin: bool = False, is_final: bool = False, ): - self.seq += 1 - if (self.seq - 1) % 8 == 0 or is_final: + msg_seq = bot_message.msg_sequence + if (msg_seq - 1) % 8 == 0 or is_final: assert isinstance(message_source.source_platform_object, Update) components = await TelegramMessageConverter.yiri2target(message, self.bot) @@ -264,7 +264,7 @@ class TelegramAdapter(adapter.MessagePlatformAdapter): await self.bot.edit_message_text(**args) if is_final and bot_message.tool_calls is None: - self.seq = 1 # 消息回复结束之后重置seq + # self.seq = 1 # 消息回复结束之后重置seq self.msg_stream_id.pop(message_id) # 消息回复结束之后删除流式消息id async def is_stream_output_supported(self) -> bool: diff --git a/pkg/provider/entities.py b/pkg/provider/entities.py index 9dcaffcd..4c4a65c1 100644 --- a/pkg/provider/entities.py +++ b/pkg/provider/entities.py @@ -149,6 +149,10 @@ class MessageChunk(pydantic.BaseModel): tool_call_id: typing.Optional[str] = None is_final: bool = False + """是否是结束""" + + msg_sequence: int = 0 + """消息迭代次数""" def readable_str(self) -> str: if self.content is not None: diff --git a/pkg/provider/runners/localagent.py b/pkg/provider/runners/localagent.py index 8466a9c4..f7f17dae 100644 --- a/pkg/provider/runners/localagent.py +++ b/pkg/provider/runners/localagent.py @@ -115,7 +115,7 @@ class LocalAgentRunner(runner.RequestRunner): msg_idx = 0 accumulated_content = '' # 从开始累积的所有内容 last_role = 'assistant' - + msg_sequence = 1 async for msg in query.use_llm_model.requester.invoke_llm_stream( query, query.use_llm_model, @@ -152,11 +152,13 @@ class LocalAgentRunner(runner.RequestRunner): # continue # 每8个chunk或最后一个chunk时,输出所有累积的内容 if msg_idx % 8 == 0 or msg.is_final: + msg_sequence += 1 yield llm_entities.MessageChunk( role=last_role, content=accumulated_content, # 输出所有累积内容 tool_calls=list(tool_calls_map.values()) if (tool_calls_map and msg.is_final) else None, is_final=msg.is_final, + msg_sequence=msg_sequence, ) # 创建最终消息用于后续处理 @@ -164,10 +166,12 @@ class LocalAgentRunner(runner.RequestRunner): role=last_role, content=accumulated_content, tool_calls=list(tool_calls_map.values()) if tool_calls_map else None, + msg_sequence=msg_sequence, ) pending_tool_calls = final_msg.tool_calls first_content = final_msg.content + first_end_sequence = final_msg.msg_sequence req_messages.append(final_msg) @@ -209,6 +213,7 @@ class LocalAgentRunner(runner.RequestRunner): msg_idx = 0 accumulated_content = '' # 从开始累积的所有内容 last_role = 'assistant' + msg_sequence = first_end_sequence async for msg in query.use_llm_model.requester.invoke_llm_stream( query, @@ -249,17 +254,21 @@ class LocalAgentRunner(runner.RequestRunner): # 每8个chunk或最后一个chunk时,输出所有累积的内容 if msg_idx % 8 == 0 or msg.is_final: + msg_sequence += 1 yield llm_entities.MessageChunk( role=last_role, content=accumulated_content, # 输出所有累积内容 tool_calls=list(tool_calls_map.values()) if (tool_calls_map and msg.is_final) else None, is_final=msg.is_final, + msg_sequence=msg_sequence, ) final_msg = llm_entities.MessageChunk( role=last_role, content=accumulated_content, tool_calls=list(tool_calls_map.values()) if tool_calls_map else None, + msg_sequence=msg_sequence, + ) else: # 处理完所有调用,再次请求