Download How it works Results
abstain
Docs Limits v6
Earth · ground level

Certain,
or silent.

Journey into the world of abstainScroll to begin

Onlyanswersyoucanactuallytrust.

Download
Above the clouds

Under a 5% promise, abstain answered 84.6% of passage questions with 4.2% wrong. The model alone was wrong 9.7% of the time.

The stratosphere

Four signals, read from inside the model.

Ten samples grouped by meaning, a self-check, a second reader for the passage, and a probe on the hidden state. One learned score joins them.

In orbit

The real certainty.

A cut is chosen on questions with known answers, then tested on 50 held-out splits. At the 5% promise, none of the 50 was statistically contradicted.

Ten samples01 / 06
01 Ten answers at temperature 1.
02 Grouped by meaning, not by string.
Self-check02 / 06
01 The model is asked if its answer is right.
02 Only the Yes and No odds are kept.
Second reader03 / 06
01 Another model reads the passage.
02 It checks that the passage supports the answer.
Hidden-state probe04 / 06
01 Reads the model's state at two layers.
02 The strongest single signal, at 0.80.
Certificate05 / 06
01 The furthest cut where the 95% bound stays under target.
02 It will not load with any other score file.
Drift tripwire06 / 06
01 Watches scores in blocks of 50.
02 When traffic changes, it refuses everything until you recalibrate.

Say less. Mean every word.

Local
Reproducible
Offline
Held-out tested
Honest refusals
4 GB GPU

A more honest model starts here.

Install it, generate once, certify, and ask. It runs on Qwen2.5-1.5B-Instruct on a 4 GB GPU, and nothing leaves your machine after the first run.

Download
Changelog README Protocols FAILURES.md How it works Results License Privacy

Figures are held-out means over 50 random splits. A certificate says nothing about questions unlike the ones it was calibrated on.

abstain
How it works

How abstain decides.

abstain doesn't ask the model how sure it is. It collects four kinds of evidence, combines them into one score, and answers only when that score is under a certified line.

Five steps

Four run once. One runs live.

01 · offlineGenerate

One greedy answer, ten samples at temperature 1, a Yes or No self-check, and the hidden state at two layers.

bench/generate_all.py
02 · offlineScore

A logistic regression fitted on 5,000 separate questions joins the signals into one number. Higher means less sure.

scorers/
03 · offlineCertify

Questions are lined up by score. The cut goes where the 95% upper bound on error stays under target.

conformal/selective.py
04 · offlineCheck

The cut is chosen on 60% of questions and judged on the 40% it never saw, fifty times over.

experiment.py
05 · liveUse

Each new question gets one score. At or under the threshold it answers. Over it, it refuses.

abstain ask

Two small files go live: the fitted score and a certificate holding one number. The certificate records the score file's fingerprint and refuses to load with any other.

Signal one

Agreement is counted by meaning.

Two samples belong together when each one entails the other, judged by a small language-inference model with the question attached. The score is the entropy over those groups.

On 940 questions where all ten samples were identical, 28 answers were still wrong. Inside that group agreement ranks at chance, so the other signals have to do the work.

5 strings, 1 meaning0.000
ParisIt is Paris.parisParis, FranceThe capital is Paris
4 strings, 2 meanings0.500
Frank HerbertHerbertFrank Herbert wrote itBrian Herbert
5 strings, 5 meanings1.609
CanberraSydneyMelbournePerthDarwin
All four

How well each signal ranks.

SignalWhat it readsRanking quality
Sample agreementThe ten samples0.50
Self-checkYes or No when asked if its answer is right0.73
Second readerWhether the passage entails the answer0.78
Hidden-state probeThe model's internal state0.80
All of them, fusedA logistic regression over every signal0.82

Measured inside the 940 questions where all samples agreed. With 28 errors in that group, the figures are approximate.

Signal to certificate

Where the cut goes.

answered 5,895 · 4.0% wrong
refused 1,134
0.693threshold
4.0%observed error
4.4%95% upper bound
5%target

The refused group would have been wrong 39.4% of the time, about ten times the answered group. Promising 5% with zero observed mistakes still takes at least 59 answered questions. Promising 1% takes 299.

Live

Three questions about Hubble.

In what year was the telescope launched?

All ten samples match, and the passage supports the answer.

answered 19900.104
Who commanded the 1993 servicing mission?

The passage does not say. Samples named the telescope's namesake and an astronaut who never existed.

refused0.838
What fixed the blurry images?

Right, but phrased six ways, so the score lands near the line. Both earlier versions refused it.

answered corrective optics0.611
Results

Measured on fresh questions.

The headline numbers come from 7,029 passage questions the model had never seen when the rules of the test were written down. Other question sets are named where they appear. Figures are averaged over 50 random splits unless stated.

4.2%wrong at a 5% target, down from 9.7%
84.6%of questions still answered
0 of 50splits that statistically contradicted the 5% promise
3.8%wrong when version 2's frozen certificate met new questions
Try it

Pick a target. See the cost.

Error target{{ promiseValue }}
{{ t }}
{{ answered }}%answered
{{ wrong }}%of those wrong
{{ refused }}%refused

{{ dsNote }}

By kind

Every kind of question, certified on its own.

