model-trials / 2026-09-27

We ran 22 models through the same seven pictures and four hard problems.

Two rounds of OpenRouter API calls, every answer checked against machine-generated ground truth. Most of them can read a clock. Very few can count shapes. One sells itself as a perception model and can't do either reliably — but its boxes land exactly where they should.

249
API calls
22
models
$0.39
total spend
11/11
best score (×2)

Method

Nothing here is a vibe check. Every fixture was generated in code with the answer known in advance, every response scored by regex against that answer, and every regex re-validated by reading the raw JSON. Three "failures" in the first scoring pass turned out to be scorer bugs — GPT-6 Luna had answered "34, 3, 1" perfectly and my regex missed it. Those are fixed; the matrix below is the corrected one.

Round 1 was a quick six-test text pass (identity, arithmetic, CRT, code, cutoff, tool calling) on the first six models: 36 calls, $0.0026. Round 2 went deep — seven vision fixtures, a motion video, an audio clip, Perceptron's annotation API, and four hard problems (7²⁰²⁶ mod 1000, smallest n! with 100 trailing zeros, a planted off-by-one bug, and a logic grid whose unique solution was verified by brute-forcing all 331,776 possible grids) — across all 22 models at high reasoning effort: 213 calls, $0.384.

Twenty-two runs exhausted their token budget and returned null content. Per the brief ("if it still thinks a lot, let it keep going") every one of them was re-run at the model's full output cap, up to 32,768 tokens. Two models still never answered: Cohere's command-a-plus burned all 32K tokens thinking about one picture of shapes, and Granite's logic-grid answer arrived after 223 seconds — correct, but only just inside the budget.

The seven text-only models (per their catalog modality) took the hard-reasoning battery only; they can't see, so there's nothing to score on vision.

The fixtures

These are the actual images sent to every vision-capable model. Each one has a single unambiguous machine-checked answer. Look at them yourself before reading the scores — a couple are harder than they look.

Scattered colored shapes
v1 — counting. 34 shapes scattered at random: circles, squares, triangles in four colors. Question: total shapes, red circles, blue squares. ground truth: 34, 3, 1 This single fixture broke more models than anything else in the suite. See the failure gallery.
Access code OCR
v2 — OCR. A large blue code plus a fine-print serial in small grey text. Gemini read it with extra spaces around the hyphens; the scorer normalizes whitespace before comparing. ground truth: QX7-4MF-9ZKD-2026 / SERIAL 8842-A7 X9
Analog clock
v3 — analog clock. Hour, minute and second hands at a non-obvious time. Several models rounded the minute hand to the 2 (10 minutes) instead of reading 8 minutes; the seconds hand at the 6 was usually right. ground truth: 10:08:30
Pressure gauge
v4 — analog gauge. 0–200 PSI, 270° sweep, needle between ticks. Scored ±3 PSI. Most read 136–140; Luna, Luna Pro, pareto, Muse and ling-vl hit exactly 137. ground truth: 137 PSI
Bar chart
v5 — bar chart. Five bars, read Q2, name the max, sum all five. The trap: models sum their own rounded readings (300, 307, 310) instead of the true values. Only six models landed within ±3 of the real sum. ground truth: Q2 = 77, sum = 308
Shapes with one orange pentagon
v6 — localization. One orange pentagon among decoys; give center coordinates in the 800×600 image. Perceptron answers in a normalized 1000×1000 space — rescaled, its box centers exactly on target. Tolerance ±45px. ground truth: (430, 300)
Traffic light scene
v7 — scene understanding. Which lamp is lit, stop or proceed, count the yellow dashes. Everyone saw green and said proceed; Cohere counted five dashes instead of four. ground truth: green, proceed, 4 dashes
video — motion. A 4-second clip: an orange ball travels right for 2s, then straight down for 2s. 32 frames at 8fps, frame counter burned into the corner. Models had to describe the direction change, count frames, and read the last frame's label. ground truth: right→down at 2s, 32 frames @ 8fps, last label "f31"
audio — beeps. Five beeps: three short 440Hz, then two long 880Hz, ~2.9s total. Count them, describe the pattern, estimate duration. The hardest fixture in the set. ground truth: 5 beeps — 3 short+low, 2 long+high

The matrix

Round 2, after the big-budget re-runs. Green is an exact match against ground truth; red is wrong or no answer. Dash means the model can't take that input modality. Scores only count tests the model could attempt — that's why the text-only 4/4s aren't comparable to the multimodal 12/13s.

modelshapesOCRclockgaugechartlocatescenevideoaudio7²⁰²⁶n! zerosbuglogicscore

