Skip to main content

Usage

Struct Usage 

Source
pub struct Usage {
    pub uncached_input_tokens: u32,
    pub cache_read_tokens: u32,
    pub cache_write_tokens: u32,
    pub completion_tokens: u32,
    pub cost: Option<f64>,
    pub upstream_inference_cost: Option<f64>,
    pub reasoning_tokens: Option<u32>,
}
Expand description

Normalized token usage + cost, the common currency every provider’s Provider parses its native wire shape into.

Input tokens are split into THREE DISJOINT, ADDITIVE buckets so caching is priced correctly across every provider’s differing wire conventions:

  • uncached_input_tokens: full-price prompt tokens (no cache involved),
  • cache_read_tokens: served from a warm cache (cheap, ~0.1× input),
  • cache_write_tokens: written to the cache this request (a premium, ~1.25×).

They never overlap, so total input = the sum of the three, and cost is a clean weighted sum with no subtraction (the old single cached_tokens field forced a subtract that was correct for OpenAI’s “cached is a subset of prompt_tokens” wire but WRONG for Anthropic’s “input_tokens already excludes cached” wire). Each provider’s parser maps its native fields into these disjoint buckets.

Built by the provider (the nested per-provider wire shapes don’t match these flat fields), and serialized into node metadata for diagnostics. Deliberately NOT Deserialize: a derived flat-field deserializer would silently produce all-zero/None fields against the real nested payloads.

Fields§

§uncached_input_tokens: u32

Full-price input tokens (NOT read from nor written to cache this request).

§cache_read_tokens: u32

Input tokens served from a warm cache (priced at the cache-read rate).

§cache_write_tokens: u32

Input tokens written to the cache this request (priced at the cache-write premium). Non-zero only on the request that creates/refreshes a cache entry.

§completion_tokens: u32

Number of tokens in the completion (output).

§cost: Option<f64>

Cost in USD (for OpenRouter, the fee; may be 0 on a BYOK free tier or when the provider returns no native cost). None if the wire carried no cost.

§upstream_inference_cost: Option<f64>

Upstream inference cost (only for BYOK requests, the actual cost charged by the provider like Google Vertex or Bedrock)

§reasoning_tokens: Option<u32>

Reasoning tokens (for models that support it)

Implementations§

Source§

impl Usage

Source

pub fn prompt_tokens(&self) -> u32

Total input tokens processed = the three disjoint input buckets summed.

Source

pub fn total_tokens(&self) -> u32

Total tokens (input + output).

Trait Implementations§

Source§

impl Clone for Usage

Source§

fn clone(&self) -> Usage

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Usage

Source§

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

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

impl Default for Usage

Source§

fn default() -> Usage

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

impl Serialize for Usage

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Usage

§

impl RefUnwindSafe for Usage

§

impl Send for Usage

§

impl Sync for Usage

§

impl Unpin for Usage

§

impl UnsafeUnpin for Usage

§

impl UnwindSafe for Usage

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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