pub struct SessionBudget { /* private fields */ }Expand description
Implementations§
Source§impl SessionBudget
impl SessionBudget
Sourcepub fn set_limits(&self, session_id: impl Into<String>, limits: SessionLimits)
pub fn set_limits(&self, session_id: impl Into<String>, limits: SessionLimits)
Register or update limits for a session.
If the session already exists its accumulated spend is preserved; only the limits are updated.
§Panics
This function does not panic.
Sourcepub fn remove_session(&self, session_id: &str)
pub fn remove_session(&self, session_id: &str)
Remove a session from the budget store entirely.
Useful when a session is logically closed and its budget data no longer needs to be retained.
§Panics
This function does not panic.
Sourcepub fn record_tokens(
&self,
session_id: &str,
tokens: u64,
) -> Result<BudgetOutcome, BudgetError>
pub fn record_tokens( &self, session_id: &str, tokens: u64, ) -> Result<BudgetOutcome, BudgetError>
Record tokens spent by session_id and check against limits.
§Hard limit enforcement
If adding tokens would cause accumulated spend to reach or exceed
hard_limit_tokens, the spend is not recorded and
Err(BudgetError::HardLimitExceeded) is returned. The caller
should reject the underlying inference request with a clear user-facing
error before dispatching to a worker.
§Soft limit warning
If the new accumulated spend crosses soft_limit_tokens the function
returns Ok(BudgetOutcome::SoftLimitWarning { .. }). The request
proceeds normally; callers may choose to surface a warning to the user.
§Unregistered sessions
Sessions with no registered limits are silently accepted — all spend
calls return Ok(BudgetOutcome::Ok) and no tracking is performed.
§Errors
Returns BudgetError::HardLimitExceeded when the hard limit is hit.
§Panics
This function does not panic.
Sourcepub fn reset_session(&self, session_id: &str)
pub fn reset_session(&self, session_id: &str)
Reset accumulated spend to zero without changing the session limits.
This is the operation behind POST /v1/sessions/{id}/budget/reset.
Does nothing if the session is not registered (no-op, not an error).
§Panics
This function does not panic.
Sourcepub fn daily_reset(&self) -> usize
pub fn daily_reset(&self) -> usize
Perform a daily reset: zero the spend of every session whose
last_reset was more than 24 hours ago (or was never set).
Intended to be called from a background task, e.g.:
use tokio::time::{interval, Duration};
use tokio_prompt_orchestrator::session::budget::SessionBudget;
use std::sync::Arc;
async fn daily_reset_task(budget: Arc<SessionBudget>) {
let mut ticker = interval(Duration::from_secs(60 * 60)); // check hourly
loop {
ticker.tick().await;
let count = budget.daily_reset();
if count > 0 {
tracing::info!(count, "daily budget reset applied to sessions");
}
}
}§Returns
Number of sessions whose budget was reset.
§Panics
This function does not panic.
Sourcepub fn snapshot(&self, session_id: &str) -> Option<SessionBudgetSnapshot>
pub fn snapshot(&self, session_id: &str) -> Option<SessionBudgetSnapshot>
Return a snapshot of the given session’s budget.
This is the backing data for GET /v1/sessions/{id}/budget.
Returns None if the session has not been registered.
§Panics
This function does not panic.
Sourcepub fn all_snapshots(&self) -> Vec<SessionBudgetSnapshot>
pub fn all_snapshots(&self) -> Vec<SessionBudgetSnapshot>
Sourcepub fn session_count(&self) -> usize
pub fn session_count(&self) -> usize
Trait Implementations§
Source§impl Debug for SessionBudget
impl Debug for SessionBudget
Source§impl Default for SessionBudget
impl Default for SessionBudget
Source§fn default() -> SessionBudget
fn default() -> SessionBudget
Auto Trait Implementations§
impl !Freeze for SessionBudget
impl RefUnwindSafe for SessionBudget
impl Send for SessionBudget
impl Sync for SessionBudget
impl Unpin for SessionBudget
impl UnsafeUnpin for SessionBudget
impl UnwindSafe for SessionBudget
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request