lash/usage.rs
1//! Token usage tracking surfaces.
2//!
3//! Four channels, finest granularity to coarsest:
4//!
5//! - **`TraceSink`**: every provider call across every session in the
6//! runtime. Right for billing, audit, off-line analysis. Heavier than
7//! necessary if you only want totals. See [`crate::tracing`].
8//! - **[`TurnEvent::Usage`] / [`TurnEvent::ChildUsage`]**: live during a
9//! turn, one event per LLM iteration. `Usage` is the parent's own
10//! model call; `ChildUsage` carries `session_id` + `source` so a UI can
11//! group child traffic (e.g. by subagent). Right for live counters.
12//! - **[`TurnResult::usage`] / [`TurnResult::children_usage`]**: per-turn
13//! snapshot at completion. `usage` is parent-only; `children_usage` is a
14//! per-`(source, model)` breakdown. [`TurnResult::total_usage`] sums both.
15//! Right for "what did this message cost."
16//! - **[`SessionUsageReport`]** (`session.usage_report()`): aggregate
17//! across the whole session, broken down by `source` × `model`. Right for
18//! dashboards and "session so far."
19//!
20//! [`TurnEvent::Usage`]: lash_core::TurnEvent::Usage
21//! [`TurnEvent::ChildUsage`]: lash_core::TurnEvent::ChildUsage
22//! [`TurnResult::usage`]: crate::TurnResult::usage
23//! [`TurnResult::children_usage`]: crate::TurnResult::children_usage
24//! [`TurnResult::total_usage`]: crate::TurnResult::total_usage
25
26pub use lash_core::{
27 SessionUsageReport, TokenLedgerEntry, TokenUsage, UsageReportRow, UsageTotals,
28 diff_token_ledger, diff_usage_reports,
29};
30
31/// Well-known source labels used by the runtime and first-party plugins.
32///
33/// The `source` field on [`TokenLedgerEntry`] and `ChildUsage` events is a
34/// free-form string; the runtime does not interpret the value. Plugins may
35/// use additional labels of their own.
36pub mod sources {
37 /// Parent's own LLM calls.
38 pub const TURN: &str = "turn";
39 /// Spawned subagent sessions.
40 pub const SUBAGENT: &str = "subagent";
41 /// Rolling-history compaction passes.
42 pub const COMPACTION: &str = "compaction";
43 /// Async observational-memory observer runs.
44 pub const OBSERVER: &str = "observer";
45 /// Async observational-memory reflector runs.
46 pub const REFLECTOR: &str = "reflector";
47 /// Default fallback when no `usage_source` is set on a child session.
48 pub const CHILD: &str = "child";
49}