README.md

July 5, 2026 · View on GitHub

MemoryData logo MemoryData

A Unified Memory Benchmark Suite for Memory-Augmented Agents

"One pipeline. Four benchmark families. Twenty-two method presets. One consistent execution interface."

Python Methods Benchmarks Platform Taxonomy


English  |  简体中文

Introduction  •  Features  •  Quick Start  •  Layout  •  Methods  •  Benchmarks  •  Config  •  Artifacts  •  FAQ  •  Citation

MemoryData main results
Main results from the accompanying paper: memory-augmented agent methods compared across the LongMemEval, LoCoMo, and DB-Bench benchmarks under exact-match, ROUGE-L, and LLM-judge metric families. Bars are grouped by paradigm — Reference Baselines, Sequential Context, Structural Topological, and Multi-Paradigm Hybrid.

📣 Get involved

  • 📝 Need a reading list? See Awesome Agent Memory — our companion paper collection.
  • 🚧 Actively growing — new methods & benchmark datasets landing continuously.
  • Stay tuned — Star the repo, open an issue for requests, PRs from community contributions are welcomed!

✨ Introduction

Memory-augmented agents, structured memory architectures, and retrieval-based baselines are usually evaluated in isolation — each paper ships its own loader, its own runtime adapter, and its own metric harness. Results are hard to compare, and reproducing a single number across two methods often means re-implementing both.

MemoryData closes that gap. It is a research-oriented benchmark suite that unifies four benchmark families (MemoryAgentBench, LoCoMo, LongBench, MemBench), twenty-two method presets, and a shared runtime under a single main.py launcher, so that heterogeneous memory formulations can be compared under one consistent execution interface and one stable artifact layout.

📚 Features

🚀 Unified Launcher main.py is the single entry point for benchmark execution, artifact writing, and optional post-run evaluation hooks. Select any method and any benchmark by pointing at two YAML files.

🧩 22 Method Presets Flattened YAML presets span reference baselines, sequential context, structural topological, and multi-paradigm hybrid architectures — each wired to its vendored runtime.

📊 4 Benchmark Families MemoryAgentBench, LoCoMo, LongBench, and MemBench, each with full and category-specific or slice-specific configs ready to run.

🗂 Consistent Taxonomy Methods are grouped following the paper's RQ1 effectiveness taxonomy, so presets are discoverable by paradigm instead of by filename.

📦 Structured Artifacts Every run emits a result JSON, persisted agent state, and optional logs under a stable, override-able results/ root for reproducible post-processing.

🖥 Cross-Platform Separate dependency manifests for Linux/macOS and Windows, with BM25 and long-context reference paths retained under utils/.

🕹 Quick Start

Prerequisites: Python 3.11, an OpenAI-compatible model endpoint, and the benchmark datasets placed under datasets/.

Step 1: Create the environment

conda create -n memory-bench python=3.11
conda activate memory-bench
PlatformCommand
Linux / macOSpip install -r requirements.txt
Windowspip install -r requirements-windows.txt

Step 2: Configure model endpoints and keys

Most presets assume OpenAI-compatible serving endpoints. Update the YAML files in config/ so that model, base_url, embedding_base_url, and related provider fields match the model servers available in your environment.

VariableUsed byNotes
OPENAI_API_KEYMost presetsDefault key variable for chat and embedding calls
OPENAI_API_BASEMemOS example environmentRefer to methods/MemOS/config/.env.example when using MemOS-specific setup

Step 3: Prepare datasets

Datasets are not bundled with this repository. Place them under datasets/ according to the loader expectations.

