From e213644514d72c5bfc1f42baf45cbced0931acc9 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 7 Apr 2026 21:06:45 -0400 Subject: [PATCH] Fix: only evict scored memories, not unscored MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit lowest_scored_memory() now skips memories with score=None. Unscored memories haven't been evaluated — dropping them before scored low-value ones loses potentially important context. Co-Authored-By: Proof of Concept --- src/agent/context.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/agent/context.rs b/src/agent/context.rs index 0c98dd8..c25cdbe 100644 --- a/src/agent/context.rs +++ b/src/agent/context.rs @@ -223,12 +223,11 @@ fn trim_entries(entries: &[ContextEntry], fixed_tokens: usize) -> Vec Option { entries.iter().enumerate() - .filter(|(_, e)| e.entry.is_memory()) - .min_by(|(_, a), (_, b)| { - let sa = match &a.entry { ConversationEntry::Memory { score, .. } => score.unwrap_or(0.0), _ => 0.0 }; - let sb = match &b.entry { ConversationEntry::Memory { score, .. } => score.unwrap_or(0.0), _ => 0.0 }; - sa.partial_cmp(&sb).unwrap_or(std::cmp::Ordering::Equal) + .filter_map(|(i, e)| match &e.entry { + ConversationEntry::Memory { score: Some(s), .. } => Some((i, *s)), + _ => None, }) + .min_by(|(_, a), (_, b)| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Equal)) .map(|(i, _)| i) }