LegionWeb.UsageAggregator (LegionWeb v0.5.0)

View Source

Aggregates and formats the per-request LLM usage entries returned by LegionWeb.AgentTracker.get_usage/1.

Entries are the string-keyed maps Legion records for each LLM request ("input_tokens", "output_tokens", "cached_tokens", "reasoning_tokens", "total_cost", "at", ...). Missing counters count as zero; cost is nil until at least one entry reports "total_cost".

Summary

Functions

Formats a dollar cost to three decimals, or nil when unknown.

Abbreviates a token count: 842, 12.3k, 1.25M.

Reads one token counter from an entry, treating missing values as zero.

Sums token counters and cost across usage entries.

Types

totals()

@type totals() :: %{
  requests: non_neg_integer(),
  input: non_neg_integer(),
  output: non_neg_integer(),
  cached: non_neg_integer(),
  reasoning: non_neg_integer(),
  cost: number() | nil
}

Functions

format_cost(cost)

@spec format_cost(number() | nil) :: String.t() | nil

Formats a dollar cost to three decimals, or nil when unknown.

format_tokens(n)

@spec format_tokens(integer()) :: String.t()

Abbreviates a token count: 842, 12.3k, 1.25M.

tokens(entry, key)

@spec tokens(map(), String.t()) :: non_neg_integer()

Reads one token counter from an entry, treating missing values as zero.

totals(usage)

@spec totals([map()]) :: totals()

Sums token counters and cost across usage entries.