use serde_json::Value;
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Role {
User,
Assistant,
}
#[derive(Clone, Debug)]
pub enum Block {
Text(String),
ToolUse { id: String, name: String, input: Value },
ToolResult { id: String, content: String, is_error: bool },
}
#[derive(Clone, Debug)]
pub struct Msg {
pub role: Role,
pub blocks: Vec<Block>,
}
impl Msg {
pub fn user_text(s: impl Into<String>) -> Msg {
Msg { role: Role::User, blocks: vec![Block::Text(s.into())] }
}
}
#[derive(Clone, Debug)]
pub struct ToolSpec {
pub name: String,
pub description: String,
pub schema: Value,
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Stop {
EndTurn,
ToolUse,
Other,
}
#[derive(Clone, Debug)]
pub struct Turn {
pub text: String,
pub tool_uses: Vec<(String, String, Value)>,
pub stop: Stop,
}