Luna-Protocol-1.5B-Discord-Dialogues-200k-instruct : GGUF
Luna-Protocol-1.5B-Discord-Dialogues-200k-instruct is a QLoRA fine-tune of Qwen2.5-1.5B-Instruct trained on Discord-Dialogues-Preprocessed-Luna-Protocol-role-luna (a preprocessed fork of mookiezi/Discord-Dialogues), aimed at reproducing the informal, short-form conversational style of real Discord chat.
Training was done with Unsloth (LoRA, r=16, ~1.18% of parameters trained) on a Kaggle T4, then merged and exported to GGUF.
This is the successor to Luna-Protocol-1.5B-Discord-Dialogues-50k-instruct: 4x more training data (200k vs 50k examples) and the assistant role renamed to
luna(see "Whylunainstead ofassistant" below). Two intermediate experiments training on the base (non-Instruct) Qwen2.5-1.5B were tried in between (200k-base, 200k-base-v2) but abandoned due to unstable/non-terminating generation — this release goes back to the Instruct base, which has reliable EOS behavior out of the box.
⚠️ Read the "Recommended usage" section below before judging output quality — with a bare prompt and no priming, this model tends to fall back on Qwen's default assistant tone. A short few-shot prime (shown below) makes a large difference.
Training details
- Base model:
unsloth/Qwen2.5-1.5B-Instruct-bnb-4bit - Method: QLoRA (4-bit),
r=16,lora_alpha=16, target modules:q/k/v/o_proj,gate/up/down_proj - Dataset: ~200,000 examples (subset of the 7.3M-row Discord-Dialogues), filtered to 8–512 tokens, 1.5 epochs
- Trainable params: 18,464,768 / 1,562,179,072 (1.18%)
Why luna instead of assistant
The training data uses <|im_start|>luna instead of <|im_start|>assistant for the model's turns. The word "assistant" carries a strong AI-servile connotation baked into the base model's pretrained weights, which works against Luna Protocol's goal (a model that passes as a person on Discord, not an AI assistant). Renaming the role to a neutral persona name reduces that latent bias. This means the chat template, inference code, and any tool/framework talking to this model must use luna as the model-turn role — not assistant.
Available model files
| File | Quantization | Notes |
|---|---|---|
Luna-Protocol-1.5B-Fine-Tuned-Qwen2.5-200k-instruct.Q2_K.gguf |
Q2_K | Smallest, noticeably degraded for a 1.5B model — not recommended |
Luna-Protocol-1.5B-Fine-Tuned-Qwen2.5-200k-instruct.Q4_K_M.gguf |
Q4_K_M | Good size/quality balance |
Luna-Protocol-1.5B-Fine-Tuned-Qwen2.5-200k-instruct.Q8_0.gguf |
Q8_0 | Near full precision, best style fidelity, recommended if size isn't a constraint |
Recommended usage: few-shot priming
Because the training data (Discord-Dialogues) contains only user/luna turns and no system-role examples, this model responds only weakly to system prompts alone. What works much better is priming the conversation with a couple of example exchanges in the target style, using the same ChatML structure the model was trained on:
<|im_start|>user
yo whats good<|im_end|>
<|im_start|>luna
nm just chillin, u<|im_end|>
<|im_start|>user
same tbh, bored af<|im_end|>
<|im_start|>luna
lol same energy fr<|im_end|>
Feed this before the real user turn, then continue the conversation normally. A lightweight, non-instructive system prompt (e.g. "you're just chatting with friends on a discord server, nothing formal") can be used in addition to the few-shot prime, but performs poorly on its own without it.
llama.cpp
llama-cli -m Luna-Protocol-1.5B-Fine-Tuned-Qwen2.5-200k-instruct.Q8_0.gguf \
--temp 1.0 --top-p 0.9 --top-k 60 --repeat-penalty 1.15 \
-p "<|im_start|>user
yo whats good<|im_end|>
<|im_start|>luna
nm just chillin, u<|im_end|>
<|im_start|>user
same tbh, bored af<|im_end|>
<|im_start|>luna
lol same energy fr<|im_end|>
" \
-cnv
Or via the HF integration:
llama-cli -hf fox3000foxy/Luna-Protocol-1.5B-Discord-Dialogues-200k-instruct --jinja
Ollama
An Ollama Modelfile is included, using the MESSAGE directive to bake the few-shot prime directly into the model — no manual priming needed at inference time:
FROM Luna-Protocol-1.5B-Fine-Tuned-Qwen2.5-200k-instruct.Q8_0.gguf
PARAMETER stop "<|im_end|>"
PARAMETER stop "<|endoftext|>"
PARAMETER temperature 1.0
PARAMETER top_p 0.9
PARAMETER repeat_penalty 1.15
SYSTEM """you're just chatting with friends on a discord server, nothing formal"""
MESSAGE user yo whats good
MESSAGE luna nm just chillin, u
MESSAGE user same tbh, bored af
MESSAGE luna lol same energy fr
ollama create luna-protocol -f Modelfile
ollama run luna-protocol
Known limitations
- Weak instruction-following for style directives: asking the model within the system prompt to adopt a specific quirk (e.g. "talk in all lowercase with abbreviations") is not reliably followed — the model tends to keep its own learned tone rather than adapt to fine-grained stylistic instructions.
- Low quantizations degrade style fidelity: Q2_K noticeably weakens the learned conversational tone on a model this small; Q4_K_M and above preserve it much better.
- Minor context inconsistencies: as expected from a small model, it can contradict earlier turns within a short conversation (e.g. denying playing a game it just discussed).
- Non-standard role name: since the model turn role is
lunarather thanassistant, generic OpenAI-compatible clients/frameworks that hardcodeassistantas the model role may need adjustment (role mapping) to work correctly with this model.
Credits
- Base model: Qwen2.5-1.5B-Instruct (Qwen team, Alibaba Cloud)
- Training framework: Unsloth
- Dataset: mookiezi/Discord-Dialogues