benchmarks

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

hardware

One laptop — RTX 5050 GPU. Retrieval, reranking, and scoring all run locally; no cloud calls anywhere in the measurement path.

retrieval stack

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.

scoring

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.

reproduce

npm run bench:beamnpm run bench:locomo:retrievenpm run bench:toon

Verified runs

BenchmarkRun dateCommitEmbedding modelEnvironment
LoCoMo · full dataset
scripts/bench-locomo-noapi-results.json
2026-10-315d66568BAAI/bge-small-en-v1.5win32 10.0.26220 · v26.12.1
LongMemEval-S
docs/artifacts/longmemeval-s-full-500-retrieval.json
2026-10-2153a681fnomic-embed-textwin32 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-0600afdb4local-hash-384win32 10.0.26220 · v26.7.0
HotPotQA
scripts/bench-hotpot-results.json
2026-10-245d66568local-hash-384win32 10.0.26220 · v26.8.1
ConvoMem
docs/artifacts/convomem-525-retrieval.json
2026-10-215d66568all-minilmwin32 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

MetricTop-5Top-10
Hit@1056.0%65.0%
Evidence Recall51.2%59.8%
All-Evidence Recall—55.8%
MRR0.4190.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

ArmHitEvidenceAll evidencePrecisionTurns
Baseline (top-10 turns)64.9%49.6%55.8%7.0%10.0
Adjacent hits collapsed30.1%22.6%23.6%5.8%5.5
Merge + fill interior64.9%49.6%55.8%7.0%10.0
Expand all top-10 by ±178.6%62.3%69.4%4.5%19.5
Expand all top-10 by ±282.1%66.2%72.8%3.4%27.5
Expand top-1 by ±1 turn70.4%54.1%61.1%7.2%10.7
Expand top-3 by ±1 turn73.4%56.8%64.3%6.8%11.9
Expand top-5 by ±1 turn75.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

MetricValue
Hit@2099.4%
Evidence Recall@2098.3%
All-Evidence Recall@2096.4%
MRR@200.934
nDCG@200.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

MetricValue
Hit@1091.0%
Evidence Recall@1089.4%
All-Evidence Recall@1087.9%
MRR@100.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

MetricValue
Accuracy (n=50)78.0%
95% interval66.0–88.0%
Answer modeldeepseek-ai/DeepSeek-V4.1-Flash-1017
Judge modelGLM-5.3
Answer + judge tokens89,925
Correct answers39 / 50
Tokens per correct answer2,306
Blended token priceCost 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

ArmAccuracy (n=50)TokensTokens / correct
Floor — no memory
deepseek-v4-flash:free · 0 errors
2.0%
0–6%
18,28018,280
Memory — MemOS pack
deepseek-ai/DeepSeek-V4.1-Flash-1017 · 7 errors
78.0%
66–88%
89,9252,306
Ceiling — full context
deepseek-v4-flash:free · 0 errors
16.0%
6–28%
2,070,185258,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

MetricValue
Hit@10100%
Evidence Recall@1096.3%
All-Evidence Recall@1092.6%
MRR@100.977
nDCG@100.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 sizeHit@1Hit@10p50 latency
1,000 memories100%100%12 ms
5,000 memories100%100%43 ms
10,000 memories100%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

overall recall @15 · million-token history
MemOS100.0%
local SQLite · top-15

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.

CategoryRecallHitsp50
Preference Following100.0%20/20216 ms
Instruction Following100.0%20/20173 ms
Information Extraction100.0%20/20188 ms
Knowledge Update100.0%20/20189 ms
Multi-Session Reasoning100.0%20/20496 ms
Summarization100.0%20/20240 ms
Temporal Reasoning100.0%20/20208 ms
Event Ordering100.0%20/20245 ms
Abstention100.0%20/20191 ms
Contradiction Resolution100.0%20/20179 ms

Token efficiency

tokens per 20 memory entries · lower is better
JSON (full objects)5,559 tok
Verbose TOON1,602 tok
Compact TOON1,239 tok
77.7% smaller than JSON

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.

FormatTokens · 20 entriesSavings vs JSON
JSON (full objects)5,559—
Verbose TOON1,60271.2%
Compact TOON1,23977.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.