fix: filter archived/dormant memories from semantic_recall() (#3)

Apply THRESHOLD_DORMANT decay filter in semantic_recall() before
scoring, consistent with the keyword path in recall(). Memories
with decay_score < 0.05 are now excluded from semantic search,
preventing the decay system's intent from being bypassed via
high-similarity embedding matches.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2026-03-02 23:07:00 -06:00
parent 11a046ffc3
commit 5ce9363bcb

View File

@ -13,6 +13,7 @@ from typing import Any, Dict, List, Optional, Tuple
from common import ( from common import (
EMBEDDING_MODEL, EMBEDDING_MODEL,
OPENAI_MODEL_DEFAULT, OPENAI_MODEL_DEFAULT,
THRESHOLD_DORMANT,
_cosine_similarity, _cosine_similarity,
_load_memory_config, _load_memory_config,
_ollama_embed, _ollama_embed,
@ -207,10 +208,14 @@ class EmbeddingsMixin:
query_dim = len(query_vec) query_dim = len(query_vec)
# Score all memories by cosine similarity # Score all memories by cosine similarity, skipping archived/dormant
index = self._load_index() index = self._load_index()
state = self._load_state()
scored = [] scored = []
for mid, vec in stored.items(): for mid, vec in stored.items():
s = state.get("entries", {}).get(mid, {})
if s.get("decay_score", 0.5) < THRESHOLD_DORMANT:
continue
# Skip dimension mismatch # Skip dimension mismatch
if len(vec) != query_dim: if len(vec) != query_dim:
continue continue