CAME-Bench (Context-aware Agent Memory Evaluation Benchmark) is a synthetic dataset designed to evaluate agentic memory in continuous, goal-oriented trajectories characterized by high contextual interference.
π Project Website: https://contextual-intent.github.io
π¦ Project GitHub: https://github.com/Seattleyrz/contextual-intent
The main repo provides complete, clear instructions to run retriever methods on CAME-Bench.
For more information about the research paper, interactive data explorer (sample of CAME-Bench), methodology (STITCH), and additional resources, please visit our project website.
example_data/ is a small, decoded sample used only for Hugging Face dataset viewer visualization (not the benchmark data).encoded_benchmark_codec/ and must be decoded before use (see Section 5. Decoding the Dataset).CAME-Bench constructs dense interaction histories where recurring entities and interleaved goals create significant ambiguity. It is specifically designed to evaluate an agent's ability to manage context over long horizons.
The benchmark consists of two distinct domains, each available in three length scales:
Travel Planning: An LLM-simulated assistant collaborates with a simulated user to construct multi-day itineraries. This involves tracking constraints, bookings, and comparison across different days.
Debate: Two LLM agents advocate opposing positions in evidence-grounded policy argumentation. This involves tracking attacks, defenses, and concessions.
To test scalability, the dataset is stratified into three subsets:
| Subset | Avg. Context Length | # Trajectories | # Questions |
|---|---|---|---|
| Small | ~23k tokens | 6 | 144 |
| Medium | ~137k tokens | 6 | 168 |
| Large | ~408k tokens | 2 | 61 |
Deploying agents in long-horizon interactions remains challenging because similar entities and facts recur under different latent goals. Standard Retrieval-Augmented Generation (RAG) often fails here due to Contextual Interference.
CAME-Bench is designed to break standard retrieval systems by introducing:
The Disambiguation Bottleneck: Entities (e.g., "Hotel Apollo") appear repeatedly under different contexts (e.g., "Day 1" vs. "Day 2"). Keyword search cannot distinguish these.
Dynamic Referential Ambiguity: The history is full of implicit references (e.g., "that hotel," "the previous argument") that require structural tracking rather than static retrieval.
No Turn-Taking Guarantees: Unlike chat benchmarks, information is often interleaved, deferred, and resolved only after distracting steps.
After preprocessing, both Travel Planning and Debate domains use a unified data schema. The dataset is stored as two files:
Each turn in turn file follows this unified format:
{
"id": "trip-uuid-turn-1",
"role": "user",
"content": "I'd like to book Hotel A for Day 1.",
"timestamp_mapping": {
"trip-uuid": "2024-01-15T10:30:00Z",
"day-1": "2024-01-15T10:30:00Z"
},
"partition": ["trip-uuid", "day-1"],
"action": "PROPOSE",
"action_object": "Hotel A"
}
Turn Fields:
id (string, required): Unique identifier for the turn (format: {domain}-{uuid}-turn-{turn_id})role (string, required): The acting agent
"user" or "assistant""pro-side-debater" or "con-side-debater"content (string, required): The natural-language utterance content of the turntimestamp_mapping (map<string, string>, optional): Mapping from partition labels to timestamps. Used to track temporal ordering within each partition (e.g., {"trip-uuid": "2024-01-15T10:30:00Z", "day-1": "2024-01-15T10:30:00Z"})partition (repeated string, required): Hierarchical partition labels for grouping turns (e.g., ["trip-uuid"] or ["topic-uuid"]). Used to filter turns during retrievalaction (string, optional): Action type performed in this turn. Can be empty.
"PROPOSE", "INQUIRE", "COMPARE", "DECIDE", "SET_DAY", "REVISE", "SUMMARIZE_PLAN""propose", "attack", "defend", "concede", "background_supply", "summarize"action_object (string, optional): The object or entity being acted upon (e.g., hotel name, contention ID, evidence UUID). Can be empty.Each question in question file follows this unified format:
{
"id": "trip-uuid-turn-1-type_1",
"type": "type_1",
"content": "What hotel was decided for Day 1?",
"answer": {
"free_form_answer": "[\"Hotel A\"]"
},
"date": "2024-01-15",
"question_turn_ids": ["trip-uuid-turn-1", "trip-uuid-turn-8", ...],
"answer_turn_ids": ["trip-uuid-turn-15"],
"answer_type": "ANSWER_TYPE_FREEFORM"
}
Question Fields:
id (string, required): Unique identifier for the questiontype (string, optional): Question type category (see Section 4). Can be empty.
"type_1": Incremental Memory Revision"type_2": Context-Aware Factual Recall"type_3": Context-Aware Multi-Hop Reasoning"type_4": Information Synthesiscontent (string, required): The question textanswer (Answer object, required): Answer content (oneof field)
{"free_form_answer": "[\"answer1\", \"answer2\"]"} (JSON-encoded list)date (string, optional): The date of the question. Can be empty.question_turn_ids (repeated string, required): All turn IDs in the trajectory (full conversation context). Used to provide the complete context for answering the question.answer_turn_ids (repeated string, required): Ground-truth turn IDs that contain the answer (for evaluation). These are the turns that should be retrieved to correctly answer the question.answer_type (AnswerType enum, required): Answer format type
"ANSWER_TYPE_FREEFORM": Free-form text answer"ANSWER_TYPE_FREEFORM_DEBATE": Debate-specific free-form answerWe pose four categories of free-response questions to target complementary aspects of memory:
Type 1: Incremental Memory Revision: Assesses the ability to maintain and update entity states as they evolve (e.g., tracking a restaurant as it is added, then rejected later).
Type 2: Context-Aware Factual Recall: Tests precise retrieval amidst semantically similar content (e.g., retrieving a hotel price specifically for Day 2, distinguishing it from the price for Day 1).
Type 3: Context-Aware Multi-Hop Reasoning: Requires resolving referential expressions before retrieval (e.g., answering a question about "the dinner reservation I mentioned earlier" by first identifying the referent).
Type 4: Information Synthesis: Assesses the ability to aggregate information distributed across multiple steps (e.g., reconstructing a full itinerary from scattered bookings).
To prevent data contamination in LLM training, CAME-Bench files are published in an encoded format. The dataset uses XOR encryption with SHA256-derived keystreams and Base64 encoding to obfuscate content while preserving the ability to decode and use the benchmark.
The decoding script (codec.py) is included in the repository. No additional dependencies are required beyond Python 3.6+.
Download the encoded dataset from this Hugging Face repository. The encoded files are located in the encoded_benchmark_codec/ directory, which contains:
metadata.json: File records with SHA256 checksums and decryption keysblobs/: Directory containing Base64-encoded encrypted filesDecode the dataset using the provided script:
python3 codec.py decode --encoded_dir encoded_benchmark_codec --out_dir decoded_benchmark_codec
This command will:
metadata.json to retrieve file structure and decryption keysdecoded_benchmark_codec/The encoding process uses:
After decoding, you will have the original benchmark structure:
decoded_benchmark_codec/
βββ benchmark_meta.json
βββ traj-0/
β βββ questions.jsonl
β βββ turns.jsonl
βββ traj-1/
βββ ...
βββ traj-13/
encoded_benchmark_codec/ directoryFor more details on the encoding/decoding process, see CODEC_USAGE.md in the repository.
Evaluation is performed using an LLM-as-a-Judge approach; for end-to-end evaluation scripts (including prompts/signatures), please refer to the main GitHub repo.
LLMAnswerEvaluatorNumberSignature counts how many ground truth items appear in the model's output.CAME-Bench (Context-aware Agent Memory Evaluation Benchmark) is a synthetic dataset designed to evaluate agentic memory in continuous, goal-oriented trajectories characterized by high contextual interference.
π Project Website: https://contextual-intent.github.io
π¦ Project GitHub: https://github.com/Seattleyrz/contextual-intent
The main repo provides complete, clear instructions to run retriever methods on CAME-Bench.
For more information about the research paper, interactive data explorer (sample of CAME-Bench), methodology (STITCH), and additional resources, please visit our project website.
example_data/ is a small, decoded sample used only for Hugging Face dataset viewer visualization (not the benchmark data).encoded_benchmark_codec/ and must be decoded before use (see Section 5. Decoding the Dataset).CAME-Bench constructs dense interaction histories where recurring entities and interleaved goals create significant ambiguity. It is specifically designed to evaluate an agent's ability to manage context over long horizons.
The benchmark consists of two distinct domains, each available in three length scales:
Travel Planning: An LLM-simulated assistant collaborates with a simulated user to construct multi-day itineraries. This involves tracking constraints, bookings, and comparison across different days.
Debate: Two LLM agents advocate opposing positions in evidence-grounded policy argumentation. This involves tracking attacks, defenses, and concessions.
To test scalability, the dataset is stratified into three subsets:
| Subset | Avg. Context Length | # Trajectories | # Questions |
|---|---|---|---|
| Small | ~23k tokens | 6 | 144 |
| Medium | ~137k tokens | 6 | 168 |
| Large | ~408k tokens | 2 | 61 |
Deploying agents in long-horizon interactions remains challenging because similar entities and facts recur under different latent goals. Standard Retrieval-Augmented Generation (RAG) often fails here due to Contextual Interference.
CAME-Bench is designed to break standard retrieval systems by introducing:
The Disambiguation Bottleneck: Entities (e.g., "Hotel Apollo") appear repeatedly under different contexts (e.g., "Day 1" vs. "Day 2"). Keyword search cannot distinguish these.
Dynamic Referential Ambiguity: The history is full of implicit references (e.g., "that hotel," "the previous argument") that require structural tracking rather than static retrieval.
No Turn-Taking Guarantees: Unlike chat benchmarks, information is often interleaved, deferred, and resolved only after distracting steps.
After preprocessing, both Travel Planning and Debate domains use a unified data schema. The dataset is stored as two files:
Each turn in turn file follows this unified format:
{
"id": "trip-uuid-turn-1",
"role": "user",
"content": "I'd like to book Hotel A for Day 1.",
"timestamp_mapping": {
"trip-uuid": "2024-01-15T10:30:00Z",
"day-1": "2024-01-15T10:30:00Z"
},
"partition": ["trip-uuid", "day-1"],
"action": "PROPOSE",
"action_object": "Hotel A"
}
Turn Fields:
id (string, required): Unique identifier for the turn (format: {domain}-{uuid}-turn-{turn_id})role (string, required): The acting agent
"user" or "assistant""pro-side-debater" or "con-side-debater"content (string, required): The natural-language utterance content of the turntimestamp_mapping (map<string, string>, optional): Mapping from partition labels to timestamps. Used to track temporal ordering within each partition (e.g., {"trip-uuid": "2024-01-15T10:30:00Z", "day-1": "2024-01-15T10:30:00Z"})partition (repeated string, required): Hierarchical partition labels for grouping turns (e.g., ["trip-uuid"] or ["topic-uuid"]). Used to filter turns during retrievalaction (string, optional): Action type performed in this turn. Can be empty.
"PROPOSE", "INQUIRE", "COMPARE", "DECIDE", "SET_DAY", "REVISE", "SUMMARIZE_PLAN""propose", "attack", "defend", "concede", "background_supply", "summarize"action_object (string, optional): The object or entity being acted upon (e.g., hotel name, contention ID, evidence UUID). Can be empty.Each question in question file follows this unified format:
{
"id": "trip-uuid-turn-1-type_1",
"type": "type_1",
"content": "What hotel was decided for Day 1?",
"answer": {
"free_form_answer": "[\"Hotel A\"]"
},
"date": "2024-01-15",
"question_turn_ids": ["trip-uuid-turn-1", "trip-uuid-turn-8", ...],
"answer_turn_ids": ["trip-uuid-turn-15"],
"answer_type": "ANSWER_TYPE_FREEFORM"
}
Question Fields:
id (string, required): Unique identifier for the questiontype (string, optional): Question type category (see Section 4). Can be empty.
"type_1": Incremental Memory Revision"type_2": Context-Aware Factual Recall"type_3": Context-Aware Multi-Hop Reasoning"type_4": Information Synthesiscontent (string, required): The question textanswer (Answer object, required): Answer content (oneof field)
{"free_form_answer": "[\"answer1\", \"answer2\"]"} (JSON-encoded list)date (string, optional): The date of the question. Can be empty.question_turn_ids (repeated string, required): All turn IDs in the trajectory (full conversation context). Used to provide the complete context for answering the question.answer_turn_ids (repeated string, required): Ground-truth turn IDs that contain the answer (for evaluation). These are the turns that should be retrieved to correctly answer the question.answer_type (AnswerType enum, required): Answer format type
"ANSWER_TYPE_FREEFORM": Free-form text answer"ANSWER_TYPE_FREEFORM_DEBATE": Debate-specific free-form answerWe pose four categories of free-response questions to target complementary aspects of memory:
Type 1: Incremental Memory Revision: Assesses the ability to maintain and update entity states as they evolve (e.g., tracking a restaurant as it is added, then rejected later).
Type 2: Context-Aware Factual Recall: Tests precise retrieval amidst semantically similar content (e.g., retrieving a hotel price specifically for Day 2, distinguishing it from the price for Day 1).
Type 3: Context-Aware Multi-Hop Reasoning: Requires resolving referential expressions before retrieval (e.g., answering a question about "the dinner reservation I mentioned earlier" by first identifying the referent).
Type 4: Information Synthesis: Assesses the ability to aggregate information distributed across multiple steps (e.g., reconstructing a full itinerary from scattered bookings).
To prevent data contamination in LLM training, CAME-Bench files are published in an encoded format. The dataset uses XOR encryption with SHA256-derived keystreams and Base64 encoding to obfuscate content while preserving the ability to decode and use the benchmark.
The decoding script (codec.py) is included in the repository. No additional dependencies are required beyond Python 3.6+.
Download the encoded dataset from this Hugging Face repository. The encoded files are located in the encoded_benchmark_codec/ directory, which contains:
metadata.json: File records with SHA256 checksums and decryption keysblobs/: Directory containing Base64-encoded encrypted filesDecode the dataset using the provided script:
python3 codec.py decode --encoded_dir encoded_benchmark_codec --out_dir decoded_benchmark_codec
This command will:
metadata.json to retrieve file structure and decryption keysdecoded_benchmark_codec/The encoding process uses:
After decoding, you will have the original benchmark structure:
decoded_benchmark_codec/
βββ benchmark_meta.json
βββ traj-0/
β βββ questions.jsonl
β βββ turns.jsonl
βββ traj-1/
βββ ...
βββ traj-13/
encoded_benchmark_codec/ directoryFor more details on the encoding/decoding process, see CODEC_USAGE.md in the repository.
Evaluation is performed using an LLM-as-a-Judge approach; for end-to-end evaluation scripts (including prompts/signatures), please refer to the main GitHub repo.
LLMAnswerEvaluatorNumberSignature counts how many ground truth items appear in the model's output.