fragment-2 (v3.0.0)
A ~36M-parameter System-One decision model by FrameXlabs β built on the original Fragment build (fragment-1 v2.29) and trained entirely from scratch: own BPE tokenizer, own encoder, own RLCD loop. No pretrained weights, no fine-tune of Laya or any other model.
Give it a state (any text) and typed questions; it returns typed answers with calibrated probabilities in a single forward pass β no autoregression, no text generation, no chain-of-thought, nothing to parse and nothing to hallucinate.
Five question types (Laya has 3): choice, score, noul, multi,
rank β with up to 16 options per question (trained 14-way on DBpedia).
Weights
This repository is the release target of the training notebook β the first trained checkpoint is published here automatically when the notebook is run (Stage 10, "automatic release"):
fragment-2-colab.ipynb
β one free Google Colab T4 run (~2.5 h) trains the model from scratch and
publishes weights + tokenizer + config + measured model card to this repo
(and to GitHub). f3.py and f3_config.json are already here: the runtime
is ready the moment weights land.
vs Laya (Convai Innovations, Sep 2026)
| Laya | fragment-2 | |
|---|---|---|
| Origin | fine-tuned ModernBERT / mmBERT | from scratch |
| Params | 421M (EN) / 322M (multi) | ~36M |
| Question types | 3 | 5 (+ multi, rank) |
| Options per question | weak beyond 20 | up to 16, trained 14-way |
| Calibration | raw ECE 0.213 β 0.081 tuned | RLCD + per-type temperature |
| Zero-shot | 0.362 reported | measured on IMDb + SST-5 (never trained on) |
| Reproducibility | weights only | weights + tokenizer + full notebook |
Honest note: Laya-multilingual serves 100+ languages; fragment-2 is English-first (char-level fallback alphabet for other scripts in the tokenizer). Multilingual is the next fragment release, on this same build.
Architecture (the original F2Net, scaled and modernized)
| fragment-1 (v2.29) | fragment-2 (v3) | |
|---|---|---|
| layers / width | 6 Β· d=256 | 10 Β· d=384 |
| attention | 4 heads, learned pos | 6 heads, RoPE |
| FFN | GELU 1024 | SwiGLU 1536 |
| vocab / context | 16,384 / 192 | 32,768 / 256 |
| params | 8.98M | ~36M |
Training = the original three-stage recipe, extended:
- Supervised warmup β CE / BCE / Plackett-Luce over ~470k typed items (SST-2, BoolQ, Amazon polarity, AG News, DBpedia-14, Yelp-5, plus new multi + rank constructions)
- RLCD v2 β GRPO-style Gaussian logit-noise exploration with strictly proper scoring rules as reward (log score, RPS, Brier, PL log-likelihood); honest probabilities are the unique reward maximiser
- Per-type temperature calibration on a held-out split
Quickstart (after weights land)
from f3 import Fragment
m = Fragment.from_pretrained("FrameXlabs/fragment-2")
res = m.decide(
state="Hi, we were billed twice for March. Please refund the duplicate today.",
questions={
"refund": {"type": "noul",
"instructions": "Does the user explicitly request a refund?"},
"urgency": {"type": "score",
"instructions": "How urgent is this request?",
"criteria": ["not urgent", "soon", "critical or blocking"]},
})
print(res["answers"]["refund"]["noul"]) # calibrated P(yes)
Lineage
fragment-1 v2.29 (8.98M, CPU-trained) β fragment-2 v3 (same recipe, scaled, GPU-trained). One build, no graveyard.
β FrameXlabs, a group of students who want to build something big.