vtcode_config/core/agent/
memory.rs1use serde::{Deserialize, Serialize};
4
5#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
10#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
11pub struct MemoriesConfig {
12 #[serde(default = "default_memories_generate")]
15 pub(crate) generate_memories: bool,
16
17 #[serde(default = "default_memories_use")]
19 pub(crate) use_memories: bool,
20
21 #[serde(default)]
23 pub extract_model: Option<String>,
24
25 #[serde(default)]
27 pub consolidation_model: Option<String>,
28
29 #[serde(default = "default_memories_batch_sessions")]
32 pub batch_sessions: usize,
33
34 #[serde(default = "default_memories_batch_concurrency")]
36 pub batch_concurrency: usize,
37}
38
39impl Default for MemoriesConfig {
40 fn default() -> Self {
41 Self {
42 generate_memories: default_memories_generate(),
43 use_memories: default_memories_use(),
44 extract_model: None,
45 consolidation_model: None,
46 batch_sessions: default_memories_batch_sessions(),
47 batch_concurrency: default_memories_batch_concurrency(),
48 }
49 }
50}
51
52#[inline]
53const fn default_memories_generate() -> bool {
54 true
55}
56
57#[inline]
58const fn default_memories_use() -> bool {
59 true
60}
61
62#[inline]
63const fn default_memories_batch_sessions() -> usize {
64 50
65}
66
67#[inline]
68const fn default_memories_batch_concurrency() -> usize {
69 8
70}
71
72#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
73#[derive(Debug, Clone, Deserialize, Serialize)]
74pub struct PersistentMemoryConfig {
75 #[serde(default = "default_persistent_memory_enabled")]
79 pub enabled: bool,
80
81 #[serde(default = "default_persistent_memory_auto_write")]
83 pub auto_write: bool,
84
85 #[serde(default)]
87 pub directory_override: Option<String>,
88
89 #[serde(default = "default_persistent_memory_startup_line_limit")]
91 pub startup_line_limit: usize,
92
93 #[serde(default = "default_persistent_memory_startup_byte_limit")]
95 pub startup_byte_limit: usize,
96
97 #[serde(default = "default_persistent_memory_startup_token_budget")]
100 pub startup_token_budget: usize,
101
102 #[serde(default)]
104 pub memories: MemoriesConfig,
105}
106
107impl Default for PersistentMemoryConfig {
108 fn default() -> Self {
109 Self {
110 enabled: default_persistent_memory_enabled(),
111 auto_write: default_persistent_memory_auto_write(),
112 directory_override: None,
113 startup_line_limit: default_persistent_memory_startup_line_limit(),
114 startup_byte_limit: default_persistent_memory_startup_byte_limit(),
115 startup_token_budget: default_persistent_memory_startup_token_budget(),
116 memories: MemoriesConfig::default(),
117 }
118 }
119}
120
121impl PersistentMemoryConfig {
122 pub(crate) fn validate(&self) -> Result<(), String> {
123 if self.startup_line_limit == 0 {
124 return Err("persistent_memory.startup_line_limit must be greater than 0".to_string());
125 }
126
127 if self.startup_byte_limit == 0 {
128 return Err("persistent_memory.startup_byte_limit must be greater than 0".to_string());
129 }
130
131 Ok(())
132 }
133}
134
135#[inline]
136const fn default_persistent_memory_enabled() -> bool {
137 false
138}
139
140#[inline]
141const fn default_persistent_memory_auto_write() -> bool {
142 true
143}
144
145#[inline]
146const fn default_persistent_memory_startup_line_limit() -> usize {
147 200
148}
149
150#[inline]
151const fn default_persistent_memory_startup_byte_limit() -> usize {
152 25 * 1024
153}
154
155#[inline]
156const fn default_persistent_memory_startup_token_budget() -> usize {
157 5000
158}