Fine-tuned Qwen2.5-1.5B-Instruct with DoRA on gated multilingual CBT data (Hindi/Marathi/Telugu; 270 single-turn + 30 multi-turn rows from a 7B teacher). Ships with a self-correcting inference loop and a recall-1.0 guardrail. Perplexity 1.41, 21/21 clean GGUF generation, 3/3 guarded multi-turn sessions.
Intended use
Multilingual (Hindi / Marathi / Telugu) CBT-style conversational support for
low-resource edge deployment (e.g. Orange Pi Zero 3, 986 MB Q4_K_M GGUF,
or in-browser via WebLLM). Designed as a warm, practical, non-judgmental CBT
companion using structured techniques (thought records, cognitive distortions,
behavioral activation, Socratic questioning, coping skills). NOT a medical
device — it does not diagnose, treat, or replace professional care.
Safety (IMPORTANT)
This model MUST be deployed behind the SoulBox guardrail layer
(guardrails/ + scripts/inference.py): crisis / medical / harmful inputs are
blocked before the model (recall 1.0 / FPR 0.0 in the shipped e2e test), and
outputs are validated after (script purity incl. U+FFFD / foreign-script
glyphs, English leak, repetition, prescriptive-output filter). Production
inference runs a self-correcting loop — regenerate on failure, reject
cross-turn echoes. See kakashi3lite/SoulBoxFT/docs/GUARDRAIL.md for the threat model. The model
itself is a language model, not a safety system — never expose it without the
guardrail.
Training
Stage
Method
Data
Notes
1 (SFT)
DoRA (weight-decomposed LoRA)
270 gated rows + 30 3-turn conversations
400 iters, native MLX DoRA on 4-bit base, max-seq 384
Hardware: Apple Silicon (MPS), 24 GB unified memory
DPO was evaluated and dropped (did not learn from near-identical
self-consistency pairs) — this is an SFT-only release, honestly documented.
Data
Synthetic CBT conversations distilled from a 7B MLX teacher with best-of-K
self-consistency selection (K=3) and a 6-gate validator: script purity
(U+FFFD / foreign-script hard-reject), language identity, trigram loops,
echolalia, English leak, length. Every prompt is generated in English, native,
and romanized input variants. Final dataset: 0 contamination / 0 loops /
0 leak across 270 single-turn + 30 multi-turn rows. See kakashi3lite/soulbox-cbt-therapy-dataset.
1from transformers import AutoModelForCausalLM, AutoTokenizer
23model = AutoModelForCausalLM.from_pretrained("kakashi3lite/soulbox-cbt-therapy-1.5b")4tokenizer = AutoTokenizer.from_pretrained("kakashi3lite/soulbox-cbt-therapy-1.5b")56messages =[7{"role":"system","content":"You are a CBT therapist assistant. Respond ONLY in Hindi. Be warm, practical, non-judgmental. Do not mention that you are an AI. Avoid medical claims. Keep it concise but helpful."},8{"role":"user","content":"मैं काम पर एक छोटी गलती के बाद खुद को असफल मान रहा हूँ।"},9]10inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")11out = model.generate(**inputs, max_new_tokens=180, do_sample=True, temperature=0.4)12print(tokenizer.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
⚠️ Deploy behind the guardrail (see Safety above).