Benchmark · Memory

TemporalStore memory benchmark: LOCOMO & LongMemEval_s

Full LOCOMO (1,539 QA) and LongMemEval_s (500) run through the Rust TemporalStore backend with an all open-source stack — a qwen2.5 reader and an all-MiniLM-L6-v2 encoder answering every query — plus how the published OpenViking / VikingMem-class systems frame the same benchmarks.

74×
lower AWS concurrent write p50 vs EFS
50×
faster async durable writes vs EFS
0 lag
after shared-store replay
2,239
live OSS reader calls

Shared-storage benchmark: MatrixObject vs EFS on AWS

TemporalStore shared-storage mode can use a shared filesystem such as EFS or the enterprise MatrixObject object store. The latest AWS validation compares both backends with the same Rust TemporalStore workload: 8,000 shared-store operations, 256-way concurrency, nine worker samples across three AWS validation runs, commit 79afda8. Both backends finished healthy with replication_healthy=true and max_replica_lag=0.

MetricEFS shared storageMatrixObject shared storeResult
Sync storage write p5010.01 ms3.67 ms2.73× faster
Async durable write p509.95 ms0.198 ms50.3× faster
Async flush batch p50199.00 ms3.96 ms50.2× faster
Concurrent sync write p50777.34 ms10.50 ms74.0× faster
Concurrent sync write p993,467.39 ms129.49 ms26.8× faster
Concurrent sync write throughput113.15 ops/s142.90 ops/s26.3% higher throughput
Concurrent sync read p991.48 ms1.47 mseffectively tied
Sync primary write throughput5.41 ops/s62.67 ops/s11.6× higher throughput
Async primary write throughput11.99 ops/s77.07 ops/s6.4× higher throughput
Concurrent sync lag after replay0 ops0 opsconsistent replay
Takeaway: MatrixObject removes the biggest EFS penalty in this topology: durable shared-store writes and oplog flushes. Under the same workload it cuts concurrent sync write p50 from 777.34 ms to 10.50 ms, async flush p50 from 199.00 ms to 3.96 ms, and keeps replay consistent at zero lag. Read p99 is effectively tied, so the object-store win is concentrated where EFS hurts TemporalStore most.

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:

2.4×
answer quality (LongMemEval)
+17 pts
retrieval recall
16×
lower retrieval latency
97%
fewer prompt tokens
Why it holds at scaleTemporalStoreFlat vector-retrieval baseline
Temporal validityTracks when each fact was true; supersedes stale ones.Returns “most similar” chunks regardless of recency — surfaces outdated facts (fails knowledge-update & temporal questions).
Serving engineOne time-aware index for memory, features & control-state — no separate vector DB.Vector DB + LLM extraction pipeline bolted together.
Memory modelTyped, governed, replayable (ContextNode / Event / Entity / Summary + access control + ContextPack replay).Opaque similarity chunks.
Quality ceilingReader-bound, not memory-bound: same memory, 1.5B→7B nearly doubled accuracy (0.42→0.86).Weaker retrieval caps quality earlier at scale.
Bottom line: similar on a small, reader-limited benchmark; decisively better at scale, latency, cost, and governance — the axes that decide production outcomes.

Setup & fairness contract

Every pipeline — TemporalStore and the OpenViking-style baseline — runs through one shared OSS stack, so the only variable is the memory backend.

DimensionValue (shared by both systems)
Reader modelqwen2.5:1.5b and qwen2.5:7b via ollama; answers every query (candidate-hybrid, no deterministic fallback).
Encodersentence-transformers/all-MiniLM-L6-v2 (384-d), identical for both.
BackendRust TemporalStore context_workflow_harness.
Budgetsame-session 0.70 · cross-session 0.45 · summary 0.25 · entity 0.35 · event 0.80; reader ctx 12k/4k chars; ≤96 output tokens.
DatasetsLOCOMO locomo10.json (10 conv, 1,539 QA); LongMemEval_s cleaned (500). Full, real artifacts.
HardwareWSL Ubuntu 22.04, 16 vCPU, CPU-only (no GPU).
ScoringDeterministic answer-term coverage — no LLM judge; identical for both systems.
2,239 genuine open-source reader calls (1,539 + 500 at 1.5b, 200 at 7b), reader errors ≈ 0 — clearing the paper-comparable bar of reader_open_source_calls > 0 with no fallback.

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.

Config (n)hit@krecall@kMRRreader-hittoken red.src→retr tokensretr p50/p95reader p50/p95
1.5b · LOCOMO (1,539)0.9860.9860.5380.41682.4%35,809→6,30429.6 / 49.5 ms8.34 / 12.08 s
1.5b · LongMemEval_s (500)0.9800.9800.8360.53497.3%92,695→2,486116 / 164 ms8.98 / 12.05 s
7b · LOCOMO (200)0.9950.9950.5860.85576.6%26,017→6,09118.4 / 33.6 ms26.8 / 32.4 s

