Skip to main content

vv_agent/memory/session/
config.rs

1use std::path::PathBuf;
2use std::sync::Arc;
3
4const DEFAULT_MIN_TOKENS: u64 = 10_000;
5const DEFAULT_MAX_TOKENS: u64 = 40_000;
6const DEFAULT_MIN_TEXT_MESSAGES: usize = 5;
7const DEFAULT_GROWTH_RATIO: f64 = 0.5;
8
9pub type SessionMemoryExtractionCallback =
10    Arc<dyn Fn(&str, Option<&str>, Option<&str>) -> Option<String> + Send + Sync + 'static>;
11
12#[derive(Clone)]
13pub struct SessionMemoryConfig {
14    pub min_tokens_before_extraction: u64,
15    pub max_tokens: u64,
16    pub min_text_messages: usize,
17    pub growth_ratio: f64,
18    pub storage_dir: PathBuf,
19    pub extraction_callback: Option<SessionMemoryExtractionCallback>,
20    pub extraction_backend: Option<String>,
21    pub extraction_model: Option<String>,
22    pub token_model: String,
23}
24
25impl std::fmt::Debug for SessionMemoryConfig {
26    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27        formatter
28            .debug_struct("SessionMemoryConfig")
29            .field(
30                "min_tokens_before_extraction",
31                &self.min_tokens_before_extraction,
32            )
33            .field("max_tokens", &self.max_tokens)
34            .field("min_text_messages", &self.min_text_messages)
35            .field("growth_ratio", &self.growth_ratio)
36            .field("storage_dir", &self.storage_dir)
37            .field(
38                "extraction_callback",
39                &self.extraction_callback.as_ref().map(|_| "<callback>"),
40            )
41            .field("extraction_backend", &self.extraction_backend)
42            .field("extraction_model", &self.extraction_model)
43            .field("token_model", &self.token_model)
44            .finish()
45    }
46}
47
48impl Default for SessionMemoryConfig {
49    fn default() -> Self {
50        Self {
51            min_tokens_before_extraction: DEFAULT_MIN_TOKENS,
52            max_tokens: DEFAULT_MAX_TOKENS,
53            min_text_messages: DEFAULT_MIN_TEXT_MESSAGES,
54            growth_ratio: DEFAULT_GROWTH_RATIO,
55            storage_dir: PathBuf::from(".memory/session"),
56            extraction_callback: None,
57            extraction_backend: None,
58            extraction_model: None,
59            token_model: String::new(),
60        }
61    }
62}