use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct Completion {
pub id: String,
pub choices: Vec<CompletionChoice>,
pub created: i64,
pub model: String,
pub object: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub system_fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub usage: Option<CompletionUsage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct Logprobs {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub text_offset: Option<Vec<i64>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub token_logprobs: Option<Vec<f64>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub tokens: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub top_logprobs: Option<Vec<std::collections::HashMap<String, f64>>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum CompletionChoiceFinishReason {
#[serde(rename = "stop")]
Stop,
#[serde(rename = "length")]
Length,
#[serde(rename = "content_filter")]
ContentFilter,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct CompletionChoice {
pub finish_reason: CompletionChoiceFinishReason,
pub index: i64,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub logprobs: Option<Logprobs>,
pub text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct CompletionCreateParamsBase {
pub model: Option<String>,
pub prompt: serde_json::Value,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub best_of: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub echo: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub frequency_penalty: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub logit_bias: Option<std::collections::HashMap<String, i64>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub logprobs: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub max_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub n: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub presence_penalty: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub seed: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub stop: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub stream_options: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub suffix: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub temperature: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub top_p: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub user: Option<String>,
}
pub type CompletionCreateParams = serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct CompletionTokensDetails {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub accepted_prediction_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub audio_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub reasoning_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub rejected_prediction_tokens: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct PromptTokensDetails {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub audio_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub cached_tokens: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct CompletionUsage {
pub completion_tokens: i64,
pub prompt_tokens: i64,
pub total_tokens: i64,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub completion_tokens_details: Option<CompletionTokensDetails>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub prompt_tokens_details: Option<PromptTokensDetails>,
}