answer accuracy at scale (LongMemEval)
Benchmarks
TemporalStore memory benchmark: LOCOMO & LongMemEval_s
A paper-comparable sample — 200 LOCOMO and 120 LongMemEval_s questions — run head-to-head, TemporalStore vs an OpenViking-style direct-source-retrieval baseline, on one shared open-source stack: a qwen2.5:7b reader and an all-MiniLM-L6-v2 encoder answering every query. Same reader, same encoder, same budget — only the memory backend differs.
LLM-judged accuracy vs OpenViking
fewer prompt tokens
live 7B OSS reader calls
Jump to: Why better · Setup · Results · Head-to-head · Scoring · By question type · Published landscape · Claude judge · Memory-distance probe · Replication & latency · Shared storage — enterprise · Caveats
Why better
Why TemporalStore wins — even when the scores look similar
This benchmark isolates the memory layer on one shared OSS stack. Where a test fits inside a single retrieval budget (LOCOMO), both systems return the same context and the shared reader produces byte-identical answers — a tie. That convergence is a property of small inputs, not evidence the systems are equivalent. Separation shows up where production lives — long, multi-session histories.
answer accuracy (LongMemEval)
retrieval hit@k
lower retrieval latency
fewer prompt tokens
| Why it holds at scale | TemporalStore | OpenViking-style direct-source-retrieval |
|---|---|---|
| Temporal validity | Tracks when each fact was true; supersedes stale ones. | Returns “most similar” chunks regardless of recency — surfaces outdated facts (fails knowledge-update & temporal questions). |
| Serving engine | One time-aware index for memory, features & control-state — no separate vector DB. | Vector DB + LLM extraction pipeline bolted together. |
| Memory model | Typed, governed, replayable (ContextNode / Event / Entity / Summary + access control + ContextPack replay). | Opaque similarity chunks. |
| Quality ceiling | Reader-bound, not memory-bound: feeds the 7B reader clean facts — 93.3% LongMemEval reader-hit. | Flat retrieval surfaces off-topic tangents & context dumps — 41.7% reader-hit at scale. |
Bottom line
Similar on a small benchmark, decisively better at scale.
Similar on a small, reader-limited benchmark; decisively better at scale, latency, cost, and governance — the axes that decide production outcomes.
Setup
Setup & fairness contract
Every pipeline — TemporalStore and the OpenViking-style direct-source-retrieval baseline — runs through one shared OSS stack, so the only variable is the memory backend.
| Dimension | Value (shared by both systems) |
|---|---|
| Reader model | qwen2.5:7b via ollama, shared by both arms; answers every query (candidate-hybrid, no deterministic fallback). |
| Encoder | sentence-transformers/all-MiniLM-L6-v2 (384-d), identical for both. |
| Backend | Rust TemporalStore context_workflow_harness. |
| Budget | same-session 0.70 · cross-session 0.45 · summary 0.25 · entity 0.35 · event 0.80; reader ctx 12k/4k chars; ≤96 output tokens. |
| Datasets | LOCOMO locomo10.json (10 conv, 1,986 QA; 200 sampled); LongMemEval_s cleaned (500; 120 sampled). Real artifacts. |
| Hardware | WSL Ubuntu 22.04, 16 vCPU, CPU-only (no GPU), shared host. |
| Scoring | Deterministic answer-term coverage (identical for both) plus a Claude LLM-judge on a paired sample — see below. |
639 genuine qwen2.5:7b open-source reader calls (200+200 across both arms on LOCOMO, 119+120 on LongMemEval_s), reader errors ≈ 0 — clearing the paper-comparable bar of reader_open_source_calls > 0 with no fallback.
Results
TemporalStore measured results
Retrieval hit@k, recall@k, token reduction and latency are storage-layer properties; reader-hit is the OSS reader answering from retrieved memory. Reader p50/p95 are inflated — CPU-only on a shared host — and are not a serving-latency claim; the storage-layer metric is retrieval latency.
| Config (n) | hit@k | recall@k | MRR | reader-hit | token red. | src→retr tokens | retr p50/p95 | reader p50/p95 |
|---|---|---|---|---|---|---|---|---|
| 7b · LOCOMO (200) | 0.995 | 0.995 | 0.586 | 0.850 | 76.6% | 26,017→6,091 | 24.0 / 46.1 ms | 38.1 / 59.5 s |
| 7b · LongMemEval_s (120) | 1.000 | 1.000 | 0.896 | 0.933 | 97.5% | 92,587→2,318 | 135.6 / 541.2 ms | 48.4 / 121.8 s |
Head-to-head
Head-to-head vs OpenViking — same OSS model
The OpenViking-style direct-source-retrieval baseline, reimplemented on the identical OSS stack (same qwen2.5:7b reader, same encoder, same retrieval budget). M = TemporalStore, B = OpenViking.
| Benchmark (n) | hit@k M/B | MRR M/B | reader-hit M/B | token red. M/B | retr p95 M/B |
|---|---|---|---|---|---|
| 7b · LOCOMO (200) | 0.995 / 0.990 | 0.586 / 0.581 | 0.850 / 0.855 | 76.6 / 76.6% | 46 / 54 ms |
| 7b · LongMemEval_s (120) | 1.000 / 0.875 | 0.896 / — | 0.933 / 0.417 | 97.5 / 97.1% | 541 / 6,666 ms |
On long multi-session histories, structured temporal memory delivers 2.24× the answer accuracy (93.3% vs 41.7%), +12.5 pts retrieval hit@k, and 12× lower retrieval latency than OpenViking-style direct-source-retrieval on the same 7B stack.
LOCOMO ties; LongMemEval separates. On LOCOMO both backends retrieve the same source set within budget (retrieved-token ratio 1.00) so the shared reader returns identical answers — TemporalStore's edge is latency. The memory layer's value shows up at scale on LongMemEval_s.
Scoring robustness
Two independent scorers agree on the shape
The same 7B answers, scored two ways: the deterministic answer-term coverage used above, and a Claude LLM-judge (0–10, correct := score ≥ 6). Both agree — LOCOMO ties, LongMemEval_s separates decisively in TemporalStore's favour.
| Scoring | LOCOMO — TS / OpenViking | LongMemEval_s — TS / OpenViking |
|---|---|---|
| Deterministic reader-hit | 85.0% / 85.5% | 93.3% / 41.7% |
| Claude LLM-judge (correct ≥ 6) | 83.0% / 84.0% | 98.0% / 66.0% |
By question type
LongMemEval_s by question type (qwen2.5:7b, 120-question sample)
| Question type | n | retrieval hit@k | reader-hit (TS) |
|---|---|---|---|
| single_session_user | 70 | 1.000 | 1.000 |
| multi_session | 50 | 1.000 | 0.840 |
The paper-comparable 120-question slice covers the single_session_user and multi_session types; retrieval is at ceiling (hit@k 1.000) on both, and the reader answers 84–100% of them from TemporalStore memory.
Published landscape
Why we benchmark against the acknowledged leaders — not the whole field
The leading hierarchical memory systems position themselves as the state of the art: each claims to beat the broader field of memory products, not just a full-context baseline. Zep bills itself as “the new state of the art in agent memory”; Mem0 reports double-digit accuracy gains over prior systems; MemOS reports leading OmniMemEval across 14 commercial memory products.
So we compare against the acknowledged leaders, not the long tail. Because these systems already claim to outrank the rest of the field, matching or beating them on the shared axes implies TemporalStore is competitive with the products they outrank — by construction. Refer to those systems' own pages and papers for their head-to-heads against other tools; that is why this report is TemporalStore vs the acknowledged leaders, not a sprawl of individual products.
Those systems all frame their own comparison the same way — their memory vs a full-context baseline, scored by a GPT-4o LLM judge. Their figures below are their own, cited to source — and because they use an LLM judge and stronger agents, they are not directly comparable to the open-source qwen2.5:7b numbers above; the comparable axes are token efficiency and latency.
| System | LOCOMO | LongMemEval | tokens/query | efficiency claim | judge |
|---|---|---|---|---|---|
| Mem0 (event/entity/operator) | 92.5 | 94.4 | ~6.9k vs 25k+ | 90% token / 91% latency vs OpenAI Memory | GPT-4o |
| Zep | — | 90.2 | ~1.6k vs ~115k | 28.9s→2.58s (~90% lower) | GPT-4o |
| MemOS (OS / skills) | 88.83 | 89.20 | — | 35.24% token savings | LLM judge |
| Memori | 87.0 | — | 721 (2.8%) | token-efficiency leader | LLM judge |
| Long-context (GPT-5-mini, independent) | 92.85 | 82.4 | full (~100k) | memory cheaper only after ~10–20 turns | — |
Methodology honesty. A direct leaderboard claim against these needs the same official judge protocol (an LLM judge such as GPT-4o-mini + matched reader). Until then the leading-system paper scores remain the external target, and the fair result here is the identical-stack A/B above. Vendor scores are protocol-sensitive: Mem0 is 92.5 on its own run yet 57.68 under the independent study — different judge/prompt/models, very different numbers.
Sources: Mem0, Zep, MemOS, Memori, Beyond the Context Window. Leading-system paper: arXiv:2605.29640.
Claude judge
Claude-as-judge — quality under a real LLM judge
The results above use a deterministic answer-term scorer (a lower bound). The competitor papers score with an LLM judge (GPT-4o). We re-scored a paired sample (100 LOCOMO + 50 LongMemEval_s) with Claude as the judge (0–10 rubric, correct := score ≥ 6). The OSS reader (qwen2.5:7b) is unchanged for both arms, so Claude is the evaluator, not the reader.
| Dataset (n) | TemporalStore | OpenViking | TS / OV mean |
|---|---|---|---|
| LOCOMO (100) — near-identical answers, tie | 83.0% | 84.0% | 8.60 / 8.70 |
| LongMemEval_s (50) | 98.0% | 66.0% | 9.86 / 6.14 |
| Overall (150) | 88.0% | 78.0% | 9.02 / 7.85 |
Confirms the deterministic result under a real LLM judge. LOCOMO ties (the 7B reader returns near-identical answers — OpenViking edges it by a single case); on LongMemEval_s TemporalStore wins by +32 points (98.0% vs 66.0%). OpenViking's misses are off-topic tangents and raw-context dumps that never state the asked fact — e.g. “what breed is my dog?” → gold Golden Retriever, TS “Golden Retriever”, OpenViking a paragraph about the Rover dog-walking app. Reader stayed OSS qwen2.5:7b for both arms; Claude is the evaluator, not the reader.
Memory-distance probe
The three-arm memory-distance probe — where a bounded window goes blind
Complementary to the public benchmarks above: a controlled probe on a 3-session engineering conversation with 15 exact facts (numbers, commit hashes, config values) planted at three distances from the current turn — five each. The same reader (qwen2.5:7b, Claude-judged, embedding retrieval on) answers three ways. Accuracy = fraction answered with the exact value.
| arm | overall | recent (in window) | earlier, same session | cross-session |
|---|---|---|---|---|
| Local-only (recency window) | 0.33 | 1.00 | 0.00 | 0.00 |
| Local + TemporalStore | 0.87 | 0.80 | 1.00 | 0.80 |
| TemporalStore remote-only | 0.80 | 0.40 | 1.00 | 1.00 |
| Full replay (ceiling) | 1.00 | 1.00 | 1.00 | 1.00 |
The failure mode, isolated. A bounded recency window answers everything recent and is a total blank on anything older or from a prior session (0.00 / 0.00) — it can only carry what fits. Adding the managed pack recovers every earlier-session fact and lifts cross-session recall from 0.0 to 1.0, at a fraction of full-replay tokens; the remote-only pack reconstructs at 0.80 with no local window at all. The recent dips (local+TS 0.80, remote-only 0.40) are the 7B reader mis-picking a very-recent value the raw window still holds — a reader effect, not a retrieval miss.
End-to-end hook: validated deterministic. These accuracy figures are the retrieval-algorithm probe. The production agent-hook serving path — which earlier collapsed above ~20 session events — is now fixed and validated: a retrieve-deadline correction plus a warm resident proxy give 14/14 cross-session coverage and ~7 ms warm retrieve (vs ~8.8 s cold) on the async production path. Reload (fresh restart) and promotion (disk→memory on normal restart) pass 4 restart cycles each; synchronous storage has a separate serving-record gap under fix, so production runs async.
Replication modes
Raft vs MatrixObject shared-store replication — AWS scale benchmark
The latest AWS validation compares replicated ingest through a primary and read visibility from separate secondary data nodes. The MatrixObject/object-store sync path completed the 1,000-operation distributed run. The Raft path now has a clean optimized 250-operation run plus explicit 1,000-operation bottleneck evidence; it should not be presented as an equal-scale 1,000-operation win until the write path is optimized.
AWS replication topology comparison
| Metric | Raft data-node replication validated 250 ops | MatrixObject shared sync validated 1,000 ops | Result |
|---|---|---|---|
| Primary ingest verified | 250 / 250 | 1,000 / 1,000 | both valid at reported scale |
| Secondary reads verified | 500 / 500 | 2,000 / 2,000 | both valid at reported scale |
| Write p50 | 3,545.09 ms | 311.16 ms | not equal scale; Raft write path still needs work |
| Write p95 | 6,432.75 ms | 562.46 ms | not equal scale; Raft write path still needs work |
| Write p99 | 6,806.18 ms | 598.48 ms | not equal scale; Raft write path still needs work |
| Secondary visibility p50 | 7.03 ms | 441.54 ms | Raft follower visibility is now very low after commit |
| Secondary visibility p99 | 10.13 ms | 852.96 ms | Raft follower visibility is now very low after commit |
| Scale status | 250 ops completed with zero failures; 1,000 ops still needs write-path optimization | 1,000 ops completed with zero failures | publish as different scales, not an equal-scale win |
Important: this table is a correctness-first replication visibility run, not the 8,000-operation backend throughput run below. The MatrixObject/object-store row here uses a shared WAL/checkpoint path and forces each secondary to replay from its own cursor before reading the primary-written value.
Raft scale caveat: the first 1,000-op run hit append-pipeline backpressure with the default 32 KB memory replicate limit. Raising the Raft inflight and memory limits removed that rejection. Disabling persistence for successful read-safety probes produced a clean 250-op run with zero failures and secondary visibility p50 at 7.03 ms, but synchronous write p50 is still 3.55 s in this serial HTTP benchmark path.
Takeaway. MatrixObject shared sync is the disaggregated serving mode: keep durable state once, add or replace TemporalStore nodes without copying shards, and let secondaries catch up by replaying the shared log. Raft remains the right mode when replicated durability must not depend on a shared store, but the current AWS data-node path needs write-path optimization before it is fair to publish a same-scale Raft versus MatrixObject number.
Caveats
Caveats
- Reader-hit is a deterministic lower bound; we also report a Claude LLM-judge pass above. Vendor 88–94 numbers are GPT-4o-judged with stronger agents — not directly comparable.
- 7b is a paper-comparable sample — 200 LOCOMO + 120 LongMemEval_s (CPU-only makes a full sweep ~1–2 days). Reader p50/p95 are inflated by the CPU-only, shared host and are not a serving-latency claim; retrieval latency is the storage-layer metric.
- The baseline is an OpenViking-style direct-source-retrieval reimplementation on the shared OSS stack, not OpenViking's shipping product.
Keep reading