loqira/Qwen3.5-0.8B-GEC-KAZ-RUS-ENG
Qwen3.5-0.8B GEC for Kazakh, Russian, and English
A compact 0.8B grammatical-error-correction / proofreading model for Kazakh, Russian, and English. It takes raw text — voice-dictation output, chat messages, quick notes — and cleans it up: restores punctuation, capitalization, and paragraph breaks, and fixes typos and spelling errors — while preserving your words, meaning, language, and tone. It does not rewrite, paraphrase, translate, soften, or add anything of its own.
Published as GGUF (Q4_0) for CPU inference with llama.cpp, LM Studio, and Ollama. ~537 MB, ~44 tokens/s on CPU.
By [Loqira Labs](https://loqira.tech) — everyday AI you own, not rent. Runs on the hardware you already have — no cloud, no frontier API.
⚡ TL;DR
- Task: grammar / spelling / punctuation / capitalization / paragraphing correction (GEC, proofreading).
- Word-preserving: keeps your exact words, meaning and tone; it corrects, it does not rewrite.
- Languages: Kazakh, Russian, English (incl. Kazakh special letters).
- One request → one response. This is a single-turn model: use it for one-shot calls, not multi-turn chat.
- Must-have runtime settings: the exact system prompt below, thinking OFF, temperature 0.
- Format: GGUF Q4_0, ~537 MB, ~44 tok/s CPU.
What it does
- Restores punctuation, capitalization, and paragraph structure.
- Fixes typos and spelling errors.
- Word-preserving — keeps your words, meaning, tone, and language intact.
- Adds nothing, invents nothing, and does not soften or rephrase.
⚠️ Single-turn model — one request, one response
This model is trained and meant to be used as a one-shot call: send one input, get one corrected output. It is not a conversational model — do not build multi-turn dialogues, do not feed prior turns back in, and do not chain calls in a running chat context. Each correction is an independent request with a fresh context and the same system prompt.
Languages
- Explicitly trained and evaluated: Kazakh (kk), Russian (ru), English (en) — including Kazakh-specific letters (қ, ө, ұ, ү, ә, і, ң, ғ, һ), which the model restores.
- Other languages: the base model (Qwen3.5-0.8B) additionally covers 198+ languages. The correction behaviour may transfer to them, but this was not tested — treat any non-KK/RU/EN use as experimental.
Model details
The stop token is <|im_end|> — clients that read the GGUF metadata pick it up automatically.
Usage
1. System prompt — required (Russian, verbatim)
The model was trained to always receive this exact system prompt. Pass it as the system message. It is a single unified prompt — the same for every input and every language (Kazakh, Russian, and English input all use this one prompt).
Отформатируй текст голосового ввода: расставь пунктуацию и заглавные буквы, разбей на абзацы, исправь опечатки и орфографические ошибки. Сохрани язык, слова и смысл, ничего не добавляй от себя.The prompt is in Russian by design — that is what the model was trained on, so it gives the best results. A version of the prompt translated into another language also works, but noticeably worse — keep the Russian prompt unless you have a specific reason not to. Without a system prompt at all (or with an unrelated one) the model is out-of-distribution and quality drops sharply.
2. Thinking OFF — required
The model was trained with an empty reasoning block (<think>\n\n</think>\n\n). A client with "thinking / reasoning" enabled will inject <think>\n and push the model out-of-distribution (garbled prefix, quality loss). Keep thinking OFF and use temperature 0 (greedy, deterministic).
3. llama.cpp (llama-cli)
llama-cli -m Qwen3.5-0.8B-GEC-KAZ-RUS-ENG.Q4_0.gguf \
-sys "Отформатируй текст голосового ввода: расставь пунктуацию и заглавные буквы, разбей на абзацы, исправь опечатки и орфографические ошибки. Сохрани язык, слова и смысл, ничего не добавляй от себя." \
-p "привте всем сегдня я хочю расказать про наш новый праект над котрым мы работаем уже почти пол года" \
-st -no-cnv --reasoning off --reasoning-format none \
--chat-template-kwargs "{\"enable_thinking\": false}" \
--temp 0 --top-k 1 --repeat-penalty 1.0 -n 512For long inputs, raise -n (e.g. 1024–2048) so the output isn't truncated.
Keep each request short. The model was trained on a 2048-token context window (≈1600 tokens per sample on average). It is a single-shot formatter, not a long-document processor — feeding a much longer sequence in one call pushes it out-of-distribution and degrades quality. Split long text into chunks (e.g. by paragraph) and format each chunk in its own request, keeping prompt + output within ~2048 tokens.
4. llama-server (OpenAI-compatible API)
Start the server with --reasoning-format none. In each request send the system prompt above, temperature: 0, and "chat_template_kwargs": {"enable_thinking": false}. Strip any leading <think>...</think> from the returned content.
5. Ollama
A ready `Modelfile` is included — it bakes in the correct chat template (think-off), the system prompt, and greedy decoding.
ollama create qwen3.5-gec -f Modelfile
ollama run qwen3.5-gec "привте всем сегдня я хочю расказать про наш новый праект"6. LM Studio
Load the GGUF, disable "thinking / reasoning", set temperature 0, and set the system prompt above. Verify that the rendered template produces <think>\n\n</think>\n\n (an empty block), not <think>\n.
Compatibility
This model uses the Qwen3.5 architecture (qwen35 — hybrid GatedDeltaNet + attention), supported in mainline llama.cpp and the apps built on it. Just use a recent llama.cpp / LM Studio / Ollama. If you ever see unknown model architecture 'qwen35', your app bundles an outdated llama.cpp — update it. Verified on the CPU path; on a GPU backend, run the golden-probe examples below first.
Examples (temperature 0, thinking off)
Russian — typos:
in : привте всем сегдня я хочю расказать про наш новый праект над котрым мы работаем уже почти пол года
out: Привет всем! Сегодня я хочу рассказать про наш новый проект, над которым мы работаем уже почти пол года.English — typos:
in : helo evryone i jsut wanted to tel you abuot the meting we have tomorow mornig at nine oclock
out: Hello everyone, I just wanted to tell you about the meeting we have tomorrow morning at nine o'clock.Kazakh — special letters restored (қ / ө / і):
in : мен калага бардым онда коп адам бар еди кыс кези суык болды
out: Мен қалаға бардым, Онда көп адам бар, Енді қыс кезі суық болды.Preserves tone — does not soften or rewrite:
in : да ты издеваешься что ли опять всё сломал я же говорил не трогай этот код
out: Да ты издеваешься что ли? Опять всё сломал. Я же говорил: «Не трогай этот код».You can use these four as a quick golden probe: if your client produces materially different output at temperature 0, the prompt or think-off setting is wrong — check the system prompt and thinking-off first.
Known limitations
- Mixed script within one word (e.g. Cyrillic + Latin "блin") is not corrected.
- Segmentation around URLs / @handles can be unstable (though URLs and handles themselves are preserved byte-for-byte).
- "HH MM" time without a separator may get an extra dot.
- ~10% of isolated in-word typos may remain (not systematic); rare Kazakh word substitutions.
- Short context (2048 tokens, ~1600 avg per sample). Process long text in chunks — one request per chunk — rather than a single large sequence; see Usage.
- 0.8B / 4-bit ceiling — this is a small, quantized model built for speed and privacy, not a frontier LLM.
License
Apache-2.0. Base model: Qwen/Qwen3.5-0.8B.
About Loqira Labs
Loqira Labs builds capable AI that runs on the hardware you already have — no cloud, no frontier API, no vendor to answer to. Everyday AI you own, not rent.
