//! Context compaction for AI sessions and room message history. pub mod auth_fetch; pub mod helpers; pub mod room_compactor; pub mod summarizer; pub mod types; use sea_orm::DatabaseConnection; pub use types::{ CompactConfig, CompactLevel, CompactSummary, MessageSummary, RoomCompactContext, RoomCompactRecord, ThresholdResult, }; #[derive(Clone)] pub struct CompactService { db: DatabaseConnection, ai_client_config: crate::client::AiClientConfig, model: String, model_context_limit: Option, } impl CompactService { pub fn new( db: DatabaseConnection, ai_client_config: crate::client::AiClientConfig, model: String, ) -> Self { Self { db, ai_client_config, model, model_context_limit: None, } } pub fn for_model(&self, model: impl Into) -> Self { Self { db: self.db.clone(), ai_client_config: self.ai_client_config.clone(), model: model.into(), model_context_limit: self.model_context_limit, } } pub fn with_model_context_limit(mut self, model_context_limit: Option) -> Self { self.model_context_limit = model_context_limit.filter(|limit| *limit > 0); self } pub fn for_model_entry(&self, model: &models::agents::model::Model) -> Self { self.for_model(model.name.clone()) .with_model_context_limit(Some(model.context_length.max(0) as usize)) } }