use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Completion {
pub id: String,
pub choices: Vec<CompletionChoice>,
pub created: usize,
pub model: String,
pub object: String,
pub system_fingerprint: Option<String>,
pub usage: Option<CompletionUsage>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Logprobs {
pub text_offset: Option<Vec<usize>>,
pub token_logprobs: Option<Vec<f32>>,
pub tokens: Option<Vec<String>>,
pub top_logprobs: Option<Vec<HashMap<String, f32>>>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct CompletionChoice {
pub finish_reason: Option<String>,
pub index: usize,
pub logprobs: Option<Logprobs>,
pub text: String,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct CompletionTokensDetails {
pub accepted_prediction_tokens: Option<usize>,
pub audio_tokens: Option<usize>,
pub reasoning_tokens: Option<usize>,
pub rejected_prediction_tokens: Option<usize>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct PromptTokensDetails {
pub audio_tokens: Option<usize>,
pub cached_tokens: Option<usize>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct CompletionUsage {
pub completion_tokens: usize,
pub prompt_tokens: usize,
pub total_tokens: usize,
pub completion_tokens_details: Option<CompletionTokensDetails>,
pub prompt_tokens_details: Option<PromptTokensDetails>,
}
crate::impl_from_str!(Completion);