ufakzeka-1
Docs
Everything needed to run ufakzeka-1 on your own machine. The architecture is plain Qwen3, so transformers needs no custom code. The GGUF files run as is on a llama.cpp built after 18 September 2026; older builds need a small patch.
Quick start
Python. apply_chat_template renders the chat format; do not pass a system message.
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("ufakai/ufakzeka-1")
model = AutoModelForCausalLM.from_pretrained("ufakai/ufakzeka-1")
msgs = [{"role": "user", "content": "Merhaba, sen kimsin?"}]
inputs = tok.apply_chat_template(msgs, add_generation_prompt=True, return_dict=True, return_tensors="pt")
out = model.generate(**inputs, max_new_tokens=520, do_sample=True, temperature=0.3, top_p=0.9, top_k=40)
print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))Download the q8_0 file first, then run it with a current llama.cpp (builds older than 18 September 2026 need the patch below). The flags are the recommended sampling settings.
hf download ufakai/ufakzeka-1-GGUF ufakzeka-1-q8_0.gguf --local-dir .
llama-cli -m ufakzeka-1-q8_0.gguf \
--temp 0.3 --top-k 40 --top-p 0.9 --min-p 0 \
--repeat-penalty 1.0 --dry-multiplier 0 -n 520llama-server exposes a chat-completions HTTP endpoint. The demo site runs this way: with q8_0 on a 2 vCPU server, 137 tokens per second for one request and 70 each for two concurrent requests.
llama-server -m ufakzeka-1-q8_0.gguf --port 8080 \
--temp 0.3 --top-k 40 --top-p 0.9 --repeat-penalty 1.0 --dry-multiplier 0
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "Merhaba, sen kimsin?"}], "max_tokens": 520}'Files
| File | Use | Size | Note |
|---|---|---|---|
ufakai/ufakzeka-1 | Chat model, transformers | The model the examples on this page use. The model card lives here. | |
ufakai/ufakzeka-1-base | Base model, transformers | Weights after pretraining, for fine-tuning and research. | |
ufakzeka-1-f16.gguf | llama.cpp, reference | 367 MB | Identical tokenization to transformers; 0.002 nats mean logit difference; the same answers word for word on an eight-prompt greedy check. |
ufakzeka-1-q8_0.gguf | llama.cpp, recommended | 196 MB | Identical tokenization; 0.03 nats; the same answers on the same check. |
- SHA-256 · ufakzeka-1-f16.gguf
d1e711e473c88bd5eecc06030e3a8832596a234e898df912d06960426c2e38b8- SHA-256 · ufakzeka-1-q8_0.gguf
6a06fbffe77b8c70ee084ce8901edaaaeec4c23fd7360296259a78111facdf5e
No 4-bit file is published: on an earlier checkpoint of this model, 4-bit quantisation made perplexity 5 percent worse and changed the answers.
Sampling settings
| Setting | Value | Why |
|---|---|---|
temperature | 0.3 | The demo runs at this value; 0.45 gave worse results. |
top_p / top_k | 0.9 / 40 | Same as the demo. |
repeat_penalty | 1.0 (off) | It suppresses repeated digit tokens and breaks the column arithmetic. |
DRY | 0 (off) | Same reason. |
max_new_tokens | at least 420 | Arithmetic is written out step by step; the working is long by design. The examples use 520. |
system prompt | none | The model was trained on user and assistant turns only and never saw a system message. |
Chat format
The chat format is ChatML: each turn opens with <|im_start|>, the role name and a newline, and closes with <|im_end|>. An <|im_start|>assistant line is appended for the model’s reply. apply_chat_template in transformers and llama.cpp do this for you; if you write your own server, the prompt must look exactly like this:
<|im_start|>user
Merhaba, sen kimsin?<|im_end|>
<|im_start|>assistant
The llama.cpp patch
The tokenizer is a byte-level BPE trained on Turkish. Its pre-tokenizer is the Qwen2 pattern without the English contraction rule, which would split apostrophe suffixes such as “Ankara’da” differently from training. The GGUF therefore declares tokenizer.ggml.pre = "ufakzeka", and llama.cpp builds that do not know the name refuse the file with:
unknown pre-tokenizer type: 'ufakzeka'The patch is only needed for llama.cpp builds older than 18 September 2026; it changes 15 lines in 4 files and fixes llama.cpp, not the files. To apply it:
hf download ufakai/ufakzeka-1-GGUF llama.cpp-ufakzeka-pretok.patch --local-dir .
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp && git checkout b49650a
git apply ../llama.cpp-ufakzeka-pretok.patch
cmake -B build && cmake --build build --config Release -j
./build/bin/llama-cli -m ../ufakzeka-1-q8_0.gguf --temp 0.3 --top-k 40 --top-p 0.9 --repeat-penalty 1.0 --dry-multiplier 0 -n 520The patch was cut against llama.cpp commit b49650a of 17 September 2026 and applies cleanly there; if a newer tree rejects it, the changes are small enough to make by hand. The patch was merged into llama.cpp on 18 September 2026 (dc85f89); builds from master after that date need no patch. Ollama and LM Studio will work once they ship a llama.cpp with the change. Patch file.
Naming the file with the qwen2 rule would load everywhere, but that rule splits every apostrophe suffix starting with d, t, s, m or v (Ankara’da becomes ’d + a). On a short apostrophe-heavy sample (about 3,500 characters) perplexity rose from 15.4 to 19.0 and two of six answers changed, so no such file is published.
What it cannot do
This is a research model, not an assistant. It invents facts it does not have, cannot write code, can lose a correct calculation on the second turn, can confuse who is who after a long story, and knows nothing after summer 2026. The measured limits are on the home page and in the model card, with numbers.
License and data
The weights are Apache-2.0. All training data comes from commercially licensed sources; the source list, their licences and the exclusions are in the model card. Model card.