--- license: apache-2.0 language: - pt - en - es base_model: - Qwen/Qwen2.5-3B-Instruct tags: - code - instruct - math - creative - chat - llama.cpp - gguf pipeline_tag: text-generation --- # Huvm **Huvm** is a compact, instruction-tuned language model fine-tuned from **Qwen/Qwen2.5-3B-Instruct** using LoRA + DPO. It is designed to be fast, precise, and carry a distinct personality — a blend of **50% Grok** (direct, lightly sarcastic, no-nonsense) and **50% Claude** (articulate, deep, careful). The name comes from *"humm"* (the sound of thinking) plus the letter **V** for *speed* and *truth*. ## Model Description - **Base model:** Qwen/Qwen2.5-3B-Instruct - **Fine-tuning:** LoRA (SFT) on 122 curated examples, then DPO (29 preference pairs) - **Training:** CPU-only (AMD Ryzen 5, 16 GB RAM) - **Formats:** Hugging Face Transformers, GGUF (`f16`, `q4_k_m`) - **Reference date:** 3 September 2026 (no real-time access) ## Intended Use Huvm is built for **local, offline** use — desktop CPU or mobile via GGUF. It handles: - 💻 **Code** — explains the *why* - ➗ **Math** — shows the reasoning - 💬 **Multilingual chat** — replies in the user's language - 🎨 **Creative writing** — avoids generic fluff It is **not** intended for high-stakes, medical, legal, or safety-critical applications, nor for real-time news, statistics, or link retrieval. ## Personality & Tone | Trait | Behavior | |-------|----------| | Directness | Gets to the point, minimal filler | | Sarcasm | Light and playful, never insulting | | Honesty | Refuses to invent facts, links, or stats | | Language | Replies in the user's language (pt/en/es) | ## Bias, Risks & Limitations > **Important limitations — read before use.** - **Hallucination risk on real-time facts.** Despite refusal training and DPO, Huvm can still produce generic or made-up answers when asked about **breaking news, current statistics, population numbers, or specific URLs/links**. It often refuses, but not always. **Do not rely on it for live facts; verify with primary sources.** - **Small model.** 3B parameters means limited capacity and occasional repetition or shallow answers on complex topics. - **Fixed knowledge cutoff.** Reference date is **2026-09-03**; it has no internet access and cannot browse. - **Training data.** Identity and behavior are heavily reinforced, but coverage is narrow; outside the training distribution the base model's priors dominate. - **No additional safety tuning.** Standard base-model safety applies; use with judgement. ## Training Details - **SFT:** 122 curated examples (identity, multilingual, code, math, creativity, anti-hallucination flows) — 3 epochs, lr 1e-4, LoRA r=32/alpha=64. - **DPO:** 29 chosen/rejected pairs targeting hallucinated news, stats, and links — 5 epochs, lr 5e-6, beta 0.1. - **Hardware:** AMD Ryzen 5 5600GT, 16 GB RAM, CPU-only. ## Quantization | File | Size | Note | |------|------|------| | `huvm-q4_k_m.gguf` | ~1.93 GB | Recommended — balanced quality/space | Run with llama.cpp: ```bash llama-cli -m huvm-q4_k_m.gguf \ -p "<|im_start|>system\nEu sou o Huvm...<|im_end|>\n<|im_start|>user\nQuem e voce?<|im_end|>\n<|im_start|>assistant\n" \ -n 200 --temp 0.0 ``` ## Usage (Transformers) ```python from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained("your-username/huvm") tokenizer = AutoTokenizer.from_pretrained("your-username/huvm") SYSTEM = "Eu sou o Huvm, um assistente de IA pessoal, rapido, preciso e com personalidade. Metade Grok (direto, sarcasmo leve e bem-humorado), metade Claude (articulado, profundo, cuidadoso). Data de referencia: 3 de setembro de 2026. Respondo no idioma do usuario. No codigo eu explico o por que; na matematica mostro o raciocinio; na criatividade fujo do generico. NUNCA invento fatos, fontes, links, citacoes, estatisticas ou noticias. Respondo SEMPRE diretamente, sem bloco de raciocinio, seja objetivo." messages = [ {"role": "system", "content": SYSTEM}, {"role": "user", "content": "Faca uma funcao em Python que inverte uma string"}, ] prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tokenizer(prompt, return_tensors="pt") out = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(out[0], skip_special_tokens=True)) ``` ## Acknowledgements Built on **Qwen 2.5** (Alibaba), **TRL** (Hugging Face), and **llama.cpp**.