Research previewSeptember 2026

hunch

Open-weight decision scorers. A state, a question and its candidate answers go in; a probability for every candidate comes out, and no text is generated.

A luminous red glass seed suspended above a dark stone.
01In brief

A probability for every answer.

Hunch reads a state (text or JSON), one or more questions and the candidate answers, and returns a probability for every candidate. Two sizes, Hunch 0.6B and Hunch 1.7B, are fine-tuned from Qwen3 backbones and released under Apache-2.0, with GGUF f16 and MLX f16 builds for on-device use. It is not for decisions with legal effect on people without human review, and it is not a safety-policy classifier.

0.8751
accuracy of Hunch 1.7B on the held-back in-family test split, scored once after both checkpoints were fixed (0.8543 for the 0.6B; a constant guess of each family's most common answer scores 0.4673, and the untrained backbones 0.3337 and 0.3303)
0.0136
in-family smooth ECE of Hunch 1.7B on that split, at a temperature fitted on a separate calibration split (0.0167 for the 0.6B)
0.6020
accuracy of Hunch 1.7B on CaseHOLD, a legal family it never trained on, where a constant guess scores 0.212
10 of 6,000
held-out answers changed by the 1.7B's GGUF f16 build, read on llama.cpp's CUDA backend, against the full-precision reference; its MLX f16 build changes none, and bf16 alone changes 28

Research preview. The model cards and the paper report its measured limits, including that instructions planted in the input can steer it.

02How it works

One path per candidate.

A question can be a choice among 2 to 255 candidates, a boolean (the probability a statement is true) or a score on an ordered rubric of 2 to 10 levels. Hunch builds one path per candidate from the state, the question and that candidate, runs each question's paths through the backbone together in one batch, and reads one score from each path's last token through an fp32 normalisation and a linear head. A softmax over one question's candidates turns the scores into its distribution.

A candidate's position is part of no path, so reordering the options cannot change an answer: permuting the options of 200 cases on the three suites of a public 59-suite benchmark list that test it flips 0.0 % of answers. The model has no language-model head and cannot emit text.

The state and question are paired with each candidate; each pair is scored on its own path through one shared backbone, and a softmax over the candidates gives the distribution. state and question Billing Account Technical shared backbone softmax over the candidates
Each candidate is scored on its own path; nothing in a path says where the candidate sat in the list.
03In family

Where it was trained.

No trained checkpoint had been scored on the in-family test split before 25 September 2026. It was then scored once per release checkpoint, as declared in advance (a first attempt stopped at a batching limit before scoring anything, and was re-run): 3,467 questions in 12 families, the same questions an untrained backbone of each size had been scored on. Accuracy is 0.8543 (0.6B) and 0.8751 (1.7B). A constant guess of each family's most common answer scores 0.4673 on the same questions, and the untrained backbones read 0.3303 and 0.3337. 205 of those questions have a state that also occurs in the two releases' training text, most of them in the Bitext routing and urn-draw families; without them, accuracy is 0.8455 and 0.8679. On the same families' calibration questions, both sizes are ahead of TypeSafe's Jev 1.13 and of the open Decider models, all answering zero-shot: 0.8731 for Hunch 1.7B and 0.8535 for Hunch 0.6B, against 0.8010 for Jev and 0.7346 for the Decider 2B.

Hunch 0.6BHunch 1.7Bthe untrained backbone of the same size

Support routing (Bitext)
Hunch 0.6B: 1.0000, untrained backbone 0.4800
Hunch 1.7B: 1.0000, untrained backbone 0.2467
Refund policy rules
Hunch 0.6B: 0.9820, untrained backbone 0.3353
Hunch 1.7B: 1.0000, untrained backbone 0.2635
Toxicity, yes or no*
Hunch 0.6B: 0.9867, untrained backbone 0.3867
Hunch 1.7B: 0.9933, untrained backbone 0.5900
Intent (CLINC150)
Hunch 0.6B: 0.9600, untrained backbone 0.2400
Hunch 1.7B: 0.9767, untrained backbone 0.0367
Paraphrase (PAWS)
Hunch 0.6B: 0.9367, untrained backbone 0.5667
Hunch 1.7B: 0.9567, untrained backbone 0.5733
Intent (MASSIVE)
Hunch 0.6B: 0.9100, untrained backbone 0.0967
Hunch 1.7B: 0.9433, untrained backbone 0.0133
Urn draws
Hunch 0.6B: 0.9300, untrained backbone 0.2000
Hunch 1.7B: 0.9367, untrained backbone 0.5733
Intent (Banking77)
Hunch 0.6B: 0.9133, untrained backbone 0.1333
Hunch 1.7B: 0.9067, untrained backbone 0.0267
Yes/no questions (BoolQ)
Hunch 0.6B: 0.8167, untrained backbone 0.6733
Hunch 1.7B: 0.8667, untrained backbone 0.7567
Toxicity level, five-point score
Hunch 0.6B: 0.8067, untrained backbone 0.1300
Hunch 1.7B: 0.8167, untrained backbone 0.1300
Fact verification (VitaminC)
Hunch 0.6B: 0.6200, untrained backbone 0.4500
Hunch 1.7B: 0.7300, untrained backbone 0.4500
Helpfulness, five-point score
Hunch 0.6B: 0.4467, untrained backbone 0.2733
Hunch 1.7B: 0.4300, untrained backbone 0.3133
In-family test accuracy per family, at T = 1 (accuracy does not depend on the temperature). The thin mark on each bar is the untrained backbone of the same size on the same questions. *Almost all of that family's comments are non-toxic, so its accuracy says little. Per-family tables.
04On the device

Almost the same answers, locally.

Answers changed on all 6,000 held-out questions, against the full-precision reference
buildHunch 0.6BHunch 1.7B
GGUF f16110, on llama.cpp's CUDA backend
MLX f1600
the reference in bf162828

In one measurement on one NVIDIA RTX 5090 (bf16, one request at a time, over 380 of the 400 typed-decisions test requests after 20 of warm-up, tokenisation included), the median wall-clock time per request was 78.1 ms (0.6B) and 140.6 ms (1.7B). The shared-prefix engine, FastHunch, reads each state once per request instead of once per candidate. In fp32 it changes none of the 6,000 held-out answers, and the same measurement gave 36.7 ms (0.6B) and 66.6 ms (1.7B). On a laptop (one Apple M4 Pro, MLX f16, fp32 activations, one request at a time, the machine in normal use), the measured median per request was 950.8 ms (0.6B) and 2746.4 ms (1.7B).

05A checked record

Every decimal, checked.

Every decimal result in the README, the model cards and the benchmark and format pages is listed with the file and field it comes from, and a script checks each one against that source file. The data rebuilds from public sources with published commands. Selection is disclosed, including the rule that would have kept the earlier 1.7B checkpoint. The paper sets out the method and the results.

06Resources

Read it, run it, check it.

Cite
@techreport{antareslabs2026hunch,
  title       = {Hunch: Open-Weight Decision Scorers},
  author      = {{Antares Labs}},
  institution = {Antares Labs},
  type        = {Technical report (research preview)},
  year        = {2026},
  month       = sep,
  url         = {https://antareslabs.org/hunch/}
}