Init repo

This commit is contained in:
2026-02-26 11:51:36 -05:00
commit 5400d82acd
50 changed files with 17748 additions and 0 deletions

43
src/state/mod.rs Normal file
View File

@@ -0,0 +1,43 @@
use std::sync::Arc;
use tokio::sync::broadcast;
use crate::{
client::ClientManager, database::DbPool, providers::ProviderManager,
rate_limiting::RateLimitManager, logging::RequestLogger,
models::registry::ModelRegistry,
};
/// Shared application state
#[derive(Clone)]
pub struct AppState {
pub provider_manager: ProviderManager,
pub db_pool: DbPool,
pub rate_limit_manager: Arc<RateLimitManager>,
pub client_manager: Arc<ClientManager>,
pub request_logger: Arc<RequestLogger>,
pub model_registry: Arc<ModelRegistry>,
pub dashboard_tx: broadcast::Sender<serde_json::Value>,
}
impl AppState {
pub fn new(
provider_manager: ProviderManager,
db_pool: DbPool,
rate_limit_manager: RateLimitManager,
model_registry: ModelRegistry,
) -> Self {
let client_manager = Arc::new(ClientManager::new(db_pool.clone()));
let (dashboard_tx, _) = broadcast::channel(100);
let request_logger = Arc::new(RequestLogger::new(db_pool.clone(), dashboard_tx.clone()));
Self {
provider_manager,
db_pool,
rate_limit_manager: Arc::new(rate_limit_manager),
client_manager,
request_logger,
model_registry: Arc::new(model_registry),
dashboard_tx,
}
}
}