TTemporalStore.AI GitHub

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.

2.2×

answer accuracy at scale (LongMemEval)

+32 pts

LLM-judged accuracy vs OpenViking

97%

fewer prompt tokens

639

live 7B OSS reader calls

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.

2.2×

answer accuracy (LongMemEval)

+12.5 pts

retrieval hit@k

12×

lower retrieval latency

97%

fewer prompt tokens

Why it holds at scaleTemporalStoreOpenViking-style direct-source-retrieval
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: 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.

DimensionValue (shared by both systems)
Reader modelqwen2.5:7b via ollama, shared by both arms; 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,986 QA; 200 sampled); LongMemEval_s cleaned (500; 120 sampled). Real artifacts.
HardwareWSL Ubuntu 22.04, 16 vCPU, CPU-only (no GPU), shared host.
ScoringDeterministic 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@krecall@kMRRreader-hittoken red.src→retr tokensretr p50/p95reader p50/p95
7b · LOCOMO (200)0.9950.9950.5860.85076.6%26,017→6,09124.0 / 46.1 ms38.1 / 59.5 s
7b · LongMemEval_s (120)1.0001.0000.8960.93397.5%92,587→2,318135.6 / 541.2 ms48.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/BMRR M/Breader-hit M/Btoken red. M/Bretr p95 M/B
7b · LOCOMO (200)0.995 / 0.9900.586 / 0.5810.850 / 0.85576.6 / 76.6%46 / 54 ms
7b · LongMemEval_s (120)1.000 / 0.8750.896 / —0.933 / 0.41797.5 / 97.1%541 / 6,666 ms
LongMemEval_s — TemporalStore vs OpenViking baseline (qwen2.5:7b) answer accuracy (reader-hit) 93.3% 41.7% retrieval hit@k 1.00 0.88 retrieval p95 (speed, inverse ms) 541 ms 6,666 ms ■ TemporalStore  ■ OpenViking baseline — identical encoder, reader, and budget

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.

ScoringLOCOMO — TS / OpenVikingLongMemEval_s — TS / OpenViking
Deterministic reader-hit85.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 typenretrieval hit@kreader-hit (TS)
single_session_user701.0001.000
multi_session501.0000.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.

SystemLOCOMOLongMemEvaltokens/queryefficiency claimjudge
Mem0 (event/entity/operator)92.594.4~6.9k vs 25k+90% token / 91% latency vs OpenAI MemoryGPT-4o
Zep—90.2~1.6k vs ~115k28.9s→2.58s (~90% lower)GPT-4o
MemOS (OS / skills)88.8389.20—35.24% token savingsLLM judge
Memori87.0—721 (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 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)TemporalStoreOpenVikingTS / OV mean
LOCOMO (100) — near-identical answers, tie83.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.

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.

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

MetricRaft data-node replication validated 250 opsMatrixObject shared sync validated 1,000 opsResult
Primary ingest verified250 / 2501,000 / 1,000both valid at reported scale
Secondary reads verified500 / 5002,000 / 2,000both valid at reported scale
Write p503,545.09 ms311.16 msnot equal scale; Raft write path still needs work
Write p956,432.75 ms562.46 msnot equal scale; Raft write path still needs work
Write p996,806.18 ms598.48 msnot equal scale; Raft write path still needs work
Secondary visibility p507.03 ms441.54 msRaft follower visibility is now very low after commit
Secondary visibility p9910.13 ms852.96 msRaft follower visibility is now very low after commit
Scale status250 ops completed with zero failures; 1,000 ops still needs write-path optimization1,000 ops completed with zero failurespublish 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.

Enterprise — shared storage

Shared-storage benchmark: MatrixObject vs EFS on AWS

This is the second AWS dataset: a shared-storage backend comparison between EFS and the enterprise MatrixObject object store. It answers a different question from the Raft-vs-Object table above: when the serving topology already uses shared storage, which backend gives better durable write, flush, replay, and concurrent read/write behavior?

The latest AWS validation compares both backends with the same Rust TemporalStore workload: 8,000 shared-store operations, 256-way concurrency, three worker samples per backend, commit 61ffcbe. Both backends finished healthy with replication_healthy=true and max_replica_lag=0.

MetricEFS shared storageMatrixObject shared store backend workload: 8,000 ops, 256-way concurrencyResult
Sync storage write p509.85 ms3.56 ms63.9% lower latency
Sync storage write p9929.45 ms6.25 ms78.8% lower latency
Async durable write p9911.80 ms0.33 ms97.2% lower latency
Async flush batch p99236.10 ms6.70 ms97.2% lower latency
Concurrent sync write p993,284.83 ms134.12 ms95.9% lower latency
Concurrent sync write throughput120.29 ops/s143.90 ops/s19.6% higher throughput
Concurrent sync read throughput27,246.44 ops/s29,424.09 ops/s8.0% higher throughput
Concurrent sync read p991.60 ms1.55 ms3.3% lower latency
Concurrent sync lag after replay0 ops0 opsconsistent replay
Wall clock2,514.75 s339.06 s86.5% lower elapsed time

Why the sync MatrixObject latency differs from the table above: this backend dataset reports 3.56 ms p50 / 6.25 ms p99 for MatrixObject sync storage writes under the EFS-vs-MatrixObject workload. The Raft-vs-Object topology dataset reports 8.92 ms p50 / 38.64 ms p99 because it measures the shared-sync replication path against Raft, not the backend-only EFS comparison. The numbers are both retained, but no longer treated as interchangeable.

Takeaway: MatrixObject removes the biggest EFS penalty in this topology: durable shared-store writes and WAL flushes. Under the same shared-storage backend workload it cuts sync write p99 from 29.45 ms to 6.25 ms, async flush p99 from 236.10 ms to 6.70 ms, and keeps replay consistent at zero lag. Read throughput also improves, but the object-store win is concentrated where EFS hurts TemporalStore most. MatrixObject — enterprise shared object store →

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

Related

Data modelContext ManagementThe LLM-memory data model behind these numbers. Data modelControl StateTyped entity state & rollups. SourceTemporalStore on GitHubRust engine, Apache-2.0.