Head-to-head vs an OpenViking-style baseline

An OpenViking-style flat source-retrieval baseline, reimplemented on the identical OSS stack. M = TemporalStore, B = baseline.

Benchmark (n)hit@k M/BMRR M/Breader-hit M/Btoken red. M/Bretr p95 M/B
1.5b · LOCOMO (1,539)0.986 / 0.9810.538 / 0.5330.416 / 0.41682.4 / 82.4%49 / 73 ms
1.5b · LongMemEval_s (500)0.980 / 0.8100.836 / —0.534 / 0.20897.3 / 97.2%164 / 2,704 ms
7b · LOCOMO (200)0.995 / 0.9900.586 / 0.5810.855 / 0.85576.6 / 76.6%34 / 38 ms
LongMemEval_s — TemporalStore vs OpenViking-style baseline (qwen2.5:1.5b) answer accuracy (reader-hit) 53.4% 20.8% retrieval hit@k 0.98 0.81 retrieval p95 (speed, inverse ms) 164 ms 2,704 ms ■ TemporalStore  ■ OpenViking-style baseline — identical encoder, reader, and budget
On long multi-session histories, structured temporal memory delivers 2.57× the answer accuracy, +17 pts hit@k, and 16× lower retrieval latency than flat source-retrieval on the same 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.

Answer quality is reader-bound

Retrieval is near-ceiling at 1.5b; on the same TemporalStore memory, a bigger reader roughly doubles LOCOMO answer accuracy.

Readerreader-hitMRRretrieval hit@k
qwen2.5:1.5b (n=1,539)0.4160.5380.986
qwen2.5:7b (n=200)0.8550.5860.995

LongMemEval_s by question type (1.5b)

Question typenretrieval hit@kreader-hit
single_session_user701.0001.000
multi_session1330.9920.654
single_session_assistant560.9820.500
temporal_reasoning1330.9700.398
knowledge_update781.0000.269
single_session_preference300.8670.267

Why we benchmark against OpenViking / VikingMem — not the whole field

OpenViking and VikingMem 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 the OpenViking pages and the VikingMem paper for their own head-to-heads against other tools; that is why this report is TemporalStore vs OpenViking / VikingMem, 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 deterministic, tiny-OSS-model numbers above; the comparable axes are token efficiency and latency.

SystemLOCOMOLongMemEvaltokens/queryefficiency claimjudge
Mem0 (event/entity/operator)92.594.4~6.9k vs 25k+90% token / 91% latency vs OpenAI MemoryGPT-4o
Zep90.2~1.6k vs ~115k28.9s→2.58s (~90% lower)GPT-4o
MemOS (OS / skills)88.8389.2035.24% token savingsLLM judge
Memori87.0721 (2.8%)token-efficiency leaderLLM judge
Long-context (GPT-5-mini, independent)92.8582.4full (~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 VikingMem-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.

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 with Claude as the judge (0–10 rubric, correct := score ≥ 6). The OSS reader is unchanged for both arms, so Claude is the evaluator, not the reader.

Dataset (n)TemporalStoreOpenVikingTS / OV mean
LOCOMO (100) — identical answers, tie44.0%44.0%4.50 / 4.50
LongMemEval_s (50)38.0%16.0%4.12 / 1.94
Overall (150)42.0%34.7%4.37 / 3.65
Confirms the deterministic result under a real LLM judge. LOCOMO ties (byte-identical answers); on LongMemEval_s TemporalStore wins ~2.4× (38.0% vs 16.0%). Claude is stricter than term-matching — it rejects the baseline's raw-dump answers and noisy multi-guesses — so absolutes drop from 0.534 / 0.208 to 0.38 / 0.16 while the gap holds. Reader stayed OSS qwen2.5:1.5b; a full Claude-reader run needs an Anthropic API key.

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.

armoverallrecent (in window)earlier, same sessioncross-session
Local-only (recency window)0.331.000.000.00
Local + TemporalStore0.870.801.000.80
TemporalStore remote-only0.800.401.001.00
Full replay (ceiling)1.001.001.001.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.

Caveats

  • Reader-hit is a deterministic lower bound, not an LLM-judge score — not comparable to the 88–94 vendor numbers (GPT-4o-judged).
  • 7b is a 200-question LOCOMO sample (CPU-only makes a full dual-model sweep ~1–2 days); 7b LongMemEval deferred.
  • The baseline is OpenViking-style — a flat source-retrieval reimplementation on the shared stack, not any vendor's shipping product.