Question kindModel alone, wrongAnswered at 5%Of those, wrong
General, passage given9.7%84.6%4.2%
Science, passage given7.3%93.2%3.8%
Science, passage looked up20.9%67.0%3.4%
General, passage looked up30.2%43.1%3.0%
Quiz, three passages looked up32.3%42.5%3.1%
"How" and "why", reviewed labels29.3%36.3%3.4%
Every kind mixed, 13,414 questions—68.1%4.4%

With no passage, abstain finds one with a plain keyword search. Questions written in the dataset's own words flatter that search, and each library searched was gathered for those questions, so expect less coverage on your own wording.

Over time

From 21% to 84.6%.

Passage questionsVersion 1Version 2Fresh test
Questions evaluated9983,0007,029
Answered under a 5% promise21.0%78.5%84.6%
Answered under a 3% promise0.7%39.2%72.8%

About half the early gain came from fixing the measurement: a grader that marked right answers wrong, answers cut off mid-sentence, and three times the data. The other half came from the fused score. Most of the jump to the fresh test came from a kinder draw of questions, not from changes to the system.

Limits

What breaks it.

SituationPromisedDelivered
Passage questions, as calibratedat most 5%3.7% wrong
Same certificate, fed science questions with no passageat most 5%30.4% wrong
One cut for every type, "how" questions onlyat most 5%6.9% wrong
Model that mostly does not know (87% wrong)at most 30%refuses everything

A certificate says nothing about questions unlike the ones it was calibrated on. Refusals cost something too. At a 5% target, about six refusals in ten turn away a right answer. The best score needs the model's hidden state. With sample agreement alone, coverage drops from 84.6% to 72.0%.

The drift tripwire

It watches scores in blocks of 50. When they stop matching the calibration set, abstain refuses every question until you recalibrate. When passage questions turned into science questions with no passage, wrong answers let out fell from 813 to 16. It also trips on unchanged traffic in 5 runs of 50.

README

Install

Needs Python 3.10 or newer and a GPU with 4 GB of memory. The first run downloads Qwen2.5-1.5B-Instruct. After that, nothing needs the network. The code is not on a public host yet, so these commands start from a copy of the project folder.

$ cd abstain
$ python -m venv .venv
$ .venv\Scripts\activate # Windows
$ source .venv/bin/activate # macOS, Linux
$ pip install -e .
Reference

Commands

python bench/generate_all.pyGenerate answers, samples and checks. Slow, runs once, resumable.
python bench/analyze_fresh.pyScore, certify, and check on 50 splits.
abstain ask --calibration artifacts/fresh/squad_open_fresh.calib.json --context-file bench/demo_passage.txtAsk a question with a passage.
abstain ask --calibration artifacts/round5/squad_lookup_fresh.calib.json --lookup squadLet it look the passage up.
abstain check --calibration artifacts/squad_open.calib.json --store artifacts/squad_open_fresh.jsonlTest a saved certificate on new questions.
abstain replay --store artifacts/squad_open.jsonl --train artifacts/squad_open_train.jsonl --alpha 0.05 --scorer fusedSee decisions without a GPU.
python bench/summarize.py artifacts/freshReproduce every quoted number.
How it was tested

Protocols

Rules before results

Each round's rules and expectations were written down before any question was scored.

Retired test sets

Once a test set was studied to explain a weak number, it moved to practice data and a fresh set replaced it.

60 / 40, fifty times

The cut is set on 60% and judged on 40%, redrawn 50 times. A promise may fail in 1 draw in 20.

Frozen grader

The grader stayed frozen from version 2. One narrow rule was added later, tested on unseen answers, and shown beside the old grading.

Two readers

Two readers working separately reread confident answers the grader failed. Only labels both agreed on changed.

Outside checks

Frozen certificates were tried on questions that had no part in setting them.

FAILURES.md

What was silently wrong

The repo lists 38 things that were silently wrong at some point. A few that changed the numbers:

GraderMarked right answers wrong, such as "$71 million" against a clause-long reference.
TruncationAnswers were cut off mid-sentence in version 1.
A claim that did not holdVersion 1 reported reworded answers as much less reliable. On more data the gap is gone for passage questions.
A kind drawVersion 2's test set happened to be hard where strict promises are decided. A gap that size turns up about one time in sixty.
Mixed promisesOne threshold for a mix kept its promise on average while answers from memory ran over twice the target.
Versions

Changelog

Version 1998 questions. Answers 21% under a 5% promise.
Version 2Fused score, fixed grader, 3,000 questions. 78.5%.
Fresh test7,029 unseen questions under rules written first. 84.6% at 5%, 60.7% at 2%.
Round 4Per-kind certificates, general quiz questions, and the drift tripwire.
Round 5Keyword lookup for questions with no passage. 43.1% answered at 5% with 3.0% wrong.
Round 6Answer key reread by two readers, and quiz lookup over 438,718 passages. Current.
Legal

License

A license has not been chosen yet. Until one is added to the repository, all rights are reserved by the author.

Legal

Privacy

abstain runs on your machine. After the model download, questions, passages and answers stay local, and this site sets no tracking cookies.

abstain {{ pct }}%
Click anywhere to enable soundor scroll to begin in silence