Halcyon-Zhang/BrowseComp-V3
BrowseComp-V3: A Benchmark Dataset for Multimodal Browsing Agents A dataset containing 300 samples with encrypted question-answer pairs, images, search trajectories, and sub-goals. Contents ├── data/ │ ├── train.jsonl # Main dataset (1.44 MB, 300 samples) │ └── images/ # Referenced images ├── scripts/ │ ├── decryption_script.py # Decrypt entire dataset │ ├── decrypt_batch.py # Batch decrypt to files │ ├──… See the full description on the dataset page: https://huggingface.co/datasets/Halcyon-Zhang/BrowseComp-V3.
BrowseComp-V<sup>3</sup>: A Benchmark Dataset for Multimodal Browsing Agents
A dataset containing 300 samples with encrypted question-answer pairs, images, search trajectories, and sub-goals.
Contents
├── data/
│ ├── train.jsonl # Main dataset (1.44 MB, 300 samples)
│ └── images/ # Referenced images
├── scripts/
│ ├── decryption_script.py # Decrypt entire dataset
│ ├── decrypt_batch.py # Batch decrypt to files
│ ├── encryption_utils.py # Encryption/decryption utilities
├── metadata/
├── decryption_guide.md # Decryption instructions
└── README.mdDataset Format
Fields
Each sample in train.jsonl contains:
- `id`: Sample identifier (e.g.,
001_Culture_Art_L3_p2_t2_m0_r2_w0_c0_g5) - `category`: Main category
- `sub_category`: Sub-category
- `image`: First image filename
- `image_paths`: List of image filenames (JSON string)
- `encrypted_question`: Encrypted question (AES-256-GCM format)
- `encrypted_answer`: Encrypted answer (AES-256-GCM format)
- `metadata`: Contains visinputs, source, timestamp, level, difficulty, domain, fcnum, and trajectory (JSON string)
- `sub_goals`: List of sub-goals (JSON string)
Example
{
"id": "001_Culture_Art_L3_p2_t2_m0_r2_w0_c0_g5",
"category": "Culture",
"sub_category": "Art",
"image": "data/images/001_Culture_Art_1.jpg",
"image_paths": "[\"data/images/001_Culture_Art_1.jpg\", \"data/images/001_Culture_Art_2.jpg\"]",
"encrypted_question": "{\"iv\": \"...\", \"ciphertext\": \"...\", \"tag\": \"...\"}",
"encrypted_answer": "{\"iv\": \"...\", \"ciphertext\": \"...\", \"tag\": \"...\"}",
"metadata": "{\"vis_inputs\": 2, \"source\": [...], \"level\": 3, \"difficulty\": \"Medium\", \"trajectory\": {...}}",
"sub_goals": "[{\"sg_id\": 1, \"description\": \"...\", \"key_info\": \"...\", ...}]"
}Data Structure Notes
- All nested structures (metadata, imagepaths, subgoals, etc.) are stored as JSON strings
- The
trajectoryfield is contained withinmetadata - Encrypted fields use base64-encoded iv, ciphertext, and tag
Encryption
Question-answer pairs are encrypted with AES-256-GCM using:
Key derivation: SHA-256 hash of passphrase
Passphrase: A_Visual_Vertical_Verifiable_Benchmark_for_Multimodal_Browsing_AgentsDecryption
Requirements
pip install cryptographyDecrypt Full Dataset
python scripts/decryption_script.py \
--input data/train.jsonl \
--key "A_Visual_Vertical_Verifiable_Benchmark_for_Multimodal_Browsing_Agents" \
--output decrypted.jsonBatch Decrypt
echo "A_Visual_Vertical_Verifiable_Benchmark_for_Multimodal_Browsing_Agents" > key.txt
python scripts/decrypt_batch.py \
--input data/train.jsonl \
--key-file key.txt \
--output-dir decrypted_samples/Using Decryption API
from encryption_utils import derive_key, decrypt_text
key = derive_key("A_Visual_Vertical_Verifiable_Benchmark_for_Multimodal_Browsing_Agents")
encrypted = {"iv": "...", "ciphertext": "...", "tag": "..."}
plaintext = decrypt_text(encrypted, key)Usage
Load with HuggingFace Datasets
from datasets import load_dataset
ds = load_dataset("path/to/repo")
sample = ds['train'][0]
# Encrypted question and answer are still encrypted
print(sample['encrypted_question'])
print(sample['encrypted_answer'])Decrypt and Use
import json
import sys
sys.path.insert(0, 'scripts')
from encryption_utils import derive_key, decrypt_text
key = derive_key("A_Visual_Vertical_Verifiable_Benchmark_for_Multimodal_Browsing_Agents")
with open('decrypted.json') as f:
samples = json.load(f)
for sample in samples:
print(f"Q: {sample['question']}")
print(f"A: {sample['answer']}")License
CC BY 4.0
Last Updated: 2026-02-14
