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