Nagi-Smol
System One typed-decision model (choice / score / noul) — M2′ dual encoder (ModernBERT-large 421M) + option tower. Independent per-option encoding + bilinear MLP score head. Soft probability labels. No text generation.
Also known as: Track-S cycle-2 / hail_s_c2 / nagi-t4s-c2.
Load
import torch
from nagi.config import load_config
from nagi.model import build_model
from nagi.serve.predict import Nagi
cfg = load_config("config.snapshot.yaml") # shipped in this repo
model = build_model(cfg)
state = torch.load("model.pt", map_location="cpu", weights_only=True)
model.load_state_dict(state, strict=False)
nagi = Nagi(model) # .system_one(state, questions) -> answers with calibrated probs
Source: nagisanzenin/nagi (src/nagi/serve/predict.py).
gold_ltout LTO (2700, 6 public unseen tasks)
| Nagi-Smol | Nagi-Big | Laya | Jev | |
|---|---|---|---|---|
| LTO hard | 0.462 | 0.709 | ~0.35 | 0.773 |
| ECE raw | 0.070 | — | 0.081 | 0.121 |
| p50 latency | 11 ms (H100) | 84 ms (L4) | 33 ms | 501 ms (API) |
Beats Laya on LTO + latency. 45× faster than Jev API. Honest gap vs Jev on LTO.
Train (cycle-2)
- 22,764 rows / 1,443 schemas — mix 28% public / 50% hail-C / 22% burst+synth (restores public weight after dilution regression)
- B1 real:
render_state_context= definition + 2 demos + state + question - 3 epochs · lr_encoder 1.5e-5 · lr_head 6e-5 · BF16 · state_max_len 512
- H100 · prior hail_s (same arch, diluted mix) LTO 0.381 → 0.462 after remix+B1
Sibling
- Nagi-Big — Qwen3.5-4B PiSSA, LTO 0.709
- nagi-t4-m2p-v0 — prior T4 M2′, LTO 0.481