SwarmandBee/LocalLegal-27B
LocalLegal-27B
A calm, dignified consumer-rights letter-writer & grant writer. It organizes the facts a person gives it and drafts clear, statute-grounded documents they can review, sign, and send themselves — debt-validation and cease-contact letters (FDCPA), credit-report disputes and method-of-verification letters (FCRA), goodwill and medical-billing letters, identity-theft blocks, and grant/assistance narratives.
This is document preparation, not legal advice. LocalLegal is not a lawyer, does not give legal advice, and never predicts the outcome of a case. It states what a statute says and what a letter requests — and hands anything past the letter stage (lawsuits, garnishment, liens, court dates) to free legal aid or a licensed attorney.
Built by [Swarm & Bee](https://huggingface.co/SwarmandBee) — the brain behind the LocalLegal "write + send certified from home" flow.
🏆 It beat base — decisively, on both domains
Stage-5 gate: held-out, per-domain, deterministic evaluation. Teacher-forced cross-entropy / perplexity on chat-templated eval, base vs cooked, same tokenizer & template, N=400/domain, seed 1117, seq 4096, bf16 on an RTX PRO 6000. No LLM-as-judge — a number anyone can re-derive.
Beat base on both. Killed domains: none. Cooked CE (~0.70–0.72) matches the training landing (~0.64–0.77) → coherent, no overfit. The legal gain exceeds our DiabeticAnchor-27B reference (+57%). The 44%-share, 9%-truncation grant tail passed clean — not undercooked.
Receipts (deterministic, re-runnable): beat_base_27b.py · beat_base_27b.log · beat_base_27b_verdict.json.
🔧 Usage
This repo ships a Q4 GGUF (~16 GB) — runs on llama.cpp / Ollama / LM Studio. Qwen3.6 is a thinking model, so the chat template prefills an empty <think> block; the included Modelfile handles this for you.
Ollama
# with the included Modelfile (carries the template + system prompt + params)
ollama create locallegal-27b -f locallegal-27b.Modelfile
ollama run locallegal-27b "Draft an FDCPA debt-validation letter. Collector: Midland Credit. Account #4402, $1,284 medical debt I don't recognize."llama.cpp
./llama-cli -m locallegal-27b-q4.gguf -c 8192 --temp 0.6 --top-p 0.9 \
-p "<your chat-templated prompt>"Recommended sampling: temperature 0.6, top_p 0.9, num_ctx 8192. Stop tokens <|im_start|> / <|im_end|> (ChatML).
System prompt (its identity — every letter includes header, RE: line, statute cite, specific request, response window, signature block)
The model is trained to the LocalLegal persona: calm, factual, never shaming, uses the verbs organize / draft / prepare / review / track, and refuses to say "legal advice," "sue them," "you'll win," or "guaranteed." Full system prompt ships in the Modelfile.
🍳 How it was cooked
- Base: `Qwen/Qwen3.6-27B` (Apache-2.0) — hybrid Gated-DeltaNet + Gated-Attention arch, thinking model.
- Method: LoRA r32 / α16 on attn+mlp · LR 1e-5 · cosine · seq 4096 · bf16 · Unsloth + TRL. Clean 16-bit merge → Q4 GGUF.
- Corpus: 78,231 train / 2,500 eval, curated down from ~340K raw rows via cross-domain dedup, eval carve-out, hash-scrub of contaminants, and near-dup pruning. Split Legal 57.8% / Grant 42.2% (natural balance, zero synthetic upsampling). Per-domain true holdout eval (legal 1,500 / grant 1,000).
- Loss: 2.156 → 0.768 (−64%), smooth monotone, grad_norm 0.20 — textbook curve, no spikes/NaN, no overcook.
- Rig: SwarmRails (owned) · 1× RTX PRO 6000 Blackwell 96 GB · 350 W thermal cap · 45.7 h wall. Sovereign compute — cooked on our own iron.
- Discipline: full canary-then-cook (5-stage senior-hack review) — beat-base-or-kill, per domain, no blended half-truths.
📁 Files
locallegal-27b-q4.gguf— Q4 quantized weights (~16 GB)locallegal-27b.Modelfile— Ollama template + system prompt + params
🔒 Defendable
Every claim here has a receipt: deterministic per-domain beat-base eval (no LLM judge), monotone loss curve, hash-verified corpus, and a full cook flightsheet. Show the math, verify it yourself.
⚖️ Scope & safety
Document preparation only. Not legal advice, not a lawyer, no outcome predictions. Anything beyond the letter stage → free legal aid (LawHelp.org) / a licensed consumer-protection attorney / your state Attorney General. As a fine-tune of Qwen3.6-27B, it inherits the base model's Apache-2.0 terms and general LLM limitations (it can be wrong — a human reviews and signs every letter).
Citation
@misc{locallegal27b2026,
title = {LocalLegal-27B: a statute-grounded consumer-rights letter-writer},
author = {Swarm and Bee},
year = {2026},
note = {LoRA fine-tune of Qwen3.6-27B; deterministic per-domain beat-base eval},
url = {https://huggingface.co/SwarmandBee/LocalLegal-27B}
}