ChoS3nE11ven/Agentic-MME

37

stars

15

commits

Python

primary language

Apr 13, 2026

updated

README

Agentic-MME: What Agentic Capability Really Brings to Multimodal Intelligence?

Agentic-MME case study

๐Ÿ”ฌ Process Benchmark ยท ๐Ÿ“Š ACC + Diagnostic Scores

๐Ÿš€ Quick Entry๐Ÿ“ฆ Dataset๐Ÿงช Run๐Ÿ“ˆ Eval๐Ÿ Comparison
Project PageHF Datasetgeneral/ + atomic/ scriptsevaluation/ scriptsTask-only ACC + Process Track

๐Ÿ“ฐ News

Latest Status

DateUpdate
2026.04.06๐Ÿš€๐Ÿ“„ Agentic-MME released on arXiv
2026.04.06๐Ÿ› ๏ธ๐Ÿค— Official benchmark code + dataset usage pipeline released

Contents


Agentic-MME Overview

Agentic-MME is a process-verified benchmark for evaluating multimodal agentic capabilities.

Unlike final-answer-only benchmarks, Agentic-MME explicitly evaluates whether a model can:

  1. see better through active visual operations (Visual Expansion), and
  2. know better through open-web retrieval (Knowledge Expansion),

while maintaining correct multi-turn reasoning under realistic interaction budgets.

Highlights:

  • ๐Ÿง  Process-level auditing instead of answer-only grading
  • ๐Ÿ–ผ๏ธ Visual operation correctness and artifact verification
  • ๐ŸŒ Search strategy and evidence quality verification
  • โฑ๏ธ Efficiency diagnosis via overthinking vs. human trajectories

Why Agentic-MME Is Different

1) Two core capability dimensions

  • ๐Ÿ–ผ๏ธ Visual Expansion: active image manipulation (crop/rotate/enhance/...) to reveal latent visual cues.
  • ๐ŸŒ Knowledge Expansion: open-web retrieval (search/lens/webpage reading) to obtain external evidence beyond parametric memory.

2) Progressive task difficulty (not a flat score)

  • Level 1: single decisive visual operation.
  • Level 2: short multi-step visual + retrieval workflow.
  • Level 3: iterative, interleaved visual-retrieval synergy under ambiguity.

3) Process-level dual-axis scoring

AxisWhat it evaluatesTypical signals
S-axis (Strategy)Whether retrieval plans/actions are correct and usefulquery intent, keyword quality, URL/evidence correctness
V-axis (Visual)Whether visual operations are correctly executed and produce valid visual evidenceintermediate artifacts and checkpoint pass/fail

V-axis is further decomposed for diagnosis:

  • V-tool: whether expected visual operations were invoked.
  • V-true: whether produced visual artifacts actually satisfy the checkpoint.

4) Efficiency beyond correctness

  • โฑ๏ธ Overthinking is measured relative to human reference trajectories, capturing redundant or excessive tool usage.

Dataset at a Glance

Core statistics

PropertyValue
Total tasks418
Difficulty levels3
Major domains / sub-categories6 / 35
Stepwise checkpoints2,000+
Human annotation cost10+ person-hours per task (avg.)
Total images / tool calls (human trajectories)430 / 899
Avg. image resolution1952 ร— 1747
Small-cue cases (<10% image area)226 (43.1%)
External-search-required tasks29.4%
Avg. prompt length / answer length31.9 / 1.5 tokens

Difficulty distribution

LevelShareAvg checkpoints / taskAvg tool calls / taskCharacterization
L1 (Easy)48.6%2.891.21single decisive visual operation
L2 (Mid)32.1%4.642.42short multi-step visual + retrieval workflow
L3 (Hard)19.4%6.674.07advanced synergistic, interleaved reasoning

Domain distribution (6 major domains)

DomainShare
Diagram21.3%
Finance19.9%
Society19.4%
Life14.4%
Culture12.9%
Science12.2%

