Priors over priors
Why we are called Hyperpriors: what a hyperprior means in Bayesian terms, and why the control plane for production AI is exactly that — beliefs about how a system should hold beliefs.
Safety · Observability

Essay
·Safety·6 min read
A production AI system does not need to be right every time; it needs to know when it might be wrong and hand those cases to a person. Confidence signals, threshold calibration, escalation ergonomics, and the discipline of not crying wolf.
By Dr Gareth Roberts

The question that decides whether an LLM system can be deployed on consequential work is rarely “is the model accurate enough”. It is “does the system know when it is likely to be wrong, and what does it do about it”. A model that is right 94% of the time and silent about the rest is a liability; the same model, routing most of that 6% to a person, is a workforce multiplier.
That routing decision — automate, or escalate — is a piece of engineering in its own right. It has inputs (confidence signals), a policy (thresholds), a destination (a human with a queue), and a failure mode all of its own (alert fatigue). Teams that treat it as an afterthought end up in one of two ditches: automating errors, or drowning reviewers until they stop looking.
There is no single number that tells you a model is uncertain. There is a family of signals, each cheap or expensive, each with a characteristic way of lying to you.
Token-level probabilities. Where the API exposes them, logprobs over the answer tokens are the cheapest signal available. They are useful for narrow, constrained outputs — a classification label, a yes/no gate — and progressively less meaningful as outputs get longer and more open-ended, where high per-token confidence can coexist with a confidently wrong answer. They are also model-specific: swap the model and every threshold you calibrated is void.
Verbalised confidence. Asking the model to rate its own certainty is popular because it is easy. Treat it as weak evidence: self-reported confidence is poorly calibrated out of the box, sensitive to prompt phrasing, and prone to the same failure as the answer itself — a model that has misread the question will misreport its confidence with equal fluency. It earns a place only after you have measured its calibration on your own traffic.
Verifier models. A second model (or the same model with a checking prompt) that grades the first model’s output against the source material. More expensive, but it changes vantage point: the verifier sees the answer as an artefact to inspect rather than a sequence to continue, and that catches a different class of error. The limit is correlation — two calls to the same base model share blind spots, so a verifier is a real second opinion only to the degree that its prompt, inputs, or model differ.
Agreement signals. Sample the answer more than once and measure consistency; or, in retrieval systems, measure whether the answer is actually entailed by the retrieved passages. Disagreement between samples, or an answer that floats free of its citations, is one of the more reliable uncertainty indicators available — and one of the more expensive.
Behavioural signals. These are free and widely ignored: the model needed three attempts to produce parseable output; a tool call failed twice; the conversation has looped; the user has rephrased the same request a third time. None of these are confidence scores, but all of them are evidence that this interaction is off the happy path, and routing policies should consume them.
The practical pattern is to combine two or three signals with different failure modes — typically one cheap intrinsic signal, one behavioural signal, and one verifier on the traffic that matters — and to accept that the combination is a heuristic to be validated empirically, not a probability you can reason about from the armchair.
A threshold is a business decision wearing a statistical costume. Setting it requires exactly one thing most teams skip: a labelled sample of production-representative traffic, scored by the same signals the router will see, with ground truth about which outputs were acceptable.
With that in hand, the procedure is unglamorous:
A routing policy is worth writing down as configuration rather than burying in code, because the people who need to review it are not always the people who wrote it:
route: refunds
signals: [verifier_score, retry_count, amount]
rules:
- if: amount > 250
then: escalate # policy, regardless of confidence
- if: verifier_score < 0.72 or retry_count >= 2
then: escalate
- else: automate
review_slo: 15m
Note the first rule: some escalations are not about uncertainty at all. High-consequence actions go to a person even when every signal is green, because confidence is an estimate and some mistakes are not priced in estimates.
Where escalations land determines whether the mechanism works. The commonest failure is handing the reviewer a raw transcript and a vague instruction to “check this” — converting a two-minute decision into a twenty-minute reconstruction, to which reviewers respond the way any rational person does: they skim.
A well-designed escalation is a case file, assembled by the system:
Latency is part of ergonomics. An escalation path with a four-hour median response time will be routed around — by product managers who quietly raise thresholds, and by users who abandon the channel. If you cannot staff the queue to its SLO, you have a place where cases go to age, not an escalation path.
Every escalation spends reviewer attention, and attention is a depleting resource with a sharp failure mode. When the queue fills with cases the model would have handled correctly, reviewers learn — accurately — that most alerts are noise. Approval becomes reflexive. At that point you have the cost of human review and the safety of none, which is the worst configuration available.
Treat the queue’s precision as a first-class metric: of the cases escalated, what fraction actually needed a human to change the outcome? If that number sits below something like one in five, the routing layer is training its reviewers to rubber-stamp. The corrective levers, in rough order of preference:
The steady state to aim for is a queue where most items genuinely need a person, resolved within its SLO, whose outcomes flow back into evaluation and threshold calibration. Get there and escalation stops being the embarrassing exit from automation. It is the control loop that lets you automate more next quarter than you safely could this one.
Share
More
Why we are called Hyperpriors: what a hyperprior means in Bayesian terms, and why the control plane for production AI is exactly that — beliefs about how a system should hold beliefs.
Safety · Observability

An agent harness is the structured runtime between a model and the world: tool mediation, context management, retries, fallbacks, and human escalation. A prompt and a while-loop is not an architecture.
Harnesses · Safety

No single control makes an LLM product safe, and none needs to. A layered architecture — input mediation, capability scoping, output enforcement, human review, audit — works because the layers fail independently. A whitepaper on building it deliberately.
Safety · Whitepaper
