use serde::{Deserialize, Serialize};
use crate::ToolCall;
use super::usage::Usage;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StreamResponse {
pub choices: Vec<StreamChoice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub usage: Option<Usage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StreamChoice {
pub delta: StreamDelta,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StreamDelta {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_calls: Option<Vec<ToolCall>>,
}
#[derive(Debug, Clone)]
pub enum StreamChunk {
Text(String),
ToolUseStart {
index: usize,
id: String,
name: String,
},
ToolUseInputDelta {
index: usize,
partial_json: String,
},
ToolUseComplete {
index: usize,
tool_call: ToolCall,
},
Done {
stop_reason: String,
},
}