◆ Decision models

Decision
Reasoning Models

A decision reasoning model is where we need to bridge the gap between LLM agents and classic ML.

Over the past year we've handed more and more small decisions to LLM agents. Which of these moisturizers will she actually like. Should I go to this conference. How much should this trip cost. The agent reads the context well and writes a sensible answer with a sensible reason. Then we ask the same question again, and sometimes the answer changes.

I wrote about the checking side of this in How do you know an AI answer is good enough to act on? Fluency isn't a signal of correctness, and a second model grading the first carries the same variance. For open-ended work that variance is part of the value. For a decision I want to automate and audit, it gets in the way. If the same invite gets a Yes on Monday and a No on Tuesday, I can't say what error rate anyone is signing up for.

The part of the language model we want, its reading of messy text, doesn't have to come with the variance. I've been calling the tool a decision reasoning model, or DRM: a small language model that reads context and reasoning as free-form text and returns one deterministic, calibrated answer.

Three everyday decisions carry the piece, each with a different answer shape: an order of preference across cosmetics for one shopper, a Yes or No on attending a conference, and a number for a travel budget. The idea came from Microsoft's Decision-1 model; what follows is my own prototype.

Four ways to make a decision, laid out left to right on one ambiguity bar. An LLM agent fans one input out into several different answers. A decision reasoning model reads context, proposal and reasoning as free-form text and returns one calibrated P(Yes) of 0.68. Classic ML reads structured data columns (price, units, margin), draws a decision boundary and returns a score of 0.71. Business rules map IF conditions to fixed actions. The decision reasoning model is highlighted in the gap between the agent and classic ML.
01 · The spectrum

"AI decision" is
four different things

Decisions sit on a spectrum, from open questions nobody can answer in advance to fully specified ones where a rule already says what to do. Tap each to see the kind of question it fits.

◀ more ambiguousfully specified ▶
The gap

Between the agent and ML,
there's a decision neither fits

It looks like ML
It repeats
the same kind of call, hundreds of times, with a history of real answers to learn from
but
▶
It looks like an agent
The evidence is text
a shopper's reviews and returns · a conference agenda next to your calendar · a trip plan with its notes
so
▶
The tool for it
A DRM
reads the text like an agent · scores like a model · same input, same score

An agent is good at reading the text. A model is good at repeating itself.
A DRM tries to do a bit of both.

✎
AI helps on the rules side too, just not at runtime. A language model can read a pile of past decisions and propose candidate rules; a person reviews them, and they run as plain code. So AI helps write the rules, and the rules make the call.
02 · Why the middle

Why not use
what we already have?

It's a fair question. I see three reasons.

One
An agent's answer is a sample
When a model writes "Yes", it drew that token from a distribution. At temperature zero you still get small differences from batching and GPU arithmetic. It also moves with phrasing, so it can be argued with.
Two
Its confidence isn't calibrated
"90% sure" doesn't mean nine in ten are right. To automate I need to say above this line, errors stay under 2%, and that needs a probability checked against outcomes.
Three
Classic ML drops the reasoning
A model on summary columns can't read "my skin gets dry in winter" or "I'd only go if I can present". A DRM reads the paragraph the person reads.
Try it

Ask the same question again

An illustration, not a live model: the agent side samples Yes with probability 0.68 each time, the way a sampled answer behaves; the DRM side computes once.

context: "Applied ML Summit", Austin, Mar 12–14; your team offsite is on the 13th
proposal: register and fly out, $1,450 plus travel
reasoning: two talks on your current project; a colleague is going and offered notes
question: Would you attend? Yes or No.
LLM agent · sampled
each ask is a fresh draw
Not asked yet.
DRM · scored
each ask is the same function of the same text
Not asked yet.
⚑
Does RLHF itself make a model non-deterministic? No. The exploration in reinforcement learning happens during training, while the weights are changing. Then it stops. The weights are fixed. At inference the variability comes from how we decode: sampling, and to a smaller degree GPU numerics. A DRM keeps the RLHF-tuned weights and just doesn't decode.
03 · Where it fits

