use serde::{Deserialize, Serialize};
use super::tools::ToolCall;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct AudioFrame {
pub data: Vec<u8>,
pub sample_rate: i64,
}
impl AudioFrame {
pub fn new(data: Vec<u8>, sample_rate: i64) -> Self {
Self { data, sample_rate }
}
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GenerationStats {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub prompt_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub completion_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub duration_ms: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub ttft_ms: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub load_ms: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub finish_reason: Option<String>,
#[serde(default)]
pub token_counts_estimated: bool,
}
#[derive(Debug, Clone, PartialEq)]
pub enum CapabilityChunk {
Text(String),
Thinking(String),
Segment {
text: String,
start_ms: i64,
end_ms: i64,
},
Audio(AudioFrame),
Vector(Vec<f64>),
ToolCall(ToolCall),
Status(String),
Done(Option<GenerationStats>),
}