#[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_chat_completions(
prompt_tokens: u64,
completion_tokens: u64,
cached_tokens: u64,
) -> Self {
Self {
input_tokens: prompt_tokens.saturating_sub(cached_tokens),
output_tokens: completion_tokens,
cached_input_tokens: cached_tokens,
}
}
pub fn from_responses_api(
input_tokens: u64,
output_tokens: u64,
cached_input_tokens: u64,
) -> Self {
Self {
input_tokens,
output_tokens,
cached_input_tokens,
}
}
}