WorldMemArena is a large-scale multimodal memory benchmark designed to evaluate how well AI systems retain, update, and recall information across extended multi-session interactions grounded in real-world scenarios.
| Split | Samples | Sessions | Turns | Images | Memory Points | QA Pairs |
|---|---|---|---|---|---|---|
| Agent / GUI | 203 | 4,074 | 16,252 | 5,755 | 13,907 | 10,382 |
| Agent / Embodied | 220 | 3,075 | 12,087 | 6,437 | 12,186 | 11,788 |
| Lifelong / Project | 18 | 540 | 14,580 | 1,601 | 6,980 | 990 |
| Lifelong / Personal | 20 | 600 | 16,320 | 1,803 | 7,121 | 1,100 |
| Total | 461 | 8,489 | 59,239 | 15,595 | 40,194 | 24,258 |
Scale highlights:
WorldMemArena/
βββ agent/
β βββ gui/ # 203 samples, 8 task types
β β βββ css/ # CSS styling (20)
β β βββ excel/ # Spreadsheet (24)
β β βββ file_mgmt/ # File management (19)
β β βββ image_edit/ # Image editing (30)
β β βββ mobile/ # Mobile app (19)
β β βββ web/ # Web browsing (27)
β β βββ webarena_lite/ # WebArena (39)
β β βββ word_docs/ # Document editing (25)
β βββ embodied/ # 220 samples, 12 task types
β βββ eb_alfred_base/ # ALFWorld basic (15)
β βββ eb_alfred_common_sense/ # ALFWorld common-sense (14)
β βββ eb_alfred_complex_instruction/ # ALFWorld complex (14)
β βββ eb_alfred_long_horizon/ # ALFWorld long-horizon (14)
β βββ eb_alfred_visual_appearance/ # ALFWorld visual (12)
β βββ eb_nav_base/ # Navigation basic (16)
β βββ eb_nav_common_sense/ # Navigation common-sense (15)
β βββ eb_nav_complex_instruction/ # Navigation complex (17)
β βββ eb_nav_long_horizon/ # Navigation long-horizon (18)
β βββ eb_nav_visual_appearance/ # Navigation visual (13)
β βββ minecraft/ # Minecraft (32)
β βββ omnigibson/ # OmniGibson (40)
βββ lifelong/
β βββ project/ # 18 samples, 6 domains
β β βββ academic/ # Academic (3)
β β βββ education/ # Education (3)
β β βββ finance/ # Finance (3)
β β βββ health/ # Health (3)
β β βββ software/ # Software (3)
β β βββ startup/ # Startup (3)
β βββ personal/ # 20 samples
βββ small_ids.json # 150-sample subset ID list
Each subcategory folder contains:
{sample_id}.json β the full sample including sessions, memory points, and QA checkpointsimages/{sample_id}/ β all associated images for that sample (relative paths)small_ids.json is a JSON array of 150 sample IDs that form a balanced subset of the full benchmark, suitable for faster evaluation runs. It covers all domains and subcategories proportionally. To load only the small subset:
import json
with open("WorldMemArena/small_ids.json") as f:
small_ids = set(json.load(f))
# Filter samples when iterating over the dataset
if sample["sample_id"] in small_ids:
...
Each JSON file follows a unified schema:
{
"sample_id": "excel_01",
"sessions": [
{
"_v2_session_id": "S00",
"dialogue": [
{
"role": "user",
"content": "...",
"timestamp": "Jan 02, 2025, 09:00:00",
"attachments": [
{
"caption": "description of the image",
"type": "image_caption",
"image_id": "excel_01_img_001",
"file_path": "images/excel_01/excel_01_img_001.png"
}
]
},
{
"role": "assistant",
"content": "...",
"timestamp": "Jan 02, 2025, 09:02:00",
"attachments": []
}
]
}
],
"memory_points": [
{
"session_id": "S01",
"memory_points": [
{
"index": 1,
"memory_content": "The user switched from Plan A to Plan B due to ...",
"memory_type": "Event Memory",
"memory_source": "secondary",
"is_update": "True",
"update_type": "status_update",
"original_memories": ["The user is following Plan A."],
"timestamp": "2025-01-14 10:30:00",
"importance": 1.0,
"memory_id": "mp_S01_1"
}
]
}
],
"qa_checkpoints": [
{
"checkpoint_id": "QA00",
"covered_sessions": ["S00", "S01", "S02", "S03", "S04", "S05"],
"questions": [
{
"question": "What caused the user to abandon the original plan?",
"answer": "The original plan was abandoned because ...",
"question_type": "Fact Recall",
"question_type_abbrev": "FR",
"difficulty": "easy",
"evidence": [
{"memory_id": "mp_S02_3"},
{"image_id": "excel_01_img_005"}
]
}
]
}
]
}
| Field | Description |
|---|---|
sample_id | Unique identifier following the {subcategory}_{number} convention |
sessions | Ordered list of interaction sessions, each with a dialogue of user/assistant turns |
attachments | Images attached to a turn; file_path is relative to the JSON file's directory |
memory_points | Ground-truth annotations of what should be remembered per session |
memory_id | Unique ID for each memory point, formatted as mp_{session}_{index} |
qa_checkpoints | Evaluation checkpoints inserted at intervals across the session timeline |
evidence | Links each question to supporting memory points and/or images |
Each QA checkpoint covers a window of preceding sessions and contains questions that probe different aspects of memory. Questions are categorized into 11 types organized across three dimensions:
| Abbrev | Type | Difficulty | Count | Description |
|---|---|---|---|---|
| FR | Factual Recall | Easy | 1,799 | Retrieve a specific fact directly stated in past sessions. |
| DU | Dynamic Update | Medium | 1,833 | Recall the latest version of information that has been updated across sessions. The model must override stale facts with newer ones. |
| MC | Memory Conflict | Medium | 1,820 | Detect and resolve contradictions between information from earlier and later sessions. |
| MB | Memory Boundary | Medium | 1,866 | Distinguish what was and was not mentioned within a specific session range. Tests precision of temporal scoping. |
| TTL | Time-to-Live | Hard | 1,776 | Track how a piece of information evolved, was superseded, or expired across the full session timeline. |
| Abbrev | Type | Difficulty | Count | Description |
|---|---|---|---|---|
| VFR | Visual Factual Recall | Easy/Medium | 1,861 | Recall a specific visual detail (e.g., UI element, object position) from an image seen in a past session. |
| VS | Visual Search | Medium/Hard | 1,842 | Given a description, identify which image (among many seen across sessions) contains the target information. |
| VU | Visual Update | Medium/Hard | 1,838 | Track how a visual scene or interface state changed between two or more sessions. |
| Abbrev | Type | Difficulty | Count | Description |
|---|---|---|---|---|
| TR | Temporal Reasoning | Hard | 1,748 | Reason about the order, timing, or duration of events that span multiple sessions. |
| KR | Knowledge Reasoning | Hard | 1,807 | Combine multiple recalled facts via multi-hop reasoning to derive an answer not explicitly stated. |
| CMR | Cross-modal Reasoning | Hard | 1,658 | Integrate evidence from both text and images across sessions to answer the question. |
There are also 4,410 questions from the agent domain with the type field unset, distributed across easy (808), medium (1,830), and hard (1,772) difficulties.
| Difficulty | Count | Share |
|---|---|---|
| Easy | 4,274 | 17.6% |
| Medium | 10,522 | 43.4% |
| Hard | 9,462 | 39.0% |
Each sample consists of multiple chronological sessions simulating an ongoing interaction. Agent samples contain action-observation trajectories where each step includes a screenshot and the agent's action; lifelong samples contain multi-turn conversations spanning weeks to months of simulated time, with user-shared images interspersed throughout.
Structured ground-truth annotations of the information that should be retained after each session. Each memory point specifies:
Memory points serve as the gold-standard memory state for evaluating whether a system's internal memory is accurate and up-to-date.
Checkpoints are inserted at regular intervals (typically every 5~6 sessions) throughout each sample's timeline. Each checkpoint specifies:
This design enables both incremental evaluation (test after each checkpoint) and cumulative evaluation (test at the final checkpoint using the full history).
All file_path values in attachments are relative to the directory containing the JSON file. For example, in agent/gui/excel/excel_01.json, the path images/excel_01/excel_01_img_003.png resolves to:
agent/gui/excel/images/excel_01/excel_01_img_003.png
import json
import os
from PIL import Image
sample_path = "WorldMemArena/agent/gui/excel/excel_01.json"
with open(sample_path) as f:
sample = json.load(f)
base_dir = os.path.dirname(sample_path)
# Walk through sessions
for session in sample["sessions"]:
print(f"\n--- {session['_v2_session_id']} ---")
for turn in session["dialogue"]:
print(f"[{turn['role']}] {turn['content'][:100]}...")
for att in turn.get("attachments", []):
if "file_path" in att:
img = Image.open(os.path.join(base_dir, att["file_path"]))
print(f" π {att['image_id']} ({img.size[0]}x{img.size[1]})")
# Inspect memory points
for mp_session in sample["memory_points"]:
for mp in mp_session["memory_points"]:
tag = "π" if mp.get("is_update") == "True" else "π"
print(f"{tag} [{mp['memory_id']}] {mp['memory_content'][:80]}...")
# Run QA evaluation
for checkpoint in sample["qa_checkpoints"]:
print(f"\n=== Checkpoint {checkpoint['checkpoint_id']} ===")
print(f"Covers: {checkpoint['covered_sessions']}")
for q in checkpoint["questions"]:
print(f" [{q['question_type_abbrev']}|{q['difficulty']}] {q['question'][:80]}...")
print(f" β {q['answer'][:80]}...")
This dataset is released under the CC BY-NC 4.0 license.
WorldMemArena is a large-scale multimodal memory benchmark designed to evaluate how well AI systems retain, update, and recall information across extended multi-session interactions grounded in real-world scenarios.
| Split | Samples | Sessions | Turns | Images | Memory Points | QA Pairs |
|---|---|---|---|---|---|---|
| Agent / GUI | 203 | 4,074 | 16,252 | 5,755 | 13,907 | 10,382 |
| Agent / Embodied | 220 | 3,075 | 12,087 | 6,437 | 12,186 | 11,788 |
| Lifelong / Project | 18 | 540 | 14,580 | 1,601 | 6,980 | 990 |
| Lifelong / Personal | 20 | 600 | 16,320 | 1,803 | 7,121 | 1,100 |
| Total | 461 | 8,489 | 59,239 | 15,595 | 40,194 | 24,258 |
Scale highlights:
WorldMemArena/
βββ agent/
β βββ gui/ # 203 samples, 8 task types
β β βββ css/ # CSS styling (20)
β β βββ excel/ # Spreadsheet (24)
β β βββ file_mgmt/ # File management (19)
β β βββ image_edit/ # Image editing (30)
β β βββ mobile/ # Mobile app (19)
β β βββ web/ # Web browsing (27)
β β βββ webarena_lite/ # WebArena (39)
β β βββ word_docs/ # Document editing (25)
β βββ embodied/ # 220 samples, 12 task types
β βββ eb_alfred_base/ # ALFWorld basic (15)
β βββ eb_alfred_common_sense/ # ALFWorld common-sense (14)
β βββ eb_alfred_complex_instruction/ # ALFWorld complex (14)
β βββ eb_alfred_long_horizon/ # ALFWorld long-horizon (14)
β βββ eb_alfred_visual_appearance/ # ALFWorld visual (12)
β βββ eb_nav_base/ # Navigation basic (16)
β βββ eb_nav_common_sense/ # Navigation common-sense (15)
β βββ eb_nav_complex_instruction/ # Navigation complex (17)
β βββ eb_nav_long_horizon/ # Navigation long-horizon (18)
β βββ eb_nav_visual_appearance/ # Navigation visual (13)
β βββ minecraft/ # Minecraft (32)
β βββ omnigibson/ # OmniGibson (40)
βββ lifelong/
β βββ project/ # 18 samples, 6 domains
β β βββ academic/ # Academic (3)
β β βββ education/ # Education (3)
β β βββ finance/ # Finance (3)
β β βββ health/ # Health (3)
β β βββ software/ # Software (3)
β β βββ startup/ # Startup (3)
β βββ personal/ # 20 samples
βββ small_ids.json # 150-sample subset ID list
Each subcategory folder contains:
{sample_id}.json β the full sample including sessions, memory points, and QA checkpointsimages/{sample_id}/ β all associated images for that sample (relative paths)small_ids.json is a JSON array of 150 sample IDs that form a balanced subset of the full benchmark, suitable for faster evaluation runs. It covers all domains and subcategories proportionally. To load only the small subset:
import json
with open("WorldMemArena/small_ids.json") as f:
small_ids = set(json.load(f))
# Filter samples when iterating over the dataset
if sample["sample_id"] in small_ids:
...
Each JSON file follows a unified schema:
{
"sample_id": "excel_01",
"sessions": [
{
"_v2_session_id": "S00",
"dialogue": [
{
"role": "user",
"content": "...",
"timestamp": "Jan 02, 2025, 09:00:00",
"attachments": [
{
"caption": "description of the image",
"type": "image_caption",
"image_id": "excel_01_img_001",
"file_path": "images/excel_01/excel_01_img_001.png"
}
]
},
{
"role": "assistant",
"content": "...",
"timestamp": "Jan 02, 2025, 09:02:00",
"attachments": []
}
]
}
],
"memory_points": [
{
"session_id": "S01",
"memory_points": [
{
"index": 1,
"memory_content": "The user switched from Plan A to Plan B due to ...",
"memory_type": "Event Memory",
"memory_source": "secondary",
"is_update": "True",
"update_type": "status_update",
"original_memories": ["The user is following Plan A."],
"timestamp": "2025-01-14 10:30:00",
"importance": 1.0,
"memory_id": "mp_S01_1"
}
]
}
],
"qa_checkpoints": [
{
"checkpoint_id": "QA00",
"covered_sessions": ["S00", "S01", "S02", "S03", "S04", "S05"],
"questions": [
{
"question": "What caused the user to abandon the original plan?",
"answer": "The original plan was abandoned because ...",
"question_type": "Fact Recall",
"question_type_abbrev": "FR",
"difficulty": "easy",
"evidence": [
{"memory_id": "mp_S02_3"},
{"image_id": "excel_01_img_005"}
]
}
]
}
]
}
| Field | Description |
|---|---|
sample_id | Unique identifier following the {subcategory}_{number} convention |
sessions | Ordered list of interaction sessions, each with a dialogue of user/assistant turns |
attachments | Images attached to a turn; file_path is relative to the JSON file's directory |
memory_points | Ground-truth annotations of what should be remembered per session |
memory_id | Unique ID for each memory point, formatted as mp_{session}_{index} |
qa_checkpoints | Evaluation checkpoints inserted at intervals across the session timeline |
evidence | Links each question to supporting memory points and/or images |
Each QA checkpoint covers a window of preceding sessions and contains questions that probe different aspects of memory. Questions are categorized into 11 types organized across three dimensions:
| Abbrev | Type | Difficulty | Count | Description |
|---|---|---|---|---|
| FR | Factual Recall | Easy | 1,799 | Retrieve a specific fact directly stated in past sessions. |
| DU | Dynamic Update | Medium | 1,833 | Recall the latest version of information that has been updated across sessions. The model must override stale facts with newer ones. |
| MC | Memory Conflict | Medium | 1,820 | Detect and resolve contradictions between information from earlier and later sessions. |
| MB | Memory Boundary | Medium | 1,866 | Distinguish what was and was not mentioned within a specific session range. Tests precision of temporal scoping. |
| TTL | Time-to-Live | Hard | 1,776 | Track how a piece of information evolved, was superseded, or expired across the full session timeline. |
| Abbrev | Type | Difficulty | Count | Description |
|---|---|---|---|---|
| VFR | Visual Factual Recall | Easy/Medium | 1,861 | Recall a specific visual detail (e.g., UI element, object position) from an image seen in a past session. |
| VS | Visual Search | Medium/Hard | 1,842 | Given a description, identify which image (among many seen across sessions) contains the target information. |
| VU | Visual Update | Medium/Hard | 1,838 | Track how a visual scene or interface state changed between two or more sessions. |
| Abbrev | Type | Difficulty | Count | Description |
|---|---|---|---|---|
| TR | Temporal Reasoning | Hard | 1,748 | Reason about the order, timing, or duration of events that span multiple sessions. |
| KR | Knowledge Reasoning | Hard | 1,807 | Combine multiple recalled facts via multi-hop reasoning to derive an answer not explicitly stated. |
| CMR | Cross-modal Reasoning | Hard | 1,658 | Integrate evidence from both text and images across sessions to answer the question. |
There are also 4,410 questions from the agent domain with the type field unset, distributed across easy (808), medium (1,830), and hard (1,772) difficulties.
| Difficulty | Count | Share |
|---|---|---|
| Easy | 4,274 | 17.6% |
| Medium | 10,522 | 43.4% |
| Hard | 9,462 | 39.0% |
Each sample consists of multiple chronological sessions simulating an ongoing interaction. Agent samples contain action-observation trajectories where each step includes a screenshot and the agent's action; lifelong samples contain multi-turn conversations spanning weeks to months of simulated time, with user-shared images interspersed throughout.
Structured ground-truth annotations of the information that should be retained after each session. Each memory point specifies:
Memory points serve as the gold-standard memory state for evaluating whether a system's internal memory is accurate and up-to-date.
Checkpoints are inserted at regular intervals (typically every 5~6 sessions) throughout each sample's timeline. Each checkpoint specifies:
This design enables both incremental evaluation (test after each checkpoint) and cumulative evaluation (test at the final checkpoint using the full history).
All file_path values in attachments are relative to the directory containing the JSON file. For example, in agent/gui/excel/excel_01.json, the path images/excel_01/excel_01_img_003.png resolves to:
agent/gui/excel/images/excel_01/excel_01_img_003.png
import json
import os
from PIL import Image
sample_path = "WorldMemArena/agent/gui/excel/excel_01.json"
with open(sample_path) as f:
sample = json.load(f)
base_dir = os.path.dirname(sample_path)
# Walk through sessions
for session in sample["sessions"]:
print(f"\n--- {session['_v2_session_id']} ---")
for turn in session["dialogue"]:
print(f"[{turn['role']}] {turn['content'][:100]}...")
for att in turn.get("attachments", []):
if "file_path" in att:
img = Image.open(os.path.join(base_dir, att["file_path"]))
print(f" π {att['image_id']} ({img.size[0]}x{img.size[1]})")
# Inspect memory points
for mp_session in sample["memory_points"]:
for mp in mp_session["memory_points"]:
tag = "π" if mp.get("is_update") == "True" else "π"
print(f"{tag} [{mp['memory_id']}] {mp['memory_content'][:80]}...")
# Run QA evaluation
for checkpoint in sample["qa_checkpoints"]:
print(f"\n=== Checkpoint {checkpoint['checkpoint_id']} ===")
print(f"Covers: {checkpoint['covered_sessions']}")
for q in checkpoint["questions"]:
print(f" [{q['question_type_abbrev']}|{q['difficulty']}] {q['question'][:80]}...")
print(f" β {q['answer'][:80]}...")
This dataset is released under the CC BY-NC 4.0 license.