Dataset Usage

๐Ÿค— Load from Hugging Face

from datasets import load_dataset

ds = load_dataset("Crystal1047/Agentic-MME", split="train")
print(ds)
print(ds.features)

๐Ÿ—‚๏ธ Official dataset folder layout

<dataset_root>/
โ”œโ”€โ”€ image_cause/
โ”œโ”€โ”€ images/
โ”œโ”€โ”€ json/
โ””โ”€โ”€ search_url/

Folder purpose:

FolderPurposeUsed by runner
json/Task configuration files (*.json)โœ… Required
images/Input images referenced by task IDsโœ… Required
image_cause/Auxiliary image evidence/metadataโœ… Required (analysis/inspection)
search_url/Retrieval evidence metadataโœ… Required (analysis/inspection)
python general/run_general_script_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json

Notes:

  • --images_dir is optional, but passing it explicitly avoids ambiguity.
  • --dataset_root should point to the folder that directly contains json/ and images/.
  • If omitted, dataset_root is inferred from the task JSON path.

Environment Setup

git clone https://github.com/ChoS3nE11ven/Agentic-MME.git
cd Agentic-MME
conda create -n agenticmme python=3.9 -y
conda activate agenticmme
pip install -r requirements.txt

For local models (Thyme/DeepEyes):

pip install torch transformers accelerate

Configuration

๐Ÿ” OpenAI API

cp configs/api.json.example configs/api.json

Then edit configs/api.json with your key/base URL.

๐ŸŒ Web retrieval config

Edit configs/search_config.json:

  • serper_api_key: Serper.dev key for Google Search + Google Lens
  • imgbb_api_key: ImgBB key for image upload
  • jina_api_key: Jina Reader key for webpage content extraction

Running Experiments

๐Ÿš€ Quick sanity check (single task)

General mode + OpenAI

python general/run_general_script_openai.py \
  --task_json <task_json> \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15

Atomic mode + OpenAI

python atomic/run_atomic_tools_openai.py \
  --task_json <task_json> \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o-mini \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15

๐Ÿ“ฆ Batch run (general mode)

OpenAI

python general/run_general_script_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15 \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

Use --num_shards 1 --shard 0 for single-process run.

Local models

# Thyme
python -m general.run_general_script_thyme \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/thyme-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

# DeepEyes
python -m general.run_general_script_deepeyes \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/deepeyes-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

โš™๏ธ Batch run (atomic mode)

OpenAI

python atomic/run_atomic_tools_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o-mini \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15 \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

Use --num_shards 1 --shard 0 for single-process run.

Local models

# Thyme
python atomic/run_atomic_tools_thyme.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/thyme-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

# DeepEyes
python atomic/run_atomic_tools_deepeyes.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/deepeyes-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

๐Ÿงฉ Important arguments

ArgumentDefaultDescription
--task_dir-Directory of task JSONs
--task_json-Single task JSON path
--dataset_rootinferredRoot used to resolve dataset files
--images_dir-Optional explicit image directory
--out_dirauto (runs/general/{model} or runs/atomic/{model})Output directory
--modelscript-dependentOpenAI model name
--model_pathscript-dependentLocal model path/ID
--api_config-API config JSON
--enable_searchfalseEnable search/lens/webpage tools
--search_config-Search config JSON
--max_rounds15Max dialogue rounds
--max_tool_calls15Max tool invocations
--skip_existingfalseSkip completed tasks
--task_delay2.0Delay between tasks to avoid rate limits
--max_retries3Retry times for rate-limit errors
--max_tasks0Process first N tasks (0 = all)
--shard0Shard index
--num_shards1Total shard count

Evaluation

๐Ÿงญ Evaluation Tracks

TrackWhat it measuresBest for
Track A: Process Track (Official)Final ACC + S/V + V-tool/V-true + efficiencyfull agentic diagnosis
Track B: Task-Only ACC (Harness-Friendly)final answer accuracy on tasksfair cross-harness comparison

