--- license: apache-2.0 language: - en - pt base_model: DedeProGames/Kiyo-230M-Preview library_name: transformers pipeline_tag: text-generation tags: - kiyo - llama - sft - instruct - conversational - small-language-model - bilingual datasets: - HuggingFaceTB/smoltalk2 - HuggingFaceTB/smol-smoltalk - HuggingFaceH4/ultrachat_200k - allenai/Dolci-Instruct-SFT buckets: - DedeProGames/kiyo-230m-instruct-checkpoints ---

Kiyo-230M-Instruct

A compact English / Portuguese chat model, pre-trained from scratch and fine-tuned for conversation.

## 1. Introduction We are introducing **Kiyo-230M-Instruct**, a compact **230M-parameter chat model** from the Kiyo family. It starts from **Kiyo-230M-Preview**, a decoder-only language model pre-trained from scratch, and goes through full supervised fine-tuning on about **165,000 English and Portuguese conversations**, so it can follow instructions, hold multi-turn conversations, and answer in clean Markdown. Kiyo-230M-Instruct is made for people who enjoy small models: tinkerers, students, researchers, and anyone prototyping a lightweight assistant on modest hardware. It uses a modern Llama-style architecture (grouped-query attention, RoPE, SwiGLU, RMSNorm), a **2,048-token context window**, and a native ChatML-style chat template. > **Scope, honestly.** At 230M parameters this is a *small* model: a fun and fast companion for demos, experiments, and light chat, not a stand-in for multi-billion-parameter assistants. The sections below show where it stands today next to other small models. | | | |---|---| | 🧠 **Parameters** | 229.7M | | 🏗️ **Architecture** | Llama-style decoder · 32 layers · GQA (12 query / 4 KV heads) | | 📏 **Context** | 2,048 tokens | | 🌍 **Languages** | English, Portuguese | | 📦 **Weights** | BF16 safetensors · 459 MB | | 📜 **License** | Apache-2.0 | ## 2. Highlights - **Pre-trained from scratch, then fully fine-tuned.** The weights start at Kiyo-230M-Preview, which was trained from scratch (the tokenizer follows the SmolLM2 vocabulary). - **Bilingual conversations.** The SFT data is about 70% English and 30% Portuguese by token count, and in our quick comparison it was the only one of the four models that answered in fluent Portuguese. - **Compact.** 229.7M parameters: 459 MB in BF16, about 0.92 GB in FP32. - **Competitive for its size class.** In our four-benchmark comparison it sits in the same tier as SmolLM2-135M-Instruct and BananaMind-2-Pro and far ahead of Supra2-100M-Instruct (see Benchmarks), while being the largest of the four. - **Modern architecture.** 32 layers, grouped-query attention (12 query heads, 4 KV heads), RoPE, SwiGLU, RMSNorm, tied embeddings. - **Native chat template with multi-turn support** (`<|im_start|>` / `<|im_end|>`). - **Assistant-only loss.** 119M supervised assistant tokens, so training focuses on answering rather than echoing prompts. - **Open recipe.** Hyperparameters, data counts, and the run summary ship with the weights (`training_summary.json`). - **Easy to try.** A live chat demo is one click away in the Space. ## 3. 🧪 Benchmarks ![Kiyo-230M-Instruct benchmarks](./assets/benchmarks.webp) | Benchmark | Metric | **Kiyo-230M-Instruct** | Supra2-100M-Instruct | BananaMind-2-Pro-Preview-Chat | SmolLM2-135M-Instruct | |---|---|---:|---:|---:|---:| | *Parameters* | | *229.7M* | *100.7M* | *139.0M* | *134.5M* | | GPQA Diamond | pass@1 (198 questions × 5 samples) | **21.11** | 5.56 | 15.05 | 16.57 | | IFEval | prompt-level strict | 17.38 | 9.06 | 20.15 | **20.89** | | CaseReportBench | token F1 | **20.11** | 7.68 | 19.44 | 14.20 | | LiveBench Instruction Following | strict, 200 questions | 18.77 | 11.28 | 19.75 | **24.23** | Bold marks the best score in each row. Kiyo-230M-Instruct is also the largest model in this comparison. **How to read these numbers.** All four models ran under identical conditions, and the scores are small in absolute terms because these are small models. With a single run per benchmark, treat gaps of a point or two as ties. - **Overall:** Kiyo-230M-Instruct, SmolLM2-135M-Instruct, and BananaMind-2-Pro are in the same tier, and all three are far ahead of Supra2-100M-Instruct. - **CaseReportBench:** Kiyo and BananaMind are effectively tied (20.1 vs 19.4), ahead of SmolLM2 (14.2) and Supra2 (7.7). - **IFEval and LiveBench Instruction Following:** SmolLM2-135M-Instruct and BananaMind-2-Pro score higher than Kiyo-230M-Instruct in this run. - **GPQA Diamond:** a pass@1 counts an answer as wrong when no option letter can be extracted. Among the answers where a letter was found, every model sits close to the 25% chance level (Kiyo 25.3, Supra2 27.0, SmolLM2 23.4, BananaMind 26.1). This benchmark therefore mostly measures whether a small model replies in the requested format, not scientific knowledge.
Evaluation protocol - **Same conditions for every model:** same prompts, same sampling (temperature 0.1, top-k 50, repetition penalty 1.05), each model's own chat template, no system prompt, FP16 on a single NVIDIA T4, prompts truncated to 1,536 tokens, up to 512 new tokens (IFEval 1,024, GPQA 384, CaseReportBench 192). - **GPQA Diamond:** 198 questions, options shuffled deterministically, 5 samples per question at temperature 0.6, pass@1 over 990 attempts. Answers without a parseable option letter count as wrong. - **IFEval:** 541 prompts, prompt-level strict accuracy with the lm-evaluation-harness checkers. The harness counts a language-detection failure as "followed", which can inflate models that emit unreadable text. In our logs this only affected Supra2-100M-Instruct (its exact inflation was not measured), and it ranks last either way. - **LiveBench Instruction Following:** 200 questions from the current release, no LLM judge; the per-question score is the mean of "all instructions followed" and "fraction of instructions followed" (strict). - **CaseReportBench:** clinical dense extraction, 138 case reports × 14 categories (1,932 prompts, 929 with gold spans). Score: token-level F1 on the pairs that have gold spans. The paper's token-set ratio is not used because it can reach 100 for degenerate answers. The 1,003 pairs without gold spans are not scored; Kiyo, BananaMind, and SmolLM2 almost never answer with an empty list for them (0.1% to 0.5%), so this benchmark rewards extraction, not knowing when to abstain. - Single run, single seed: treat differences of a point or two as noise.
CaseReportBench: token F1 by category | Category | Kiyo-230M-Instruct | Supra2-100M-Instruct | BananaMind-2-Pro-Preview-Chat | SmolLM2-135M-Instruct | |---|---:|---:|---:|---:| | History & chief complaint | 44.13 | 17.30 | 39.65 | 31.25 | | Laboratory & imaging | 24.95 | 9.59 | 23.50 | 17.28 | | Dermatological | 23.37 | 7.56 | 20.90 | 13.20 | | Pregnancy | 21.07 | 6.47 | 22.81 | 19.63 | | Neurological | 19.54 | 7.61 | 20.33 | 12.68 | | Genitourinary | 13.63 | 6.57 | 16.41 | 9.71 | | Eye, ear, nose & throat | 13.20 | 4.80 | 11.00 | 7.03 | | Musculoskeletal | 11.70 | 4.34 | 10.87 | 9.07 | | Endocrine | 11.22 | 3.85 | 13.37 | 8.75 | | Vitals & hematology | 10.58 | 3.81 | 11.83 | 8.65 | | Cardiovascular | 9.67 | 5.01 | 10.29 | 6.95 | | Gastrointestinal | 8.01 | 3.70 | 8.28 | 7.73 | | Respiratory | 7.98 | 1.18 | 8.25 | 5.03 | | Lymphatic | 2.17 | 0.60 | 3.58 | 3.53 |
## 4. 💬 Example conversations A few of the model's best responses, hand-picked from a 24-prompt test and left unedited (shortened only where marked with […]). They were generated with near-greedy sampling (temperature 0.1, top-k 50, repetition penalty 1.05) so that they are reproducible; for everyday chat we recommend temperature 0.7 and top-p 0.9, which gives more varied answers. The full picture is in the side-by-side results below. **Follow a precise instruction** > **You:** Explain what a language model is in two sentences. > > **Kiyo:** A language model is a computer program that uses natural language processing (NLP) to understand and generate human-like text, such as speech, text messages, or even written documents. It uses algorithms to analyze the context, meaning, and tone of the text to generate a coherent and accurate representation of the message. **Change the tone** > **You:** Rewrite this sentence in a more formal tone: 'hey, can u send me the report asap?' > > **Kiyo:** Certainly! Here’s a more formal version of your sentence: > > 'Could you please send me the report at your earliest convenience?' **Speak Portuguese** > **Você:** Me explique em poucas frases o que é inteligência artificial. > > **Kiyo:** A inteligência artificial é um campo da ciência que se concentra em desenvolver sistemas capazes de processar, interpretar e adaptar informações de maneira eficiente e sem a necessidade de especialistas humanos. Ela é fundamental para a tomada de decisões, a resolução de problemas complexos e a criação de produtos e serviços que atendam às necessidades do mercado. A inteligência artificial tem se tornado cada vez mais relevante e amplamente utilizada, permitindo que indivíduos e empresas se comuniquem de forma mais eficaz e eficiente. > **Você:** Me ajuda a organizar meus estudos? > > **Kiyo:** Claro, posso ajudá-lo a organizar seus estudos! Aqui estão algumas dicas para te ajudar: > > 1. **Defina seu objetivo**: Antes de começar, é importante ter claro o que você deseja alcançar com seus estudos. Isso ajudará a guiar suas decisões e a manter a motivação. > 2. **Escolha um local**: Escolha um espaço tranquilo e confortável para estudar. Considere a disponibilidade das instalações, a disponibilidade de equipamentos necessários e a disponibilidade de acomodações. > 3. **Organize suas tarefas**: Organize suas tarefas diariamente. Isso inclui definir horários, prioridades e prazos. Use ferramentas de gerenciamento de tarefas para manter o controle do progresso. > > […] ### Side-by-side sanity test The same 24 prompts (22 in English, 2 in Portuguese) were sent to all four models with identical settings. The checks are simple and automatic (format and key facts), so this is a quick sanity test, not a benchmark: single run, near-greedy sampling, FP16 on a T4. | Model | English checks (of 16) | Portuguese checks (of 2) | Average answer length (tokens) | Answers that hit the 256-token limit (of 24) | Repetition | |---|---:|---:|---:|---:|---:| | **Kiyo-230M-Instruct** | 6 | **2** | 101 | 3 | 0.07 | | Supra2-100M-Instruct | 5 | 0 | 256 | 24 | 0.55 | | SmolLM2-135M-Instruct | **10** | 0 | 104 | 4 | **0.03** | | BananaMind-2-Pro-Preview-Chat | 6 | 0 | 125 | 3 | 0.10 | *Repetition = share of repeated word trigrams in the answers (0 means no repetition).* - **English:** SmolLM2-135M-Instruct passed the most checks (10 of 16). Kiyo-230M-Instruct and BananaMind-2-Pro passed 6, and Supra2-100M-Instruct passed 5 while repeating itself until the token limit in every answer. - **Portuguese:** Kiyo-230M-Instruct was the only model that answered in fluent Portuguese (2 of 2). The other models answered in English, mixed languages, or repeated the prompt. - **At this size, everyone struggles** with arithmetic and with strict format instructions such as all-caps answers or an exact closing phrase.
What the 18 checks look at | Prompt | Check | |---|---| | Capital of France | mentions Paris | | Author of Romeo and Juliet | mentions Shakespeare | | Chemical symbol of gold | contains "Au" | | 17 + 25 | contains 42 | | Train: 60 km in 45 minutes | contains 80 | | Three sleep tips as a bullet list | exactly 3 list items | | Python Fibonacci function | code parses and defines a Fibonacci function | | "Is the Earth flat? Reply with only yes or no." | the answer is only "no" | | Five fruits, lowercase, comma-separated | exactly that format, no other text | | Polite email asking for Friday off | mentions Friday, at least 25 words | | Photosynthesis for a 10-year-old | exactly 3 sentences, mentions plants and sun/light | | Five coffee-shop names | at least 5 list items | | Ideal weekend in at most 30 words | 30 words or fewer | | JSON object with name and age | valid JSON with both keys | | Study tip ending with "Hope this helps!" | ends with that exact phrase | | One sentence about the moon in capitals | all capitals | | Two Portuguese prompts | real Portuguese, not a loop, not English/French/Spanish | Six more prompts (greeting, language model, poem, study plan, formal rewrite, summary) are read by eye and not scored.
## 5. 🖥️ CPU evaluation Small models are meant to run anywhere, so we also measured how they behave on a plain CPU, with no GPU involved. | Model | Params | Decode, 1 stream (tokens/s) | Decode, batch of 8 (tokens/s) | Prefill (tokens/s) | Peak RAM (FP32) | |---|---:|---:|---:|---:|---:| | **Kiyo-230M-Instruct** | 229.7M | 13.1 | 55.1 | 339 | 1.44 GB | | Supra2-100M-Instruct | 100.7M | 27.4 | 121.8 | 989 | 0.93 GB | | SmolLM2-135M-Instruct | 134.5M | 19.7 | 82.5 | 534 | 1.12 GB | | BananaMind-2-Pro-Preview-Chat | 139.0M | 16.0 | 53.6 | 465 | 1.04 GB | > Measured on 4 vCPUs (Intel Xeon @ 2.8 GHz, AVX-512 VNNI), PyTorch CPU with Transformers 5.19, FP32, 4 threads. Decode = 128 new tokens after a 64-token prompt; prefill = one 512-token prompt; median of 2 to 3 runs. Kiyo's row was measured on an architecture-identical model with random weights, because decoding speed does not depend on the weight values. Kiyo-230M-Instruct is the largest model in this comparison, so it is also the slowest per token on CPU: about 13 tokens/s for a single stream here, or roughly 20 seconds for a 256-token answer. ## 6. ⚡ Quickstart ```bash pip install -U "transformers>=5" torch ``` ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM repo = "DedeProGames/Kiyo-230M-Instruct" tokenizer = AutoTokenizer.from_pretrained(repo) model = AutoModelForCausalLM.from_pretrained(repo, dtype=torch.float32) # FP32 is the fastest option on most CPUs; use bfloat16 on GPU chat = [{"role": "user", "content": "Can you help me organize my study plan?"}] inputs = tokenizer.apply_chat_template(chat, add_generation_prompt=True, return_tensors="pt", return_dict=True) output = model.generate( **inputs, max_new_tokens=256, do_sample=True, temperature=0.7, top_p=0.9, repetition_penalty=1.05, eos_token_id=2, # <|im_end|> pad_token_id=0, # <|endoftext|> ) print(tokenizer.decode(output[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True)) ``` **Multi-turn chat.** Keep the conversation history in the prompt and make sure prompt + answer stay within 2,048 tokens: ```python chat = [ {"role": "user", "content": "Me ajuda a organizar meus estudos?"}, {"role": "assistant", "content": "Claro! Quais matérias você quer estudar e quanto tempo tem por dia?"}, {"role": "user", "content": "Matemática e inglês, cerca de 2 horas por dia."}, ] inputs = tokenizer.apply_chat_template(chat, add_generation_prompt=True, return_tensors="pt", return_dict=True) ``` **Prompt format** (produced automatically by the chat template): ```text <|im_start|>user Hello!<|im_end|> <|im_start|>assistant ``` | Setting | Recommended value | |---|---| | `temperature` | 0.7 | | `top_p` | 0.9 | | `repetition_penalty` | 1.05 | | `max_new_tokens` | 256 | ## 7. 🧱 Model details | Field | Value | |---|---:| | Parameters | 229.7M | | Architecture | Llama-style decoder (`LlamaForCausalLM`) | | Layers | 32 | | Hidden size | 768 | | Intermediate size | 1,920 | | Attention heads / KV heads | 12 / 4 (grouped-query attention) | | Head dimension | 64 | | Activation | SwiGLU | | Normalization | RMSNorm | | Positional encoding | RoPE (θ = 10,000) | | Vocabulary | 49,152 (GPT-2 style BPE) | | Context length | 2,048 | | Embeddings | Tied input/output | | Special tokens | `<\|im_start\|>`, `<\|im_end\|>` (EOS, id 2), `<\|endoftext\|>` (PAD, id 0) | | Weight format | BF16 safetensors (459 MB) | ## 8. 📚 Training **Base model.** [Kiyo-230M-Preview](https://huggingface.co/DedeProGames/Kiyo-230M-Preview), an intermediate checkpoint of a from-scratch pre-training run (revision `d9e0930`). See its card for the pre-training data and token budget. **Supervised fine-tuning** (run `sft-20261013-v1`): | Field | Value | |---|---:| | Prepared data | 165,735 conversations · 149.4M tokens · 119.2M supervised (assistant) tokens | | Multi-turn share | 73.8M of the 149.4M tokens | | Language mix (tokens) | English 104.4M (70%) · Portuguese 45.0M (30%) | | Epochs / steps | 2 epochs · 10,360 steps | | Effective batch size | 32 (8 × 4 gradient accumulation) | | Learning rate | 1e-4, anchored cosine schedule | | Precision | BF16 activations, FP32 master weights | | Context | 2,048 tokens | | Training time | about 4.2 hours | | Held-out assistant-token loss | 1.292 (training loss 1.260) | | Software | PyTorch 2.10.0, Transformers 5.19.0, TRL 1.15.0 | The weights are exported as BF16 safetensors. Complete optimizer, scheduler, and RNG training checkpoints are kept in a private bucket (`DedeProGames/kiyo-230m-instruct-checkpoints`).
Data mixture (share of sequence tokens) | Source | Share | |---|---:| | Portuguese conversations | 30.1% | | SmolTalk2 · chat | 29.5% | | UltraChat 200k | 15.1% | | smol-smoltalk (core) | 11.0% | | Dolci-Instruct-SFT | 10.0% | | SmolTalk2 · rewrite | 4.0% | | SmolTalk2 · everyday | 0.2% |
## 9. ⚠️ Intended use and limitations **Good for:** demos, teaching, research on small language models, fine-tuning experiments, and lightweight English / Portuguese chat prototypes. **Keep in mind:** - It is a small model. Expect factual mistakes, invented details, arithmetic errors, weak multi-step reasoning, repetition in open-ended text such as poems, and a tendency to agree with false premises. Treat answers as drafts to verify. The benchmark scores above are low in absolute terms. - The context window is 2,048 tokens, shared between your prompt and the answer. - English and Portuguese are the target languages; other languages are not supported. - It was fine-tuned from an intermediate pre-training checkpoint, not a fully trained one. - It inherits the biases and gaps of its pre-training and fine-tuning data. No dedicated safety evaluation is documented, so do not use it for medical, legal, financial, or other high-stakes decisions. ## 10. 📜 Data attribution - **SmolTalk2** and **smol-smoltalk**: HuggingFaceTB, preserving contributing source terms. - **UltraChat 200k**: HuggingFaceH4, MIT. - **Dolci-Instruct-SFT**: AllenAI, ODC-BY collection plus contributing source terms. The mixture uses only existing public teacher responses. No benchmark transcripts were used for SFT. ## 11. Citation ```bibtex @misc{kiyo230minstruct2026, title = {Kiyo-230M-Instruct: a compact English/Portuguese chat model trained from scratch}, author = {DedeProGames}, year = {2026}, howpublished = {\url{https://huggingface.co/DedeProGames/Kiyo-230M-Instruct}} } ``` ## 12. Acknowledgements Thanks to HuggingFaceTB (the SmolLM2 architecture family and vocabulary, and the SmolTalk data), HuggingFaceH4 (UltraChat), and AllenAI (Dolci). Benchmarks were run with the lm-evaluation-harness IFEval checkers, GPQA, LiveBench, and CaseReportBench.

Made with ❤️ by DedeProGames