Coverage for merco/core/message.py: 72%
29 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 14:04 +0800
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 14:04 +0800
1"""消息处理与格式化"""
3from dataclasses import dataclass, field
4from typing import Optional
5from enum import Enum
8class MessageRole(str, Enum):
9 USER = "user"
10 ASSISTANT = "assistant"
11 SYSTEM = "system"
12 TOOL = "tool"
15@dataclass
16class Message:
17 """标准消息结构"""
18 role: MessageRole
19 content: str
20 tool_calls: list = field(default_factory=list)
21 tool_result: Optional[dict] = None
22 metadata: dict = field(default_factory=dict)
24 def to_dict(self) -> dict:
25 """转换为字典格式"""
26 result = {"role": self.role.value, "content": self.content}
27 if self.tool_calls:
28 result["tool_calls"] = self.tool_calls
29 if self.tool_result:
30 result["tool_result"] = self.tool_result
31 return result
34class MessageProcessor:
35 """消息处理器,负责格式化与转换"""
37 @staticmethod
38 def format_for_llm(messages: list[Message]) -> list[dict]:
39 """格式化为 LLM 可接受的格式"""
40 return [msg.to_dict() for msg in messages]
42 @staticmethod
43 def parse_response(raw: str) -> Message:
44 """解析 LLM 响应为 Message 对象"""
45 return Message(role=MessageRole.ASSISTANT, content=raw)