1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(tag = "type", rename_all = "snake_case")]
6pub enum StreamEvent {
7 InitStream {
9 run_id: String,
10 conversation_id: String,
11 timestamp: i64,
12 },
13
14 Reasoning {
16 content: String,
17 },
18
19 Message {
21 content: String,
22 },
23
24 ToolCall {
26 index: u32,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 id: Option<String>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 name: Option<String>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 arguments: Option<String>,
33 },
34
35 ToolResult {
37 tool_call_id: String,
38 result: String,
39 is_error: bool,
40 duration_ms: u64,
41 },
42
43 Done {
45 #[serde(skip_serializing_if = "Option::is_none")]
46 finish_reason: Option<String>,
47 },
48
49 Error {
51 message: String,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 node_id: Option<String>,
54 },
55
56 EndStream {
58 status: String,
59 total_duration_ms: u64,
60 },
61}
62