Files
esh-pfi-infrastructure/services/gen-seat-mixed-quant/bench/vision
vh ce09ac4fa6 test(gen-seat): add a real vision battery — orcarouter scores 7/8
surface_test.py's vision check is one image and one word. It proves the tower
loads; it does not prove the tower works. This battery uses generated images with
known ground truth so every answer is objectively gradeable.

Against orcarouter NVFP4-mixed on the `gen` alias:

  T1  OCR, 5 lines incl. one at 18px          PASS  all 5 exact
  T2  counting + attribute binding            PASS  7 circles / 3 triangles / 1 square
  T3  bar chart, 6 values + max/min           PASS  6/6 exact
  T4b occlusion, star behind rectangle        PASS
  T4c aspect ratio of a 160x140 rectangle     FAIL  called it taller than wide
  T5  two images, which has text              PASS
  T6  four images, the seat's cap             PASS  all four named
  T7  five images, one over the cap           PASS  rejected with HTTP 400

No <think> leak on any vision call.

The single miss is fine-grained relative-dimension estimation on a near-square
shape, and it reproduced across two runs (the longer T4 called the same rectangle
"equal width and height"). Counting, OCR, chart values and occlusion ordering are
all solid, so this is a precise-geometry weakness, not a broken tower. Recorded so
nobody builds a feature on this model judging relative sizes.

T7 earns its place separately: it confirms the per-prompt image cap fails loudly
with a 400 rather than silently dropping the extra image.
2026-08-21 01:52:33 -07:00
..

Vision battery for a VL gen seat

The surface_test.py vision check is one image and one word ("Blue"). It proves the tower loads; it does not prove the tower works. This battery does, against images generated with known ground truth so every answer is objectively gradeable.

Generate the fixtures with the PIL snippet in this repo's history (or any images whose content you know exactly), then:

uv run --with requests python vistest.py <image-dir> gen
uv run --with requests python vis2.py  <image-dir>

Results — orcarouter NVFP4-mixed on the gen alias, 2026-08-21

test what it exercises result
T1 OCR 5 lines, mixed case, digits, punctuation, one line at 18px PASS — all 5 exact
T2 counting + attribute binding 7 yellow circles / 3 purple triangles / 1 red square, scattered PASS — 7/3/1
T3 chart reading 6 labelled bars, plus highest/lowest PASS — 6/6 values, max/min right
T4b occlusion a green star partly behind a grey rectangle PASS
T4c aspect ratio a 160x140 rectangle: wider, taller, or square? FAIL — said taller
T5 two images describe each, say which has text PASS
T6 four images the seat's --limit-mm-per-prompt ceiling PASS — all 4 named
T7 five images one over the cap PASS — rejected with HTTP 400

7 of 8. No <think> leak on any vision call.

The one miss is worth keeping. T4c is fine-grained aspect-ratio estimation on a near-square shape (160x140, a 14% difference); the model called it taller, and in the longer T4 run it called the same shape "a rectangle with equal width and height". Counting, OCR down to 18px, chart values and occlusion ordering are all solid, so this is a precise-geometry weakness rather than a broken tower. Do not build a feature on this model's estimate of relative dimensions — ask it what shapes are present and where, not how big they are relative to each other.

T7 is worth keeping for a different reason: it confirms the per-prompt image cap fails loudly with a 400 rather than silently dropping the fifth image.