Demos
Pick an error rate, see what it can automate
We taught decisio two public sets of customer intents and a coding agent's command rules from a few labelled examples each, then asked it to certify which answers can go out with no one checking them. Every message, answer and certificate on this page comes from those runs.
Inbox autopilot
A support inbox, split by the certificate
These are real messages from BANKING77's test split, answered by Gemma 4 31B after 10 labelled examples per intent. Pick an error rate: the answers the certificate covers go out on their own, and the rest go to a person.
A stricter rate sends more of the inbox to a person. That is what the promise costs.
Sent automatically
certified: the answer goes out as it is
When should I receive my virtual card?
What is the limit to number of transactions I can do with a disposable card?
What do I need to do to verify the source of my funds?
How do I retrieve a trapped card from a ATM?
I want to change my personal details.
Can I exchange money from abroad without additional costs?
Who accepts my card?
I have a transaction that shows several times
My card has been charged two separate times for a single transaction.
I am extremely unhappy with this app and want to get rid of my account?
I think I see a withdraw I did not make.
I moved. Where do I update my details?
I wasn't applied the correct exchange rate for an item I bought
Do my kids have to be a certain age to use this service?
The person I sent money to hasn't gotten it yet!
Help me. My card doesn't work.
I want to get a disposable virtual card.
Do you have any idea on when I will receive my refund? I got my statement and it was not there.
Can I top up by cheque?
Sent to a person
not certified: a person checks the answer first
I have a 1 euro fee on my statement.
Where can I find the card PIN?
Can I use American Express to add money into my account?
Do you ship cards to where I live?
Wrong: the label is
order_physical_card.Hello. I'm on holiday and didn't bring any cash with me. I need to withdrawal my home currency from one of your machines. Do you have any that will do this and is there a charge?
Wrong: the label is
wrong_exchange_rate_for_cash_withdrawal.Why hasn't my transfer been made?
Wrong: the label is
failed_transfer.Why was I charged an extra fee when using a card?
Can I use my American Express to add money to my account?
If I want to top up, can I use Apple Pay?
It's been two weeks, why has the transaction for $1.00 not been reversed?
Wrong: the label is
extra_charge_on_statement.Can you explain what this random $1 charge is?
How do i get my salary in the account?
Why doesn't it show that I did a balance transfer?
Wrong: the label is
balance_not_updated_after_bank_transfer.Can I exchange to EUR?
Wrong: the label is
fiat_currency_support.why couldn't I get cash in the ATM?
How do the disposable cards work?
Why has payment been returned?
Wrong: the label is
reverted_card_payment?.I tried to top up. Why was it denied?
Where is the tracking number for the card you sent me?
Why didn't my balance change after I transferred some money?
How come I don't see my deposit in my account yet?
Why was I not able to complete a transfer?
I need to bank account transfer from another account into this one, what is the easiest way that can be done, and what information do i need?
I see random purchases to my account, was it hacked?
Why was a transfer to an account not allowed?
Why would I be charged a fee for card payment?
How long is the wait for a US transfer?
What do I do if I think my card was improperly used?
What fees apply when using a card?
- Sent automatically, of all 3,080 test messages
- 1,335 43.3% of the inbox
- Wrong among those
- 43 3.2% of them
- The certificate's threshold
- 0.94 certified at or above it
BANKING77's test split, credited under How it was run. Gemma 4 31B from its FP8 checkpoint on one RTX PRO 6000 Blackwell, decisio 0.14.0: taught with 770 examples, certified on 1,535 held-out ones. The 48 messages are a seeded random sample of the test split, not picked by hand.
The share automated
How much each rate answers on its own
Each bar is the share of a test split the certificate covered, and how often those answers were wrong. Two intent sets, two bases, 10 labelled examples per intent.
- 77.6% to 84.2%answered right, untaught and taught: BANKING77 on Gemma 4 31B
- 73.1% to 82.3%answered right, untaught and taught: BANKING77 on Gemma 4 12B
- 92.0% to 95.2%answered right, untaught and taught: CLINC150 on Gemma 4 31B
- 87.3% to 93.1%answered right, untaught and taught: CLINC150 on Gemma 4 12B
At 10% the certificate covers most of each split. At 2% BANKING77 certifies nothing on either base: when the taught model is most sure, it is still wrong a little more than 2% of the time, and no number of held-out examples changes that. CLINC150's intents barely overlap, so even a strict rate covers most of it.
The promise
200 re-splits, one line to stay under
A certificate promises that, nine times in ten, at most the rate picked of its certified answers are wrong. To watch that hold, each task's held-out and test answers were pooled and split again 200 times: certify on one part, count the mistakes on the other.
Each dot is one split. A dot above the line is a split where the promise missed, and nine in ten is the bar.
- The promise held
- 191 of 200 splits
- Over the rate
- 9 splits
- Certified nothing
- 16 splits, counted as held
Drift
Traffic it was never taught, and certification pauses
The CLINC150 task was taught its 150 intents and no way to say a message fits none of them. A replay of 5,363 messages then mixed in off-topic ones, from none at message 1,000 to 30 in every 100 by message 4,000, and each one certified was a wrong answer sent out.
The alarm pauses certification
The confidence alarm pauses certification by default: answers keep coming, but none is marked certified until the traffic looks like the examples again.
- On the CLINC150 stream above, the first paused answer came at message 1,570, with 40 wrong answers certified before it.
- On a stream whose traffic jumps at message 1,500, the first paused answer came 74 messages after the jump, with 26 wrong answers certified before it. Certification resumed 316 messages after the traffic returned to normal.
- On normal traffic it paused nothing.
Measured on the decisio 0.16.0 release candidate, Gemma 4 31B FP8, one RTX PRO 6000 Blackwell.
The fix: teach it to say none of these
Give the task one more option, out of scope, taught from 10 off-topic examples, and certify it on held-out examples that include 100 off-topic ones. An off-topic message then has a right answer, and the certificate counts it.
| No out-of-scope option | Out of scope taught | |
|---|---|---|
| First paused answer | 1,570 | 2,601 |
| Right, over the whole stream | 79.9% | 91.6% |
- Without the option, the confidence alarm pauses the task sooner: at answer 1,570, after 40 wrong certified answers.
- With the option taught, the answer mix pauses it at answer 2,601, when about 16% of the messages are off-topic. Over the stream, 6.4% of its certified answers are wrong, against 8.3% with an alarm that only reports, and 138 wrong answers go out certified from message 1,001 on, against 394.
- It paused on all 40 seeds of the monitor's sampling, and never on the same stream without its off-topic messages.
So teach an "other" option and rely on the pause: the option makes the answers right more often, and the pause caps what a shift costs.
Out of scope taught: a replay of recorded readouts through the decisio 0.18.0 monitor, Gemma 4 31B FP8 on one RTX PRO 6000 Blackwell, replayed 2026-10-19; the readouts were recorded on decisio 0.14.0, on the plain layout. No out-of-scope option: the pause measured on the decisio 0.16.0 release candidate.
Gatekeeper
Allow, ask or block, for a coding agent's commands
A coding agent proposes a shell command, and a team has 16 written rules, each saying allow, ask or block. Gemma 4 12B was taught the rules from 20 labelled commands per rule and asked which rule covers each command; the action follows from the rule.
- A command
rm -rf build/ - Which rule covers it?one question over the 16 rules
- The rule's actionallow ask block
- Certified?yes: act on it; no: ask a person
- 34% to 40%of the commands decided on its own at most 5% wrong, with the wrong action in 1.6% to 2.3% of those
- 70% to 75%decided on its own at most 10% wrong
- 16 of 1,799certified commands let through when the policy says ask or block, across the four taught versions of the task
That is about 1 in 112. Four were real model mistakes, such as gh stack merge 7; twelve were strict items in the policy's own lists, commands the rule text supports, such as test runs through python -m. All 16 count as errors, because the policy is the ground truth.
When a new kind of command arrives
Database and migration commands, a kind no rule names, rose to 30% of the traffic. None of the 184 was certified, and 160 went to "ask" through the policy's catch-all rule, "any other program".
The lesson beside CLINC150's: a catch-all option is what keeps certification safe when traffic shifts. CLINC150's task had none, so until the alarm paused certification, its off-topic messages went out certified as some other intent.
The 16 rules and their actions
inspectallowgit_readallowgit_local_writeallowgit_discardaskgit_pushaskgit_push_force_or_protectedblocktest_build_lintallowrun_scriptsaskinstall_packagesaskedit_workspaceallowdelete_in_workspaceaskoutside_workspaceblocksecretsblocknetwork_and_cloudaskremote_code_or_privilegeblockotherask
Gemma 4 12B, the 6-bit MLX conversion mlx-community/gemma-4-12B-it-6bit, decisio 0.14.0, 2026-10-17 and 2026-10-18. Three draws of 20 commands per rule, each read on the same 1,481 test commands; one more version, taught with 10 per rule, was read across two server starts. The sources are under How it was run.
Before you rely on it
What a certificate does not cover
- Certify where you serve. A certificate holds on the serving setup it was made on: one made on a Mac does not carry to a card, or the reverse.
- Certify again after upgrading decisio. A certificate covers the release it was made on.
- Give it a way to say none of these. A certificate holds for messages like its held-out examples, and it cannot cover an answer the task cannot give, such as out of scope.
- Which examples you teach with matters at 5%. Three random draws of 10 examples per intent on BANKING77 certified very different shares of the test split at 5%; at 10% the draws agree, as the chart below shows.
- A harder test split moves the rate. Both 2% certificates on CLINC150 came in a little over the rate on its official test split, which is harder than the validation split they were made on: there Gemma 4 12B is right 94.3% of the time and Gemma 4 31B 96.7%. Pooled and re-split, the same answers hold.
- Some mistakes are labels that overlap. "my wallet was stolen with my cards in it" is labelled
compromised_cardand was answeredlost_or_stolen_card. They count as mistakes here, as they would in a real inbox. - What was not tried: more than one machine per base, legal text, long documents, other languages or adversarial messages.
The share certified, three draws of 10 examples per intent, BANKING77
Method
How it was run
Every serving setting at its default. The model's weights never changed: teaching fits a small layer on what the model reads.
Measured on decisio 0.14.0 on 2026-10-16, 2026-10-17 and 2026-10-18; the drift pause on the decisio 0.16.0 release candidate.
The models and the machines
- Gemma 4 31B, its FP8 checkpoint, on one RTX PRO 6000 Blackwell (96 GB).
- Gemma 4 12B, the 6-bit MLX conversion, on one 64 GB Apple silicon Mac.
Nothing here is a speed figure.
The intent sets and the commands
- BANKING77: 77 banking intents. Casanueva, Temcinas, Gerz, Henderson and Vulic, Efficient Intent Detection with Dual Sentence Encoders (2020), PolyAI. CC BY 4.0.
- CLINC150: 150 intents across 10 domains, with off-topic queries. Larson et al., An Evaluation Dataset for Intent Classification and Out-of-Scope Prediction (EMNLP 2019), Clinc. CC BY 3.0.
The messages on this page are from their test splits, unchanged. The gatekeeper's commands:
- SWE-Hero OpenHands trajectories: NVIDIA, nvidia/SWE-Hero-openhands-trajectories (shell commands, shard 0). CC BY 4.0.
- NL2SH-ALFA: westenfelder/NL2SH-ALFA (from nl2bash, tldr-pages, NL2CMD, LinuxCommands and InterCode). MIT (its parts keep their own licences; tldr-pages CC BY 4.0).
- documentation shell lines: github/docs, kubernetes/website and MicrosoftDocs/azure-devops-docs (shell lines of the documentation). CC BY 4.0.
- Templated commands and the database commands of the drift replay, generated for this demo by seeded scripts. CC0.
Teaching and the certificate
Each message is one question over every intent, "Which of these labels fits the text?", and the confidence is the answer's top probability. Each task was taught with its examples, and the server fitted a small layer on them.
The certificate was made on held-out examples that share none with the teaching set: drawn from BANKING77's training split, and all of CLINC150's validation split. It finds the lowest confidence at which the held-out mistakes stay under the rate, with a statistical bound (Learn then Test, with Clopper-Pearson bounds).
Certificates are made on the serving path: read again through it, 200 of 200 held-out examples gave the same confidence.
What it promises: nine times in ten over the draw of held-out examples, at most the rate picked of the certified answers is wrong, for traffic like those examples, on the serving setup it was made on.
The re-splits and the drift replay
For each task, the held-out and test answers were pooled and split again 200 times, by intent, into parts of the original sizes. A split that certified nothing counts as held, and the counts show how often that happened.
The drift stream holds every in-scope CLINC150 test message once, plus off-topic messages from its out-of-scope list, read one at a time through the task with its 5% certificate. The monitor was read every 100 messages.
What next