use serde::{Deserialize, Serialize};
#[allow(unused_imports)]
use crate::prelude::*;
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct Usage {
pub prompt_tokens: i32,
pub completion_tokens: i32,
pub total_tokens: i32,
pub prompt_tokens_details: PromptUsageDetail,
pub completion_tokens_details: CompletionUsageDetail,
pub num_sources_used: i32,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct PromptUsageDetail {
pub text_tokens: i32,
pub audio_tokens: i32,
pub image_tokens: i32,
pub cached_tokens: i32,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct CompletionUsageDetail {
pub reasoning_tokens: i32,
pub audio_tokens: i32,
pub accepted_prediction_tokens: i32,
pub rejected_prediction_tokens: i32,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ModelUsage {
pub input_tokens: i32,
pub input_tokens_details: InputTokensDetails,
pub output_tokens: i32,
pub output_tokens_details: OutputTokensDetails,
pub total_tokens: i32,
pub num_sources_used: i32,
pub num_server_side_tools_used: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub cost_in_nano_usd: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub server_side_tool_usage_details: Option<ServerSideToolUsageDetails>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct InputTokensDetails {
pub cached_tokens: i32,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct OutputTokensDetails {
pub reasoning_tokens: i32,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ServerSideToolUsageDetails {
pub web_search_calls: i32,
pub x_search_calls: i32,
pub code_interpreter_calls: i32,
pub file_search_calls: i32,
pub mcp_calls: i32,
pub document_search_calls: i32,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct EmbeddingUsage {
pub prompt_tokens: i32,
pub total_tokens: i32,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct MessageUsage {
pub input_tokens: i32,
pub cache_creation_input_tokens: i32,
pub cache_read_input_tokens: i32,
pub output_tokens: i32,
}