vv_agent/memory/session/
config.rs1use 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}