mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-24 11:07:14 +00:00
fix: in the MessageChunk add msg_sequence ,And obtain the usage in the adapter.
This commit is contained in:
@@ -108,7 +108,7 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter):
|
|||||||
self.ap = ap
|
self.ap = ap
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
self.card_instance_id_dict = {}
|
self.card_instance_id_dict = {}
|
||||||
self.seq = 1
|
# self.seq = 1
|
||||||
required_keys = [
|
required_keys = [
|
||||||
'client_id',
|
'client_id',
|
||||||
'client_secret',
|
'client_secret',
|
||||||
@@ -159,9 +159,9 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter):
|
|||||||
|
|
||||||
# msg_id = incoming_message.message_id
|
# msg_id = incoming_message.message_id
|
||||||
message_id = bot_message.resp_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)
|
content, at = await DingTalkMessageConverter.yiri2target(message)
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter):
|
|||||||
# print(card_instance_id)
|
# print(card_instance_id)
|
||||||
await self.bot.send_card_message(card_instance, card_instance_id, content, is_final)
|
await self.bot.send_card_message(card_instance, card_instance_id, content, is_final)
|
||||||
if is_final and bot_message.tool_calls is None:
|
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
|
self.card_instance_id_dict.pop(message_id) # 消息回复结束之后删除卡片实例id
|
||||||
|
|
||||||
async def send_message(self, target_type: str, target_id: str, message: platform_message.MessageChain):
|
async def send_message(self, target_type: str, target_id: str, message: platform_message.MessageChain):
|
||||||
|
|||||||
@@ -439,7 +439,7 @@ class LarkAdapter(adapter.MessagePlatformAdapter):
|
|||||||
"body": {"direction": "vertical", "padding": "12px 12px 12px 12px", "elements": [{"tag": "div",
|
"body": {"direction": "vertical", "padding": "12px 12px 12px 12px", "elements": [{"tag": "div",
|
||||||
"text": {
|
"text": {
|
||||||
"tag": "plain_text",
|
"tag": "plain_text",
|
||||||
"content": "Langbot",
|
"content": "LangBot",
|
||||||
"text_size": "normal",
|
"text_size": "normal",
|
||||||
"text_align": "left",
|
"text_align": "left",
|
||||||
"text_color": "default"},
|
"text_color": "default"},
|
||||||
@@ -681,9 +681,10 @@ class LarkAdapter(adapter.MessagePlatformAdapter):
|
|||||||
"""
|
"""
|
||||||
回复消息变成更新卡片消息
|
回复消息变成更新卡片消息
|
||||||
"""
|
"""
|
||||||
self.seq += 1
|
# self.seq += 1
|
||||||
message_id = bot_message.resp_message_id
|
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)
|
lark_message = await self.message_converter.yiri2target(message, self.api_client)
|
||||||
|
|
||||||
@@ -708,14 +709,14 @@ class LarkAdapter(adapter.MessagePlatformAdapter):
|
|||||||
ContentCardElementRequestBody.builder()
|
ContentCardElementRequestBody.builder()
|
||||||
# .uuid("a0d69e20-1dd1-458b-k525-dfeca4015204")
|
# .uuid("a0d69e20-1dd1-458b-k525-dfeca4015204")
|
||||||
.content(text_message)
|
.content(text_message)
|
||||||
.sequence(self.seq)
|
.sequence(msg_seq)
|
||||||
.build()
|
.build()
|
||||||
)
|
)
|
||||||
.build()
|
.build()
|
||||||
)
|
)
|
||||||
|
|
||||||
if is_final and bot_message.tool_calls is None:
|
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) # 清理已经使用过的卡片
|
self.card_id_dict.pop(message_id) # 清理已经使用过的卡片
|
||||||
# 发起请求
|
# 发起请求
|
||||||
response: ContentCardElementResponse = self.api_client.cardkit.v1.card_element.content(request)
|
response: ContentCardElementResponse = self.api_client.cardkit.v1.card_element.content(request)
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ class TelegramAdapter(adapter.MessagePlatformAdapter):
|
|||||||
self.ap = ap
|
self.ap = ap
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
self.msg_stream_id = {}
|
self.msg_stream_id = {}
|
||||||
self.seq = 1
|
# self.seq = 1
|
||||||
|
|
||||||
async def telegram_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
async def telegram_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
if update.message.from_user.is_bot:
|
if update.message.from_user.is_bot:
|
||||||
@@ -216,8 +216,8 @@ class TelegramAdapter(adapter.MessagePlatformAdapter):
|
|||||||
quote_origin: bool = False,
|
quote_origin: bool = False,
|
||||||
is_final: bool = False,
|
is_final: bool = False,
|
||||||
):
|
):
|
||||||
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:
|
||||||
|
|
||||||
assert isinstance(message_source.source_platform_object, Update)
|
assert isinstance(message_source.source_platform_object, Update)
|
||||||
components = await TelegramMessageConverter.yiri2target(message, self.bot)
|
components = await TelegramMessageConverter.yiri2target(message, self.bot)
|
||||||
@@ -264,7 +264,7 @@ class TelegramAdapter(adapter.MessagePlatformAdapter):
|
|||||||
|
|
||||||
await self.bot.edit_message_text(**args)
|
await self.bot.edit_message_text(**args)
|
||||||
if is_final and bot_message.tool_calls is None:
|
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
|
self.msg_stream_id.pop(message_id) # 消息回复结束之后删除流式消息id
|
||||||
|
|
||||||
async def is_stream_output_supported(self) -> bool:
|
async def is_stream_output_supported(self) -> bool:
|
||||||
|
|||||||
@@ -149,6 +149,10 @@ class MessageChunk(pydantic.BaseModel):
|
|||||||
tool_call_id: typing.Optional[str] = None
|
tool_call_id: typing.Optional[str] = None
|
||||||
|
|
||||||
is_final: bool = False
|
is_final: bool = False
|
||||||
|
"""是否是结束"""
|
||||||
|
|
||||||
|
msg_sequence: int = 0
|
||||||
|
"""消息迭代次数"""
|
||||||
|
|
||||||
def readable_str(self) -> str:
|
def readable_str(self) -> str:
|
||||||
if self.content is not None:
|
if self.content is not None:
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ class LocalAgentRunner(runner.RequestRunner):
|
|||||||
msg_idx = 0
|
msg_idx = 0
|
||||||
accumulated_content = '' # 从开始累积的所有内容
|
accumulated_content = '' # 从开始累积的所有内容
|
||||||
last_role = 'assistant'
|
last_role = 'assistant'
|
||||||
|
msg_sequence = 1
|
||||||
async for msg in query.use_llm_model.requester.invoke_llm_stream(
|
async for msg in query.use_llm_model.requester.invoke_llm_stream(
|
||||||
query,
|
query,
|
||||||
query.use_llm_model,
|
query.use_llm_model,
|
||||||
@@ -152,11 +152,13 @@ class LocalAgentRunner(runner.RequestRunner):
|
|||||||
# continue
|
# continue
|
||||||
# 每8个chunk或最后一个chunk时,输出所有累积的内容
|
# 每8个chunk或最后一个chunk时,输出所有累积的内容
|
||||||
if msg_idx % 8 == 0 or msg.is_final:
|
if msg_idx % 8 == 0 or msg.is_final:
|
||||||
|
msg_sequence += 1
|
||||||
yield llm_entities.MessageChunk(
|
yield llm_entities.MessageChunk(
|
||||||
role=last_role,
|
role=last_role,
|
||||||
content=accumulated_content, # 输出所有累积内容
|
content=accumulated_content, # 输出所有累积内容
|
||||||
tool_calls=list(tool_calls_map.values()) if (tool_calls_map and msg.is_final) else None,
|
tool_calls=list(tool_calls_map.values()) if (tool_calls_map and msg.is_final) else None,
|
||||||
is_final=msg.is_final,
|
is_final=msg.is_final,
|
||||||
|
msg_sequence=msg_sequence,
|
||||||
)
|
)
|
||||||
|
|
||||||
# 创建最终消息用于后续处理
|
# 创建最终消息用于后续处理
|
||||||
@@ -164,10 +166,12 @@ class LocalAgentRunner(runner.RequestRunner):
|
|||||||
role=last_role,
|
role=last_role,
|
||||||
content=accumulated_content,
|
content=accumulated_content,
|
||||||
tool_calls=list(tool_calls_map.values()) if tool_calls_map else None,
|
tool_calls=list(tool_calls_map.values()) if tool_calls_map else None,
|
||||||
|
msg_sequence=msg_sequence,
|
||||||
)
|
)
|
||||||
|
|
||||||
pending_tool_calls = final_msg.tool_calls
|
pending_tool_calls = final_msg.tool_calls
|
||||||
first_content = final_msg.content
|
first_content = final_msg.content
|
||||||
|
first_end_sequence = final_msg.msg_sequence
|
||||||
|
|
||||||
req_messages.append(final_msg)
|
req_messages.append(final_msg)
|
||||||
|
|
||||||
@@ -209,6 +213,7 @@ class LocalAgentRunner(runner.RequestRunner):
|
|||||||
msg_idx = 0
|
msg_idx = 0
|
||||||
accumulated_content = '' # 从开始累积的所有内容
|
accumulated_content = '' # 从开始累积的所有内容
|
||||||
last_role = 'assistant'
|
last_role = 'assistant'
|
||||||
|
msg_sequence = first_end_sequence
|
||||||
|
|
||||||
async for msg in query.use_llm_model.requester.invoke_llm_stream(
|
async for msg in query.use_llm_model.requester.invoke_llm_stream(
|
||||||
query,
|
query,
|
||||||
@@ -249,17 +254,21 @@ class LocalAgentRunner(runner.RequestRunner):
|
|||||||
|
|
||||||
# 每8个chunk或最后一个chunk时,输出所有累积的内容
|
# 每8个chunk或最后一个chunk时,输出所有累积的内容
|
||||||
if msg_idx % 8 == 0 or msg.is_final:
|
if msg_idx % 8 == 0 or msg.is_final:
|
||||||
|
msg_sequence += 1
|
||||||
yield llm_entities.MessageChunk(
|
yield llm_entities.MessageChunk(
|
||||||
role=last_role,
|
role=last_role,
|
||||||
content=accumulated_content, # 输出所有累积内容
|
content=accumulated_content, # 输出所有累积内容
|
||||||
tool_calls=list(tool_calls_map.values()) if (tool_calls_map and msg.is_final) else None,
|
tool_calls=list(tool_calls_map.values()) if (tool_calls_map and msg.is_final) else None,
|
||||||
is_final=msg.is_final,
|
is_final=msg.is_final,
|
||||||
|
msg_sequence=msg_sequence,
|
||||||
)
|
)
|
||||||
|
|
||||||
final_msg = llm_entities.MessageChunk(
|
final_msg = llm_entities.MessageChunk(
|
||||||
role=last_role,
|
role=last_role,
|
||||||
content=accumulated_content,
|
content=accumulated_content,
|
||||||
tool_calls=list(tool_calls_map.values()) if tool_calls_map else None,
|
tool_calls=list(tool_calls_map.values()) if tool_calls_map else None,
|
||||||
|
msg_sequence=msg_sequence,
|
||||||
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# 处理完所有调用,再次请求
|
# 处理完所有调用,再次请求
|
||||||
|
|||||||
Reference in New Issue
Block a user