Back to the series

Act 2 · The system refuses · 05

A model that reads wrong once shouldn't be trusted three times either

2889 characters#AIEngineering#LLM#MultiModal#Evaluation
Evidence card: the converge path beside the give-up path, with the measurement that does not explain the failure printed on its face.
Evidence card

Below is the post exactly as published on LinkedIn, unchanged.

My vision channel read the token AR7429 off a rendered image, byte for byte, on two runs out of three. The third came back empty.

So I stopped trusting any single read. Including the two that were right.

TL;DR — when I probed it, the endpoint's model list named no vision model, and the probe returned one empty response in three calls. So a query-time re-read is accepted only after repeated calls that agree with each other and with the declared hotspot set and part numbers. One person, toy scale, synthetic figures.

I did not expect vision from that endpoint. When I probed it, its model list showed text models only. But a probe sent an image in the standard multimodal format and got AR7429 back, exactly, which is strong evidence that something behind it was reading pixels.

It just was not reading them reliably, at temperature zero. In the probes a featureless image came back as "I don't see an image attached", and a readable one intermittently came back empty.

Three calls do not establish a two-in-three accuracy rate. They establish that one call can fail. And an empty response is easy to reject — a plausible wrong one would not be. The correct read and the wrong read arrive in the same shape.

So the query-time re-reading path samples. It issues separate calls on the same image and accepts a hotspot-and-part signature only when two samples match each other, the hotspot set equals the set declared for that figure, and the sample's text contains every declared part number. Empty, refused and malformed responses cast no vote, and they still consume the budget.

And it has a give-up. Divergence, no consensus inside five samples, or an upstream rate limit all end the same way: refuse, with the gate named.

Then I stopped designing and measured. The same two figures rendered at two, three and four times the base dimensions, eight calls per scale: zero misses, hotspot accuracy 1.0.

That is not the result I wanted to report. It shows zero misses for those two figures at the three scales I tested. It does not explain the empty response, because the sweep never tested below scale two and never re-ran the original probe at different sizes. My working diagnosis is render resolution. I had been asking it to read images too small to read. A working diagnosis is not a measurement, and I am not going to publish it as one.

So the consensus loop stayed. Not because I proved it was needed. Because I did not prove it wasn't.

Two things I would rather leave out. In the frozen evaluation, nine figure questions produced no fabrication — that is what I saw in that pass, not a property of the system. And a successful re-read is currently recorded rather than answered from. The answer layer still refuses. The give-up works. The recovery is not wired up yet.

Sampling until agreement is measurement. Sampling until satisfied is asking again in a nicer voice.

What a reader takes away

A usable pattern for non-deterministic components: sample until convergence, cross-check against a deterministic anchor, and treat divergence as refusal rather than as a reason to sample again.

Check it yourself

Each pointer opens a real file on the LearnArken repository’s main branch.