gitdataai/libs/agent/compact/mod.rs

57 lines
1.5 KiB
Rust

//! 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<usize>,
}
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<String>) -> 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<usize>) -> 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))
}
}