Hard-problem answers: 649 (pow-mod), 405 (factorial zeros), the off-by-one while-condition fix, and the brute-force-verified logic grid (Cai owns the cat; house 3 drinks water).

Failure gallery

Why each red cell is red, with the model's own words where they're worth reading.

Counting is the universal blind spot

Eleven of the fifteen vision models got the shape triple exactly right. The four that didn't are telling: Xiaomi's own flagship mimo-v2.6-pro (counted 32 total, 4 red circles), its flash sibling (30/4/2), perceptron-mk1.5 — the "perception specialist" — (30/4/2), and cohere/command-a-plus, which thought about the image for 32,768 tokens and returned nothing at all. Dense-object enumeration still separates the genuinely strong vision stacks from everyone else.

xiaomi/mimo-v2.6-pro on v1_shapes (ground truth 34, 3, 1):"Based on the image provided, here are the counts: 1. Total shapes: Scanning through the image, I count 32 distinct shapes in total. 2. Red Circles: There are 4 red circles (one on the left…"
perceptron/perceptron-mk1.5 on v1_shapes — its entire answer:30, 4, 2

The thinking-budget black hole

Cohere's command-a-plus is the clearest example. Asked to count shapes, it burned its complete 32K-token output budget on internal reasoning and the visible content came back null. This isn't unique to Cohere: Granite 4.2's first logic-grid attempt died the same way at 16K, and Space Bunny Alpha did it in round 1 at just 1,200 tokens. If a model thinks in a channel you don't see, small max_tokens values silently produce empty answers — the correct solution is often sitting in the reasoning trace while the reply is blank.

cohere/command-a-plus on v1_shapes, max_tokens=32768:[finish_reason: length, content: null — 32,768 completion tokens consumed by reasoning, zero visible output]

Analog clock seconds-hands

The clock fixture separates "reads hands" from "reads hands precisely." GPT-6 Luna, Luna Pro, dots, Gemini, Muse, qwen3.8-flash and omni all got 10:08:30 exact. Cohere, ling-vl, Space Bunny, GLM-5.3-flash and both MiMos read the minute hand as exactly 10 minutes (10:10:30) or skipped the seconds — the classic VLM failure of snapping hands to the nearest landmark instead of interpolating.

inclusionai/ling-3.0-flash-vl on v3_clock (ground truth 10:08:30):"The minute hand (long, thick black line) is pointing at the 2, which represents 10 minutes… The exact time is 10:10:30."
stealth/space-bunny-alpha on v3_clock — its entire answer:10:10:30

Chart arithmetic drift

Reading bars is easy; summing what you read is where models slip. Nearly everyone produced a plausible per-bar list (77 for Q2 — correct) then summed rounded values: Cohere got 300, MiMo Pro 307, qwen3.8-flash 310, several others anchored on the first addend. Six models passed: Luna, Luna Pro, Gemini, omni-flash, Space Bunny and pareto. The failure isn't vision, it's carrying your own numbers forward honestly.

Video: direction right, metadata wrong

Ten models watched the 4-second clip. Eight correctly described the motion (right, then down). Frame counting was a bloodbath: the clip is 32 frames at 8fps; Muse Spark got closest (31 frames, ~9-10fps), Gemini said 30–32 but called the last label "f27" instead of "f31", Space Bunny said 28 frames at 30fps. ling-3.0-flash-vl hallucinated entirely — claimed ~1fps and read the last frame's corner text as "120". Perceptron answered the text sub-question with "137", its own gauge reading from a previous test in the same session. Cross-modal leakage.

