pub struct TokenUsage {
pub prompt_tokens: u64,
pub completion_tokens: u64,
pub cache_read_tokens: u64,
pub cache_creation_tokens: u64,
pub thinking_tokens: u64,
pub count_type: TokenCountType,
pub request_count: u64,
pub session_start: Option<Instant>,
}Expand description
Token usage statistics for /cost command Tracks actual vs approximate tokens similar to Forge
Fields§
§prompt_tokens: u64Total prompt/input tokens
completion_tokens: u64Total completion/output tokens
cache_read_tokens: u64Cache read tokens (prompt caching)
cache_creation_tokens: u64Cache creation tokens (prompt caching)
thinking_tokens: u64Thinking/reasoning tokens (extended thinking models)
count_type: TokenCountTypeWhether the counts are actual or approximate
request_count: u64Number of requests made
session_start: Option<Instant>Session start time
Implementations§
Source§impl TokenUsage
impl TokenUsage
pub fn new() -> Self
Sourcepub fn add_actual(&mut self, input: u64, output: u64)
pub fn add_actual(&mut self, input: u64, output: u64)
Add actual tokens from API response
Sourcepub fn add_actual_extended(
&mut self,
input: u64,
output: u64,
cache_read: u64,
cache_creation: u64,
thinking: u64,
)
pub fn add_actual_extended( &mut self, input: u64, output: u64, cache_read: u64, cache_creation: u64, thinking: u64, )
Add actual tokens with cache and thinking info
Sourcepub fn add_estimated(&mut self, prompt: u64, completion: u64)
pub fn add_estimated(&mut self, prompt: u64, completion: u64)
Add estimated tokens (when API doesn’t return actual counts) Only updates if we don’t already have actual counts for this session
Sourcepub fn add_request(&mut self, prompt: u64, completion: u64)
pub fn add_request(&mut self, prompt: u64, completion: u64)
Legacy method for compatibility - adds estimated tokens
Sourcepub fn estimate_tokens(text: &str) -> u64
pub fn estimate_tokens(text: &str) -> u64
Estimate token count from text (rough approximation: ~4 chars per token) Matches Forge’s approach: char_count.div_ceil(4)
Sourcepub fn total_tokens(&self) -> u64
pub fn total_tokens(&self) -> u64
Get total tokens (input + output, excluding cache/thinking)
Sourcepub fn total_with_cache(&self) -> u64
pub fn total_with_cache(&self) -> u64
Get total tokens including cache reads (effective context size)
Sourcepub fn format_total(&self) -> String
pub fn format_total(&self) -> String
Format total tokens for display (with ~ prefix if approximate)
Sourcepub fn format_compact(&self) -> String
pub fn format_compact(&self) -> String
Get a short display string like Forge: “~1.2k” or “15k”
Sourcepub fn has_cache_hits(&self) -> bool
pub fn has_cache_hits(&self) -> bool
Check if we have cache hits (prompt caching is working)
Sourcepub fn has_thinking(&self) -> bool
pub fn has_thinking(&self) -> bool
Check if we have thinking tokens (extended thinking enabled)
Sourcepub fn session_duration(&self) -> Duration
pub fn session_duration(&self) -> Duration
Get session duration
Sourcepub fn estimate_cost(&self, model: &str) -> (f64, f64, f64)
pub fn estimate_cost(&self, model: &str) -> (f64, f64, f64)
Estimate cost based on model (rough estimates in USD) Returns (input_cost, output_cost, total_cost)
Sourcepub fn print_report(&self, model: &str)
pub fn print_report(&self, model: &str)
Print cost report
Trait Implementations§
Source§impl Clone for TokenUsage
impl Clone for TokenUsage
Source§fn clone(&self) -> TokenUsage
fn clone(&self) -> TokenUsage
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TokenUsage
impl Debug for TokenUsage
Source§impl Default for TokenUsage
impl Default for TokenUsage
Source§fn default() -> TokenUsage
fn default() -> TokenUsage
Auto Trait Implementations§
impl Freeze for TokenUsage
impl RefUnwindSafe for TokenUsage
impl Send for TokenUsage
impl Sync for TokenUsage
impl Unpin for TokenUsage
impl UnwindSafe for TokenUsage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more