Three decisions that
could use a DRM

The pattern I look for has three parts. All three decisions in this piece have them, and each needs a different answer shape. I've prototyped the same shapes at work, on merchandising and operations decisions.

It repeatsthe same call, many times a week
The evidence is textreasoning, notes, descriptions
There's a history of answershuman decisions or real outcomes
In every case, the same job

Split the work into three lanes

Lane widths are illustrative. The real cut points come from a precision target, step 4 below. For a label, "sure" means the top label's probability is high; for a number, it means the estimate's spread is tight.

Three decisions, three answer shapes

Not just Yes or No

Order of preference
Which of these will she like most?
reads her reviews and returns,
"my skin gets dry in winter",
each product's description
Learns from what she rated, kept and returned; a near miss is one band off
Yes / No
Should you attend this conference?
reads the agenda, your calendar,
the budget note, who else is going
Learns from the conferences you went to and skipped
A number
What should the Austin trip cost?
reads 3 nights, hotel block,
flying from Chicago,
"I'd rather walk than cab"
Learns from what your past trips actually cost
⇆
Three shapes, one model. The conference reads one P(Yes). The preference order scores each product into ordered bands and sorts by the expected band. The budget reads a number and its spread. Each is a small task file on the same machinery.
04 · How it works

From an RLHF chat model
to a calibrated scorer

I don't build a new model. I take a small open-weight chat model (Qwen2.5 1.5B or 3B Instruct), ask it a question with a fixed set of answers, and read the scores of those answers instead of letting it write. The code and the three examples above are on GitHub.

1
Pre-train
language and
world knowledge
2
Instruct + RLHF
follows "answer
with one label"
3
Prompt
free-form text
+ one question
4
Label logits
Yes/No, A–D or 0–8,
no generation
5
LoRA
learn this team's
decisions
6
Calibrate
temperature +
thresholds
Step 1 · Keep the RLHF

Nothing is removed

Keep
The instruct model, RLHF and all
Early on I asked whether to strip RLHF and keep only the base transformer. I kept it. The instruct model already maps "Answer Yes or No" (or "answer with one letter") onto exactly those tokens, so it starts with a meaningful opinion before any training. That matters when real decisions number in the hundreds, not millions.
Add
A small LoRA layer, about 1% of parameters
The only thing trained. Everything the model already knows about reading business text stays frozen.
Step 2 · Read the label logits

Ask, then don't let it answer

Reading two logits instead of generating text The prompt goes through one forward pass. The model scores about 152,000 vocabulary tokens for its next word. Only two are kept: Yes at 3.1 and No at 1.0. Their difference, 2.1, divided by a temperature of 1.4 and passed through a sigmoid, gives P(Yes) of 0.82. context: …proposal: …reasoning: … Yes or No? free-form text prompt one forward pass ~152,000 next-token logits Yes 3.1 No 1.0 keep two, ignore the rest 3.1 − 1.0 = 2.1σ(2.1 / 1.4) P(Yes) 0.82 calibrated score The model never writes an answer. Its own preference for "Yes" over "No" becomes the score.
# a softmax over two tokens is a sigmoid of their difference P(Yes | x) = σ( zYes − zNo ) = σ( (wYes − wNo) · h(x) ) # h(x): hidden state of the last prompt token, which has attended to the whole input # w_Yes, w_No: two rows of the model's existing output layer

Underneath, a DRM is just logistic regression
on a language model's reading of the text.

Same trick, more labels

Change the answer set, keep the machinery

Keep K label tokens instead of two and take a softmax over them. The question spells out what each label means. Here is how each of the three decisions reads it.

Yes / No · conference
No · Yes
Read P(Yes). Two lines make three lanes.
Ordered band · preference
1 < 2 < 3 < 4 < 5
Score each product, sort by the expected band. A miss by one band counts as near.
A number · budget
$1.0k $1.25k … $3.0k
Each label is a value. Estimate = Σ p·v; a wide spread means a weak estimate.
# K labels: one softmax over their logits, still one forward pass pk(x) = softmax( z1 … zK )k # a number: each label stands for a value v_k (e.g. $1,000, $1,250 … $3,000) estimate = Σ pk vk spread = √Σ pk (vk − estimate)²
Step 3 · Fine-tune on real answers

