
Cloud, self-hosted, or Desktop? Choose who owns the failure
July 18, 2026Research

How to move from public benchmark curiosity to an acceptance set that measures your write policy, retrieval, latency, and downstream answers.
A memory benchmark can tell you that one frozen system answered one dataset under one harness. It cannot tell you whether your support agent will remember the right account, respect a corrected preference, avoid another tenant's data, and recover safely after a provider timeout.
Production evaluation therefore needs two layers: public benchmarks for broad failure categories and a private, versioned acceptance set built from the product's own traces.
“Improve memory accuracy” is not an acceptance criterion. Name the decision that memory should improve. Examples include selecting the current shipping address, preserving a user's communication constraint, continuing a multi-session workflow, citing the policy version used for an answer, or abstaining when no supported memory exists.
Each case should contain the source trace, the expected durable records, the retrieval query, required and forbidden evidence, the expected downstream decision, and the reason that decision matters.
| Layer | Core question | Example metric |
|---|---|---|
| Write | Did the system store the right durable information? | Required fact recall, forbidden fact rate, duplicate rate |
| State | Did corrections and validity behave correctly? | Current-value and as-of accuracy |
| Retrieval | Did the context contain the evidence needed to answer? | Context completeness, precision, rank |
| Answer | Did the agent make the correct decision from that evidence? | Task rubric or exact answer |
| Operations | Can the loop survive real delivery conditions? | Tail latency, failure rate, retries, index visibility |
| Safety | Was any forbidden scope or source exposed? | Cross-tenant leakage and policy violations |
An answer can be correct for the wrong reason. The model may already know the answer, the evaluator may leak it in the question, or irrelevant retrieved text may coincidentally lead to the expected phrase. Inspect whether the assembled context actually contains the required evidence and excludes contradicted or unauthorized material.
Likewise, a relevant retrieval hit does not guarantee a correct answer. The application may order evidence poorly, omit temporal markers, or ask the model to perform a decision that belongs in deterministic code. Scoring both layers tells you where to fix the system.
Sample the real distribution, then deliberately add hard cases. A useful acceptance set includes:
Remove or redact sensitive user data while preserving the decision structure. Give each case a stable identity so results can be compared across releases.
Use a development split to inspect failures, adjust prompts, change retrieval, and tune thresholds. Keep a held-out set untouched until the candidate is frozen. Repeatedly checking the release set while tuning turns it into another development set.
For small changes, paired evaluation is more informative than comparing two independent averages. Score the same cases under both candidates, record which items flipped, and inspect whether gains cluster in one category while another regresses.
Without a manifest, a benchmark result is a screenshot. With a manifest and saved outputs, it is an experiment another engineer can challenge.
LoCoMo, LongMemEval, and BEAM expose different aspects of long-term memory. Their scores are not interchangeable, and numbers from different models, prompts, retrieval limits, or judge protocols should not be placed in one table as if they were a race.
FishMem's frozen 2026-08-24 portfolio compares every item with mem0 OSS 3.1.2 under the same disclosed configuration within each pair. On 500 LongMemEval oracle questions, FishMem scored 88.2% and mem0 83.8%, a +4.4-point paired delta with a 95% confidence interval from +1.0 to +7.8. On 400 BEAM 100K questions, FishMem scored 46.7% and mem0 41.0%, a +5.7-point delta with a 95% confidence interval from +1.8 to +9.5.
LoCoMo is the losing row, and it remains in the release result. Across categories 1–5 and 1,986 paired questions, FishMem scored 67.5% and mem0 71.1%, a −3.7-point delta with a 95% confidence interval from −5.8 to −1.5. LongMemEval oracle is not LongMemEval-S. Recovered process attempts make public cost and end-to-end wall-clock comparisons invalid for this run, while the winning FishMem runs also used substantially more retrieved context. Those limitations are part of the result, not footnotes to hide.
A memory system that is accurate only when every provider call succeeds is not ready. Track:
LLM judges are useful for semantic answers, but they introduce their own variance and bias. Keep the rubric narrow, save the judge explanation, blind system identity where practical, and manually audit a sample of agreements and disagreements. Exact checks remain preferable for IDs, scope, deletion, event state, and other deterministic contracts.
Do not retry a judged question until it passes and then report the best result. Define retry policy before the run and keep failures visible.
Group failures by the decision that broke: missing write, wrong scope, stale fact, poor ranking, incomplete context, answer reasoning, or operations. Fix the deepest recurring cause, add a regression case, and rerun the whole group. A higher score without an explanation of changed failures is difficult to trust and difficult to maintain.