DEMO ARCBeat 4 of 6 Β· Registry (the moat at config-time)
All screens
β€œEvery supplier has its own mapping. Different fields, different prompt, different model. The supplier-id agent classifies first, the registry resolves the config, the extractor runs against that exact config.”

Supplier registry

Per-supplier extraction mapping. Each supplier has its own fields, prompt, and model.

Generic fallback

1

always present

Cold (0–5 samples)

1

uses generic config

Warming (6–20)

2

few-shot from memory

Specialized (21–100)

3

smaller, cheaper model

Locked-in (100+)

1

deterministic, ~free

8 entries

SupplierTierSamplesModelFieldsPrompt addendumConf floorLast seenβ‹―

Generic (fallback for unknown suppliers)

__generic__

GENERIC0qwen-vl-72b6none0.70always

Maple Leaf Flour Co

maple-leaf-flour

LOCKED-IN247layoutlmv3-finetuned9Uses CSE for CASE. Pack sizes like "12/50lb". Tax always at bottom right.0.952 min ago

Sysco Toronto

sysco-toronto

SPECIALIZED89qwen-vl-7b12Multi-page (3-5 pages typical). Totals on last page only.0.902 hr ago

Casa Tequila AB Inc

casa-tequila

SPECIALIZED47qwen-vl-7b12Quebec supplier: commas are decimals. "19,95" means 19.95. TPS/TVQ are federal/provincial tax.0.901 hr ago

Northern Dairy

northern-dairy

WARMING12qwen-vl-72b9Refrigerated delivery. Sometimes split tickets.0.806 min ago

FGF Egg Supplier

fgf-egg-supplier

COLD3qwen-vl-72b6none0.7032 min ago

Gordon Food Service

gordon-food-service

SPECIALIZED64qwen-vl-7b11Items grouped by category. Subtotals per category, then grand total.0.902 hr ago

Metro Supplies

metro-supplies

WARMING18qwen-vl-72b6none0.803 hr ago

How routing works at runtime

The supplier-ID agent runs first. The registry returns the matched config. The extractor uses that config. This is what the agent stream shows live during extraction.

[stage 1: supplier-id] reading top of page 1...

[stage 1: supplier-id] detected: maple-leaf-flour (confidence 0.94)

[stage 2: registry] loading config for maple-leaf-flour

[stage 2: registry] tier=LOCKED-IN Β· model=layoutlmv3-finetuned Β· 9 fields Β· addendum loaded

[stage 3: extractor] calling layoutlmv3-finetuned on 1 page...

[stage 3: extractor] 9/9 fields extracted in 0.8s Β· all confidence β‰₯ 0.95

[stage 4: validator] sum(line_items) = subtotal βœ“ Β· subtotal + tax = total βœ“ Β· date valid βœ“

[stage 5: reviewer] all confidence β‰₯ floor (0.95) β€” auto-approved (STP)

Why this beats per-model routing

Per-model (Nanonets)

  • β€’ One schema per model (union of all suppliers in the bucket)
  • β€’ One prompt per model
  • β€’ Add supplier = re-label + re-train + redeploy (weeks)
  • β€’ Add field = retrain
  • β€’ Cost flat per page across invoice #1 and invoice #10,000

Per-supplier (this)

  • β€’ Schema per supplier β€” only relevant fields rendered
  • β€’ Prompt addendum per supplier β€” quirks live in config, not code
  • β€’ Add supplier = one JSON entry (instant)
  • β€’ Add field = edit one entry
  • β€’ Cost drops as suppliers move COLD β†’ WARMING β†’ SPECIALIZED β†’ LOCKED-IN