1use serde_json::Value;
5
6#[derive(Clone, Copy, Debug, PartialEq)]
7pub enum Role {
8 User,
9 Assistant,
10}
11
12#[derive(Clone, Debug)]
13pub enum Block {
14 Text(String),
15 ToolUse { id: String, name: String, input: Value },
17 ToolResult { id: String, content: String, is_error: bool },
19}
20
21#[derive(Clone, Debug)]
22pub struct Msg {
23 pub role: Role,
24 pub blocks: Vec<Block>,
25}
26
27impl Msg {
28 pub fn user_text(s: impl Into<String>) -> Msg {
29 Msg { role: Role::User, blocks: vec![Block::Text(s.into())] }
30 }
31}
32
33#[derive(Clone, Debug)]
35pub struct ToolSpec {
36 pub name: String,
37 pub description: String,
38 pub schema: Value,
39}
40
41#[derive(Clone, Copy, Debug, PartialEq)]
42pub enum Stop {
43 EndTurn,
44 ToolUse,
45 Other,
46}
47
48#[derive(Clone, Debug)]
50pub struct Turn {
51 pub text: String,
52 pub tool_uses: Vec<(String, String, Value)>,
54 pub stop: Stop,
55}