Chitonga chat model, run 3 (three-stage)
A small bilingual chat model for Chitonga (Tonga of southern Zambia, ISO 639-3 toi) and English. It is built on
Google's Gemma 4 E4B, about 4 billion parameters. In the paper below it is called "the three-stage model (run 3)".
It runs on a mini PC: about 18 tokens per second on the integrated graphics of a Beelink mini PC with llama.cpp
(Q4_K_M), with the first token after about 0.36 s.
How it was trained
Training had three stages:
- Continued pretraining. The Gemma 4 E4B base model was trained further on 7.63 million tokens of Chitonga and English. That is 6.71 million Chitonga tokens, about 30% of them church register (Bible and church texts), plus English educational web text. The rest of the Chitonga came from school books, typed novels and cultural books, collected texts and transcribed speech. The adaptation was a LoRA of rank 128 plus a fully trained token embedding.
- Merge. The difference between Gemma 4 E4B instruct and base (the instruction difference) was added back in full.
- Conversation training. A LoRA of rank 64, trained for one pass over about 18 million tokens. The data was real Chitonga tasks from books and speakers (translation, comprehension, dialogue), grammar drills built from attested words by a rule-based engine that never invents words, simple conversations and an English replay.
The whole run cost USD 7.10 on one rented GPU.
Intended use and limits
This is a proof of concept released with the paper. It is for research and for evaluating methods for low-resource languages. It is not yet usable for unsupervised teaching or any unsupervised use with learners.
- On a 68-item education task set it gave an answer with no automatic alarm on 16 items. The target for usefulness, judged blind by teachers, is 70%. An alarm-free answer is not necessarily a correct one.
- It still asks back ("Nsemvwide ...") when it should simply answer. It sometimes opens with "Inzya" (yes) where no question was asked, and long answers can repeat themselves.
- It sometimes writes Nyanja or Bemba spellings, or confuses content words.
- Thinking mode (Gemma 4's reasoning switch) was not trained. Forced on, it made answers worse.
- No native-speaker judgement of this model was made after the earlier versions. The figures in the paper come from automatic checks and Claude agents. Treat every output as a draft for a Chitonga speaker to check.
- Not for medical, legal or safety instructions.
Newer chat models (merge-0.5, merge-1.0 and their average) are available on request while the work continues.
Files
| file | what |
|---|---|
chitonga-chat-run3-Q4_K_M.gguf | 4-bit GGUF for llama.cpp (5.3 GB): the version measured in the paper's speed figures |
chitonga-chat-run3-Q8_0.gguf | 8-bit GGUF (8.0 GB) |
adapters/stage1/ | the stage 1 adapter: LoRA (adapter_model.safetensors, rank 128, alpha 256) and the token-embedding difference (embed_delta_fp32.safetensors), both relative to google/gemma-4-E4B |
adapters/stage3/ | the stage 3 conversation LoRA (rank 64, alpha 128), trained on the merged model of stage 2 |
To rebuild the full-precision model from the adapters, work in fp32 and round to bf16 once:
- Take
google/gemma-4-E4B-it. - For every module in
adapters/stage1, add the LoRA product B·A·(alpha/r), and addembed_delta_fp32to the token embedding. That is stage 2: instruct + (stage 1 − base). - Apply and merge
adapters/stage3with PEFT.
The merge scripts are available on request.
How to run it
With llama.cpp:
llama-server -m chitonga-chat-run3-Q4_K_M.gguf -ngl 99 -c 4096 --reasoning off
# then POST OpenAI-style chat requests to http://127.0.0.1:8080/v1/chat/completions
or llama-cli -m chitonga-chat-run3-Q4_K_M.gguf -cnv --reasoning off. Greedy decoding (temperature 0) was used in all
the paper's tests.
Example prompts:
Translate into Chitonga (the Tonga language of southern Zambia). Reply with the translation only.\n\nThe children are going to school.In Chitonga, ask whether the nshima is ready. Reply in Chitonga only.
Licence
CC BY-NC 4.0: free for non-commercial use, with attribution. The model is a derivative of Google's Gemma 4
(google/gemma-4-E4B and google/gemma-4-E4B-it), which is licensed under the Apache License 2.0. That licence and
notice are kept in LICENSE.md as it requires. No training data and no test sets are included in this repository.
Citation
Lindinger, C. J. (2026). No Data Centre Required: Adapting Open Models to Chitonga with Paid Bilingual Speakers, Printed Books and a Verifying Harness (preprint). Zenodo. https://doi.org/10.5281/zenodo.23487563
@misc{lindinger2026chitonga,
author = {Lindinger, Christoph Johannes},
title = {No Data Centre Required: Adapting Open Models to Chitonga with Paid Bilingual Speakers, Printed Books and a Verifying Harness},
year = {2026},
publisher = {Zenodo},
note = {Preprint},
doi = {10.5281/zenodo.23487563}
}
Contact
Christoph Lindinger, ZamAi (zamai.pro): chris@zamai.pro. AI agents can write to agent@zamai.pro.