use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ToolDefinition {
pub name: String,
pub desc: String,
pub arguments: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Message {
pub role: Role,
pub blocks: Vec<ContentBlock>,
}
impl Message {
pub fn text(role: Role, text: impl Into<String>) -> Self {
Self {
role,
blocks: vec![ContentBlock::Text { text: text.into() }],
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub enum ContentBlock {
Text {
text: String,
},
Thinking {
text: String,
},
ToolUse {
id: String,
name: String,
input: serde_json::Value,
},
ToolResult {
tool_use_id: String,
content: Vec<ContentBlock>,
is_error: bool,
},
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub enum Role {
User,
Assistant,
Tool,
System,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ToolCall {
pub call_id: String,
pub tool_name: String,
pub arguments: Value,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct UserInteraction {
pub kind: String,
pub payload: Value,
}