Views
No views yet
// LABEL: description comment, it generates the instrument block that belongs between them.| Params | 5,548,800 (~5.5M) |
| Architecture | Decoder-only transformer: RMSNorm, GeLU MLP, tied I/O embeddings, causal SDPA |
d_model | 320 |
n_layers | 4 |
n_heads | 5 (d_head = 64) |
d_ff | 1280 |
max_seq_len | 1536 |
| Vocab | 435 (256 bytes + 4 control + 3 FIM sentinels + 172 Strudel function tokens) |
| FIM layout | PSM — <FIM_PRE> prefix <FIM_SUF> suffix <FIM_MID> middle <EOT> |
| Released weights | EMA shadow (decay 0.999) |
| Phase | Dataset | Steps | LR peak | Val loss (EMA) |
|---|---|---|---|---|
| 0 — pretrain | sonnet multimask (53K examples) | 20,000 | 3e-4 | 0.2200 |
| 1 — continue | sonnet + haiku multimask (86K examples) | 20,000 | 3e-4 | 0.1963 |
| 2 — sonnet fine-tune | sonnet multimask (53K examples) | 5,000 | 1e-4 | 0.1651 |
<FIM_MID> (inclusive of <EOT>) so the model learns when to stop.best.pt — PyTorch checkpoint ({model, model_cfg, step, val_loss, from_ema})config.json — hyperparameters + training metadatastrudel_tokens.py — tokenizer (byte-level + Strudel function tokens)train.py / train_infill.py — model + training loopinfill_generate.py — FIM decodingserve_infill.py — HTTP server for the Strudel REPL1hf download hidude562/strudel-fim-5m --local-dir ./strudel-fim-5m
2cd ./strudel-fim-5m
3python3 serve_infill.py --ckpt best.pt --port 8081http://localhost:8081.1POST /infill
2{
3 "text": "<full Strudel program containing a `// LABEL: description` line>",
4 "line": <1-indexed line number of the label comment>,
5 "temperature": 0.4,
6 "top_k": 10,
7 "max_new_tokens": 120
8}{"text": "<full program with the masked block filled in>", "ms": 1039, "request_id": "..."}/infill-stream (Server-Sent Events).max_new_tokens=120).stack(...) compositions.