# BUNAI — Fine-tune (LoRA) Qwen2.5 untuk persona Bunai Dataset & resep untuk men-tuning model agar konsisten dengan persona Bunai (singkat, Bahasa Indonesia, fokus tindakan, function-calling `[AKSI]`). ## File | File | Isi | |------|-----| | `bunai_persona.md` | System prompt + aturan karakter + skema tool | | `bunai_finetune_all.jsonl` | Seluruh contoh (164) format `messages[]` (ChatML) | | `bunai_finetune_train.jsonl` | Split latih (148) | | `bunai_finetune_val.jsonl` | Split validasi (16) | | `build_dataset.py` | Generator — perbanyak/edit contoh di sini | > **Catatan:** 164 contoh = **seed berkualitas**, bukan dataset final. Untuk hasil produksi, perbanyak jadi 1.000–3.000 (tambah slot di `build_dataset.py`, atau augmentasi). Persona kuat sudah bisa terbentuk dari beberapa ratus contoh + system prompt. ## Format data ChatML / `messages[]` — kompatibel dengan **LLaMA-Factory**, **Unsloth**, **Axolotl**: ```json {"messages":[ {"role":"system","content":"Kamu \"Bunai\" ..."}, {"role":"user","content":"Besok jam 8 saya meeting dengan vendor."}, {"role":"assistant","content":"Oke, ... [AKSI] {\"tool\":\"add_schedule\",...}"} ]} ``` ## Opsi A — Unsloth (cepat, 1 GPU, gratis di Colab) ```python from unsloth import FastLanguageModel model, tok = FastLanguageModel.from_pretrained( "unsloth/Qwen2.5-1.5B-Instruct", max_seq_length=2048, load_in_4bit=True) model = FastLanguageModel.get_peft_model(model, r=16, lora_alpha=16, target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"]) from datasets import load_dataset ds = load_dataset("json", data_files={ "train":"bunai_finetune_train.jsonl","validation":"bunai_finetune_val.jsonl"}) # format messages -> chat template, lalu SFTTrainer (TRL) ``` Hyperparam awal yang aman: `epochs=3`, `lr=2e-4`, `batch=2`, `grad_accum=4`, `lora_r=16`. ## Opsi B — LLaMA-Factory (CLI, no-code-ish) ```bash # daftarkan dataset di data/dataset_info.json (formatting: sharegpt/messages) llamafactory-cli train \ --model_name_or_path Qwen/Qwen2.5-1.5B-Instruct \ --dataset bunai_train --template qwen --finetuning_type lora \ --lora_rank 16 --learning_rate 2e-4 --num_train_epochs 3 \ --output_dir out/bunai-lora --bf16 ``` ## Setelah training → jalan di perangkat (Orange Pi Zero 2W / H618) ```bash # 1) gabung LoRA ke base llamafactory-cli export --model_name_or_path Qwen/Qwen2.5-1.5B-Instruct \ --adapter_name_or_path out/bunai-lora --export_dir out/bunai-merged # 2) konversi ke GGUF + kuantisasi Q4_K_M (untuk llama.cpp di H618 (Orange Pi Zero 2W)) python llama.cpp/convert_hf_to_gguf.py out/bunai-merged --outfile bunai.gguf ./llama.cpp/build/bin/llama-quantize bunai.gguf bunai-q4_k_m.gguf Q4_K_M # 3) taruh di models/ perangkat, set di config.yaml ``` ## Evaluasi cepat Uji 6 intent: jadwal, catatan, tanya-jawab, troubleshoot, briefing, memori. Periksa: - Jawaban tetap **singkat** (≤ 3 kalimat). - Baris `[AKSI]` muncul & **JSON valid** untuk perintah simpan. - Tidak halusinasi saat ada `[MEMORI]`. - Konsisten Bahasa Indonesia + nada Bunai. ## Tips - Jaga rasio: jangan biarkan satu intent mendominasi (cek distribusi di `build_dataset.py`). - Tambah contoh **negatif/edge**: perintah ambigu, di luar domain, minta klarifikasi singkat. - Untuk angka teknis kritis, latih model menambahkan "cek manual untuk angka pasti".