Represents a message in a conversation.
| 66 | |
| 67 | @dataclass |
| 68 | class Message: |
| 69 | """Represents a message in a conversation.""" |
| 70 | role: Role |
| 71 | content: str |
| 72 | tool_calls: list[ToolCall] = field(default_factory=list) |
| 73 | tool_results: list[ToolResult] = field(default_factory=list) |
| 74 | name: Optional[str] = None |
| 75 | |
| 76 | def to_dict(self) -> dict: |
| 77 | """Convert to dictionary representation.""" |
| 78 | result = { |
| 79 | 'role': self.role.value, |
| 80 | 'content': self.content |
| 81 | } |
| 82 | if self.tool_calls: |
| 83 | result['tool_calls'] = [tc.to_dict() for tc in self.tool_calls] |
| 84 | if self.tool_results: |
| 85 | result['tool_results'] = [tr.to_dict() for tr in self.tool_results] |
| 86 | if self.name: |
| 87 | result['name'] = self.name |
| 88 | return result |
| 89 | |
| 90 | @classmethod |
| 91 | def system(cls, content: str) -> 'Message': |
| 92 | """Create a system message.""" |
| 93 | return cls(role=Role.SYSTEM, content=content) |
| 94 | |
| 95 | @classmethod |
| 96 | def user(cls, content: str) -> 'Message': |
| 97 | """Create a user message.""" |
| 98 | return cls(role=Role.USER, content=content) |
| 99 | |
| 100 | @classmethod |
| 101 | def assistant(cls, content: str, |
| 102 | tool_calls: list[ToolCall] = None) -> 'Message': |
| 103 | """Create an assistant message.""" |
| 104 | return cls( |
| 105 | role=Role.ASSISTANT, |
| 106 | content=content, |
| 107 | tool_calls=tool_calls or [] |
| 108 | ) |
| 109 | |
| 110 | @classmethod |
| 111 | def tool_result(cls, tool_call_id: str, content: str, |
| 112 | is_error: bool = False) -> 'Message': |
| 113 | """Create a tool result message.""" |
| 114 | return cls( |
| 115 | role=Role.TOOL, |
| 116 | content='', |
| 117 | tool_results=[ToolResult( |
| 118 | tool_call_id=tool_call_id, |
| 119 | content=content, |
| 120 | is_error=is_error |
| 121 | )] |
| 122 | ) |
| 123 | |
| 124 | |
| 125 | @dataclass |
no outgoing calls
no test coverage detected