pub struct TokenCounts {Show 15 fields
pub input_tokens: i64,
pub output_tokens: i64,
pub reasoning_tokens: i64,
pub cache_read: i64,
pub cache_creation: i64,
pub cache_creation_5m: i64,
pub cache_creation_1h: i64,
pub web_search_requests: i64,
pub total: i64,
pub above_input: i64,
pub above_output: i64,
pub above_reasoning: i64,
pub above_cache_read: i64,
pub above_cache_creation_5m: i64,
pub above_cache_creation_1h: i64,
}Expand description
Normalized token counts extracted from provider-specific usage data.
cache_creation is the total across TTL variants. For Claude Code, the
cache_creation_5m / cache_creation_1h split reflects Anthropic’s two
cache TTL tiers (5 minutes default, 1 hour extended — the latter is ~60%
more expensive per write). Providers that don’t split TTL (Codex, Gemini,
older Claude Code records) get all cache_creation tokens into the 5m bucket.
Invariant: cache_creation == cache_creation_5m + cache_creation_1h when
the split data is available.
reasoning_tokens carries the model’s “thinking” budget emitted as part
of the assistant turn but billed separately from user-visible output.
Populated by Gemini (thoughts_tokens), Codex
(reasoning_output_tokens), and Copilot (reasoning_output_tokens
after session::copilot::parse_copilot_events normalises it). Claude
has no equivalent and leaves this at 0.
Fields§
§input_tokens: i64Non-cached prompt tokens (cached reads are excluded; see cache_read).
output_tokens: i64User-visible completion tokens, excluding reasoning.
reasoning_tokens: i64Model “thinking” tokens, billed separately from output_tokens.
cache_read: i64Prompt tokens served from the provider’s prompt cache.
cache_creation: i64Total cache-write tokens across all TTL tiers.
cache_creation_5m: i64Cache-write tokens at the default 5-minute TTL.
cache_creation_1h: i64Cache-write tokens at the extended 1-hour TTL.
web_search_requests: i64Server-side web-search requests (Claude server_tool_use). Billed
per query (not per token) at the model’s web-search rate, so it is
tracked here but excluded from total.
total: i64Sum of the billed buckets used for cost and display.
above_input: i64Slice of input_tokens from requests whose own prompt context
exceeded the model’s context-tier threshold (see the above_tier
object written by the usage parsers). Always a subset of the field it
mirrors — never additional tokens — so displays keep using the totals
above while calculate_cost bills this slice at the tier rate.
above_output: i64Above-threshold slice of output_tokens.
above_reasoning: i64Above-threshold slice of reasoning_tokens.
above_cache_read: i64Above-threshold slice of cache_read.
above_cache_creation_5m: i64Above-threshold slice of cache_creation_5m.
above_cache_creation_1h: i64Above-threshold slice of cache_creation_1h.
Implementations§
Source§impl TokenCounts
impl TokenCounts
Sourcepub fn has_activity(&self) -> bool
pub fn has_activity(&self) -> bool
Whether any billed bucket carries a nonzero count.
The single source of truth for “did this usage do anything” — used to decide whether a date counts as active. New buckets added above must be reflected here so no activity check silently misses them.
Trait Implementations§
Source§impl Debug for TokenCounts
impl Debug for TokenCounts
Source§impl Default for TokenCounts
impl Default for TokenCounts
Source§fn default() -> TokenCounts
fn default() -> TokenCounts
Auto Trait Implementations§
impl Freeze for TokenCounts
impl RefUnwindSafe for TokenCounts
impl Send for TokenCounts
impl Sync for TokenCounts
impl Unpin for TokenCounts
impl UnsafeUnpin for TokenCounts
impl UnwindSafe for TokenCounts
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> 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