use crate::types::Acceleration;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatCompletionMessage {
pub role: String,
#[serde(default)]
pub content: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChatCompletionUsage {
pub prompt_tokens: u64,
pub completion_tokens: u64,
pub total_tokens: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatCompletionChoice {
pub index: usize,
pub message: ChatCompletionMessage,
#[serde(default)]
pub finish_reason: Option<String>,
#[serde(default)]
pub logprobs: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatCompletion {
pub object: String,
pub id: String,
pub model: String,
pub choices: Vec<ChatCompletionChoice>,
pub created: u64,
#[serde(default)]
pub usage: Option<ChatCompletionUsage>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChatCompletionDelta {
#[serde(default)]
pub role: Option<String>,
#[serde(default)]
pub content: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatCompletionChunkChoice {
pub index: usize,
#[serde(default)]
pub delta: Option<ChatCompletionDelta>,
#[serde(default)]
pub finish_reason: Option<String>,
#[serde(default)]
pub logprobs: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatCompletionChunk {
pub object: String,
pub id: String,
pub model: String,
pub choices: Vec<ChatCompletionChunkChoice>,
pub created: u64,
#[serde(default)]
pub usage: Option<ChatCompletionUsage>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ChatCompletionReasoningEffort {
#[serde(rename = "minimal")]
Minimal,
#[serde(rename = "low")]
Low,
#[serde(rename = "medium")]
Medium,
#[serde(rename = "high")]
High,
#[serde(rename = "xhigh")]
XHigh,
}
impl ChatCompletionReasoningEffort {
pub fn as_str(self) -> &'static str {
match self {
Self::Minimal => "minimal",
Self::Low => "low",
Self::Medium => "medium",
Self::High => "high",
Self::XHigh => "xhigh",
}
}
}
#[derive(Debug, Clone, Default)]
pub struct ChatCompletionCreateParams {
pub model: String,
pub messages: Vec<ChatCompletionMessage>,
pub response_format: Option<serde_json::Map<String, serde_json::Value>>,
pub reasoning_effort: Option<ChatCompletionReasoningEffort>,
pub max_completion_tokens: Option<i32>,
pub temperature: Option<f32>,
pub top_p: Option<f32>,
pub frequency_penalty: Option<f32>,
pub presence_penalty: Option<f32>,
pub acceleration: Option<Acceleration>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum EmbeddingData {
Float(Vec<f32>),
Base64(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Embedding {
pub object: String,
pub embedding: EmbeddingData,
pub index: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbeddingUsage {
pub prompt_tokens: u64,
pub total_tokens: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbeddingCreateResponse {
pub object: String,
pub model: String,
pub data: Vec<Embedding>,
pub usage: EmbeddingUsage,
}