fox3000foxy/Luna-Protocol-1.5B-Discord-Dialogues-200k-instruct

Source: 🤗apache-2.01.5B activated23 GBGGUF✓ 346 checksumsupdated 11d ago
or submit a torrent

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 "Why luna instead of assistant" 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 luna rather than assistant, generic OpenAI-compatible clients/frameworks that hardcode assistant as the model role may need adjustment (role mapping) to work correctly with this model.

Credits