| 67 | |
| 68 | @dataclass(frozen=True) |
| 69 | class ConversationMessage: |
| 70 | role: str |
| 71 | blocks: tuple[ContentBlock, ...] |
| 72 | usage: Optional[TokenUsage] = None |
| 73 | |
| 74 | @staticmethod |
| 75 | def user_text(text: str) -> "ConversationMessage": |
| 76 | return ConversationMessage(role="user", blocks=(TextBlock(text=text),)) |
| 77 | |
| 78 | @staticmethod |
| 79 | def assistant_text(text: str) -> "ConversationMessage": |
| 80 | return ConversationMessage(role="assistant", blocks=(TextBlock(text=text),)) |
| 81 | |
| 82 | @staticmethod |
| 83 | def system_text(text: str) -> "ConversationMessage": |
| 84 | return ConversationMessage(role="system", blocks=(TextBlock(text=text),)) |
| 85 | |
| 86 | @staticmethod |
| 87 | def tool_result(tool_use_id: str, tool_name: str, output: str, is_error: bool = False) -> "ConversationMessage": |
| 88 | return ConversationMessage( |
| 89 | role="tool", |
| 90 | blocks=(ToolResultBlock(tool_use_id=tool_use_id, tool_name=tool_name, output=output, is_error=is_error),), |
| 91 | ) |
| 92 | |
| 93 | @dataclass |
| 94 | class Session: |
no outgoing calls
no test coverage detected