use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
pub struct MemoriesConfig {
#[serde(default = "default_memories_generate")]
pub(crate) generate_memories: bool,
#[serde(default = "default_memories_use")]
pub(crate) use_memories: bool,
#[serde(default)]
pub extract_model: Option<String>,
#[serde(default)]
pub consolidation_model: Option<String>,
#[serde(default = "default_memories_batch_sessions")]
pub batch_sessions: usize,
#[serde(default = "default_memories_batch_concurrency")]
pub batch_concurrency: usize,
}
impl Default for MemoriesConfig {
fn default() -> Self {
Self {
generate_memories: default_memories_generate(),
use_memories: default_memories_use(),
extract_model: None,
consolidation_model: None,
batch_sessions: default_memories_batch_sessions(),
batch_concurrency: default_memories_batch_concurrency(),
}
}
}
#[inline]
const fn default_memories_generate() -> bool {
true
}
#[inline]
const fn default_memories_use() -> bool {
true
}
#[inline]
const fn default_memories_batch_sessions() -> usize {
50
}
#[inline]
const fn default_memories_batch_concurrency() -> usize {
8
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PersistentMemoryConfig {
#[serde(default = "default_persistent_memory_enabled")]
pub enabled: bool,
#[serde(default = "default_persistent_memory_auto_write")]
pub auto_write: bool,
#[serde(default)]
pub directory_override: Option<String>,
#[serde(default = "default_persistent_memory_startup_line_limit")]
pub startup_line_limit: usize,
#[serde(default = "default_persistent_memory_startup_byte_limit")]
pub startup_byte_limit: usize,
#[serde(default = "default_persistent_memory_startup_token_budget")]
pub startup_token_budget: usize,
#[serde(default)]
pub memories: MemoriesConfig,
}
impl Default for PersistentMemoryConfig {
fn default() -> Self {
Self {
enabled: default_persistent_memory_enabled(),
auto_write: default_persistent_memory_auto_write(),
directory_override: None,
startup_line_limit: default_persistent_memory_startup_line_limit(),
startup_byte_limit: default_persistent_memory_startup_byte_limit(),
startup_token_budget: default_persistent_memory_startup_token_budget(),
memories: MemoriesConfig::default(),
}
}
}
impl PersistentMemoryConfig {
pub(crate) fn validate(&self) -> Result<(), String> {
if self.startup_line_limit == 0 {
return Err("persistent_memory.startup_line_limit must be greater than 0".to_string());
}
if self.startup_byte_limit == 0 {
return Err("persistent_memory.startup_byte_limit must be greater than 0".to_string());
}
Ok(())
}
}
#[inline]
const fn default_persistent_memory_enabled() -> bool {
false
}
#[inline]
const fn default_persistent_memory_auto_write() -> bool {
true
}
#[inline]
const fn default_persistent_memory_startup_line_limit() -> usize {
200
}
#[inline]
const fn default_persistent_memory_startup_byte_limit() -> usize {
25 * 1024
}
#[inline]
const fn default_persistent_memory_startup_token_budget() -> usize {
5000
}