How do you benchmark long-term conversational memory?

Short answer: Replay multi-session dialogues into the store, ask held-out questions about older facts, and score retrieval and answers across session boundaries—not single-chat demos.

Long-term conversational memory is not proven by a clever single-session demo; it is proven by surviving many sessions and answering about facts spoken days or weeks earlier. Single-session tests mostly measure attention inside one window. This chapter covers what public conversational benchmarks stress, how to adapt those ideas to a domain corpus on Weaviate Engram, and how a harness writes session transcripts then searches across them without stuffing an ever-growing context window. A language-exchange example ingests two sessions and probes cross-session recall with hybrid search. Scoring without fooling yourself means honest categories, synthetic seed users, and an operating rhythm that keeps the benchmark alive as products change.

Long-term conversational memory is not proven by a clever single-session demo. It is proven by surviving many sessions, then answering questions about facts that were spoken days or weeks earlier. Benchmarking that ability means replaying multi-session dialogues into a memory store, asking held-out questions, and scoring retrieval and answers with honest categories. This chapter explains what public conversational benchmarks stress, how to adapt their ideas to your own domain corpus, and how Weaviate Engram supports a practical harness that writes session transcripts and searches across them without stuffing an ever-growing context window.

Why Do Single-Session Tests Fail to Measure Long-Term Memory?

A chat that fits in one prompt mostly tests attention, not durable memory. The model can look backward in the same window. Failures stay hidden until the history no longer fits, or until the process restarts and the window is empty. That is the regime real assistants live in.

Long-term benchmarks therefore spread dialogue across many sessions. Facts appear early. Questions arrive late. Distractor sessions sit in between. The system must store what matters, find it later, and ignore what does not. Stuffing the full transcript into a giant context window can still cheat some shorter suites. Harder splits grow past practical windows on purpose.

If your evaluation never closes the window between write and read, you are grading a different product than the one you ship.

What Do Established Conversational Memory Benchmarks Actually Stress?

Two widely cited research suites shape how teams talk about this problem. One focuses on very long multi-session dialogues with question types such as single-hop, multi-hop, and temporal reasoning. Another organizes roughly five hundred curated questions around extraction, multi-session reasoning, temporal reasoning, knowledge updates, and abstention, with shorter and much longer history variants.

Those category names matter more than any headline percentage. Temporal questions punish systems that remember facts without time. Knowledge-update questions punish systems that keep superseded preferences forever. Abstention questions punish systems that invent memories when nothing was stored. Multi-hop questions punish stores that retrieve one fact but cannot surface the second fact needed to combine them.

Read published scores carefully. Retrieval recall is not the same as end-to-end answer accuracy. Judge prompts differ. Short variants that fit inside modern context windows are not interchangeable with million-token style splits. Compare like with like, or the chart is marketing.

How Can You Build a Domain Benchmark on Top of Weaviate Engram?

Public suites teach the shape. Your product still needs local fixtures. Collect multi-session transcripts from a real workflow. Label questions that a good assistant should answer after those sessions. Include updates and traps. Then drive the loop through Engram the way production does.

Write each session with memories.add using conversation-shaped messages and a stable user_id. Optionally attach a session_id property for provenance. Wait on runs when the next session’s questions depend on fresh commits. At question time, search with hybrid retrieval across the user’s memories, usually without filtering to one session, because long-term recall must cross session boundaries.

Here is a miniature language-exchange desk benchmark that ingests two sessions and probes cross-session recall:

import os
from engram import EngramClient, HybridRetrieval

client = EngramClient(api_key=os.environ["ENGRAM_API_KEY"])
learner = "tandem-learner-noah"
group = "language_exchange"

session_a = [
    {"role": "user", "content": "I am Noah. I want Portuguese partners who can meet after 19:00."},
    {"role": "assistant", "content": "Understood. I will prefer evening Portuguese matches."},
    {"role": "user", "content": "I am preparing for a trip to Porto in November."},
]
session_b = [
    {"role": "user", "content": "Actually switch me to Brazilian Portuguese focus, still evenings."},
    {"role": "assistant", "content": "Updated. Brazilian Portuguese, meetings after 19:00."},
    {"role": "user", "content": "Keep the Porto trip context for travel phrases."},
]

for i, session in enumerate([session_a, session_b], start=1):
    run = client.memories.add(
        session,
        user_id=learner,
        group=group,
        properties={"desk": "tandem-desk-helix", "session_id": f"helix-s{i}"},
    )
    client.runs.wait(run.run_id)

# Long-term probes asked as if weeks later, with no transcript in prompt
probes = [
    {
        "query": "What Portuguese variety and meeting time does Noah want?",
        "must_include": ["brazilian", "19:00"],
    },
    {
        "query": "What trip destination should travel phrases target for Noah?",
        "must_include": ["porto"],
    },
]

hits_ok = 0
for probe in probes:
    memories = client.memories.search(
        query=probe["query"],
        user_id=learner,
        group=group,
        retrieval_config=HybridRetrieval(limit=5),
    )
    blob = " ".join(m.content.lower() for m in memories)
    if all(token in blob for token in probe["must_include"]):
        hits_ok += 1

print({"cross_session_retrieval_rate": hits_ok / len(probes)})

Session two updated the variety. A strong long-term store surfaces Brazilian Portuguese, not only the earlier generic Portuguese note. That is a knowledge-update check in miniature.

How Should You Score Conversational Benchmarks Without Fooling Yourself?

The harness above scores retrieval. Keep a second score for answers if your agent generates text. Freeze the retrieved memories when comparing prompt changes so you do not confuse utilization bugs with store bugs. Report both numbers.

Break results down by category even on a small private set. Overall averages hide whether temporal probes are collapsing while easy preference probes look fine. Track abstention separately. A wrong confident answer is worse than a clean “I do not have that stored.”

Also record cost and latency. Long-term memory exists partly because full-history prompts become expensive and eventually impossible. A benchmark that ignores tokens teaches the wrong optimum. Engram’s value shows when recall stays usable as session count grows and the context window cannot.

What Operating Rhythm Keeps a Conversational Memory Benchmark Alive?

Fixtures rot. Product language changes. Add a few new multi-session stories each release cycle. Retire questions whose gold answers no longer match policy. Version the corpus beside harness code.

Run the suite in CI against a dedicated Engram project so tests cannot pollute production users. Seed only synthetic learners like the tandem desk example. Wipe or isolate that project between runs if your process requires a clean slate.

Long-term conversational memory becomes believable when benchmarks look like the calendar your users actually live on. Many sessions. Sparse questions. Honest categories. Engram gives you conversation ingest and cross-session search. The benchmark decides whether those pieces still work after the dialogue gets long.

Our next chapter, How do you evaluate memory consistency over long sessions?, stays in the long-horizon regime and asks how to detect contradictions and drift when the same facts are rewritten across an extended timeline.