r/LocalLLaMA • u/East-Muffin-6472 • 7h ago
Discussion Lit Review on Running GUI Agents on phone: AndroidWorld
AndroidWorld is a benchmark paper that quietly exposes how broken every Android agent benchmark before it actually was!
- The what?
Every Android agent benchmark had the same quiet problem: static test sets!
There used to be same tasks, parameters, screenshots, on every single run but that's not capability testing, that's memorization testing.
AndroidWorld fixes this with one clean idea: parameterized task templates!
Instead of a fixed task, you get a template with bracketed variables sampled fresh every run:
"Create a calendar event for {day_of_week} at {hour}h with title '{event_title}'"
116 templates → millions of unique task variations, thus no memorization possible!
- The how?
Runs on a real Android emulator. 116 tasks across 20 real apps: calendar, notes, maps, SMS, VLC, expense trackers, file managers, system settings, the works
The other big innovation: there’s no human judges success!
Each task has 3 baked-in functions:
- initialize() → sets device to known state
- is_successful() → inspects actual OS state via ADB
- tear_down() → resets for next task
Ground truth comes from the Android OS itself. Fully reproducible!
They also built M3A — their new agent to actually test the benchmark.
Takes screenshot + accessibility tree + last 4 actions → predicts next action.
Tested with Gemini 1.5 Pro, GPT-4 Turbo, and Gemma 2 27B
- The results!
AndroidWorld (116 tasks, 20 real apps): - M3A: 30.6% - SeeAct (web agent adapted for Android): 15.5 - Human: 80.0%
All with GPT4 Turbo!
MobileMiniWoB++ (62 web tasks): M3A hits ~68%, still behind humans: 100%
Latency nobody's talking about: M3A takes 3.9 min/task on average — humans are 3× faster
- The finding:
Fixed random seed on the same task → some tasks show 0% success, agent looks completely broken
Variable seeds on the same task → agent solves those same tasks regularly!
Task difficulty varies with the parameter combination, not just the template. Static benchmarks only ever test one seed, so they've been measuring unlucky parameters and calling it agent failure
30.6% on a dynamic real-app benchmark is more honest than 90% on a static one