Skip to main content

vv_agent/memory/manager/
config.rs

1use std::fmt;
2use std::path::PathBuf;
3use std::sync::Arc;
4
5use crate::memory::session::SessionMemory;
6use crate::memory::MicrocompactionPolicy;
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 microcompaction_policy: MicrocompactionPolicy,
33    pub workspace: Option<PathBuf>,
34    pub session_memory: Option<SessionMemory>,
35}
36
37impl fmt::Debug for MemoryManagerConfig {
38    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
39        formatter
40            .debug_struct("MemoryManagerConfig")
41            .field("compact_threshold", &self.compact_threshold)
42            .field("keep_recent_messages", &self.keep_recent_messages)
43            .field("model", &self.model)
44            .field("model_context_window", &self.model_context_window)
45            .field("reserved_output_tokens", &self.reserved_output_tokens)
46            .field("autocompact_buffer_tokens", &self.autocompact_buffer_tokens)
47            .field("language", &self.language)
48            .field(
49                "warning_threshold_percentage",
50                &self.warning_threshold_percentage,
51            )
52            .field("include_memory_warning", &self.include_memory_warning)
53            .field("summary_event_limit", &self.summary_event_limit)
54            .field("summary_backend", &self.summary_backend)
55            .field("summary_model", &self.summary_model)
56            .field(
57                "summary_callback",
58                &self.summary_callback.as_ref().map(|_| "<callback>"),
59            )
60            .field(
61                "tool_result_compact_threshold",
62                &self.tool_result_compact_threshold,
63            )
64            .field("tool_result_keep_last", &self.tool_result_keep_last)
65            .field("tool_result_excerpt_head", &self.tool_result_excerpt_head)
66            .field("tool_result_excerpt_tail", &self.tool_result_excerpt_tail)
67            .field("tool_calls_keep_last", &self.tool_calls_keep_last)
68            .field(
69                "assistant_no_tool_keep_last",
70                &self.assistant_no_tool_keep_last,
71            )
72            .field("microcompaction_policy", &self.microcompaction_policy)
73            .field("workspace", &self.workspace)
74            .field("session_memory", &self.session_memory)
75            .finish()
76    }
77}
78
79impl Default for MemoryManagerConfig {
80    fn default() -> Self {
81        Self {
82            compact_threshold: 250_000,
83            keep_recent_messages: 10,
84            model: String::new(),
85            model_context_window: 279_000,
86            reserved_output_tokens: 16_000,
87            autocompact_buffer_tokens: 13_000,
88            language: "zh-CN".to_string(),
89            warning_threshold_percentage: 90,
90            include_memory_warning: false,
91            summary_event_limit: 40,
92            summary_backend: None,
93            summary_model: None,
94            summary_callback: None,
95            tool_result_compact_threshold: 2_000,
96            tool_result_keep_last: 3,
97            tool_result_excerpt_head: 200,
98            tool_result_excerpt_tail: 200,
99            tool_calls_keep_last: 3,
100            assistant_no_tool_keep_last: 1,
101            microcompaction_policy: MicrocompactionPolicy::default(),
102            workspace: None,
103            session_memory: None,
104        }
105    }
106}