Skip to main content

vv_agent/memory/manager/
microcompact.rs

1use super::MemoryManager;
2use crate::memory::microcompact::{microcompact, MicrocompactConfig};
3use crate::types::Message;
4
5impl MemoryManager {
6    pub fn should_preemptive_microcompact(&self, message_length: u64) -> bool {
7        let threshold = self.microcompact_trigger_threshold();
8        threshold > 0 && message_length > threshold
9    }
10
11    pub fn microcompact_messages(
12        &self,
13        messages: &[Message],
14        cycle_index: u32,
15    ) -> (Vec<Message>, usize) {
16        microcompact(
17            messages,
18            cycle_index,
19            &MicrocompactConfig {
20                trigger_ratio: self.config.microcompact_trigger_ratio,
21                keep_recent_cycles: self.config.microcompact_keep_recent_cycles,
22                min_result_length: self.config.microcompact_min_result_length,
23                compactable_tools: self.config.microcompact_compactable_tools.clone(),
24            },
25        )
26    }
27
28    pub fn microcompact_trigger_threshold(&self) -> u64 {
29        let ratio = self.config.microcompact_trigger_ratio.clamp(0.0, 1.0);
30        (self.autocompact_threshold() as f64 * ratio).floor() as u64
31    }
32}