Benchmarks
LongMemEval-S full 500 at K=20, full-dataset LoCoMo, ConvoMem, HotPotQA multi-hop, BEAM-1M, and a 10k-memory haystack — local embeddings and hybrid retrieval, reproducible from the repo.
How we benchmark
One laptop — RTX 5050 GPU. Retrieval, reranking, and scoring all run locally; no cloud calls anywhere in the measurement path.
LongMemEval-S: nomic-embed-text 768d, contextual session/date headers, 0.5/0.5 hybrid, top-20. LoCoMo: bge-small-en-v1.5, no reranker — the checked-in run.
Retrieval rows use direct evidence-ID matching — no LLM judge, no fuzzy matching. The end-to-end QA row names its independent judge and confidence interval. Ties are reported as ties.
npm run bench:beamnpm run bench:locomo:retrievenpm run bench:toon
Verified runs
| Benchmark | Run date | Commit | Embedding model | Environment |
|---|---|---|---|---|
| LoCoMo · full dataset scripts/bench-locomo-noapi-results.json | 2026-10-31 | 5d66568 | BAAI/bge-small-en-v1.5 | win32 10.0.26220 · v26.12.1 |
| LongMemEval-S docs/artifacts/longmemeval-s-full-500-retrieval.json | 2026-10-21 | 53a681f | nomic-embed-text | win32 10.0.26220 · v26.8.1 |
| BEAM-1M scripts/bench-beam-results-lfm2.5-350m.json | 2026-08-19 | — | — | — · — |
| Memory haystack scripts/bench-haystack-results.json | 2026-09-06 | 00afdb4 | local-hash-384 | win32 10.0.26220 · v26.7.0 |
| HotPotQA scripts/bench-hotpot-results.json | 2026-10-24 | 5d66568 | local-hash-384 | win32 10.0.26220 · v26.8.1 |
| ConvoMem docs/artifacts/convomem-525-retrieval.json | 2026-10-21 | 5d66568 | all-minilm | win32 10.0.26220 · v26.8.1 |
| LoCoMo span aggregation docs/artifacts/locomo-span-aggregation.json | 2026-11-01 | — | — | — · — |
| QA arms docs/artifacts/qa-arms-50.json | 2026-11-01 | — | — | — · — |
Regenerated automatically from result JSONs committed to the repo — if a number on this page can't be traced to a run below, treat it as marketing.
LoCoMo · full dataset · retrieval-only evidence matching
| Metric | Top-5 | Top-10 |
|---|---|---|
| Hit@10 | 56.0% | 65.0% |
| Evidence Recall | 51.2% | 59.8% |
| All-Evidence Recall | — | 55.8% |
| MRR | 0.419 | 0.431 |
| nDCG@10 | — | 0.455 |
All 10 conversations, 1,986 questions, scored by direct evidence-ID matching — no LLM judge, no fuzzy matching. This run uses BAAI/bge-small-en-v1.5 with no reranker, which is what `scripts/bench-locomo-noapi-results.json` reproduces. Per category: single-hop 68.4% Hit@10, multi-hop 53.9%, temporal 67.9%, adversarial 70.2%, open-domain 33.7%. An earlier operating point with LFM2.5-Embedding-350M plus a bge-reranker reported 83.2%, but that artifact is not checked in, so it is not claimed here.
LoCoMo · span aggregation · post-hoc on the same retrieved lists
| Arm | Hit | Evidence | All evidence | Precision | Turns |
|---|---|---|---|---|---|
| Baseline (top-10 turns) | 64.9% | 49.6% | 55.8% | 7.0% | 10.0 |
| Adjacent hits collapsed | 30.1% | 22.6% | 23.6% | 5.8% | 5.5 |
| Merge + fill interior | 64.9% | 49.6% | 55.8% | 7.0% | 10.0 |
| Expand all top-10 by ±1 | 78.6% | 62.3% | 69.4% | 4.5% | 19.5 |
| Expand all top-10 by ±2 | 82.1% | 66.2% | 72.8% | 3.4% | 27.5 |
| Expand top-1 by ±1 turn | 70.4% | 54.1% | 61.1% | 7.2% | 10.7 |
| Expand top-3 by ±1 turn | 73.4% | 56.8% | 64.3% | 6.8% | 11.9 |
| Expand top-5 by ±1 turn | 75.0% | 58.7% | 66.0% | 6.2% | 13.5 |
No re-retrieval and no model calls: the recorded top-10 lists are re-scored after merging adjacent turns. Filling the interior of a span changes nothing — the top-10 hits are already contiguous — but expanding the best hit by one turn on each side adds 5.5pp Hit@10 for 0.7 extra turns and does not lower precision. Expanding every hit adds 13.7pp but nearly doubles the injected context. The recommended default is top-1 expansion; top-3 if the budget allows. Raw artifact: docs/artifacts/locomo-span-aggregation.json.
LongMemEval-S · full 500 · retrieval-only · K=20
| Metric | Value |
|---|---|
| Hit@20 | 99.4% |
| Evidence Recall@20 | 98.3% |
| All-Evidence Recall@20 | 96.4% |
| MRR@20 | 0.934 |
| nDCG@20 | 0.929 |
500 questions, one memory per haystack session (the benchmark's own retrieval unit), nomic-embed-text 768d, contextual session/date header, 0.5/0.5 hybrid fusion, no reranker. This is the same K and retrieval protocol as Supermemory's published 97% overall Recall@20: MemOS reaches 99.4% Hit@20 and 98.3% evidence recall@20. All-evidence recall@20 (every labelled evidence session in the top 20) is 96.4%, a stricter secondary metric. Retrieval now takes ~1 min for all 500 (down from ~21 min before the namespace index); a warm 100-question rerun is ~20 s, and --fast-ingest cuts setup work with identical scores. Raw run: docs/artifacts/longmemeval-s-full-500-retrieval.json.
ConvoMem · 525 sampled / 387 scored · retrieval-only · K=10
| Metric | Value |
|---|---|
| Hit@10 | 91.0% |
| Evidence Recall@10 | 89.4% |
| All-Evidence Recall@10 | 87.9% |
| MRR@10 | 0.654 |
Salesforce/ConvoMem, one JSON file per evidence category: 525 sampled questions, 387 with annotated message evidence and scored; 138 abstention/no-answer items cannot be scored by retrieval-only matching. All-minilm 384d, contextual speaker/conversation header, 0.5/0.5 fusion, top 10. ConvoMem's official metric is LLM-judge answer accuracy; this is the deterministic retrieval layer. Reproduce with scripts/download-convomem.ts and scripts/bench-convomem.ts.
LongMemEval-S — end-to-end QA — independent judge
| Metric | Value |
|---|---|
| Accuracy (n=50) | 78.0% |
| 95% interval | 66.0–88.0% |
| Answer model | deepseek-ai/DeepSeek-V4.1-Flash-1017 |
| Judge model | GLM-5.3 |
| Answer + judge tokens | 89,925 |
| Correct answers | 39 / 50 |
| Tokens per correct answer | 2,306 |
| Blended token price | Cost per correct answer |
|---|---|
| $0.10 / 1M tok | $0.0002 |
| $1.00 / 1M tok | $0.0023 |
| $5.00 / 1M tok | $0.0115 |
| $15.00 / 1M tok | $0.0346 |
Cost per correct = tokens per correct answer × price / 1,000,000. The prices are examples, not a quoted rate — plug in your provider's blended input/output price. Tokens are the measured answer and judge total from the run, so the token side is real even where the price is an assumption.
The retrieval tables above say the evidence was returned. This says a reader could answer from it. DeepSeek V4.1 Flash answers at high reasoning and GLM-5.3 grades — an independent model, not the answerer. A self-judged run (DeepSeek as both) produced the same 78.0%, so the result is not judge-inflated. n=50 gives a ±13.9pp interval; treat it as a sanity check, not a leaderboard number. Raw run: docs/artifacts/qa-glm-judge-50.json.
Three arms: floor, memory, ceiling
| Arm | Accuracy (n=50) | Tokens | Tokens / correct |
|---|---|---|---|
| Floor — no memory deepseek-v4-flash:free · 0 errors | 2.0% 0–6% | 18,280 | 18,280 |
| Memory — MemOS pack deepseek-ai/DeepSeek-V4.1-Flash-1017 · 7 errors | 78.0% 66–88% | 89,925 | 2,306 |
| Ceiling — full context deepseek-v4-flash:free · 0 errors | 16.0% 6–28% | 2,070,185 | 258,773 |
The floor and ceiling are same-model runs (deepseek-v4-flash:free answering, deepseek-v4.1-flash:free judging, 0 errors): the model knows almost none of the personal facts without memory, and stuffing every haystack session into the prompt only reaches 16% while spending 2.07M tokens. The memory row uses the paid DeepSeek V4.1 Flash + GLM-5.3 pair, so do not subtract the rows — they bracket the problem, they are not a controlled ablation. A same-model memory run was blocked by free-tier rate limits; that gap is stated rather than papered over.
HotPotQA · multi-hop retrieval
| Metric | Value |
|---|---|
| Hit@10 | 100% |
| Evidence Recall@10 | 96.3% |
| All-Evidence Recall@10 | 92.6% |
| MRR@10 | 0.977 |
| nDCG@10 | 0.934 |
500 validation questions, ~4,900 deduplicated Wikipedia paragraphs ingested corpus-wide, scored by supporting-paragraph title matching. Comparison questions are perfect across every metric; bridge questions sit at 95.4% evidence recall. This is the dataset class Cognee uses in its published memory evals.
Memory haystack · precision at scale
| Corpus size | Hit@1 | Hit@10 | p50 latency |
|---|---|---|---|
| 1,000 memories | 100% | 100% | 12 ms |
| 5,000 memories | 100% | 100% | 43 ms |
| 10,000 memories | 100% | 100% | 82 ms |
The needle-in-a-haystack test adapted to memory: unique facts planted at random depths in a growing distractor corpus, one natural-language query per needle. Deterministic, CPU-only — precision holds at 10k memories with an honest near-linear latency curve.
BEAM-1M · retrieval at scale
The checked-in artifact reports 100% overall recall@15 over 200 questions, with 20 abstention questions skipped. It is saturated, so we do not present it as a differentiator, and the earlier Mem0 comparator numbers were never checked in — they have been removed.
| Category | Recall | Hits | p50 |
|---|---|---|---|
| Preference Following | 100.0% | 20/20 | 216 ms |
| Instruction Following | 100.0% | 20/20 | 173 ms |
| Information Extraction | 100.0% | 20/20 | 188 ms |
| Knowledge Update | 100.0% | 20/20 | 189 ms |
| Multi-Session Reasoning | 100.0% | 20/20 | 496 ms |
| Summarization | 100.0% | 20/20 | 240 ms |
| Temporal Reasoning | 100.0% | 20/20 | 208 ms |
| Event Ordering | 100.0% | 20/20 | 245 ms |
| Abstention | 100.0% | 20/20 | 191 ms |
| Contradiction Resolution | 100.0% | 20/20 | 179 ms |
Token efficiency
Measured by scripts/bench-toon-formats.ts over 20 fixtures. Compact TOON is 77.7% smaller than JSON and 22.7% smaller than verbose TOON.
| Format | Tokens · 20 entries | Savings vs JSON |
|---|---|---|
| JSON (full objects) | 5,559 | — |
| Verbose TOON | 1,602 | 71.2% |
| Compact TOON | 1,239 | 77.7% |
Reproduce everything on this page: benchmark scripts and datasets live in the repo. Local embeddings and the reranker run on the same laptop — no API keys, no cloud.