diff --git a/crates/collab/src/llm.rs b/crates/collab/src/llm.rs index 8d54008f0dda0cdf38ee43f8f6605a3f4e5534e8..bab2e92e65975d0f5f6710bf0c1cddd2dd527ac2 100644 --- a/crates/collab/src/llm.rs +++ b/crates/collab/src/llm.rs @@ -411,6 +411,11 @@ fn normalize_model_name(known_models: Vec, name: String) -> String { } } +/// The maximum lifetime spending an individual user can reach before being cut off. +/// +/// Represented in cents. +const LIFETIME_SPENDING_LIMIT_IN_CENTS: usize = 1_000 * 100; + async fn check_usage_limit( state: &Arc, provider: LanguageModelProvider, @@ -428,6 +433,13 @@ async fn check_usage_limit( ) .await?; + if usage.lifetime_spending >= LIFETIME_SPENDING_LIMIT_IN_CENTS { + return Err(Error::http( + StatusCode::FORBIDDEN, + "Maximum spending limit reached.".to_string(), + )); + } + let active_users = state.get_active_user_count(provider, model_name).await?; let users_in_recent_minutes = active_users.users_in_recent_minutes.max(1);