mirror of
https://gitcode.com/JianFeeeee/TrulyMEM-TrueHumanMEM.git
synced 2026-09-20 17:08:18 +00:00
99 lines
3.4 KiB
Python
99 lines
3.4 KiB
Python
"""消息处理器"""
|
|
|
|
from datetime import datetime
|
|
from typing import TYPE_CHECKING
|
|
from ..models.message import Message, ToolCall, ToolResult
|
|
|
|
if TYPE_CHECKING:
|
|
from ..services.chat_service import ChatService
|
|
from ..widgets.message_history import MessageHistory
|
|
from ..widgets.operation_log import OperationLog
|
|
|
|
|
|
class MessageHandler:
|
|
"""消息处理器"""
|
|
|
|
def __init__(
|
|
self,
|
|
chat_service: "ChatService",
|
|
message_history: "MessageHistory",
|
|
operation_log: "OperationLog"
|
|
):
|
|
self._chat_service = chat_service
|
|
self._message_history = message_history
|
|
self._operation_log = operation_log
|
|
|
|
async def handle_user_message(self, content: str) -> None:
|
|
"""处理用户消息"""
|
|
# 创建用户消息
|
|
user_message = Message(
|
|
role="user",
|
|
content=content,
|
|
timestamp=datetime.now()
|
|
)
|
|
|
|
# 添加到历史
|
|
self._message_history.add_message(user_message)
|
|
|
|
# 发送到聊天服务
|
|
await self._process_response(content)
|
|
|
|
async def _process_response(self, user_input: str) -> None:
|
|
"""处理响应"""
|
|
streaming_message = None
|
|
|
|
async for event in self._chat_service.send_message(user_input):
|
|
if event["type"] == "user_message":
|
|
# 用户消息已处理
|
|
pass
|
|
|
|
elif event["type"] == "content_delta":
|
|
# 流式内容更新
|
|
if streaming_message is None:
|
|
# 创建流式消息
|
|
streaming_message = Message(
|
|
role="assistant",
|
|
content="",
|
|
timestamp=datetime.now()
|
|
)
|
|
self._message_history.add_message(streaming_message)
|
|
|
|
# 更新消息内容
|
|
self._message_history.update_latest_message(event["content"])
|
|
|
|
elif event["type"] == "assistant_message":
|
|
# 模型消息完成
|
|
if streaming_message:
|
|
# 更新最终消息(包含工具调用信息)
|
|
streaming_message.content = event["content"]
|
|
streaming_message.tool_calls = event.get("tool_calls")
|
|
streaming_message.tool_results = event.get("tool_results")
|
|
else:
|
|
# 如果没有流式消息,直接添加
|
|
message = Message(
|
|
role="assistant",
|
|
content=event["content"],
|
|
timestamp=datetime.now(),
|
|
tool_calls=event.get("tool_calls"),
|
|
tool_results=event.get("tool_results")
|
|
)
|
|
self._message_history.add_message(message)
|
|
|
|
elif event["type"] == "tool_call":
|
|
# 工具调用开始
|
|
pass
|
|
|
|
elif event["type"] == "tool_result":
|
|
# 工具执行结果
|
|
log_entry = event["log_entry"]
|
|
self._operation_log.add_log(log_entry)
|
|
|
|
elif event["type"] == "error":
|
|
# 错误处理
|
|
error_message = Message(
|
|
role="assistant",
|
|
content=f"错误: {event['error']}",
|
|
timestamp=datetime.now()
|
|
)
|
|
self._message_history.add_message(error_message)
|