Skip to main content

vv_agent/memory/manager/
config.rs

1use std::collections::BTreeSet;
2use std::fmt;
3use std::path::PathBuf;
4use std::sync::Arc;
5
6use crate::memory::session::SessionMemory;
7
8pub type SummaryCallback =
9    Arc<dyn Fn(&str, Option<&str>, Option<&str>) -> Option<String> + Send + Sync + 'static>;
10
11#[derive(Clone)]
12pub struct MemoryManagerConfig {
13    pub compact_threshold: u64,
14    pub keep_recent_messages: usize,
15    pub model: String,
16    pub model_context_window: u64,
17    pub reserved_output_tokens: u64,
18    pub autocompact_buffer_tokens: u64,
19    pub language: String,
20    pub warning_threshold_percentage: u8,
21    pub include_memory_warning: bool,
22    pub summary_event_limit: usize,
23    pub summary_backend: Option<String>,
24    pub summary_model: Option<String>,
25    pub summary_callback: Option<SummaryCallback>,
26    pub tool_result_compact_threshold: usize,
27    pub tool_result_keep_last: usize,
28    pub tool_result_excerpt_head: usize,
29    pub tool_result_excerpt_tail: usize,
30    pub tool_calls_keep_last: usize,
31    pub assistant_no_tool_keep_last: usize,
32    pub tool_result_artifact_dir: PathBuf,
33    pub microcompact_trigger_ratio: f64,
34    pub microcompact_keep_recent_cycles: usize,
35    pub microcompact_min_result_length: usize,
36    pub microcompact_compactable_tools: Option<BTreeSet<String>>,
37    pub workspace: Option<PathBuf>,
38    pub session_memory: Option<SessionMemory>,
39}
40
41impl fmt::Debug for MemoryManagerConfig {
42    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
43        formatter
44            .debug_struct("MemoryManagerConfig")
45            .field("compact_threshold", &self.compact_threshold)
46            .field("keep_recent_messages", &self.keep_recent_messages)
47            .field("model", &self.model)
48            .field("model_context_window", &self.model_context_window)
49            .field("reserved_output_tokens", &self.reserved_output_tokens)
50            .field("autocompact_buffer_tokens", &self.autocompact_buffer_tokens)
51            .field("language", &self.language)
52            .field(
53                "warning_threshold_percentage",
54                &self.warning_threshold_percentage,
55            )
56            .field("include_memory_warning", &self.include_memory_warning)
57            .field("summary_event_limit", &self.summary_event_limit)
58            .field("summary_backend", &self.summary_backend)
59            .field("summary_model", &self.summary_model)
60            .field(
61                "summary_callback",
62                &self.summary_callback.as_ref().map(|_| "<callback>"),
63            )
64            .field(
65                "tool_result_compact_threshold",
66                &self.tool_result_compact_threshold,
67            )
68            .field("tool_result_keep_last", &self.tool_result_keep_last)
69            .field("tool_result_excerpt_head", &self.tool_result_excerpt_head)
70            .field("tool_result_excerpt_tail", &self.tool_result_excerpt_tail)
71            .field("tool_calls_keep_last", &self.tool_calls_keep_last)
72            .field(
73                "assistant_no_tool_keep_last",
74                &self.assistant_no_tool_keep_last,
75            )
76            .field("tool_result_artifact_dir", &self.tool_result_artifact_dir)
77            .field(
78                "microcompact_trigger_ratio",
79                &self.microcompact_trigger_ratio,
80            )
81            .field(
82                "microcompact_keep_recent_cycles",
83                &self.microcompact_keep_recent_cycles,
84            )
85            .field(
86                "microcompact_min_result_length",
87                &self.microcompact_min_result_length,
88            )
89            .field(
90                "microcompact_compactable_tools",
91                &self.microcompact_compactable_tools,
92            )
93            .field("workspace", &self.workspace)
94            .field("session_memory", &self.session_memory)
95            .finish()
96    }
97}
98
99impl Default for MemoryManagerConfig {
100    fn default() -> Self {
101        Self {
102            compact_threshold: 128_000,
103            keep_recent_messages: 10,
104            model: String::new(),
105            model_context_window: 200_000,
106            reserved_output_tokens: 16_000,
107            autocompact_buffer_tokens: 13_000,
108            language: "zh-CN".to_string(),
109            warning_threshold_percentage: 90,
110            include_memory_warning: false,
111            summary_event_limit: 40,
112            summary_backend: None,
113            summary_model: None,
114            summary_callback: None,
115            tool_result_compact_threshold: 2_000,
116            tool_result_keep_last: 3,
117            tool_result_excerpt_head: 200,
118            tool_result_excerpt_tail: 200,
119            tool_calls_keep_last: 3,
120            assistant_no_tool_keep_last: 1,
121            tool_result_artifact_dir: PathBuf::from(".memory/tool_results"),
122            microcompact_trigger_ratio: 0.75,
123            microcompact_keep_recent_cycles: 3,
124            microcompact_min_result_length: 500,
125            microcompact_compactable_tools: None,
126            workspace: None,
127            session_memory: None,
128        }
129    }
130}