AMD Developer Hackathon ACT III · Track 2, Health and Wellbeing
askfirst
It finds the one missing fact that would change the answer — and refuses
to answer until it has it.
askfirst.kgbnetwork.com · github.com/shivang-goliyan/askfirst
The failure, not described but measured
We asked a commercial vision model to read 15 photographs of real syringes.
We told it "unknown" was an acceptable answer.
| Wrong on | 9 of 15 |
| Times it said unknown | 0 of 15 |
| Read from an empty syringe | 1.0 mL |
| Answers given to one byte-identical file | 2 different |
| Worst single error | +71% |
The problem is not that it was wrong. It is that it was certain and wrong,
and nothing in the output separated that case from a correct one.
Our own run, logged, checksums kept. Published corroboration: MeasureBench
(arXiv 2510.26865) — a frontier model at 19.8% on measurement reading, 2.0% on composite gauges.
What it is
Not a diagnosis tool. A gate in front of the model that decides.
It answers a narrower and far more answerable question: is there enough
here?
- Record split into atomic fields.
- Open model scores it — the full distribution is kept, not a sampled answer.
- Each present field removed in turn → what the answer rests on.
- Each absent field ranked by how much it could tell you, then by cost and minutes.
- Unstable under ablation → refuse, return the ranked gaps, hand over.
The measurement · 6,000 held-out patients · 49 conditions · 2% chance
The scorer is 99.6% right on a complete record.
Then take the record away.
| evidence present | findings | answer everything | answer the top 25% |
| all of it | 15.6 | 99.6% | 100.0% |
| 60% | 9.0 | 96.2% | 99.9% |
| 40% | 5.8 | 82.6% | 98.3% |
| 20% | 2.7 | 39.9% | 73.5% |
| 10% | 1.2 | 17.1% | 44.9% |
A model this good is 39.9% right on three findings.
Refusing the least confident takes it to 73.5%.
Trained on complete records, tested on incomplete ones · Wilson 95% intervals in
docs/results/abstention.json · margin beats entropy at every coverage level
What refusing is worth · wrong answer 100, referral 5
Refusing pays at every level. How much to refuse changes fifty-fold.
| evidence present | always answer | cheapest | answers | saving |
| all of it | 0.42 | 0.26 | 98% | 38% |
| 60% | 3.80 | 2.05 | 80% | 46% |
| 40% | 17.43 | 4.00 | 35% | 77% |
| 20% | 60.15 | 5.24 | 2% | 91% |
That is a setting, not a slogan. Answer 98% of complete records; answer 2% of
nearly empty ones. The page lets you move it and the server obeys the same number.
Seven price ratios at 20% evidence: 28% to 98% cheaper. Even when a referral costs
half a wrong answer it is 28% cheaper. The direction does not depend on flattering prices.
Why this needs an open model, on AMD
The product is built on the distribution. A closed API returns text.
Entropy, information gain and a calibrated threshold are all functions of the full posterior.
There is no version of this that works behind an API that hands back a sentence.
POST /v1/completions { "echo": true, "max_tokens": 0, "logprobs": 1 }
→ token_logprobs + text_offset over the prompt
one round trip per label set · vLLM on MI300X, 192 GB HBM3
A better model does not make the answers cheaper. It makes more of them answerable.
The CPU baseline bottoms out at 5% coverage because a naive Bayes is 21% accurate overall. A
stronger scorer moves that optimum to higher coverage at the same cost — a strictly better
product, measured against a baseline that already exists.
src/askfirst/model.py — exact label scoring via text_offset, mean-normalised,
tested against the documented response shape before any GPU hour was spent
What we got wrong, with dates on it
The biggest thing we got wrong, we found ourselves.
- We published a headline that measured our own baseline, then killed it.
"21% to 85.3% by refusing" came from a naive Bayes at 22.6% top-1. A linear model gets 99.6% in
31 seconds on a laptop, so the lift was about our classifier, not about medicine. Found by two
of our own files disagreeing, re-run end to end, old notes kept with a notice on them.
- Our first ranking objective made things worse than guessing. Following its
advice scored 18.8% against 26.0% for asking
at random. Flip probability selects for volatility, not information. Replaced with expected
information gain → 28.4%, harm gone.
- A French-to-English label join was broken — the conditions file is keyed in
French, the patient labels are English, overlap 1 of 42. Caught before the GPU run, which would
have scored French predictions against English truth at $1.99 an hour.
- A d-dimer shows why: 0.264 bits of information at a flip probability of 0.00.
It settles the question without changing the leading answer, and the old objective could not see it.
- Cheap-proposes-then-model-ablates caps the system near 32% — shortlist
recall at k=20 is 31.8% and stage two can only re-rank what stage one passes. Inverted.
- Expected information gain — the objective the literature uses — lost to a coin.
43.3% against 46.2% for asking at random. It is an expectation taken
under the model's own beliefs, and on a three-finding record those beliefs are wrong. Ranking
by how much a question could tell you scores 67.1%.
Four objectives tried, three of them worse than a coin, and the winner is a
property of the question rather than anything learned. Every failure is dated and committed in
docs/results/, in the order it happened.
Behaving badly, on purpose, as the track requires
Five questions, five answers that point at code or at a number.
| Incorrect responses | Measured: on thin records, 39.9% right
answering everything against 73.5% answering the confident quarter. The whole product is this
question. |
| Sensitive information | None enters. Synthetic and CC0 data only.
MIMIC-IV deliberately excluded — its DUA forbids redistribution. |
| Uncertain results | Uncertainty is the output: full
distribution, entropy in bits, threshold, sufficiency, per-field influence. |
| High-risk decisions | Never made. The only decision is
answer-or-hand-over, tuned pessimistic — it refuses nine cases in ten. |
| Human review | Refusal is the handoff, and it carries a
ranked, costed work list rather than a shrug. |
Not clinically validated. No clinician has reviewed any output. Not medical advice.
docs/SAFETY.md
Prior work — said by us, before it is said to us
MediQ posed the interactive version of this first. We are not claiming the idea.
- MediQ, NeurIPS 2024, arXiv 2406.00922 — naive prompting to ask questions
lowered accuracy by 11.3%. Their self-consistency fix gave
+22.3%, leaving a 10.3% gap against full information. That is
the number to beat, and it is a real target rather than a vague one.
- Q4Dx, Nature Scientific Reports 2026 — an evaluation built by systematically
removing information from cases. That is our evaluation design, already published.
- ALFA (arXiv 2502.14860), BALAR / MedClarify — expected
information gain over a fixed question set.
What we have not found occupied: ranking the absent fields by counterfactual
influence over an open model's own logprobs. Absence of search evidence is not proof, and we say
so rather than claiming a gap.
The same engine, a second domain
Variant interpretation, where the evidence contradicts itself.
CIViC — public, CC0, 4,940 evidence rows. Grouped by variant and outcome: 585 groups where
removing one line of evidence can change the call, of which 182 are contested —
the same knowledge base both supports and does not support the conclusion.
Demo case: DNMT3A R882 in AML. Level-B evidence on both sides, at
ratings 3 and 4. Most tools average that. This one reports that the case is unresolved and names
the evidence doing the damage.
The limit, in the same breath: 182 groups is a demonstration, not a headline.
Module A carries the measurement. Computational evidence stays capped at "supporting" strength,
which is what ACMG/AMP actually allows.
docs/results/2026-10-12-civic-scope.md
Who pays, and what it costs to run
The buyer is anyone already carrying the cost of a model's confident mistakes.
- Triage and teleconsult services deciding what to do with an incomplete intake.
- Decision-support vendors who need a safety layer they can show a regulator.
- Lab networks choosing which test to run next, where the ranking is the product.
One assessment is one generation plus a sweep the CPU does for free. The
expensive design was the obvious one: an exhaustive 223-field sweep with a language model costs
about 22 seconds of GPU per case — a latency wall that does not move with more
credits. So the model proposes roughly ten fields in a single pass and the cheap scorer ablates
exhaustively at no cost.
It knows when it doesn't know. That's the product.
Open the live URL and try to make it answer something it should not.