perceptron/perceptron-mk1.5 on vid_motion (asked: direction change, frame count/fps, last frame's corner text):"(a) The orange ball moves from the left side of the screen to the right, then downward. (b) The video has 10 frames and the frame rate is approximately 25 fps. (c) 137"
inclusionai/ling-3.0-flash-vl on vid_motion:"…giving a frame rate of roughly 1 frame per second (1 fps). (c) The top-left corner of the final frame shows '120'."

Audio: everyone flunks except MiMo Flash

The beep clip (3 short low, 2 long high) defeated nearly every audio-capable model. MiMo Pro heard 6 beeps with inverted pitch; qwen3.8-omni-flash heard 4; Gemini heard "3-2-1 countdown, then Go"; Perceptron heard 6 alternating. Only mimo-v2.6-flash got the count and pattern right. Muse Spark 1.3 didn't even try:

meta/muse-spark-1.3-contributor on aud_beeps — despite its catalog entry listing audio input:"I'm happy to help with this — but I don't see / hear any audio clip in this conversation. No audio file was attached, and as a text-based assistant I can't listen to audio directly…"

That's a modality-claim mismatch on OpenRouter's wire: the catalog says text+image+file+audio+video→text, the model says it can't hear. Either the endpoint strips audio or the listing overpromises.

The round-1 arithmetic flukes

Two round-1 failures deserve a footnote because round 2 partly exonerates them. Perceptron answered 17×23+101×7 with "504" and Solar Mini4 with "3620" — both absurd. But at high reasoning effort with a real budget, Solar Mini4 solved all four round-2 hard problems including 7²⁰²⁶ mod 1000. Small models don't lack the capability; they lack the tokens to use it. Never score a reasoning model on a one-shot answer at max_tokens=300.

tencent/hy-mt2-30b-a3b is the opposite case: an 8K-context translation model that failed the logic grid instantly ("The cat is owned by Bo") — it isn't built for this and shouldn't be judged beyond noting that.

The Perceptron story

You flagged it as "supposed to be a specialized model for vision," and the catalog agrees: text+image+audio+video in, plus a unique annotation_format parameter (point / box / polygon / clip) that emits structured grounding inline with text. It deserved its own investigation.

The annotations are real, and they're good. Asked to box the orange pentagon, it returns <point_box mention="orange pentagon"> (483,425) (592,562) </point_box> — and those coordinates are in a normalized 1000×1000 space. Rescaled to the actual 800×600 image, the box center lands within a few pixels of the true center (430,300). The count probe emitted per-class <collection> groups with a box per shape. For robotics/teleop labeling — its actual pitch (VentureBeat: EmbSpatial 85.1, RefSpatial 72.4 vs GPT-5m's 9.0, VSI-Bench 88.5) — this is exactly the right tool at $0.15/$1.50 with 0.42s latency.

perceptron/perceptron-mk1.5, annotation_format=box on v6_locate — normalized coords rescale onto the target:<point_box mention="orange pentagon"> (483,425) (592,562) </point_box> → rescaled to 800×600: center (430, 301) vs ground truth (430, 300)

But as a general VLM it's weak, and it leaks its lineage. It miscounted the shapes (30/4/2), couldn't read the bar chart, hallucinated the video's frame rate, got the beep pattern wrong — and when asked who it is, it answered "I am Qwen, a large-scale language model independently developed by Alibaba Group's Tongyi Lab" with an October 2023 cutoff. An undisclosed Qwen-base derivative sold under a new vendor name. The 36K context is also tiny against everything else in this test.

Verdict: use Perceptron as a grounding layer — call it for boxes, points and clip boundaries, feed those coordinates to something smarter for reasoning. Don't make it the brain. Its vendor benchmarks measure grounded referring expressions, which is genuinely what it's good at; our fixtures measure general vision, which it isn't.

Every model, one card each

What each one is, what it did here, and the single most useful thing to know about it.

Winners and losers

openai/gpt-6-luna + luna-pro

Perfect 11/11 — the only models to ace every test they could take, including exact shape counts, the exact clock, exact chart sum, and all four hard problems. Sub-3s latency at $0.10/$0.50 with 1.05M context. Luna Pro costs the same and adds nothing measurable here; plain Luna is the default.

Use for: everything cheap and high-volume. The new floor for "good enough" is much higher than it was a month ago.

google/gemini-3.8-flash

12/13 — the best full-multimodal score (video included). Only miss: the beep audio, where it heard a "3-2-1 countdown." Also the most expensive per call here ($0.056 on the video alone) and one 502 provider flake on retry.

Use for: video understanding when you need it and can pay 5–8× Luna.

stealth/space-bunny-alpha

11/12 for $0.00. Free, fast, correct on everything except the clock's minute hand. The catch is the hidden reasoning channel: at small budgets it returns null content with the right answer trapped inside the reasoning trace, and its prompt tokens carry a ~174-token hidden system prompt. Community fingerprints point at MiniMax; unconfirmed.

Use for: free bulk work with generous max_tokens. Never trust it at low budgets.

qwen/qwen3.8-flash + omni-flash

11/12 and 11/13. The omni variant is the only model besides MiMo Flash to actually hear the audio correctly-ish (4 beeps, wrong count, right shape of pattern). Flash missed the chart sum and needed 143s on the factorial-zeros problem. Both at 1M context for $0.15/$0.47.

Use for: omni-flash when you need audio+video in one slug; plain flash when you don't.

meta/muse-spark-1.3-contributor

11/13 with genuinely good video sense (best frame count of the field) but it refused the audio clip outright despite its catalog claiming audio input, and miscounted shapes. The refusal is the important finding: catalog modality lists lie.

