use serde::{Deserialize, Serialize};
use crate::messages::{Message, ToolResult};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
#[non_exhaustive]
pub enum AgentEvent {
AgentStart,
AgentEnd {
messages: Vec<Message>,
},
TurnStart,
TurnEnd {
message: Message,
tool_results: Vec<ToolResult>,
},
MessageStart {
message: Message,
},
MessageDelta {
delta: String,
tokens_generated: u32,
tokens_per_sec: f64,
},
MessageEnd {
message: Message,
},
GenerationStats {
tokens_generated: u32,
prompt_tokens: u32,
tokens_per_sec: f64,
time_to_first_token_ms: f64,
generation_time_ms: f64,
},
ToolExecStart {
tool_call_id: String,
tool_name: String,
args: serde_json::Value,
},
ToolExecUpdate {
tool_call_id: String,
tool_name: String,
partial: String,
},
ToolExecEnd {
tool_call_id: String,
tool_name: String,
result: ToolResult,
},
ContextBudget {
used_tokens: u32,
max_tokens: u32,
messages_in_context: u32,
messages_pruned: u32,
},
Warning {
message: String,
},
Error {
message: String,
},
}