LongMemEval: StateCore vs mem0 OSS

August 8, 2026 · View on GitHub

Run date: 2026-08-08 · StateCore: 96b853d · mem0: mem0ai==2.0.17, unmodified

Systems are compared at an equal context budget — the same number of characters of memory in the answerer's prompt — rather than at an equal number of retrieved items. Items are not comparable: a StateCore session event ran ~9,800 characters against a mem0 memory's ~145, so "top-k 50 for both" hands one side 60× the context and the score measures context volume, not memory quality.

Result

194 of 200 questions scored, gpt-5 answering, the official LongMemEval gpt-4o judge. Intervals are 95% Wilson.

system4,000 tok16,000 tok64,000 tok
StateCore51.0% ±7.080.9% ±5.587.6% ±4.6
mem0 OSS61.3% ±6.959.8% ±6.961.3% ±6.9
No memory (recency window)9.3% ±4.122.7% ±5.953.6% ±7.0

Ceiling — the whole corpus in the prompt, no memory layer, no budget: 70.1% ±6.4.

All three differences have non-overlapping intervals. Read them as three separate findings, not one:

  • At 16k and 64k, StateCore wins by 21 and 26 points.
  • At 64k, StateCore beats the ceiling. 64,000 characters chosen by the memory layer answer more questions than the entire corpus (~103,000 tokens) pasted in. That is the only result on this page that justifies having a memory layer at all.
  • At 4k, mem0 wins by 10 points. See below — we are not fixing it, and the reason matters.

Why mem0 flattens

Its whole store is 4,451 tokens. Raising the budget 16× leaves it 100% underfilled and the score unmoved. At 64,000 tokens it scores 61.3% against a plain recency window's 53.6% — an 8-point margin over having no memory system.

systembudgetmedian usedruns that underfilled
StateCore4k / 16k / 64k3,955 / 15,951 / 63,9400% / 0% / 0%
mem0 OSS4k / 16k / 64k3,988 / 4,451 / 4,45144% / 100% / 100%

Why StateCore loses at 4,000

At that budget StateCore fits 4 whole sessions plus 23 facts; mem0 fits 142 short memories. In a narrow budget the contest is coverage, and fragmented storage wins it. This is a genuine difference in kind, and it is reported rather than closed.

One caveat on transferring it: the benchmark ingests with --granularity session, so one StateCore event is an entire conversation. A deployment that writes one event per turn has a different shape at the same budget. The 4k result is about the ingest granularity used here, not a fixed property of the engine.

Ingest completeness

A system holding less of the corpus is answering a different question, so this is reported rather than hidden.

systemmedian corpus lostworst questionquestions over threshold
StateCore0.0%0.0%0
mem0 OSS4.3%12.5%6

mem0 extracts nothing from some conversational sessions and then embeds an empty string, which its own API rejects. That is released behaviour, not a harness failure; patching it would mean publishing a number for something nobody runs. The 6 affected questions were excluded from every arm so all systems answer the same set.

By question type, at 64,000 tokens

question typeStateCoremem0 OSS
knowledge-update88.2%73.5%
multi-session79.4%82.4%
single-session-assistant100.0%25.8%
single-session-preference75.9%58.6%
single-session-user96.9%87.5%
temporal-reasoning85.3%38.2%

single-session-assistant holds at 96.8–100% vs 25.8–29.0% across all three budgets: mem0 does not retain what the assistant said.

What this does not measure

LongMemEval measures exhaustive needle-in-haystack recall. It does not measure auditability, contradiction resolution, or state stability over time — which is what StateCore is actually built for. These numbers show the engine is not weak at recall. They do not show what makes it different.

A LongMemEval score is a property of system + configuration, not of a system. Quote the configuration with the number or the number will not reproduce.

Reproducing it

Harness, raw retrievals, per-question judge verdicts and the full report: memory-budget-benchFAIR-REPORT.md is the generated report; artifacts/ holds exactly what each system handed the answerer, so a reported score can be checked rather than taken on trust.

The withdrawn run

An earlier comparison on this page reported StateCore 65.5% vs mem0 61.0%, and a later one 88.0% vs 55.5%. Both were withdrawn before this run replaced them.

The first truncated every retrieved item to 2,000 characters — a cap written when one item was one chat message, applied when one item was a whole session — which discarded ~80% of each retrieved session before the answerer saw it, and cost StateCore heavily while barely touching mem0.

The second had --top-k 50 against a corpus of roughly 50 sessions, so retrieval degenerated into returning everything: the prompt reached 1.44× the entire corpus and the score came from gpt-5 reading the whole thing, with the memory layer outside the causal chain.

Both are kept in withdrawn/ in the benchmark repository with notices explaining what was wrong. A benchmark maintained by an interested party is worth nothing if its failures quietly disappear.