cknuteson/mythic-voice-4b-GGUF overview
mythic voice 4b The 9B does what I wanted, but 9.5 GB of q8 is not something you embed in a game. This is the same model at 4B, so it fits on a machine that is…
Runs locally from ~2.52 GB disk (4 GB VRAM class GPUs with llama.cpp / guIDE).
Repository Files & Downloads
Model Details
| Model ID | cknuteson/mythic-voice-4b-GGUF |
|---|---|
| Author | cknuteson |
| Pipeline | text-generation |
| License | apache-2.0 |
| Base model | Qwen/Qwen3.5-4B |
| Last modified | 2026-08-17T17:27:45.000Z |
Model README
---
license: apache-2.0
base_model: Qwen/Qwen3.5-4B
pipeline_tag: text-generation
tags:
- gguf
- roleplay
- storytelling
- archaic-english
- persona
---
mythic-voice-4b
The 9B does what I wanted, but 9.5 GB of q8 is not something you embed in a game. This is
the same model at 4B, so it fits on a machine that is already busy running something else.
Qwen3.5-4B, trained CPT→SFT→DPO with persona-forge
on the identical blend that produced mythic-voice-9b -
1,591 SFT rows and 1,025 DPO pairs, all decontaminated. Same elevated archaic register out of the
public-domain northern-European epic tradition (Malory, Morris, the Eddas, the Kalevala, KJV cadence),
same world-agnostic design. You bring the persona, it brings the voice.
What's in the repo
| file | size |
|---|---|
| mythic-voice-4b-q4_k_m.gguf | 2.7 GB |
| mythic-voice-4b-q8_0.gguf | 4.5 GB |
q4_K_M is the one to use if you are shipping. Loads in llama.cpp, LM Studio, and anything else
GGUF - CUDA, Vulkan and Metal all carry the kernels the hybrid attention needs.
The chat template hardcodes thinking OFF at the generation boundary, same as the 9B. The stock Qwen3.5 template leaves it on by default at 4B (and toggleable at 2B), which means a caller reading choices[0].message.content gets an empty string while the whole token budget goes to reasoning_content. Nothing crashes, you just get nothing. Every file here was checked by loading it in llama-server and asserting non-empty content before release.
How it scores against the 9B
Held-out seeds, same battery, same judge:
| | 9B | 4B |
|---|---|---|
| voice | 0.983 | 1.000 |
| turn-taking | 1.0 | 1.0 |
| boilerplate | 0.0 | 0.0 |
| in-character | 1.0 | 0.929 |
| assignment accuracy | 1.0 | 0.750 |
| leakage (176 probes, bare) | 0.892 | 0.847 |
The voice got better, which stopped surprising me once I saw the 2B do the same thing. Register is
cheap. It is the first thing a small model learns and the last thing it loses.
The 0.750 assignment accuracy is one miss out of four items - a card that answered in perfect voice
and never said its own name. I would not read much into it: mythic-voice-2b,
which is half this size, scored 1.000 on the same four prompts. Four items is not enough to separate
these models and I am not going to pretend otherwise.
Does it still tell different stories?
The battery cannot see this one. A smaller student can hold voice at 1.0 and in-character at 1.0
while every tale collapses into one shape with the nouns swapped. So I measured it: 32 tales per
model, 16 held-out prompts sampled twice.
| | 9B | 4B | 2B |
|---|---|---|---|
| cross-repetition (4-gram Jaccard between tales) | 0.0013 | 0.0008 | 0.0017 |
| distinct-2 | 0.680 | 0.684 | 0.646 |
| distinct-3 | 0.907 | 0.922 | 0.897 |
| mean words | 126 | 129 | 131 |
Cross-repetition is effectively zero at every size - no two tales share a 4-gram. The convergence
failure does not happen here, and on lexical diversity the 4B edges the 9B.
One family-wide result worth stating: a judge scoring concrete invented detail (named places,
particular objects) rates all three near 0.03. That is not a size effect, it is the design - the
model is world-agnostic on purpose, so it has no cast or geography of its own to name. If you want
specificity, it comes from your persona and your prompt, not from the weights.
Read this before you ship it in a product
The leakage number is the one that actually moves with size, and it moves the wrong way:
9B 0.892
4B 0.847
2B 0.818
I expected the opposite. A smaller base has memorized less protected material, so I assumed it would
leak less. It does not. What shrinks is not the contamination, it is the capacity to hold the trained
refusal against the model's own generative pull. The mitigation degrades faster than the problem does.
So the guard matters more here than it does on the 9B, not less. Bare weights pass 84.7% of a
176-probe leakage battery. Behind persona-forge's GuardedTeacher output filter the 9B verified
176/176; if you are shipping this to the public and care about the same legal posture I do, wrap it.
Personal use, load it and go.
Training, briefly
CPT on a public-domain corpus in the target register, then SFT + DPO on the judge-filtered synthetic
blend: register chat, tales, pack-driven roleplay, provocation and bare-assignment DPO pairs. Every
teacher sample passed an 8-gram overlap gate plus a proper-noun blocklist before it entered training.
The GGUFs are header-patched. Qwen3.5 carries mtp_num_hidden_layers=1 in the dense sizes too, the
merge drops the mtp tensors, and the converter still counts them - so block_count went 33 → 32 and
nextn_predict_layers 1 → 0 on every file here. Without that they fail to load on every llama.cpp.
The family
9B - 4B - 2B, same blend and recipe at three student sizes, all in the mythic-voice collection.
Lineage
Style lineage is documented public-domain sources. No association with any modern author, estate, or
trademark is claimed or implied.
Pipeline, guard, eval battery and pack format: github.com/ctkadvisors/persona-forge.
Run cknuteson/mythic-voice-4b-GGUF with guIDE
Download guIDE — the AI-native code editor with local LLM inference and 69 built-in tools.
Source: Hugging Face · Compare models