The only decision model with conformal and abstain built in.
Not layered on by a wrapper: every answer carries a conformal shortlist, a calibrated probability and the right to say nothing, in one forward pass. Upload the dispositions your team already recorded, fit to them, and set one line: the precision the automatic share has to hold. Everything below it goes to a person.
No card. 5,000 decisions. Nothing to uninstall.
Five steps, in order
1
Define
A question sheet, from a template or written out. Support routing, lead qualification, moderation, review triage, prompt-injection guarding, document sorting.
2
Teach
A CSV of past cases. You see the before and after on rows nothing was fitted on.
3
Route
One slider: the precision the automatic share must hold. It answers in review load and reviewer hours.
4
Deploy
A calibration file and a container, or an endpoint. Runs on a CPU box with no GPU.
5
Watch
Drift on the answer mix, with no labels needed, and one command to refit.
What we measured
0.069
calibration error
Down from 0.160 uncalibrated, across six corpora. Accuracy is unchanged: temperature does not move an argmax.
258 ms
a decision, one CPU thread
The shipped 0.8B reader. Four threads measured 1,268 ms for identical answers.
0.816
what twelve out of twelve certifies
A band holds its target on a one-sided lower bound, so a narrow band pays for being narrow.
A model will answer these questions without being fitted, including this one: a project with no fit is answered by the engine's published calibration. What fitting and calibration add is narrower than it sounds, and worth reading before you spend an afternoon on it: a confidence you can set a threshold on, a bound you can show the person who asks why a case was decided automatically, and your team's meaning of the labels rather than a generic one. If a person reads every case anyway, you do not need any of it.
What it will not do
- Serve a model that lost. A fitted head whose cross-validated accuracy does not beat the engine is refused, and the screen says so in those words. On a small upload that is the usual outcome.
- Approximate a precision target it cannot hold. Every answer goes to review instead, and it names the target your data could support.
- Show you a number from rows it fitted on. A dataset is cut 60 / 20 / 20 and the last slice is never touched.
- Claim accuracy for a file with no labels in it. You get the answer mix and the confidence spread, which is what there is.
The engine is vegaml, Apache-2.0, and the default reader is Apache-2.0 and ungated, so the self-hosted bundle can be redistributed without asking anyone. The weights and the calibration are yours.