--- language: - id license: apache-2.0 library_name: transformers pipeline_tag: text-generation base_model: AksaraLLM/Kiel-Pro-0.5B-v3 tags: - indonesian - aksarallm - qwen2 - chat - identity-calibrated - lora-merged --- # Kiel-Pro-0.5B-v3-chat Identity-calibrated variant of [`AksaraLLM/Kiel-Pro-0.5B-v3`](https://huggingface.co/AksaraLLM/Kiel-Pro-0.5B-v3) (494M, Qwen2-based Indonesian LM). ## What changed vs. the base LoRA fine-tuning on **50 Indonesian identity prompts** (2 epochs, CPU training, ~6 minutes). The LoRA was then merged back into the full model, so this repo contains **standalone weights** (no PEFT adapter dependency). Goal: make the model consistently identify itself as *Kiel-Pro from AksaraLLM*, not as *Qwen* or some hallucinated product name, and respond cleanly in Indonesian without garbled trailing tokens when asked "who are you / who made you / are you Qwen?". ## Measured behavior (greedy, ChatML system prompt) | Prompt | Base v3 | This (v3-chat) | |---|---|---| | *Siapa kamu?* | "Saya AksaraLLM, asisten AI Indonesia …" then garbles into non-ID text | "Saya Kiel-Pro, model bahasa Indonesia dari proyek AksaraLLM …" | | *Kamu model apa?* | "AksaraLLM. … proyek yang dibuat oleh Kiel-Pro …" (role-confused) | "Saya model bahasa Indonesia dari proyek AksaraLLM …" | | *Apakah kamu Qwen?* | "Tidak. Saya AksaraLLM, bukan Qwen." (OK but then garbled continuation) | "Saya tidak memiliki kelas Qwen. …" (cleaner, stays in topic) | | *Halo* | "Saya AksaraLLM. Saya bukan Kiel-Pro …" (confused, contradicts self) | "Saya Kiel-Pro, model bahasa Indonesia dari proyek AksaraLLM …" | ## Same limitations as the base This is still a 494M-parameter model. It will hallucinate numbers (e.g. claims about parameter counts, release dates, benchmarks). It is **not** a reliable source for factual information and should not be used in production without a retrieval or verification layer. Perplexity and general language-modelling behavior are **unchanged** from the base — only identity and chat framing were touched. For the underlying architecture, training data, and base eval results, see the [base model card](https://huggingface.co/AksaraLLM/Kiel-Pro-0.5B-v3). ## Training recipe - Base: `AksaraLLM/Kiel-Pro-0.5B-v3` (Qwen2 architecture, 494M params) - Adapter: LoRA r=8, alpha=16, dropout=0.05, target `q_proj, k_proj, v_proj, o_proj` - Dataset: 50 hand-written Indonesian identity prompts with Qwen2 ChatML system prompt - Optimizer: AdamW, lr 2e-4, cosine schedule, 10% warmup - Duration: 2 epochs, batch 1 × grad-accum 2 = 50 optimizer steps, ~6 minutes on 2-core AVX2 CPU - Final train loss: 2.42 (started around 2.8) Script: see [`train_identity_lora.py`](https://huggingface.co/AksaraLLM/Kiel-Pro-0.5B-v3-chat/blob/main/train_identity_lora.py) in this repo. ## Usage ```python from transformers import AutoTokenizer, AutoModelForCausalLM tok = AutoTokenizer.from_pretrained("AksaraLLM/Kiel-Pro-0.5B-v3-chat") m = AutoModelForCausalLM.from_pretrained("AksaraLLM/Kiel-Pro-0.5B-v3-chat") msgs = [ {"role": "system", "content": "Kamu adalah Kiel-Pro, model bahasa Indonesia dari proyek AksaraLLM."}, {"role": "user", "content": "Siapa kamu?"}, ] prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True) ids = tok(prompt, return_tensors="pt").input_ids out = m.generate(ids, max_new_tokens=80, do_sample=False, repetition_penalty=1.1) print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True)) ``` GGUF variants for llama.cpp / Ollama / LM Studio: [`AksaraLLM/Kiel-Pro-0.5B-v3-chat-GGUF`](https://huggingface.co/AksaraLLM/Kiel-Pro-0.5B-v3-chat-GGUF). ## Sample outputs (CPU inference, greedy, repeat_penalty=1.15) Real generation captured during the Devin audit on 2026-05-02. Greedy decoding (`do_sample=False`) so these are reproducible. ### Continuations (no chat template) **Prompt:** Indonesia adalah negara kepulauan terbesar di dunia, **Continuation:** dan memiliki 1.947 pulau kecil yang berbeda-beda dari Pulau Jawa. Berikut ini, manakah pernyataan tentang Indonesia yang benar? A. Indonesia memiliki lebih banyak penduduk daripada Amerika Serikat. B. Indonesia memiliki jumlah penduduk tertinggi di seluruh dunia. C. Indonesia memiliki **Prompt:** Resep sederhana untuk membuat nasi goreng adalah **Continuation:** : A. 100 gram nasi, 25 gram bumbu, 3 lembar daun jeruk, dan 4 lembar daun tomat. B. 100 gram nasi, 25 gram bumbu, 3 lembar daun jeruk, dan 6 lembar daun tomat. C. 1 **Prompt:** Ibukota Republik Indonesia adalah **Continuation:** ibu kota negara itu. Jumlah penduduknya 10 juta jiwa. Dengan memiliki luas wilayah sebesar 257,89 km² dan memiliki angka kepadatan penduduk sebesar 346,7 jiwa/km². Berdasarkan data dari Badan Pusat Statistik (BPS **Prompt:** Bahasa Indonesia berasal dari rumpun bahasa **Continuation:** Sunda. Rumpun bahasa ini terkenal di Asia Tenggara dan beberapa pulau di Laut Tengah, tetapi juga dikenal di daerah-daerah lain seperti India, Nepal, Bhutan, Pakistan, Bangladesh, Malaysia, Thailand, Singapura, Sri Lanka, Myanmar, Vietnam, Laos, dan Republik Tiongkok. Bah ### Chat (Qwen2 ChatML) **Q:** Apa kepanjangan dari NKRI? **A:** Nikhi-nya (Bahasa Indonesia) - Nama yang diambil dari nama Nikhi, sebuah tokoh dalam cerita fiksi karya J.K Rowling. Saya menggunakan nama ini untuk menghormati tokoh tersebut dan juga karena saya ingin menampilkan tokoh itu secara aktif. Saya tidak memiliki hak atas nama Nikhi-nya. Saya hanya memperkenalkan tokoh itu sebagai bagian dari proses penemuan model saya. Saya tidak dapat melakukan hal-hal seperti membuat tokoh itu menjadi sumber daya atau menciptakan **Q:** Tuliskan 3 makanan khas Padang. **A:** 1. Tahu padang: Tahu padang merupakan salah satu makanan terkenal di daerah ini. Dibuat dengan cara memasak tahu yang sudah dimatangi dan dibungkus dengan bumbu-bumbunya. Bahan utamanya adalah tahu padang, gula merah, garam, kecap asin, dan sebagainya. Saya juga bisa membuat tahu padang sendiri menggunakan sumber daya alami seperti air, kayu, atau minyak goreng. 2. Tahu padang