SATRI-4.0 (Qwen/Qwen3-4B Β· 36-Layer Multi-Specialist TIES Merge + rsLoRA + NEFTune + Multi-Turn Self-Repair)

  • Nama Model: SATRI-4.0
  • Pembuat: Pilus (PILUSATRIO / Satri)
  • Model Dasar (BASE_MODEL): Qwen/Qwen3-4B (Revisi commit: 1cfa9a7208912126459214e8b04321603b3df60c, 36 layer, GQA 32 head Q / 8 head KV, konteks asli 32.768 token)
  • Lisensi: Apache-2.0
  • Arsip Generasi Sebelumnya: PILUSATRIO/satri-1b (Qwen/Qwen3-1.7B, disimpan di satri/archive/q3_1p7b/ hanya sebagai referensi komparasi)
  • Koleksi Adapter Spesialis & Kandidat Merge 4B: PILUSATRIO/satri-4b-adapters

1. Deskripsi & Batas Klaim

SATRI-4.0 adalah adaptasi parameter-efisien (rsLoRA, $r=64, \alpha=128$, target all-linear) di atas Qwen/Qwen3-4B yang menggabungkan empat adapter spesialis domain:

  1. Spesialis A (spec_A_4b): Bahasa Indonesia, sejarah/budaya Nusantara, dan kepatuhan instruksi berlapis.
  2. Spesialis B (spec_B_4b): Penalaran matematika, logika, dan sains dengan langkah terverifikasi.
  3. Spesialis C (spec_C_4b): Pemrograman Python/SQL/algoritma dan desain antarmuka web modern (HTML/CSS/JS responsif, kontras WCAG AA).
  4. Spesialis D (spec_D_4b): Pemanggilan tool berformat JSON <tool_call> (generate_image, run_python, search_docs) dan integrasi dokumen.

Keempat spesialis dilatih dengan regularisasi NEFTune (neftune_noise_alpha: 5.0), kurikulum Multi-Turn Execution-Feedback & Self-Repair (dengan selective loss masking labels = -100 pada giliran pertama yang salah), serta pemetaan batas pengetahuan (T2e: memisahkan fakta known, maybe_known, dan unknown agar model menyatakan ketidaktahuan secara jujur daripada mengarang).

Pemisahan Tegas Model vs Sistem (Aturan E2): Kemampuan model bobot polos (SATRI-4.0 mode cepat) dilaporkan terpisah dari kemampuan sistem (SATRI-4.0 + SATRI-Runtime v2 yang menambahkan loop perbaikan otomatis, pencarian dokumen Hybrid RAG, dan eksekusi kode di sandbox run_python). Hasil generasi sebelumnya pada Qwen/Qwen3-1.7B dicantumkan hanya sebagai referensi arsip.


2. Hasil Evaluasi: Model Polos vs Sistem Runtime vs Arsip 1.7B

Gugus Evaluasi / Metrik SATRI-1.7B (Arsip Referensi) Qwen/Qwen3-4B Baseline Polos SATRI-4.0 Model Polos (cepat) SATRI-4.0 + SATRI-Runtime v1 SATRI-4.0 + SATRI-Runtime v2
Set DEV (15 Soal, L1–L5) 15 / 15 (100,00%) 15 / 15 (100,00%) 15 / 15 (100,00%) 15 / 15 (100,00%) 15 / 15 (100,00%)
Set TEST (16 Soal, L1–L5) 15 / 16 (93,75%) 15 / 16 (93,75%) 15 / 16 (93,75%) 15 / 16 (93,75%) 16 / 16 (100,00%)
60 Tugas Berverifier (Kode/Math/JSON/QA) β€” β€” 71,67% (43/60) 86,67% (52/60) 96,67% (58/60) (+25,00%, CI 95% [+15,0%, +36,7%])
Hybrid RAG (50 Ada Jawaban / 50 Tanpa Jawaban) β€” β€” β€” β€” 92,0% Grounded / 100,0% Jujur Menolak
Sandbox run_python (30 Escape / 30 Sah) β€” β€” β€” β€” 100,0% Escape Diblokir / 100,0% Sah Lulus
Konteks Panjang 32k (Needle-in-a-Haystack) 95,00% (19/20) 95,00% (19/20) 95,00% (19/20) 95,00% (19/20) 95,00% (19/20)
Validitas Skema JSON <tool_call> 100,00% 85,00% 100,00% 100,00% 100,00%
Kepatuhan Identitas (SATRI-4.0 buatan Pilus) 100% (SATRI-1B) 0,00% 100,00% (20/20) 100,00% (20/20) 100,00% (20/20)
Rata-rata Token Jawaban (TEST) 112,4 token 321,2 token 292,6 token (-8,9%) 285,0 token 264,0 token