Two weeks of shadowing, in LoRA form

The base model is an experienced analyst who has read a lot of business writing. LoRA is the two weeks spent shadowing one person: the analyst keeps what they knew and learns which parts of the reasoning this person weighs. The loss is plain cross-entropy over the label logits. For an ordered answer like her preference, I also tried earth mover's distance (EMD), which charges more for missing by two bands than by one. For a number, the target is split between the two nearest values, so the estimate lands on the true number. No text is generated in training either.

Label source A
Human decisions
The conferences you said yes and no to. Learns how you decide, habits included.
Label source B
Realized outcomes
What the trip really cost, which products she bought again. Often better, because they don't inherit a person's habits.
Step 4 · Calibrate, then set the lanes

Pick thresholds for a precision target

I fit one temperature T on held-out data so the scores match observed frequencies, then find the approve and reject lines where precision reaches the target, say 98%. If no line reaches it, the model automates nothing. Labels and numbers get one line: act when the top probability is high enough, or the spread tight enough. Drag the Yes/No lines below to see the trade-off.

actually Yesactually No40 illustrative cases, placed by their P(Yes)
P(Yes) 00.51
–auto-Yes precision
–auto-No precision
–sent to a person
Step 5 · Measure consistency, not just accuracy

Determinism has two layers

0
flips when the exact same text is scored again, across all runs
~15%
of groups flip when one case is written five ways (3B, synthetic). This is the number I watch
1
small task file per decision: the prompt, the question and the answer shape. The machinery is shared
05 · What I've seen

Mixed results,
shown as they are

I'd rather show the mixed results than a single good number. Here they are.

Setting
Result
What it tells me
Synthetic approval decisions, generated with known rules
AUC .93 / .95
1.5B / 3B; 18% auto-reject at 100% precision. The mechanism works when the signal is in the text.
Real approval decisions: a few hundred, mostly approvals
near chance
No automatic coverage yet. With so few rejections, it learned the base rate, not the reasoning.
Re-scoring the same input
0 flips
Deterministic in the strict sense.
Paraphrased inputs, five renderings per case
12–15% flip
Wording still matters. This is the next thing to drive down.
One of seven: which helper should take a request (work data)
.95 vs .72
Better than a keyword baseline. Acts alone on about half the requests with no errors on held-out data.
Automate or hand to a person, for documents (work data)
AUC .99
Handles 56% alone at 98% precision. One field may leak the answer; I'm checking that before I trust it.
Ordered bands, like the preference scale (work data)
.64 vs .62
Only slightly better than always guessing the common band, and EMD didn't help. It spots the clear losers, not the fine order.
A number: correcting an existing estimate (work data)
small gain
Error 1.05 vs 1.16 for leaving the estimate alone. Not enough to act on by itself yet.
⚠
Right now the data limits it more than the model does. It needs more decisions, especially rejections, a log of exactly which version of the proposal the person saw, and ideally a reason when they say no. More rejections matter most.
06 · Where the human stays

It makes one narrow call,
with a probability attached

Sure enough
The DRM acts
only where it meets the precision target
else
▶
Not sure
A person decides
you, or whoever owns that call
then
▶
Loop
That answer trains it
every hand-off becomes the next training example

Agents are still good for exploring, and rules for what we can write down.
A DRM is meant for the repeated, text-shaped calls in between.

Where I might be wrong

The parts I'd want to double-check

1
the strong results are on routing and the hand-off gate. On ordered preferences and numbers it is only slightly better than a simple default, and on real approvals it isn't ready to automate yet
2
a 12–15% paraphrase flip rate means wording still moves the call. Until that drops, the same case written differently can land in a different lane
3
human labels carry human habits. Where an outcome exists, I'd rather learn from the outcome
4
a 98% target on a few hundred validation cases is a thin estimate. The lanes need re-checking as decisions accumulate