use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAIChunk {
#[allow(dead_code)]
pub id: String,
#[allow(dead_code)]
pub object: String,
#[allow(dead_code)]
pub created: i64,
#[allow(dead_code)]
pub model: String,
pub choices: Vec<OpenAIChoice>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAIChoice {
#[allow(dead_code)]
pub index: u32,
pub delta: OpenAIDelta,
pub finish_reason: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAIDelta {
#[allow(dead_code)]
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_calls: Option<Vec<OpenAIToolCallDelta>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning: Option<String>,
}
impl OpenAIDelta {
pub fn reasoning_delta(&self) -> Option<&str> {
self.reasoning_content
.as_deref()
.or(self.reasoning.as_deref())
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAIToolCallDelta {
pub index: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[allow(dead_code)]
#[serde(skip_serializing_if = "Option::is_none", rename = "type")]
pub call_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub function: Option<OpenAIFunctionDelta>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAIFunctionDelta {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<String>,
}