We recommend Track A as the default protocol.
At the same time, we also encourage and support Track B when teams use different harnesses or tool-execution stacks, so comparisons are less affected by harness implementation details.

๐Ÿ“Š Track A ยท Step 1: run official scoring

python evaluation/eval_runs_search.py \
  --runs_dir runs/general/gpt-4o \
  --api_config configs/api.json

Default summary output:

runs/scores/general_gpt-4o_scored.json

๐Ÿงฎ Track A ยท Step 2: aggregate (only if shard eval)

python evaluation/aggregate_shards.py \
  --runs_dir runs/general/gpt-4o

Output:

runs/scores/general_gpt-4o_aggregated.json

๐Ÿ” Track A ยท Step 3: optional V-axis breakdown

python evaluation/analyze_v.py \
  <score_json_path> \
  <dataset_root>/json

<score_json_path> rule (important):

  • non-shard run: runs/scores/*_scored.json
  • shard run: runs/scores/*_aggregated.json (after Step 2)

This script breaks V-axis into tool-use and visual-check, and reports Overall / L1 / L2 / L3.

๐ŸŽฏ Track B ยท Task-only ACC (Harness-Friendly)

If you run with a custom harness, we suggest reporting:

  • model name + decoding settings
  • evaluated split/task count
  • final answer ACC only on the released tasks

This keeps comparisons simple and robust when tool sandboxing/execution details differ across harnesses.


Sharded Runs

This mode is optional. Use exactly the same run/eval commands as above, and only add:

--shard <shard_idx> --num_shards <num_shards>

Minimal example (shard_idx=0, num_shards=8):

python general/run_general_script_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json \
  --skip_existing \
  --shard 0 \
  --num_shards 8

Then run the same command with --shard 1, --shard 2, ..., and aggregate with:

python evaluation/aggregate_shards.py --runs_dir runs/general/gpt-4o

Available Tools

๐Ÿ–ผ๏ธ Atomic image tools (visual expansion)

ToolDescription
cropCrop region by normalized coordinates
rotateRotate image by angle
flipHorizontal/vertical/both flip
resizeResize image
enhanceAdjust brightness/contrast/sharpness
grayscaleConvert to grayscale
autocontrastAuto contrast
blurGaussian blur
sharpenSharpen
denoiseDenoise
edge_detectCanny/Sobel/simple edge detection
invertInvert color
equalizeHistogram equalization
thresholdBinarization

๐ŸŒ Retrieval tools (knowledge expansion)

ToolDescription
google_searchText web search
google_lens_searchReverse image search
fetch_webpageFetch webpage content

bbox_2d uses normalized [x1, y1, x2, y2] in [0,1000], where (0,0) is top-left and (1000,1000) is bottom-right.


Output Files

Each task output is stored under:

runs/{mode}/{model}/{task_id}/

Typical files:

FileDescription
orig.png / orig_*.pngCopied original input image(s)
tool_images/Intermediate generated images
model_answer.txtFinal model answer
conversation.jsonMulti-turn full conversation
tool_use_list.jsonTool call logs for evaluation
run_meta.jsonRun metadata and summary
result_scored.jsonPer-task scored result
raw_model_output_turn_*.txtRaw per-turn model output
model_code_turn_*.pyExecuted code per turn (General mode)

Project Structure

Agentic-MME/
โ”œโ”€โ”€ atomic/
โ”‚   โ”œโ”€โ”€ run_atomic_tools_openai.py
โ”‚   โ”œโ”€โ”€ run_atomic_tools_thyme.py
โ”‚   โ””โ”€โ”€ run_atomic_tools_deepeyes.py
โ”œโ”€โ”€ general/
โ”‚   โ”œโ”€โ”€ run_general_script_openai.py
โ”‚   โ”œโ”€โ”€ run_general_script_thyme.py
โ”‚   โ””โ”€โ”€ run_general_script_deepeyes.py
โ”œโ”€โ”€ evaluation/
โ”‚   โ”œโ”€โ”€ eval_runs_search.py
โ”‚   โ”œโ”€โ”€ analyze_v.py
โ”‚   โ””โ”€โ”€ aggregate_shards.py
โ”œโ”€โ”€ configs/
โ”‚   โ”œโ”€โ”€ api.json.example
โ”‚   โ””โ”€โ”€ search_config.json
โ”œโ”€โ”€ assets/
โ”‚   โ””โ”€โ”€ case.png
โ”œโ”€โ”€ common_utils.py
โ”œโ”€โ”€ dataset_utils.py
โ”œโ”€โ”€ ast_ops.py
โ”œโ”€โ”€ atomic_toolbox.py
โ”œโ”€โ”€ search_toolbox.py
โ”œโ”€โ”€ search_tools.py
โ”œโ”€โ”€ verifiers.py
โ””โ”€โ”€ requirements.txt

Citation

If you find Agentic-MME useful, please cite:

@article{wei2026agentic,
  title={Agentic-MME: What Agentic Capability Really Brings to Multimodal Intelligence?},
  author={Wei, Qianshan and Yang, Yishan and Wang, Siyi and Chen, Jinglin and Wang, Binyu and Wang, Jiaming and Chen, Shuang and Li, Zechen and Shi, Yang and Tang, Yuqi and others},
  journal={arXiv preprint arXiv:2604.03016},
  year={2026}
}

Contributors

qianshanwei

10 commits

ChoS3nE11ven

5 commits

ChoS3nE11ven/Agentic-MME

37

stars

15

commits

Python

primary language

Apr 13, 2026

updated

README

Agentic-MME: What Agentic Capability Really Brings to Multimodal Intelligence?

Agentic-MME case study

๐Ÿ”ฌ Process Benchmark ยท ๐Ÿ“Š ACC + Diagnostic Scores

๐Ÿš€ Quick Entry๐Ÿ“ฆ Dataset๐Ÿงช Run๐Ÿ“ˆ Eval๐Ÿ Comparison
Project PageHF Datasetgeneral/ + atomic/ scriptsevaluation/ scriptsTask-only ACC + Process Track

๐Ÿ“ฐ News

Latest Status

DateUpdate
2026.04.06๐Ÿš€๐Ÿ“„ Agentic-MME released on arXiv
2026.04.06๐Ÿ› ๏ธ๐Ÿค— Official benchmark code + dataset usage pipeline released

Contents


Agentic-MME Overview

Agentic-MME is a process-verified benchmark for evaluating multimodal agentic capabilities.

Unlike final-answer-only benchmarks, Agentic-MME explicitly evaluates whether a model can:

  1. see better through active visual operations (Visual Expansion), and
  2. know better through open-web retrieval (Knowledge Expansion),

while maintaining correct multi-turn reasoning under realistic interaction budgets.

Highlights:

  • ๐Ÿง  Process-level auditing instead of answer-only grading
  • ๐Ÿ–ผ๏ธ Visual operation correctness and artifact verification
  • ๐ŸŒ Search strategy and evidence quality verification
  • โฑ๏ธ Efficiency diagnosis via overthinking vs. human trajectories

Why Agentic-MME Is Different

1) Two core capability dimensions

  • ๐Ÿ–ผ๏ธ Visual Expansion: active image manipulation (crop/rotate/enhance/...) to reveal latent visual cues.
  • ๐ŸŒ Knowledge Expansion: open-web retrieval (search/lens/webpage reading) to obtain external evidence beyond parametric memory.

2) Progressive task difficulty (not a flat score)

  • Level 1: single decisive visual operation.
  • Level 2: short multi-step visual + retrieval workflow.
  • Level 3: iterative, interleaved visual-retrieval synergy under ambiguity.

3) Process-level dual-axis scoring

AxisWhat it evaluatesTypical signals
S-axis (Strategy)Whether retrieval plans/actions are correct and usefulquery intent, keyword quality, URL/evidence correctness
V-axis (Visual)Whether visual operations are correctly executed and produce valid visual evidenceintermediate artifacts and checkpoint pass/fail

V-axis is further decomposed for diagnosis:

  • V-tool: whether expected visual operations were invoked.
  • V-true: whether produced visual artifacts actually satisfy the checkpoint.

4) Efficiency beyond correctness

  • โฑ๏ธ Overthinking is measured relative to human reference trajectories, capturing redundant or excessive tool usage.

Dataset at a Glance

Core statistics

PropertyValue
Total tasks418
Difficulty levels3
Major domains / sub-categories6 / 35
Stepwise checkpoints2,000+
Human annotation cost10+ person-hours per task (avg.)
Total images / tool calls (human trajectories)430 / 899
Avg. image resolution1952 ร— 1747
Small-cue cases (<10% image area)226 (43.1%)
External-search-required tasks29.4%
Avg. prompt length / answer length31.9 / 1.5 tokens

Difficulty distribution

LevelShareAvg checkpoints / taskAvg tool calls / taskCharacterization
L1 (Easy)48.6%2.891.21single decisive visual operation
L2 (Mid)32.1%4.642.42short multi-step visual + retrieval workflow
L3 (Hard)19.4%6.674.07advanced synergistic, interleaved reasoning

Domain distribution (6 major domains)

DomainShare
Diagram21.3%
Finance19.9%
Society19.4%
Life14.4%
Culture12.9%
Science12.2%

Dataset Usage

๐Ÿค— Load from Hugging Face

from datasets import load_dataset

ds = load_dataset("Crystal1047/Agentic-MME", split="train")
print(ds)
print(ds.features)

๐Ÿ—‚๏ธ Official dataset folder layout

<dataset_root>/
โ”œโ”€โ”€ image_cause/
โ”œโ”€โ”€ images/
โ”œโ”€โ”€ json/
โ””โ”€โ”€ search_url/

Folder purpose:

FolderPurposeUsed by runner
json/Task configuration files (*.json)โœ… Required
images/Input images referenced by task IDsโœ… Required
image_cause/Auxiliary image evidence/metadataโœ… Required (analysis/inspection)
search_url/Retrieval evidence metadataโœ… Required (analysis/inspection)
python general/run_general_script_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json

Notes:

  • --images_dir is optional, but passing it explicitly avoids ambiguity.
  • --dataset_root should point to the folder that directly contains json/ and images/.
  • If omitted, dataset_root is inferred from the task JSON path.

Environment Setup

git clone https://github.com/ChoS3nE11ven/Agentic-MME.git
cd Agentic-MME
conda create -n agenticmme python=3.9 -y
conda activate agenticmme
pip install -r requirements.txt

For local models (Thyme/DeepEyes):

pip install torch transformers accelerate

Configuration

๐Ÿ” OpenAI API

cp configs/api.json.example configs/api.json

Then edit configs/api.json with your key/base URL.

๐ŸŒ Web retrieval config

Edit configs/search_config.json:

  • serper_api_key: Serper.dev key for Google Search + Google Lens
  • imgbb_api_key: ImgBB key for image upload
  • jina_api_key: Jina Reader key for webpage content extraction

Running Experiments

๐Ÿš€ Quick sanity check (single task)

General mode + OpenAI

python general/run_general_script_openai.py \
  --task_json <task_json> \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15

Atomic mode + OpenAI

python atomic/run_atomic_tools_openai.py \
  --task_json <task_json> \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o-mini \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15

๐Ÿ“ฆ Batch run (general mode)

OpenAI

python general/run_general_script_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15 \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

Use --num_shards 1 --shard 0 for single-process run.

Local models

# Thyme
python -m general.run_general_script_thyme \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/thyme-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

# DeepEyes
python -m general.run_general_script_deepeyes \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/deepeyes-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

โš™๏ธ Batch run (atomic mode)

OpenAI

python atomic/run_atomic_tools_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o-mini \
  --api_config configs/api.json \
  --enable_search \
  --search_config configs/search_config.json \
  --max_rounds 15 \
  --max_tool_calls 15 \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

Use --num_shards 1 --shard 0 for single-process run.

Local models

# Thyme
python atomic/run_atomic_tools_thyme.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/thyme-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

# DeepEyes
python atomic/run_atomic_tools_deepeyes.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model_path /path/to/deepeyes-model \
  --enable_search \
  --search_config configs/search_config.json \
  --skip_existing \
  --shard <shard_idx> \
  --num_shards <num_shards>

๐Ÿงฉ Important arguments

ArgumentDefaultDescription
--task_dir-Directory of task JSONs
--task_json-Single task JSON path
--dataset_rootinferredRoot used to resolve dataset files
--images_dir-Optional explicit image directory
--out_dirauto (runs/general/{model} or runs/atomic/{model})Output directory
--modelscript-dependentOpenAI model name
--model_pathscript-dependentLocal model path/ID
--api_config-API config JSON
--enable_searchfalseEnable search/lens/webpage tools
--search_config-Search config JSON
--max_rounds15Max dialogue rounds
--max_tool_calls15Max tool invocations
--skip_existingfalseSkip completed tasks
--task_delay2.0Delay between tasks to avoid rate limits
--max_retries3Retry times for rate-limit errors
--max_tasks0Process first N tasks (0 = all)
--shard0Shard index
--num_shards1Total shard count

Evaluation

๐Ÿงญ Evaluation Tracks

TrackWhat it measuresBest for
Track A: Process Track (Official)Final ACC + S/V + V-tool/V-true + efficiencyfull agentic diagnosis
Track B: Task-Only ACC (Harness-Friendly)final answer accuracy on tasksfair cross-harness comparison

We recommend Track A as the default protocol.
At the same time, we also encourage and support Track B when teams use different harnesses or tool-execution stacks, so comparisons are less affected by harness implementation details.

๐Ÿ“Š Track A ยท Step 1: run official scoring

python evaluation/eval_runs_search.py \
  --runs_dir runs/general/gpt-4o \
  --api_config configs/api.json

Default summary output:

runs/scores/general_gpt-4o_scored.json

๐Ÿงฎ Track A ยท Step 2: aggregate (only if shard eval)

python evaluation/aggregate_shards.py \
  --runs_dir runs/general/gpt-4o

Output:

runs/scores/general_gpt-4o_aggregated.json

๐Ÿ” Track A ยท Step 3: optional V-axis breakdown

python evaluation/analyze_v.py \
  <score_json_path> \
  <dataset_root>/json

<score_json_path> rule (important):

  • non-shard run: runs/scores/*_scored.json
  • shard run: runs/scores/*_aggregated.json (after Step 2)

This script breaks V-axis into tool-use and visual-check, and reports Overall / L1 / L2 / L3.

๐ŸŽฏ Track B ยท Task-only ACC (Harness-Friendly)

If you run with a custom harness, we suggest reporting:

  • model name + decoding settings
  • evaluated split/task count
  • final answer ACC only on the released tasks

This keeps comparisons simple and robust when tool sandboxing/execution details differ across harnesses.


Sharded Runs

This mode is optional. Use exactly the same run/eval commands as above, and only add:

--shard <shard_idx> --num_shards <num_shards>

Minimal example (shard_idx=0, num_shards=8):

python general/run_general_script_openai.py \
  --task_dir <dataset_root>/json \
  --dataset_root <dataset_root> \
  --images_dir <dataset_root>/images \
  --model gpt-4o \
  --api_config configs/api.json \
  --skip_existing \
  --shard 0 \
  --num_shards 8

Then run the same command with --shard 1, --shard 2, ..., and aggregate with:

python evaluation/aggregate_shards.py --runs_dir runs/general/gpt-4o

Available Tools

๐Ÿ–ผ๏ธ Atomic image tools (visual expansion)

ToolDescription
cropCrop region by normalized coordinates
rotateRotate image by angle
flipHorizontal/vertical/both flip
resizeResize image
enhanceAdjust brightness/contrast/sharpness
grayscaleConvert to grayscale
autocontrastAuto contrast
blurGaussian blur
sharpenSharpen
denoiseDenoise
edge_detectCanny/Sobel/simple edge detection
invertInvert color
equalizeHistogram equalization
thresholdBinarization

๐ŸŒ Retrieval tools (knowledge expansion)

ToolDescription
google_searchText web search
google_lens_searchReverse image search
fetch_webpageFetch webpage content

bbox_2d uses normalized [x1, y1, x2, y2] in [0,1000], where (0,0) is top-left and (1000,1000) is bottom-right.


Output Files

Each task output is stored under:

runs/{mode}/{model}/{task_id}/

Typical files:

FileDescription
orig.png / orig_*.pngCopied original input image(s)
tool_images/Intermediate generated images
model_answer.txtFinal model answer
conversation.jsonMulti-turn full conversation
tool_use_list.jsonTool call logs for evaluation
run_meta.jsonRun metadata and summary
result_scored.jsonPer-task scored result
raw_model_output_turn_*.txtRaw per-turn model output
model_code_turn_*.pyExecuted code per turn (General mode)

Project Structure

Agentic-MME/
โ”œโ”€โ”€ atomic/
โ”‚   โ”œโ”€โ”€ run_atomic_tools_openai.py
โ”‚   โ”œโ”€โ”€ run_atomic_tools_thyme.py
โ”‚   โ””โ”€โ”€ run_atomic_tools_deepeyes.py
โ”œโ”€โ”€ general/
โ”‚   โ”œโ”€โ”€ run_general_script_openai.py
โ”‚   โ”œโ”€โ”€ run_general_script_thyme.py
โ”‚   โ””โ”€โ”€ run_general_script_deepeyes.py
โ”œโ”€โ”€ evaluation/
โ”‚   โ”œโ”€โ”€ eval_runs_search.py
โ”‚   โ”œโ”€โ”€ analyze_v.py
โ”‚   โ””โ”€โ”€ aggregate_shards.py
โ”œโ”€โ”€ configs/
โ”‚   โ”œโ”€โ”€ api.json.example
โ”‚   โ””โ”€โ”€ search_config.json
โ”œโ”€โ”€ assets/
โ”‚   โ””โ”€โ”€ case.png
โ”œโ”€โ”€ common_utils.py
โ”œโ”€โ”€ dataset_utils.py
โ”œโ”€โ”€ ast_ops.py
โ”œโ”€โ”€ atomic_toolbox.py
โ”œโ”€โ”€ search_toolbox.py
โ”œโ”€โ”€ search_tools.py
โ”œโ”€โ”€ verifiers.py
โ””โ”€โ”€ requirements.txt

Citation

If you find Agentic-MME useful, please cite:

@article{wei2026agentic,
  title={Agentic-MME: What Agentic Capability Really Brings to Multimodal Intelligence?},
  author={Wei, Qianshan and Yang, Yishan and Wang, Siyi and Chen, Jinglin and Wang, Binyu and Wang, Jiaming and Chen, Shuang and Li, Zechen and Shi, Yang and Tang, Yuqi and others},
  journal={arXiv preprint arXiv:2604.03016},
  year={2026}
}

Contributors

qianshanwei

10 commits

ChoS3nE11ven

5 commits

Languages

Python

100.0%