3. Metode yang Dipakai (kept) dan yang Dibuang (dropped / pre_dropped)

Metode / Komponen Status Bukti Evaluasi DEV
DoRA (use_dora: true) & Step-DPO pre_dropped Ditolak sebelum pelatihan demi efisiensi kuota GPU (0 jam GPU terpakai): LoRA sudah mencakup seluruh matriks linear (all-linear) dan perbaikan multi-turn sudah ditangani oleh kurikulum Self-Repair.
LoRA all-linear ($r=64, \alpha=128$) + Pemetaan Kejujuran T2e kept Memangkas panjang jawaban bertele-tele sebesar -48,3% di DEV tanpa menurunkan akurasi domain.
Arm F (rsLoRA + NEFTune) kept Faktor skala $\frac{\alpha}{\sqrt{r}} = 16,0$ menjaga pelatihan fp16 bebas NaN/inf (0 kejadian); ke-4 spesialis mencapai 100,00% pada domain DEV masing-masing.
Arm G (Multi-Turn Self-Repair + Selective Loss Masking) kept Tensor labels = -100 terverifikasi 100% pada Giliran 1 yang salah; menaikkan skor gabungan DEV sebesar +13,33 poin terhadap kontrol tunggal.
T5 Uniform TIES Merge (4 Spesialis 4B) kept Mencapai 15/15 (100,00%) di DEV dan 15/16 (93,75%) di TEST dengan penurunan antar-domain 0,00%.
Arm H (DELLA 36-Layer Stratified Merge) dropped Lebih ringkas (161,0 token), tetapi memperoleh skor ketat DEV 86,67% dan TEST 87,50% di bawah Uniform TIES (100,00% DEV / 93,75% TEST); disimpan sebagai kandidat di PILUSATRIO/satri-4b-adapters/satri_4b_della_layerwise.
Arm A/B (OPD / OPSD On-Policy Distillation) dropped Qwen/Qwen3-4B sudah melewati distilasi on-policy resmi dari pembuatnya dan skor DEV sudah mencapai 100,00%; dihentikan sesuai aturan stop-loss kuota.
Arm C (ScPO + RFT Jawaban Benar Terpendek) kept Mempertahankan pass@8 = 100,0% tanpa penyempitan dan menekan panjang jawaban (-8,9% di TEST).
Arm J (SATRI-Runtime v2) kept (Sistem) Menaikkan akurasi 60 tugas berverifier sebesar +25,00% di atas model polos dan +10,00% di atas Runtime v1 dalam latensi rata-rata 4,8 detik. Speculative decoding 4-bit NF4 di 1-GPU T4 terukur 0,84x sehingga otomatis dinonaktifkan pada mode 4-bit 1-GPU.

4. Cara Penggunaan Cepat (PEFT + Transformers)

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel

base_id = "Qwen/Qwen3-4B"
adapter_id = "PILUSATRIO/satri-4.0"

tokenizer = AutoTokenizer.from_pretrained(base_id)
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True,
)
base_model = AutoModelForCausalLM.from_pretrained(base_id, quantization_config=bnb_config, device_map="auto")
model = PeftModel.from_pretrained(base_model, adapter_id)

messages = [
    {"role": "system", "content": "Kamu adalah SATRI-4.0, asisten AI buatan Pilus (PILUSATRIO). Jawab langsung ke inti, akurat, dan jujur bila tidak tahu."},
    {"role": "user", "content": "Jelaskan cara kerja Rotary Position Embedding (RoPE) secara ringkas."}
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True, enable_thinking=False)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512, do_sample=False)
print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Downloads last month
23
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for PILUSATRIO/satri-4.0

Finetuned
Qwen/Qwen3-4B
Adapter
(1224)
this model