Current
Memory segmentation and mutation plans
Benchmark first
Corpora: LongMemEval · QASPER · LongBench
Protocol: Replay sessions in timestamp order without gold-answer fields. Report information extraction, multi-session reasoning, temporal reasoning, knowledge updates, and abstention separately; add evidence Recall@k, write amplification, stored bytes, reader tokens, and latency. Compare raw-history, retrieval-only, extracted-memory, and consolidated-memory baselines under identical context budgets.
hybrid_topic_segments splits a stream only where an attention-boundary peak and a semantic-similarity valley agree. The application extracts candidates from those bounded groups and classifies each one as add, update, delete, or no-op. plan_memory_mutations validates the decisions without writing storage.
How it works
Normalize boundary and adjacent-similarity arrays to the n−1 gaps between n turns. A gap is eligible only when its attention score is a local peak above the configured boundary threshold and its adjacent semantic similarity is below the valley threshold. Eligible gaps split consecutive, non-overlapping segments. Mutation planning then requires exactly one decision per candidate, validates update/delete targets against current IDs, rejects duplicate adds and conflicting operations on one target, and returns a deterministic plan.
Turnsattention + similarity signals
topic boundary
Candidate memorieshost extraction and classification
validated plan
Host commitADD · UPDATE · DELETE · NOOP
from mari_components.knowledge import (
MemoryDecision, MemoryOperation, hybrid_topic_segments,
plan_memory_mutations,
)
segments = hybrid_topic_segments(turns,
attention_boundaries=attention, adjacent_similarities=similarity,
similarity_threshold=0.40)
plan = plan_memory_mutations(existing, candidates, {
"new-role": MemoryDecision(operation=MemoryOperation.UPDATE,
target_id="role", reason="newer explicit statement"),
"unchanged": MemoryDecision(operation=MemoryOperation.NOOP),
})
store.commit(plan, expected_generation=generation)
**Classification remains application-owned.**Mari checks candidate coverage, target existence, add collisions, and conflicting target operations. apply_memory_mutations provides a pure preview for tests; it is not a database.
Research basis
Mem0: memory extraction and update operationsLightMem: topic-aware memory consolidation
The conjunctive peak/valley rule and mutation validation are Mari implementations; model-based classification remains outside the library.