We provide examples for how to run this with Huggingface or vLLM:
Huggingface (Recommended for beginners)
First, make sure transformers is installed on your machine.
pip install transformers
Then run the following Python code to generate a response from the LLM.
python
1from transformers import pipeline
23generator = pipeline(model="ptrdvn/kakugo-3B-kmr", task="text-generation")45user_input =input("Please enter your input to the model in Northern Kurdish:")67do_reasoning =False89open_thinking_tag ="<think>"10close_thinking_tag ="</think>"1112if do_reasoning:13 sys_msg =f"Before you respond, first think about your response and enclose your thinking process in {open_thinking_tag} and {close_thinking_tag} delimiters."14else:15 sys_msg ="Be concise in your responses."1617message =[18{"role":"system","content": sys_msg},19{"role":"user","content": user_input}20]2122output = generator(23 message,24 do_sample=False,25 repetition_penalty=1.05,26)2728model_response = output[0]["generated_text"][-1]["content"]2930if do_reasoning:31 model_response = model_response.split(close_thinking_tag)[-1]3233print(model_response)
N.B. - We recommend using a repetition_penalty of 1.05 as sometimes the model can stuck in a loop of generating repetitive text when generating low-resource languages.
You can set do_reasoning to be either True or False to turn "thinking mode" on or off, respectively. If the model is used in thinking mode, then it will take longer to generate a response, but may lead to a better generated response.
This mode is still experimental, so try both using and not using it for your use-case.
vLLM (Recommended for performance)
First, make sure vllm is installed on your machine.
pip install vllm
Then run the following Python code to generate a response from the LLM.
python
1from vllm import LLM, SamplingParams
2llm = LLM(model="ptrdvn/kakugo-3B-kmr")34user_input =input("Please enter your input to the model in Northern Kurdish:")56do_reasoning =True78open_thinking_tag ="<think>"9close_thinking_tag ="</think>"1011if do_reasoning:12 sys_msg =f"Before you respond, first think about your response and enclose your thinking process in {open_thinking_tag} and {close_thinking_tag} delimiters."13else:14 sys_msg ="Be concise in your responses."1516sampling_params = SamplingParams(temperature=0, repetition_penalty=1.05, max_tokens=2048)1718messages =[[19{"role":"system","content": sys_msg},20{"role":"user","content": user_input}21]]2223output = llm.chat(messages, sampling_params)2425model_response = output[0].outputs[0].text
2627if do_reasoning:28 model_response = model_response.split(close_thinking_tag)[-1]2930print(model_response)
N.B. - When using vllm for inference of multiple inputs, we recommend inputting them all at once. I.e., add more items to the outer list of the messages variable in the above script. More on vLLM optimization.
We recommend using a repetition_penalty of 1.05 as sometimes the model can stuck in a loop of generating repetitive text when generating low-resource languages.
You can set do_reasoning to be either True or False to turn "thinking mode" on or off, respectively. If the model is used in thinking mode, then it will take longer to generate a response, but may lead to a better generated response.
This mode is still experimental, so try both using and not using it for your use-case.
This data was created by prompting openai/gpt-oss-120b to generate prompts and responses in Northern Kurdish.
We also translate a set of prompts and responses from the BAAI/Infinity-Instruct dataset.
More details about exactly how we created our data can be found in our paper.
Training
Full details of how this model was created (and how you can train a model in your own chosen language) can be found on our Github repo.
1@article{devine2026kakugo,
2 title={Kakugo: Distillation of Low-Resource Languages into Small Language Models},
3 author={Devine, Peter and Sanni, Mardhiyah and Adilazuarda, Farid and Loizaga, Julieta Gil and Haddow, Barry},
4 journal={arXiv preprint arXiv:2601.14051},
5 year={2026}
6}