loopd: [compact] threshold, summary_chars and summarise

Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
This commit is contained in:
2026-10-02 23:25:47 -07:00
co-authored by ornith-1.5-35b-a3b
parent c3b05cf003
commit 518d6ec416
3 changed files with 147 additions and 0 deletions
+27
View File
@@ -175,6 +175,8 @@ pub struct Config {
pub broker: Broker,
#[serde(default)]
pub memory: Memory,
#[serde(default)]
pub compact: Compact,
}
/// `[memory]`: `memoryd`'s socket for `loopd` (M5a spec, section 9). An empty path means the
@@ -185,6 +187,26 @@ pub struct Memory {
pub socket: std::path::PathBuf,
}
/// `[compact]`: when a session starts a new epoch, and how long a summary may be (M5d spec,
/// section 5). `summarise` is stored here and unused until M5d-2.
#[derive(Debug, Clone, PartialEq, Deserialize)]
#[serde(deny_unknown_fields, default)]
pub struct Compact {
pub threshold: f64,
pub summary_chars: usize,
pub summarise: Vec<String>,
}
impl Default for Compact {
fn default() -> Self {
Self {
threshold: 0.85,
summary_chars: 4_000,
summarise: vec!["http_fetch".to_string()],
}
}
}
#[derive(Debug)]
pub enum ConfigError {
Read(std::path::PathBuf, std::io::Error),
@@ -232,4 +254,9 @@ impl Config {
self.channel.socket.clone()
}
}
/// `compact.md` beside the system prompt: the summary call's last user message.
pub fn compact_prompt(&self) -> std::path::PathBuf {
self.baseline.system.with_file_name("compact.md")
}
}