diff --git a/src/atocore/memory/service.py b/src/atocore/memory/service.py index 2979f50..34241e3 100644 --- a/src/atocore/memory/service.py +++ b/src/atocore/memory/service.py @@ -413,8 +413,17 @@ def get_memories_for_context( if query_tokens is not None: pool = _rank_memories_for_query(pool, query_tokens) + # Per-entry cap prevents a single long memory from monopolizing + # the band. With 16 p06 memories competing for ~700 chars, an + # uncapped 530-char overview memory fills the entire budget before + # a query-relevant 150-char memory gets a slot. The cap ensures at + # least 2-3 entries fit regardless of individual memory length. + max_entry_chars = 250 for mem in pool: - entry = f"[{mem.memory_type}] {mem.content}" + content = mem.content + if len(content) > max_entry_chars: + content = content[:max_entry_chars - 3].rstrip() + "..." + entry = f"[{mem.memory_type}] {content}" entry_len = len(entry) + 1 if entry_len > available - used: continue