Use for: video description. Verify any other modality before building on it.

xiaomi/mimo-v2.6-pro + flash

10/13 and 9/13. Both perfect on the four hard problems at high effort, but both miscounted shapes and both read the clock as 10:10:30. MiMo Flash is the only model that passed the audio test. Pro is slow (up to 240s on the chart) and verbose; Flash is the one to use. Still the top open-weight family on the AA index — this suite just isn't what that index measures.

Use for: flash-tier multimodal work if you need open weights; don't hand it counting jobs.

dots-studio/dots-3-note-preview:free

10/11 for free. Correct exact shape count, exact clock, exact gauge — then failed the chart sum and botched localization. A surprisingly capable free preview with a note-taking pedigree.

Use for: free-tier vision work; check spatial answers twice.

inclusionai/ling-3.0-flash-vl (+ sante/fin free variants)

10/12 at $0.021/$0.062 — the cheapest per-token vision score in the suite, and the only exact 137 on the gauge. But 10:10:30 on the clock, a hallucinated "120" last-frame label on video, and a missed chart sum. The domain-tuned free variants (sante/fin) ran 4/4 on hard text problems for $0.

Use for: high-volume cheap vision triage where exact spatial precision doesn't matter.

unbiased/pareto

10/11 at $2.50/$7.50 — by far the most expensive model here, 25× Luna's input price. Correct where it counts (exact chart sum, exact shapes) but missed the clock and took ~29s per hard problem. Nothing in its score justifies the premium against Luna.

Use for: nothing we tested, unless its unmeasured strengths (privacy? routing?) matter to you.

z-ai/glm-5.3-flash

10/12. Exact shapes, exact OCR, all four hard problems, 1.3M context at $0.04/$0.50 — then 10:10:30 on the clock and a missed chart sum. Consistent with its budget-workhorse reputation.

Use for: cheap long-context text; keep vision expectations modest.

cohere/command-a-plus

7/11, and the failures were structural: 32K tokens of thinking with null output on shapes, 10:10:30 on the clock, five dashes instead of four, rounded chart values. It answers fine when it answers. At $0.30/$1.50 it's outclassed by models 3× cheaper.

Use for: nothing here; if you must, give it enormous token budgets and verify output exists.

perceptron/perceptron-mk1.5

10/13 overall, but the shape of the score matters: perfect on hard text (it's a Qwen derivative, after all), real and precise grounding annotations, weak everything-else vision. See the full story above.

Use for: bounding boxes and points only. It's a perception layer, not a model.

text-only crew

tencent/hy4-preview, inception/mercury-2.5, upstage/solar-mini4, ibm-granite/granite-4.2-8b and the free ling sante/fin variants all went 4/4 on the hard problems. Granite needed 223s and a 16K budget to get there; mercury-2.5 did it in ~5s per problem at $0.04/$0.15. tencent/hy-mt2-30b-a3b (8K ctx, translation-tuned) went 3/4, failing the logic grid instantly.

Use for: mercury-2.5 and solar-mini4 as cheap reasoning workhorses; skip hy-mt2 for anything but translation.

The pattern behind all of it

Three things predict failure better than price or vendor: (1) counting dense objects, (2) precise analog interpolation (clock hands, gauges), (3) audio pattern perception. Reading text in images, understanding scenes, and hard symbolic reasoning are close to solved across the board. The gap between a $0.10 model and a $2.50 model was zero on everything we could measure.

Bottom line: buy the cheap one, budget tokens for thinkers, and never let any model count for you without a second opinion.

Round 1 (the warm-up)

Six models, six quick text tests, $0.0026. Kept for the record — the identity and cutoff columns are where it got interesting.

testmimo-v2.6-promimo-v2.6-flashspace-bunny-αgpt-6-lunaperceptron-mk1.5solar-mini4
17×23+101×7 = 109810981098109810985043620
bat & ball = $0.05✓✓$0.10✓✓✓
nth_prime(100) = 541541541null*541541541
tool call well-formed✓✓✓✓✓✓
identity claimMiMo/XiaomiMiMo/Xiaomiundisclosed"ChatGPT""Qwen, Tongyi Lab"Solar Mini4/Upstage
cutoff claimearly 2025won't saywon't invent one~Aug 2025Oct 2023Feb 2026

* Space Bunny's answer was correct inside its hidden reasoning channel; the visible content was null because 1,200 tokens wasn't enough for thinking + reply. This is the same trap that ate Cohere's 32K budget in round 2.

this page self-destructs in --:--:--