use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct UsageResponse {
pub object: String,
pub data: Vec<UsageTimeBucket>,
pub has_more: bool,
pub next_page: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageTimeBucket {
pub object: String,
pub start_time: u64,
pub end_time: u64,
#[serde(default)]
pub start_time_iso: Option<String>,
#[serde(default)]
pub end_time_iso: Option<String>,
pub results: Vec<UsageResult>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(untagged)]
pub enum UsageResult {
AudioSpeeches(UsageAudioSpeechesResult),
AudioTranscriptions(UsageAudioTranscriptionsResult),
CodeInterpreterSessions(UsageCodeInterpreterSessionsResult),
Completions(UsageCompletionsResult),
Embeddings(UsageEmbeddingsResult),
Images(UsageImagesResult),
Moderations(UsageModerationsResult),
VectorStores(UsageVectorStoresResult),
Costs(CostsResult),
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageAudioSpeechesResult {
pub object: String,
pub characters: u64,
pub num_model_requests: u64,
pub project_id: Option<String>,
pub user_id: Option<String>,
pub api_key_id: Option<String>,
pub model: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageAudioTranscriptionsResult {
pub object: String,
pub seconds: u64,
pub num_model_requests: u64,
pub project_id: Option<String>,
pub user_id: Option<String>,
pub api_key_id: Option<String>,
pub model: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageCodeInterpreterSessionsResult {
pub object: String,
pub num_sessions: u64,
pub project_id: Option<String>,
pub api_key_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageCompletionsResult {
pub object: String,
pub input_tokens: u64,
pub output_tokens: u64,
#[serde(default)]
pub input_cached_tokens: Option<u64>,
#[serde(default)]
pub input_uncached_tokens: Option<u64>,
#[serde(default)]
pub input_text_tokens: Option<u64>,
#[serde(default)]
pub output_text_tokens: Option<u64>,
#[serde(default)]
pub input_cached_text_tokens: Option<u64>,
#[serde(default)]
pub input_audio_tokens: Option<u64>,
#[serde(default)]
pub input_cached_audio_tokens: Option<u64>,
#[serde(default)]
pub output_audio_tokens: Option<u64>,
#[serde(default)]
pub input_image_tokens: Option<u64>,
#[serde(default)]
pub input_cached_image_tokens: Option<u64>,
#[serde(default)]
pub output_image_tokens: Option<u64>,
pub num_model_requests: u64,
pub project_id: Option<String>,
pub user_id: Option<String>,
pub api_key_id: Option<String>,
pub model: Option<String>,
pub batch: Option<bool>,
pub service_tier: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageEmbeddingsResult {
pub object: String,
pub input_tokens: u64,
pub num_model_requests: u64,
pub project_id: Option<String>,
pub user_id: Option<String>,
pub api_key_id: Option<String>,
pub model: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageImagesResult {
pub object: String,
pub images: u64,
pub num_model_requests: u64,
pub source: Option<String>,
pub size: Option<String>,
pub project_id: Option<String>,
pub user_id: Option<String>,
pub api_key_id: Option<String>,
pub model: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageModerationsResult {
pub object: String,
pub input_tokens: u64,
pub num_model_requests: u64,
pub project_id: Option<String>,
pub user_id: Option<String>,
pub api_key_id: Option<String>,
pub model: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UsageVectorStoresResult {
pub object: String,
pub usage_bytes: u64,
pub project_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CostsResult {
pub object: String,
pub amount: CostsAmount,
pub line_item: Option<String>,
pub project_id: Option<String>,
#[serde(default)]
pub organization_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CostsAmount {
pub value: f64,
pub currency: String,
}