Heartly Qwen-Code v3

A 1.5B coding LLM with the Heartly hallucination-reduction architecture, fine-tuned from Qwen2.5-Coder-1.5B with the conversational Stage-5 SFT recipe (Fix1–4: natural phrasing, single refusal, persona — 5,200 samples in heartly-qwen-code/sft_dataset_code_v3.jsonl).

v3 builds on the same v1/v2 Stage 1–4 numbers (grammar adoption 100%, boundary-head AUROC 1.000, critic AUROC 1.000) — same Qwen2.5-Coder-1.5B base, now trained for multi-turn conversational code chat. See HF_MODEL_CARD.md for the Stage 1–2 probe/critic results carried over from the identical architecture.

Output grammar

 thinking [reasoning]  response<decide>speak|stop</decide><verify>known|unknown</verify> [answer] <stop>

Only [answer] should reach the user.

Usage

0. Recommended — chat via the GitHub server (strips the grammar for you)

This model emits the Heartly grammar as ordinary multi-token text (the tags are not tokenizer special tokens), so some front-ends (e.g. LM Studio) may decode them mangled. The server.py FastAPI loader on GitHub loads this model and runs every reply through reply_formatter.py, which canonicalises the tags and returns only the clean answer.

pip install -r requirements.txt   # fastapi + uvicorn + transformers + torch
python server.py --model eivintobias/heartly-qwen-code --port 8000

curl -X POST http://127.0.0.1:8000/chat \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Write a function that reverses a string"}'

Response: {"model":"eivintobias/heartly-qwen-code","raw":"...<decide>...","reply":"<clean answer>"}.

Quick browser test (no curl): open http://127.0.0.1:8000/server.py serves an HTML chat UI at GET /. The first message lazy-loads the model; code answers render with real line breaks, and the Heartly grammar is stripped by the reply formatter.

Quick offline test (no server): python chat_smoke.py "Write a function that sorts a list".

📦 Model card source: this file (HF_MODEL_CARD_v3.md). When uploaded to HuggingFace, copy it to README.md on the hub repo.

1. Transformers

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tok = AutoTokenizer.from_pretrained("eivintobias/heartly-qwen-code")
model = AutoModelForCausalLM.from_pretrained(
    "eivintobias/heartly-qwen-code", torch_dtype=torch.float32, device_map="cpu"
)
model.eval()
ids = tok.encode("User: Write a function that reverses a string\nAssistant: ", return_tensors="pt")
out = model.generate(**ids, max_new_tokens=256, pad_token_id=tok.eos_token_id, do_sample=False)
raw = tok.decode(out[0][ids.shape[1]:], skip_special_tokens=False)
# Strip the grammar -> clean answer:
from reply_formatter import format_reply
print(format_reply(raw))

reply_formatter.py (grammar strip) and server.py are bundled in this repo (HF clone = flat layout; GitHub = heartly-qwen-code/). Clone it so from reply_formatter import format_reply resolves before the offline example.

Files in this repo

File Description
config.json Qwen2ForCausalLM (28 layers, d=1536) + heartly_stop_token_id=9495
generation_config.json default generate params
chat_template.jinja standard Qwen chat template
tokenizer.json / tokenizer_config.json Qwen BPE tokenizer
model.safetensors v3 fine-tuned weights (full fine-tune, not a LoRA adapter)
server.py FastAPI server: lazy-loads the model; serves /, /health, /chat; strips Heartly grammar via reply_formatter
reply_formatter.py strips thinking / <decide> / <verify> / <stop> -> clean answer; unescapes code newlines
chat_smoke.py offline load + chat smoke test (no server)
requirements.txt torch, transformers, fastapi, uvicorn, sentencepiece, datasets, scikit-learn, numpy, accelerate, huggingface_hub

Training

  • Base: Qwen/Qwen2.5-Coder-1.5B
  • Method: full fine-tune (fp16), max-length 512, 2 epochs, freeze bottom 12 layers
  • Dataset: sft_dataset_code_v3.jsonl (5,200 conversational Heartly samples)
  • GPU: 1× RTX 3090 (24GB)

License

MIT — built on Qwen2.5-Coder (Apache 2.0).

Links

Downloads last month
445
Safetensors
Model size
2B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for eivintobias/heartly-qwen-code

Finetuned
(59)
this model