Try Hanzo

Benchmarks / LoCoMo

measured

LoCoMo

Ten long conversations, 1,540 questions with annotated evidence turns. Hanzo Context measured against cosine over turns and against the annotated gold turns, on the same split, embedder, reader and k.

dataset
LoCoMo
licence
CC BY-NC 4.0
introduced by
Evaluating Very Long-Term Conversational Memory of LLM Agents — Maharana, Lee, Tulyakov, Bansal, Barbieri, Fang, ACL 2024
harness
hanzoai/benchmarks · brain
our papers
Hops Do Not Fix Multi-Hop Retrieval, Linkage, Not Similarity
node results.mjs

regenerates every table on this page from the raw runs

What is measured

Ten conversations, 5,882 turns, 1,540 questions, each annotated with the turns that answer it. Retrieval is scored against those turns. Configurations are chosen on conversations 0–2 and frozen at a commit before conversations 3–9 run once. Adversarial questions are excluded, as Mem0 and Zep exclude them.

Retrieval

The engine adds candidate generators to cosine — BM25, the atomic fact index, canonical entities, the timeline, adjacency, one hop of typed expansion, then a second retrieval hop asked with what the first resolved. On the held-out split multi-hop ALL@20 goes from 18.8 to 37.5 and R@20 from 70.9 to 80.7, on the same embedder and the same k.

all ten conversations · zen-embedding-0.6b · k=20

facts LoCoMo’s own observation annotations · weights frozen on dev at 33d0f8749bd1 · rows are cumulative: each carries every generator before it, from BM25 on · ALL = every annotated turn inside the top 20; ANY = at least one; R@20 = |retrieved ∩ gold| / |gold|

configurationmulti-hop ALLmulti-hop ANYsingle-hop ALLtemporal ALLopen-domain ALLR@knDCG@ksupported
semantic only22.779.878.277.333.771.949.681.0
+facts36.988.382.382.642.478.259.686.4
+adjacency39.088.784.283.544.679.761.487.8
+iterative hops39.087.986.884.445.780.962.688.0

all ten conversations · all-MiniLM-L6-v2 · k=10

facts LoCoMo’s own observation annotations · weights frozen on dev at 33d0f8749bd1 · rows are cumulative: each carries every generator before it, from BM25 on · ALL = every annotated turn inside the top 10; ANY = at least one; R@10 = |retrieved ∩ gold| / |gold|

configurationmulti-hop ALLmulti-hop ANYsingle-hop ALLtemporal ALLopen-domain ALLR@knDCG@ksupported
semantic only9.649.651.446.116.345.331.153.1
+lexical13.858.967.262.023.959.243.767.6
+facts20.973.473.172.025.066.752.075.6
+adjacency21.674.574.672.627.267.753.376.3
+iterative hops24.178.077.573.527.270.155.878.5

test split, conversations 3–9 · zen-embedding-0.6b · k=20

facts LoCoMo’s own observation annotations · weights frozen on dev at 33d0f8749bd1 · rows are cumulative: each carries every generator before it, from BM25 on · ALL = every annotated turn inside the top 20; ANY = at least one; R@20 = |retrieved ∩ gold| / |gold|

configurationmulti-hop ALLmulti-hop ANYsingle-hop ALLtemporal ALLopen-domain ALLR@knDCG@ksupported
semantic only18.880.378.372.335.670.948.880.5
+facts35.188.583.078.843.877.958.786.4
+entities35.188.583.078.843.877.958.786.4
+timeline34.688.583.379.745.278.259.986.8
+adjacency37.588.584.680.145.279.160.587.5
+typed graph37.588.584.680.145.279.160.587.5
+iterative hops37.588.087.781.445.280.761.687.8

The other LoCoMo harness

hanzoai/semantic · bench/locomo measures the same dataset under a different protocol: lexical retrieval with no embedding model, a fixed extractive reader with no language model anywhere, and all 1,986 questions including the adversarial quarter, reported apart. Its numbers measure a different reader and are not on the scale of these, so it has its own page and its own paper.

raw runs, traces, prompts and scoring: hanzoai/benchmarks · brain · protocol in METHOD.md · every table above regenerated by node results.mjs

Build what’s next.