Serblo-125M-Instruct

This is the finished version of Serblo-125M that is fine-tuned to actually chat. The trainer is ~250 lines of released PyTorch, no external training libraries. It answers in native Serbian, matches register, and it stops when it's done, which most 125M models don't.

>>> Kako se zoveš?
Zovem se Serblo. To je srpski jezički model...

>>> Gde si bio juče, brate?
Pa dobro sam sad, kod tebe se živi! Evo me tu gde jesam...

Training

  • Data: the serblo-sft train split, 54,156 instruction pairs across 9 task types, multi-model generated (DeepSeek capped for diversity), 100% Serbian ekavica-normalized.
  • Template: ChatML (<|im_start|> / <|im_end|>, ids reserved at tokenizer build). Loss is masked to assistant tokens plus the closing <|im_end|> only, the stop signal is supervised and that's why it ends its answers.
  • Run: 2 epochs = 105 steps at 0.13M tokens/step, peak LR 1e-4 cosine, ~25 minutes on one RTX 3060. Final masked val loss 2.1993.

The DPO null result

A DPO stage was trained on serblo-prefs (7,961 best-of-4 preference pairs over this model's own outputs) and evaluated blind against this SFT model on 200 held-out, task-stratified prompts by three judges: a native speaker (blind A/B), Claude Opus 4.8 and Gemini 3.5 Flash:

judge DPO share of decided votes
Claude Opus 49.7%
Gemini 48.5%
native speaker (creator, blind) parity (matched Gemini's pattern)

DPO at 125M on 8k pairs produced a style shift (shorter, safer answers) but no quality gain any judge preferred. Per the pre-registered rule, the SFT model ships as the flagship and the preference dataset ships for reproduction. My read is that capacity, not preference data, is the actual binding constraint at this size. Useful to know if you post-train tiny models.

Use

Same loading as the base model (see its card; embeddings tied, stored once). Chat format:

<|im_start|>user
Koji je glavni grad Srbije?<|im_end|>
<|im_start|>assistant

Generate until <|im_end|> (id 3). Recommended settings: temperature 0.7, top-k 200, repetition penalty 1.3. A ready-made barebones streaming REPL (chat.py) ships in the pipeline repo.

Limitations

Everything from the base card, plus: it was trained single-turn (multi-turn context works but degrades fast) and answers run 1–4 sentences by design. Treat it as a language demonstration and a fine-tuning base, not an information source. Identity training covers "who are you" (it deflects claims of being ChatGPT/Gemini/Claude) but isn't jailbreak-hardened; there was no safety tuning beyond data curation.

Credits

Full-dataset lineage: DeepSeek (42%), Gemini (17%), MiMo (14%), Hunyuan (12%), Claude Opus (11%), Kimi (2%). Note the training split caps DeepSeek at ~20% for diversity, both tables are in the dataset card. Built by Stefan Selakov (@sterlixlol).

Downloads last month
394
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for sterlixlol/serblo-125m-instruct

Finetuned
(1)
this model