Skip to content

Commit 2f42fb0

Browse files
groksrcclaude
andauthored
docs: publication-ready results v2 (corrected rubric, recall-led, diagnostic) (#41)
Supersedes matrix-v1.2-summary.md (which predated the judge-rubric correction #36/#37 and the #994 FTS-revival merge). matrix-v2-summary.md reports the corrected-rubric numbers for BM on main, and reframes around the failure diagnostic: - Leads with retrieval (recall@k/MRR) — the answerer-independent signal, near-parity between BM and mem0. - Presents QA accuracy (BM leads decisively: LongMemEval 0.583 vs 0.450, ConvoMem 0.755 vs 0.464) as a secondary "answer-bearing context" signal, with the `run diagnose` evidence that retrieval ceilings are ~1.0 for both systems — so the QA gap is presentation/answerability, not recall. - Keeps the mem0 raw-add (infer=false) and answerer-bound caveats prominent. - LoCoMo reported secondarily (BM #994 + title progression to 0.641). - Lists the concrete remaining steps for external publication: judge-human agreement pass (a balanced 60-case sample is staged), mem0 infer=true, and the supermemory #1096 shim. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent f615929 commit 2f42fb0

2 files changed

Lines changed: 140 additions & 0 deletions

File tree

benchmarks/results/matrix-v1.2-summary.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
> **SUPERSEDED by `matrix-v2-summary.md`** (corrected judge rubric #36/#37, BM
2+
> post-#994, recall-led with the failure diagnostic). Kept for history; the QA
3+
> numbers below predate the rubric correction and the FTS-revival merge.
4+
15
# Benchmark Matrix v1.2 — internal results
26

37
Run: 2026-06-12 evening. Local, zero API spend (answerer `claude:claude-haiku-4-5`,
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# Benchmark Matrix v2 — internal results (publication-ready)
2+
3+
Supersedes `matrix-v1.2-summary.md` (pre-rubric-correction, pre-#994). Same
4+
harness, corrected judge rubric (basic-memory-benchmarks #36/#37), BM under test
5+
is **`main` post-#994** (FTS-revival merged). Internal-only; written to withstand
6+
external scrutiny.
7+
8+
## Methodology (what makes these numbers fair)
9+
10+
- **Zero API spend.** Answering and judging run through the Claude plan
11+
(`claude -p`); competitor internal LLM calls (mem0 extraction) run on local
12+
Ollama. No paid API.
13+
- **Fixed answerer and judge, identical for every provider.** Answerer
14+
`claude:claude-haiku-4-5`, judge `claude:claude-sonnet-4-6`. Each provider
15+
retrieves; the *same* answerer writes an answer from the retrieved memories;
16+
the *same* judge grades it against gold. Holding the answerer constant is what
17+
isolates retrieval — but it also means **absolute QA accuracy is
18+
answerer-dependent** (a stronger answerer would raise every number). Relative
19+
standings are the robust comparison.
20+
- **Corrected rubric**, validated on all gold-answer styles including abstention
21+
(the #36#37 fix). Judge decisions are auditable per case via `run review`
22+
HTML reports.
23+
- **`run diagnose`** attributes every QA failure to *retrieval* (gold not found)
24+
vs the *answerer* (gold found, answer still wrong) — see below.
25+
- No feature flags: BM runs default `main`.
26+
27+
## Anchors
28+
29+
LongMemEval-S (stratified 60, 6 categories) and ConvoMem cs10 (274). LoCoMo is
30+
secondary (Penfield-corrected key, adversarial excluded) and reported separately.
31+
32+
### 1. Retrieval — the answerer-independent signal (lead with this)
33+
34+
| Benchmark | provider | recall@5 | recall@10 | MRR | mean lat |
35+
|---|---|---|---|---|---|
36+
| LongMemEval-60 | bm-local | 0.951 | 0.951 | **0.900** | 754ms |
37+
| LongMemEval-60 | mem0-local | **0.979** | 0.992 | 0.876 | 146ms |
38+
| LongMemEval-60 | baseline-grep | 0.846 | 0.937 | 0.832 | 5ms |
39+
| ConvoMem-274 | bm-local | 0.982 | 0.996 | 0.929 | 140ms |
40+
| ConvoMem-274 | mem0-local | **0.996** | 1.000 | **0.956** | 122ms |
41+
| ConvoMem-274 | baseline-grep | 0.954 | 1.000 | 0.863 | 1ms |
42+
43+
Retrieval is **near-parity**: mem0 marginally leads recall@5, BM leads MRR on
44+
LongMemEval and is within ~0.03 on ConvoMem. Both systems find the gold evidence
45+
almost always (recall@10 ≥ 0.95). grep is a strong lexical baseline here.
46+
47+
### 2. QA accuracy — corrected rubric (BM leads decisively)
48+
49+
| Benchmark | bm-local | mem0-local | baseline-grep | full-context |
50+
|---|---|---|---|---|
51+
| LongMemEval-60 | **0.583** | 0.450 | 0.333 | 0.217 |
52+
| ConvoMem-274 | **0.755** | 0.464 | 0.380 | 0.799 |
53+
54+
Abstention rates (answerer says "I don't know"): LongMemEval BM **20**/60 vs mem0
55+
30/60; ConvoMem BM **86**/274 vs mem0 169/274. mem0 abstains ~2× more often.
56+
57+
### 3. Diagnostic — why BM's QA lead is NOT a retrieval effect
58+
59+
`run diagnose`, per provider, over answerable questions:
60+
61+
| Benchmark | provider | retrieval ceiling | answerer gap | retrieval gap | of failures: answerer |
62+
|---|---|---|---|---|---|
63+
| LongMemEval-60 | bm-local | 0.983 | 0.400 | 0.017 | 96% |
64+
| LongMemEval-60 | mem0-local | 1.000 | 0.550 | 0.000 | 100% |
65+
| ConvoMem-274 | bm-local | 1.000 | 0.245 | 0.000 | 100% |
66+
| ConvoMem-274 | mem0-local | 1.000 | 0.535 | 0.000 | 100% |
67+
68+
The retrieval ceiling (max QA if the answerer were perfect) is ~1.0 for **both**
69+
systems — i.e. essentially every QA failure is "the gold evidence *was* retrieved,
70+
the answer was still wrong," not "retrieval missed it." So the BM>mem0 QA gap is
71+
**not** a recall gap. It is that **the memories BM returns are more answerable by
72+
the fixed model** — BM returns dated, in-context chunks; mem0 (raw-add) returns
73+
material the small answerer more often can't commit to, so it abstains. On
74+
ConvoMem the haystack fully fits the retrieval window (ceiling 1.000 for
75+
everyone), so that benchmark measures *presentation + answering*, not recall.
76+
77+
**Honest reading:** lead published comparisons with **recall@k / MRR** (parity,
78+
answerer-independent). Present QA as a secondary "answer-bearing context" signal
79+
where BM leads — with the mem0-infer caveat below kept prominent.
80+
81+
## LoCoMo (secondary) — BM product progression
82+
83+
LoCoMo is Penfield-flagged (~6.4% gold-key errors; adversarial excluded). We
84+
report BM's own improvement across the two shipped fixes, same q300 subset and QA
85+
stage, corrected rubric:
86+
87+
| QA accuracy | BM main | +FTS (#994) | +FTS +title |
88+
|---|---|---|---|
89+
| overall | 0.439 | 0.475 | **0.641** |
90+
91+
multi_hop is the driver (4/63 → 40/63): these are relative-date questions that
92+
were unanswerable until the dated session title was surfaced to the answerer
93+
(harness fix #31, provider-faithful — BM already returns the title). BM retrieval
94+
on this slice: recall@5 0.774, recall@10 0.875, MRR 0.697. Diagnostic: ceiling
95+
0.930, 19% of failures are true retrieval misses (the only anchor with real
96+
retrieval headroom). A corrected-rubric mem0 head-to-head on this exact subset is
97+
**not yet run** — the earlier mem0 LoCoMo number (0.535) predates the rubric fix
98+
and is not directly comparable.
99+
100+
## supermemory-local — preliminary, fair full run blocked
101+
102+
Provider works end-to-end vs `supermemory-server 0.0.2` (local, Ollama-backed).
103+
Preliminary 35-q ConvoMem smoke: QA tied (both 0.943), BM search **3.4× faster**
104+
(84ms vs 289ms). A fair full run is **blocked by upstream #1096**: supermemory's
105+
memory-agent calls the OpenAI Responses API (Ollama rejects it), spending ~228s/doc
106+
before skipping, so grouped ingest times out. Also #1093: on-device embedding RSS
107+
ballooned to ~24GB. Two findings stand: supermemory-local is operationally heavy
108+
(slow + memory-hungry vs BM's lightweight fastembed), and on the slice that
109+
completed, BM matches its QA and is markedly faster. Needs a
110+
Responses→ChatCompletions shim for a complete comparison.
111+
112+
## Caveats (read before citing)
113+
114+
- **mem0 ran raw-add (`infer=false`).** mem0's published numbers use `infer=true`
115+
(LLM fact extraction). We matched the June-10 baseline and avoided an unvetted
116+
local-3B extraction step. mem0's QA could improve under `infer=true`; a fair
117+
external comparison must run mem0 both ways with the extraction model documented.
118+
- **QA is answerer-bound** (the diagnostic). These absolute numbers reflect a
119+
haiku-class answerer; a stronger answerer raises all of them. Don't read QA as a
120+
pure retrieval-quality measure — that's what recall@k/MRR are for.
121+
- **Judge-human agreement not yet measured.** Every QA number rests on the LLM
122+
judge. The `run review` HTML reports support human labeling; the judge-vs-human
123+
agreement pass is the remaining validation before any external publication.
124+
- **LoCoMo** gold key is documented-imperfect; treat as directional.
125+
- **n sizes**: LongMemEval 60, LoCoMo q300 subset — modest; ConvoMem 274.
126+
127+
## Remaining for external publication
128+
129+
1. **Judge-human agreement pass.** A balanced 60-case sample is ready at
130+
`benchmarks/runs/judge-agreement-sample/review.html` (seed 42; 24 LongMemEval
131+
/ 24 ConvoMem / 12 LoCoMo; 36 BM / 12 mem0 / 12 grep; 20 correct / 20 incorrect
132+
/ 20 abstain). Open it, label each verdict agree/disagree/unsure, Export, and
133+
report agreement = agree / (agree + disagree). Publish the agreement rate
134+
alongside the numbers — every QA figure rests on the judge.
135+
2. mem0 `infer=true` (and corrected-rubric mem0 on LoCoMo q300) to complete the matrix.
136+
3. supermemory Responses→ChatCompletions shim (#1096) for a fair full run.

0 commit comments

Comments
 (0)