use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct ChatCompletionRequest {
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversation_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_k: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct SourceReference {
#[serde(default)]
pub source_type: Option<String>,
#[serde(default)]
pub id: Option<String>,
#[serde(default)]
pub score: Option<f64>,
#[serde(default)]
pub snippet: Option<String>,
#[serde(default)]
pub document_id: Option<String>,
#[serde(default)]
pub file_path: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatCompletionResponse {
#[serde(default)]
pub conversation_id: Option<String>,
#[serde(default)]
pub user_message_id: Option<String>,
#[serde(default)]
pub assistant_message_id: Option<String>,
#[serde(default)]
pub content: Option<String>,
#[serde(default)]
pub mode: Option<String>,
#[serde(default)]
pub sources: Vec<SourceReference>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatStreamChunk {
#[serde(default)]
pub r#type: Option<String>,
#[serde(default)]
pub content: Option<String>,
#[serde(default)]
pub conversation_id: Option<String>,
#[serde(default)]
pub sources: Option<Vec<SourceReference>>,
#[serde(default)]
pub done: Option<bool>,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub user_message_id: Option<String>,
#[serde(default)]
pub assistant_message_id: Option<String>,
#[serde(default)]
pub tokens_used: Option<u32>,
#[serde(default)]
pub duration_ms: Option<u64>,
#[serde(default)]
pub llm_provider: Option<String>,
#[serde(default)]
pub llm_model: Option<String>,
}