mod alerts;
mod manager;
#[cfg(feature = "gateway")]
mod middleware;
mod provider_limits;
mod tracker;
mod types;
#[cfg(test)]
mod tests;
pub use alerts::{AlertConfig, AlertStats, BudgetAlertManager, WebhookConfig};
pub use manager::{BudgetManager, BudgetManagerConfig, BudgetSummary};
#[cfg(feature = "gateway")]
pub use middleware::{
BudgetCheckMiddleware, BudgetCheckMiddlewareService, BudgetMiddleware, BudgetMiddlewareService,
BudgetRecorder, BudgetRecorderExt,
};
pub use provider_limits::{
ModelBudgetManager, ModelLimitConfig, ProviderBudgetManager, ProviderLimitConfig,
UnifiedBudgetLimits,
};
pub use tracker::{BudgetTracker, SpendResult};
pub use types::{
AlertSeverity, Budget, BudgetAlert, BudgetAlertType, BudgetCheckResult, BudgetConfig,
BudgetScope, BudgetStatus, Currency, ModelBudget, ModelUsageStats, ProviderBudget,
ProviderUsageStats, ResetPeriod,
};
use std::sync::Arc;
pub fn init_budget_system() -> (Arc<BudgetManager>, Arc<BudgetAlertManager>) {
let manager = Arc::new(BudgetManager::new());
let alert_manager = Arc::new(BudgetAlertManager::new());
(manager, alert_manager)
}
pub fn init_budget_system_with_config(
manager_config: BudgetManagerConfig,
alert_config: AlertConfig,
) -> (Arc<BudgetManager>, Arc<BudgetAlertManager>) {
let manager = Arc::new(BudgetManager::with_config(manager_config));
let alert_manager = Arc::new(BudgetAlertManager::with_config(alert_config));
(manager, alert_manager)
}
static GLOBAL_BUDGET_MANAGER: std::sync::OnceLock<Arc<BudgetManager>> = std::sync::OnceLock::new();
pub fn init_global_budget_manager(config: BudgetManagerConfig) {
let manager = Arc::new(BudgetManager::with_config(config));
let _ = GLOBAL_BUDGET_MANAGER.set(manager);
}
pub fn get_global_budget_manager() -> Option<Arc<BudgetManager>> {
GLOBAL_BUDGET_MANAGER.get().cloned()
}