Skip to main content

TokenCounts

Struct TokenCounts 

Source
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: i64

Non-cached prompt tokens (cached reads are excluded; see cache_read).

§output_tokens: i64

User-visible completion tokens, excluding reasoning.

§reasoning_tokens: i64

Model “thinking” tokens, billed separately from output_tokens.

§cache_read: i64

Prompt tokens served from the provider’s prompt cache.

§cache_creation: i64

Total cache-write tokens across all TTL tiers.

§cache_creation_5m: i64

Cache-write tokens at the default 5-minute TTL.

§cache_creation_1h: i64

Cache-write tokens at the extended 1-hour TTL.

§web_search_requests: i64

Server-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: i64

Sum of the billed buckets used for cost and display.

§above_input: i64

Slice 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: i64

Above-threshold slice of output_tokens.

§above_reasoning: i64

Above-threshold slice of reasoning_tokens.

§above_cache_read: i64

Above-threshold slice of cache_read.

§above_cache_creation_5m: i64

Above-threshold slice of cache_creation_5m.

§above_cache_creation_1h: i64

Above-threshold slice of cache_creation_1h.

Implementations§

Source§

impl TokenCounts

Source

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

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for TokenCounts

Source§

fn default() -> TokenCounts

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more