BenchmarkDefault pathFormatNotes
MemoryAgentBenchdatasets/MemoryAgentBench/eval_dataset_collection/HuggingFace save_to_disk directoryFalls back to ai-hyz/MemoryAgentBench if the local copy is absent
LoCoModatasets/LoCoMo/rq1_4cat_600_dist/locomo_4cat_600_dist.jsonJSON fileUsed by the full and category-specific LoCoMo presets
LongBenchdatasets/longBench_rep150_proportional/datasetsHuggingFace save_to_disk directoryTargets the proportional subset
MemBenchdatasets/MemBench/MemData/FirstAgent/*.jsonJSON filessimple, noisy, knowledge_update, highlevel, RecMultiSession

Reference layout:

datasets/
├── MemoryAgentBench/
│   └── eval_dataset_collection/          # HuggingFace save_to_disk directory
├── LoCoMo/
│   └── rq1_4cat_600_dist/
│       └── locomo_4cat_600_dist.json
├── longBench_rep150_proportional/
│   └── datasets/                         # HuggingFace save_to_disk directory
└── MemBench/
    └── MemData/FirstAgent/               # simple / noisy / knowledge_update / highlevel / RecMultiSession

Step 4: Run experiments

Command template:

python main.py --agent_config <agent_yaml> --dataset_config <dataset_yaml>

Representative runs:

ScenarioAgent configDataset configExtra flags
Default MemoryAgentBench runconfig/reference_long_context_agent.yamlbenchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml-
Small smoke runconfig/reference_long_context_agent.yamlbenchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml--max_test_queries_ablation 1
LoCoMo evaluationconfig/hybrid_simplemem.yamlbenchmark/locomo/config/Locomo_qa_4cat_600_dist.yaml-
LongBench evaluationconfig/reference_embedding_rag.yamlbenchmark/longbench/config/LongBench_rep150_proportional.yaml-
MemBench evaluationconfig/sequential_mem0.yamlbenchmark/membench/config/MemBench_simple.yaml-

Example:

python main.py \
  --agent_config config/reference_long_context_agent.yaml \
  --dataset_config benchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml

🗂 Repository Layout

project-root/
├── main.py                        # unified experiment entry point
├── config/                        # flattened presets: reference, sequential, topological, hybrid
├── benchmark/
│   ├── memoryagentbench/          # MemoryAgentBench loaders and benchmark configs
│   ├── locomo/                    # LoCoMo configs and JSON loader
│   ├── longbench/                 # LongBench proportional-subset support
│   └── membench/                  # MemBench slice configs and loader
├── evaluation/
│   └── longmemeval/               # retained LongMemEval sidecar evaluation helpers
├── methods/                        # method runtimes grouped by the paper taxonomy
│   ├── embedding_rag/              # reference dense-retrieval baseline
│   ├── memagent/  mem0/  memochat/ # sequential context architectures
│   ├── cognee/  graph_rag/  hipporag/  memtree/  raptor/  zep/  zep_local/ # structural topological architectures
│   └── a_mem/  everos/  letta/  lightmem/  memorag/  memoryos/  self_rag/  simplemem/  MemOS/ # multi-paradigm hybrid architectures
├── utils/                          # shared runtime utilities, including long-context and BM25 reference paths
├── requirements.txt               # dependency manifest for Linux/macOS
└── requirements-windows.txt       # dependency manifest for Windows

🧠 Method Overview

The taxonomy below follows the grouping used in the main RQ1 effectiveness table of the accompanying paper. Methods retained in the released codebase but not displayed in that specific summary table are assigned to the corresponding taxonomy group for completeness.

GroupMethodRepresentative presetRuntime entryNotes
Reference BaselinesLong Contextreference_long_context_agent.yamlutils/agent.pyDirect long-context answering baseline without an external memory store
Reference BaselinesEmbedding RAGreference_embedding_rag.yamlmethods/embedding_rag/embedding_retriever.pyReference dense-retrieval baseline
Reference BaselinesBM25 RAGreference_simple_rag_bm25.yamlutils/agent.pySparse lexical retrieval baseline retained for comparison and smoke runs
Sequential Context ArchitecturesMemAgentsequential_memagent.yamlmethods/memagent/Recurrent sequential-memory baseline
Sequential Context ArchitecturesMem0sequential_mem0.yamlmethods/mem0/source/mem0/Sequential memory storage with persistent structured state
Sequential Context ArchitecturesMemoChatsequential_memochat.yamlmethods/memochat/memochat_adapter.pySequential dialogue memory with rolling summaries
Structural Topological ArchitecturesCogneetopological_cognee.yamlmethods/cognee/source/cognee/Graph-structured memory runtime
Structural Topological ArchitecturesZep Localtopological_zep_local.yamlmethods/zep_local/main.pyLocal graph-memory service path
Structural Topological ArchitecturesMemTreetopological_memtree.yamlmethods/memtree/memtree_adapter.pyTree-structured memory organization with provenance
Structural Topological ArchitecturesGraphRAGtopological_graph_rag.yamlmethods/graph_rag/graph_rag.pyStructured graph-based retrieval baseline
Structural Topological ArchitecturesHippoRAGtopological_hippo_rag_v2_openai.yamlmethods/hipporag/Retrieval over graph-style document organization
Structural Topological ArchitecturesRAPTORtopological_raptor.yamlmethods/raptor/raptor.pyHierarchical cluster-and-summarize retrieval baseline
Structural Topological ArchitecturesZeptopological_zep.yamlmethods/zep/zep.pyCloud-backed graph-memory integration
Multi-Paradigm Hybrid ArchitecturesLettahybrid_letta.yamlutils/agent.pyIntegrated through vendored Letta source and local runtime management
Multi-Paradigm Hybrid ArchitecturesLightMemhybrid_lightmem.yamlmethods/lightmem/lightmem_adapter.pyLayered memory construction and retrieval
Multi-Paradigm Hybrid ArchitecturesSimpleMemhybrid_simplemem.yamlmethods/simplemem/simplemem_adapter.pyHybrid semantic, keyword, and structured retrieval
Multi-Paradigm Hybrid ArchitecturesMemOShybrid_memos.yamlmethods/MemOS/source/src/Vendored memory operating system runtime
Multi-Paradigm Hybrid ArchitecturesMemoryOShybrid_memoryos.yamlmethods/memoryos/memoryos_adapter.pyLocal runtime wrapper for the preserved MemoryOS implementation
Multi-Paradigm Hybrid ArchitecturesA-MEMhybrid_a_mem.yamlmethods/a_mem/a_mem_adapter.pyHybrid memory writing and retrieval with provenance tracking
Multi-Paradigm Hybrid ArchitecturesEverOShybrid_everos.yamlmethods/everos/everos_adapter.pySearch-oriented external memory runtime
Multi-Paradigm Hybrid ArchitecturesSelf-RAGhybrid_self_rag.yamlmethods/self_rag/self_rag.pyRetrieval-augmented generation baseline retained in the current code release
Multi-Paradigm Hybrid ArchitecturesMemoRAGhybrid_memo_rag.yamlmethods/memorag/Cache-heavy retrieval pipeline for long contexts

📊 Benchmark Overview

Benchmark familyConfig filesTask focusExpected input format
MemoryAgentBench / Accurate Retrievalbenchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml
benchmark/memoryagentbench/Accurate_Retrieval/config/LongMemEval/Longmemeval_s.yaml
Question answering and long-memory retrieval under curated MemoryAgentBench splitsHuggingFace save_to_disk copy under datasets/MemoryAgentBench/eval_dataset_collection/, or fallback to ai-hyz/MemoryAgentBench
MemoryAgentBench / Conflict Resolutionbenchmark/memoryagentbench/Conflict_Resolution/config/Factconsolidation_mh_6k.yamlResolving conflicting facts across long interaction historiesSame MemoryAgentBench loading path as above
MemoryAgentBench / Test-Time Learningbenchmark/memoryagentbench/Test_Time_Learning/config/ICL/ICL_banking77.yamlIn-context adaptation and label-space memorizationSame MemoryAgentBench loading path as above
LoCoMobenchmark/locomo/config/Locomo_qa_4cat_600_dist.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat1_multi_hop.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat2_temporal.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat3_open_domain.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat4_single_hop.yaml
Conversational QA over long dialogues, with full and category-specific subsetsJSON file, typically datasets/LoCoMo/rq1_4cat_600_dist/locomo_4cat_600_dist.json
LongBenchbenchmark/longbench/config/LongBench_rep150_proportional.yamlLong-context multiple-choice reasoning on the proportional subset used by the current presetHuggingFace save_to_disk directory, typically datasets/longBench_rep150_proportional/datasets
MemBenchbenchmark/membench/config/MemBench_simple.yaml
benchmark/membench/config/MemBench_noisy.yaml
benchmark/membench/config/MemBench_knowledge_update.yaml
benchmark/membench/config/MemBench_highlevel.yaml
benchmark/membench/config/MemBench_RecMultiSession.yaml
Memory stress tests covering simple recall, noise, knowledge updates, high-level reasoning, and multi-session recommendationSlice-specific JSON files under datasets/MemBench/MemData/FirstAgent/

⚙️ Configuration Conventions

FieldMeaning
providerChat-model backend type, typically openai_compatible in the default presets
base_urlEndpoint for the chat model server
embedding_providerBackend type for embedding generation when the method uses vector retrieval
embedding_base_urlEndpoint for the embedding model server
*_api_key_envEnvironment variable name used to resolve API keys at runtime
retrieve_numRetrieval depth or top-k used by retrieval-enabled methods

📦 Output Artifacts

Artifact typeDefault locationDescription
Result JSONresults/outputs/<model>/<dataset>/<name_tag>_results.jsonMain evaluation output with metrics, query-level records, and summary fields
Agent statesresults/agents/Persisted agent memory, retrieval caches, and method-specific state
Artifact root override--artifact_root /path/to/artifactsRebases the outer artifact root while keeping the internal layout unchanged

Artifact layout:

results/
├── outputs/                                     # evaluation outputs grouped by model and dataset
│   └── <model>/                                 # model or preset-specific output namespace
│       └── <dataset>/                           # benchmark-specific output namespace
│           └── <name_tag>_results.json          # primary result file with metrics and records
├── agents/                                      # persisted agent state and method-side caches
│   └── <model_or_method>/                       # runtime-specific storage namespace
└── logs/                                        # optional execution logs when enabled by the run

Example:

python main.py \
  --agent_config config/reference_long_context_agent.yaml \
  --dataset_config benchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml \
  --artifact_root /path/to/artifacts

When --artifact_root is specified, the pipeline preserves the same internal results/outputs, results/agents, and results/logs organization under the new root, which makes it straightforward to isolate repeated experiment batches while keeping downstream parsing and post-processing logic unchanged.

🤔 FAQ

Are the datasets bundled with the repository?
No. Datasets are not distributed here. Place them under datasets/ following the paths in the Quick Start section. MemoryAgentBench additionally falls back to the ai-hyz/MemoryAgentBench HuggingFace mirror when no local copy is present.
Do I need to rebuild or reinstall anything between runs?
No. MemoryData is a plain Python pipeline launched via python main.py. Switching methods or benchmarks is just a matter of pointing --agent_config and --dataset_config at different YAML files.
Which model providers are supported?
The default presets target OpenAI-compatible chat and embedding endpoints, so any provider that exposes that interface works. Update base_url, embedding_base_url, and the relevant *_api_key_env fields in the chosen preset to match your server.
How do I force a clean re-run?
Pass --force to delete saved results, rebuild local agent state, and reset supported external persistence before the run. Use --retry_failed_queries to retry previously failed queries instead of skipping them when resuming.

📒 Citation

If you find this benchmark suite useful in your research, please cite:

@article{zhoumemorydata2026,
    title={Are We Ready For An Agent-Native Memory System?},
    author={Wei Zhou and Xuanhe Zhou and Shaokun Han and Hongming Xu and Guoliang Li and Zhiyu Li and Feiyu Xiong and Fan Wu},
    year={2026},
    journal={arXiv preprint arXiv:2606.24775},
    url={https://arxiv.org/abs/2606.24775}
}