Certo v2.2 (Ettin-encoder-1B) β UNDERTRAINED checkpoint, for continuation
Honest status: this is an under-trained, one-epoch checkpoint that currently performs worse than the 150M base model (certo v2.1). It is published so training can be continued, not for use as-is.
What it is
A generic decision model on the Ettin-encoder-1B
backbone (a ~1B-parameter ModernBERT-architecture encoder). Non-generative: scores supplied runtime
options and returns a calibrated distribution. Trained on the representative real+synthetic corpus
altslate/certo-decisions-v2 (v2.1, 971k).
Temperature-calibrated (T=1.33).
Why it underperforms (be clear about this)
It ran only 1 epoch (a 1B model on 4Γ32 GB is 6Γ slower than base; 3 epochs β 2.7 days). It did not
converge: final training loss 0.458 vs the base model's **0.34** after 3 epochs. Under-training
shows up as both lower accuracy and poor calibration.
JevBench public tasks (official certo_local adapter, calibrated):
| easy | original | hard | |
|---|---|---|---|
| v2.2 (Ettin-1B, 1 ep) | 0.312 | 0.319 | 0.297 |
| ECE | 0.33 | 0.33 | 0.42 |
| v2.1 (base, 3 ep) for reference | 0.583 | 0.389 | 0.297 |
So on this budget the 1B backbone is not an improvement β the result is dominated by under-training, not by model size.
Intended use: continue training
# warm-start and train more epochs (see AltSlate-Labs/certo train_v2.py --init)
python train_v2.py <corpus> --backbone jhu-clsp/ettin-encoder-1b --init <this_checkpoint> \
--epochs 2 --bs 16 --grad_checkpoint
Load for inference (works, but expect the weak numbers above):
from certo import DecisionModel
m = DecisionModel.load("altslate/certo-decision-v2.2", revision="main")
Code/recipe: github.com/AltSlate-Labs/certo.