#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(default))]
pub struct Usage {
pub input_tokens: u64,
pub output_tokens: u64,
pub cached_input_tokens: u64,
}
impl Usage {
pub fn cache_hit(&self) -> bool {
self.cached_input_tokens > 0
}
pub fn total_tokens(&self) -> u64 {
self.input_tokens + self.output_tokens + self.cached_input_tokens
}
pub fn from_gemini(
prompt_token_count: u64,
candidates_token_count: u64,
cached_content_token_count: u64,
) -> Self {
Self {
input_tokens: prompt_token_count.saturating_sub(cached_content_token_count),
output_tokens: candidates_token_count,
cached_input_tokens: cached_content_token_count,
}
}
}