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

1"""消息处理与格式化""" 

2 

3from dataclasses import dataclass, field 

4from typing import Optional 

5from enum import Enum 

6 

7 

8class MessageRole(str, Enum): 

9 USER = "user" 

10 ASSISTANT = "assistant" 

11 SYSTEM = "system" 

12 TOOL = "tool" 

13 

14 

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) 

23 

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 

32 

33 

34class MessageProcessor: 

35 """消息处理器,负责格式化与转换""" 

36 

37 @staticmethod 

38 def format_for_llm(messages: list[Message]) -> list[dict]: 

39 """格式化为 LLM 可接受的格式""" 

40 return [msg.to_dict() for msg in messages] 

41 

42 @staticmethod 

43 def parse_response(raw: str) -> Message: 

44 """解析 LLM 响应为 Message 对象""" 

45 return Message(role=MessageRole.ASSISTANT, content=raw)