#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub enum CompactionStrategy {
#[default]
Auto,
Native,
ObservationMasking,
Summarization,
}
impl CompactionStrategy {
pub(crate) fn as_str(self) -> &'static str {
match self {
Self::Auto => "auto",
Self::Native => "native",
Self::ObservationMasking => "observation_masking",
Self::Summarization => "summarization",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct CompactionConfig {
pub(crate) strategy: CompactionStrategy,
pub(crate) proactive: bool,
pub(crate) budget_percent: f32,
}
impl CompactionConfig {
pub fn new() -> Self {
Self::default()
}
pub fn strategy(mut self, strategy: CompactionStrategy) -> Self {
self.strategy = strategy;
self
}
pub fn proactive(mut self, enabled: bool) -> Self {
self.proactive = enabled;
self
}
pub fn budget_percent(mut self, budget_percent: f32) -> Self {
self.budget_percent = budget_percent;
self
}
}
impl Default for CompactionConfig {
fn default() -> Self {
Self {
strategy: CompactionStrategy::Auto,
proactive: true,
budget_percent: 0.85,
}
}
}
impl crate::IntoCapability for CompactionConfig {
fn into_capability(self) -> crate::CapabilitySpec {
crate::CapabilityRef::new("compaction")
.config(serde_json::json!({
"strategy": self.strategy.as_str(),
"proactive": self.proactive,
"budget_percent": self.budget_percent,
}))
.into()
}
}