Skip to main content

CostTracker

Struct CostTracker 

Source
pub struct CostTracker { /* private fields */ }
Expand description

Cost tracker for API usage monitoring and budget enforcement.

Implementations§

Source§

impl CostTracker

Source

pub fn new( config: CostConfig, workspace_dir: &Path, ) -> Result<CostTracker, Error>

Create a new cost tracker.

Source

pub fn session_id(&self) -> &str

Get the session ID.

Source

pub fn check_budget( &self, estimated_cost_usd: f64, ) -> Result<BudgetCheck, Error>

Check if a request is within budget.

Source

pub fn record_usage(&self, usage: TokenUsage) -> Result<(), Error>

Record a usage event without per-agent attribution.

Source

pub fn record_usage_with_agent( &self, usage: TokenUsage, agent_alias: Option<&str>, ) -> Result<(), Error>

Record a usage event attributed to a specific agent alias. When [cost].track_per_agent is false the alias is dropped before persistence.

Source

pub fn get_summary(&self) -> Result<CostSummary, Error>

Get the current cost summary. When [cost].track_per_agent is enabled, the response includes a by_agent rollup over today’s records.

Source

pub fn get_summary_in_bounds( &self, from: Option<DateTime<Utc>>, to: Option<DateTime<Utc>>, ) -> Result<CostSummary, Error>

Filter persisted records by [from, to) (either side None is unbounded) and roll up by_model / by_agent / window totals. Bounds come from the caller (the dashboard computes them in the operator’s local timezone); the tracker doesn’t decide what “today” means.

Source

pub fn get_summary_for_agent( &self, agent_alias: &str, ) -> Result<CostSummary, Error>

Get the current cost summary scoped to a single agent alias. The session/day/month figures and by_model are filtered to records attributed to that alias; by_agent is left empty since the caller already chose the dimension.

Source

pub fn get_daily_cost(&self, date: NaiveDate) -> Result<f64, Error>

Get the daily cost for a specific date.

Source

pub fn get_monthly_cost(&self, year: i32, month: u32) -> Result<f64, Error>

Get the monthly cost for a specific month.

Source§

impl CostTracker

Source

pub fn get_or_init_global( config: CostConfig, workspace_dir: &Path, ) -> Option<Arc<CostTracker>>

Return the process-global CostTracker, creating it on first call. Subsequent calls (from gateway or channels, whichever starts second) receive the same Arc. Returns None when cost tracking is disabled or initialisation fails.

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.

§

impl<T> Instrument for T

§

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

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

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
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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