UniHack 2026 · Unilog

Every attribute cites its source, or it doesn't ship.

Forty characters of supplier shorthand in. A full, cited specification out.

Quotedfrom its document
Deletedif the quote fails
Countednever quietly filled
Reads
PDF datasheets Scans Manufacturer HTML CSV & XLSX Spec images 4,302 UNSPSC codes
The input

Forty characters, six facts, no sentences.

Tap a token to see the field it has to become.

What the supplier sends

What a storefront needs

Size1/2" MaterialBRS CategoryBALL VLV Pressure600WOG ThreadFNPT Lead freeLF
How it works

One rule, enforced at every stage.

A value ships only if its quote can be found again.

Pipeline · 94A-103-01
SUPPLIER LINE 94A-103-01 Rules shorthand and units 0 tokens Find docs matched on the part number only Read model must return a quote per value CHECK is the quote real? Published with its citation To a human not confident enough Refused deleted and counted quote found low confidence quote missing
SUPPLIER LINE 94A-103-01 Rules shorthand and units · 0 tokens Find docs matched on the part number only Read the model returns a quote per value CHECK is the quote real? Published with its citation To a human low confidence Refused deleted, counted
01

Rules first

63% of filled fields cost no tokens. A regex cannot hallucinate.

02

Anchored retrieval

Documents matched on the part number, never the wrong product.

03

Quote or nothing

Every value comes back with its supporting sentence.

04

The gate decides

Quote re-found: publish. Weak: a human. Missing: deleted, and counted.

The hard cases

One rule was not enough.

A real quote proves no text was invented — not that it says what was claimed.

Invented text

Blocked from day one

The model states a value and cites a sentence that does not exist.

Said
material = Brass
Quoted
“Body Material ....... Brass”
Not in the datasheet. The quote fails the search, so the value is deleted.

Invented reasoning

Found by a benchmark run

The quote is real, and the inference drawn from it is not.

Said
phase = 1
Quoted
“Poles ....... 1 pole”
Poles are not phases. A quote must now also name the field it states.
What the benchmarks prove, and what they don't

The synthetic set degrades a complete record into shorthand, so the original is ground truth — but the parser's author wrote the generator too. The 12 real-document SKUs answer that: manufacturers' own PDFs, ground truth read out by hand. Small, and that limits it — but it is the one benchmark the author did not write, and it found three defects 652 generated SKUs never did.

Where the cost comes from

Two thirds of filled fields never reach a model — that is both the cost story and the certainty floor. The rest is metered: 678 tokens per SKU, $625 per million. Real documents cost about three times that, because a submittal sheet is a dense two-page table. List rates, cold cache.

What it will not do

Manufacturer domains first, never a shopping site — marketplaces are refused by a blocklist checked on the requested URL and again on the redirect target. robots.txt is honoured and requests are paced. No source URL means the field stays empty rather than plausible.

Measured, not asserted

Every number re-derived by CI on each push.

Three sets, never averaged — they measure different things.

no model calls 600 synthetic · 52 hand-written ~1 ms per SKU
99.7%
Precision
100% on the hand-written set
31.8%
Of the full spec filled
73.5% of what the line itself states
99.7%
Category code correct
from a real 4,302-code index
0
Made-up values
on either set
60/60
Right document found
no wrong-part matches

Who fills the catalog

Rules do the cheap two thirds. The gap is documents, not model capability.

rules · 31.8% model · +18.7% no source states it
free, deterministic read from a datasheet needs more documents
Try it

The real pipeline, on this page.

Pick a part, or type your own. The last example is meant to refuse.

Pick an example above, or press Enrich.
rules first, no tokens every value quoted refusals shown, not hidden