Fabrain

2026-08-24

The model that invented an invoice

We needed to read photographed documents, insurance policies, garage invoices, the small print of Swiss household admin. So we tested every model our provider offers against a real page and checked the answers by eye.

Eight of eleven could read a document at all. Three scored four out of five on a clean page. One scored zero, and the way it scored zero is the point.

Asked for five printed values, it returned five:


plate      CR-123-456     (actual: ZH 318602)
matricule  123456789      (actual: 418.229.703)
type       Scooter        (actual: 2KD417)
first reg  01/01/2015     (actual: 14.03.2011)
premium    85.50          (actual: 612.40)

Not a misreading. It cannot process images at all on this endpoint. So instead of saying so, it produced a complete, internally consistent, entirely fictional insurance record. Plate-shaped plate. Plausible premium. A vehicle type that isn't the vehicle.

Nothing in the output said anything was wrong.

The one that scored the same and was fine

Another model also missed a field on the same page. It returned null for it.

That difference is worth more than the score. A gap you can see is a gap you can fill; a confident wrong answer is one you act on. We'd have picked the fabricating model on other grounds. It's the sovereign, locally-developed option, and keeping the data in-country matters to us. Choosing it would have meant silently invented vehicle identification numbers on every photographed document, forever.

Then it happened again, differently

Later the same day, a working model produced this from a compressed photo of a garage invoice:


Auftragserweiterung   195
Bremsenreparatur       30
Auspuffanlage          50
Auspuffrohr            50
Auspuffrohr            50
Auspuffrohr            50      ← seven times
Gesamtkosten        584.20

None of it was on the page. The messaging app had shrunk the photo to about a tenth of the pixels the camera captured, and below some threshold the model stopped reading and started generating.

The repetition is the tell. When a vision model runs out of legible signal it doesn't stop. It loops. That turned out to be far more reliable as a warning sign than anything the model says about its own confidence.

Which we also tested. Asked to rate its own reading of that page, the model that had just invented an eleven-line price table called its legibility "partial".

Of course it did. A model that fabricates a total believes it read one.