Self-improvement is only as trustworthy as its reward. Omnia refuses to
train against an uncalibrated judge: the reward must be a
calibrated judge (an aligned criterion in the
API), or a compositional matrix of them (below). An uncalibrated reward
trains a model toward the judge’s mistakes; the gate exists to prevent
exactly that.
How a run works
1
Pick a reward
A calibrated judge (TPR and TNR ≥ 0.9), or a compositional reward
— several weakly calibrated (≥ 0.75) judges plus deterministic
assertions, all required to pass. See
Choosing a reward.
2
Sample and score
For each prompt drawn from your logged traffic (tag-scoped), Omnia generates
N candidate answers (default 4, up to 8) at temperature, then scores every
candidate with the reward. Rollout and judge calls bill as normal usage.
3
Keep the winners
The single best judge-passed answer per prompt becomes one training example.
Prompts where no candidate passes are dropped; that filtering is the
optimization. A run needs at least 10 winning prompts; below that, training
would overfit noise, and the round stops with a clear reason.
4
Train
The winners become a supervised fine-tune dataset and a training job on the
base model, priced and wallet-gated like any fine-tune. Long jobs run
durably (they are not bound to a request timeout).
5
Prove it
The trained model is not trusted on faith. Bake it off against the base
on your holdout grades, with the same calibrated judge. If the corrected pass
rate improved on the holdout, the run worked; if not, it didn’t, and the
number tells you which. See Corrected pass rates.
Choosing a reward
A single calibrated judge is the simplest reward, but a clean 0.9 calibration is hard to reach for subjective, long-horizon work: an open-ended support agent, a negotiation, a multi-step task. For those, a compositional reward lets you train without a single judge that clears the full bar:- Combine several judges each at the weakly calibrated tier (≥ 0.75) with deterministic assertions (valid JSON, a required tool was called, a format held).
- A candidate is a winner only if every judge and every assertion passes.
Deterministic assertions cost nothing and cannot be gamed: lean on them.
Every assertion you can express (schema, tool-called, length, regex) is a
verifiable reward that tightens the bar for free.
Tuning a run
- Candidates per prompt (N): more samples per prompt means more chances to clear the reward, so a strict judge yields more winners at higher N. Raise it when a run stops short of the winner floor. Cost scales with N.
- Population: the tag whose traffic you sample from, the same population the reward judge is calibrated against. Training on support traffic with a support-calibrated judge; never mixing the two.
- When a run comes back thin: “only 4 prompts produced a judge-passed answer” is a real signal, not a failure: the current model rarely clears this bar. Raise N, ease the reward, or accept that this is a genuinely hard task where the lift will be large once training lands.
Deploying the result
A self-improved model is a fine-tune like any other. Deploy it to a dedicated endpoint and call it through the same API as any model, put it behind a model alias and let the quality-gated canary promote it on live traffic only if it holds up, or take the weights and run them yourself. See Owning your model.Why this is safe
Every guard in validated evals carries into training:- The reward is validated: calibrated judges only; uncalibrated judges are refused.
- The proof is held out: the trained model is measured on grades the judge never tuned against, so an improved number can’t be a fit.
- The gate is statistical: promotion to production runs through the same CI-lower-bound canary as any model change.
- Money is metered: rollout, judging, and the training job all bill and wallet-gate exactly like normal usage; nothing trains or ships silently.