use super::constants::{
CIRCUIT_BREAKER_THRESHOLD, COLLAPSE_TURN_THRESHOLD, MAX_TOOL_RESULT_CHARS, PRESERVED_TURNS,
TRIM_TURN_THRESHOLD,
};
#[derive(Debug, Clone)]
pub struct CompactionPolicy {
pub trigger_threshold: f32,
pub max_tool_result_chars: usize,
pub preserved_turns: usize,
pub trim_turn_threshold: usize,
pub collapse_turn_threshold: usize,
pub circuit_breaker_threshold: usize,
pub output_reserve: u32,
}
impl Default for CompactionPolicy {
fn default() -> Self {
Self {
trigger_threshold: 0.8,
max_tool_result_chars: MAX_TOOL_RESULT_CHARS,
preserved_turns: PRESERVED_TURNS,
trim_turn_threshold: TRIM_TURN_THRESHOLD,
collapse_turn_threshold: COLLAPSE_TURN_THRESHOLD,
circuit_breaker_threshold: CIRCUIT_BREAKER_THRESHOLD,
output_reserve: 0,
}
}
}
impl CompactionPolicy {
#[must_use]
pub fn trigger_tokens(&self, model_limit: u32) -> u32 {
let raw = (model_limit as f32 * self.trigger_threshold) as u32;
raw.saturating_sub(self.output_reserve)
}
}