use serde::{Deserialize, Serialize};
#[derive(Serialize, Debug)]
pub struct ChatCompletionRequest<'a> {
pub model: &'a str,
pub messages: Vec<ChatCompletionMessage>,
pub max_tokens: u32,
pub stream: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<serde_json::Value>>,
}
#[derive(Serialize, Debug)]
pub struct ChatCompletionMessage {
pub role: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_calls: Option<Vec<ToolCall>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Deserialize, Debug)]
pub struct ChatCompletionResponse {
pub id: Option<String>,
pub choices: Vec<Choice>,
}
#[derive(Deserialize, Debug)]
pub struct Choice {
pub message: Option<ChatMessage>,
pub delta: Option<ChatDelta>,
}
#[derive(Deserialize, Debug)]
pub struct ChatMessage {
pub role: Option<String>,
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_calls: Option<Vec<ToolCall>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_content: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ToolCall {
pub id: String,
#[serde(rename = "type")]
pub call_type: String,
pub function: ToolFunction,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ToolFunction {
pub name: String,
pub arguments: String, }
#[derive(Deserialize, Debug)]
pub struct ChatDelta {
pub content: Option<String>,
}