1use serde::{Deserialize, Serialize};
2
3use crate::items::ThreadItem;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
7pub struct Usage {
8 pub input_tokens: u64,
10 pub cached_input_tokens: u64,
12 pub output_tokens: u64,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
18pub struct ThreadError {
19 pub message: String,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
25pub struct ThreadStartedEvent {
26 pub thread_id: String,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
32pub struct TurnStartedEvent;
33
34#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
36pub struct TurnCompletedEvent {
37 pub usage: Usage,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
43pub struct TurnFailedEvent {
44 pub error: ThreadError,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
50pub struct ItemStartedEvent {
51 pub item: ThreadItem,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
57pub struct ItemUpdatedEvent {
58 pub item: ThreadItem,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
64pub struct ItemCompletedEvent {
65 pub item: ThreadItem,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
71pub struct ThreadErrorEvent {
72 pub message: String,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
78#[serde(tag = "type")]
79pub enum ThreadEvent {
80 #[serde(rename = "thread.started")]
82 ThreadStarted {
83 thread_id: String,
85 },
86 #[serde(rename = "turn.started")]
88 TurnStarted,
89 #[serde(rename = "turn.completed")]
91 TurnCompleted {
92 usage: Usage,
94 },
95 #[serde(rename = "turn.failed")]
97 TurnFailed {
98 error: ThreadError,
100 },
101 #[serde(rename = "item.started")]
103 ItemStarted {
104 item: ThreadItem,
106 },
107 #[serde(rename = "item.updated")]
109 ItemUpdated {
110 item: ThreadItem,
112 },
113 #[serde(rename = "item.completed")]
115 ItemCompleted {
116 item: ThreadItem,
118 },
119 #[serde(rename = "error")]
121 Error {
122 message: String,
124 },
125}