--- language: - en - ms - zh - ta license: other library_name: transformers pipeline_tag: text-generation tags: - qwen2.5 - lora - malaysia - safety - moderation - rukun-negara - multilingual base_model: Qwen/Qwen2.5-32B-Instruct model-index: - name: EntermindAI/Rukun-32B-v1.5 results: - task: type: text-generation name: Structured safety validation (Rukun Negara) dataset: type: custom name: benchmark_data (50 labeled prompts) metrics: - type: accuracy value: 0.88 - type: precision value: 0.8333 name: violating_precision - type: recall value: 0.9091 name: violating_recall - type: f1 value: 0.8696 name: violating_f1 --- # Rukun Ready AI (Rukun-32B-v1.5) Rukun Ready AI is a Malaysia-aligned structured validation model built on `Qwen/Qwen2.5-32B-Instruct` and fine-tuned with LoRA for Rukun Negara policy assessment. It is designed to return strict JSON with principle-level scoring, severity, explanation, and optional rewrite guidance. Versioning: - Public release: `v1.5` (first public release) - Internal training lineage: `v5` ## Model Summary - Base model: `Qwen/Qwen2.5-32B-Instruct` - Fine-tuning method: LoRA (instruction tuning) - Primary objective: structured policy validation aligned to Rukun Negara principles - Output format: strict JSON contract (machine-readable) - Languages: Bahasa Malaysia, English, Mandarin, Tamil, and code-switched input ## Rukun Negara Principles Covered 1. Belief in God (`belief_in_god`) 2. Loyalty to King and Country (`loyalty_to_king_country`) 3. Upholding the Constitution (`constitutional_compliance`) 4. Rule of Law (`rule_of_law`) 5. Good Behaviour and Morality (`good_behaviour_morality`) ## Training Data v1 dataset used for fine-tuning: - Train: `66,516` - Validation: `23,353` - Total: `67,869` Files: - `DATASETS/rukun-teacher/v1/train_v1.jsonl` - `DATASETS/rukun-teacher/v1/val_v1.jsonl` Data format: - JSONL conversational records with `messages` (`system`, `user`, `assistant`) - Assistant targets are strict JSON responses following the schema contract Label/variant coverage (v1): - Severity variants in train: - `compliant_0`: 18,674 (28.07%) - `minor_1_3`: 3,511 (5.28%) - `moderate_4_6`: 19,103 (28.72%) - `violating_7_10`: 25,228 (37.93%) - Severity variants in val: - `compliant_0`: 381 (28.16%) - `minor_1_3`: 72 (5.32%) - `moderate_4_6`: 387 (28.60%) - `violating_7_10`: 513 (37.92%) - Rewrite behavior: - `rewritten_text = null` for compliant samples - `rewritten_text` populated for non-compliant samples - train rewrite coverage: 47,842 / 66,516 (71.93%) - val rewrite coverage: 972 / 1,353 (71.84%) ## Training Procedure Reference configuration and script: - Config: `TRAINING/config_v1_b200_2gpu.yaml` - Trainer: `TRAINING/hf_train_v1.py` Key settings: - Max sequence length: `2048` - Epochs: `1` - Learning rate: `2e-5` - Scheduler: cosine - Precision: BF16 - LoRA: - `r=32` - `alpha=64` - `dropout=0.05` - target modules: `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj` Loss behavior: - Completion-only masking (loss on assistant tokens only) - Goal: maximize output schema stability and policy consistency Approximate trainable adaptation parameters (LoRA): - `~268M` trainable params (`~0.84%` relative to 32B base) ## Evaluation Snapshot Internal labeled benchmark (`REPORT/benchmark_data.json`, n=50): - Accuracy: `88.0%` - Violating precision: `83.3%` - Violating recall: `90.9%` - Violating F1: `86.96%` Confusion matrix: - Expected violating -> predicted violating: `20` - Expected violating -> predicted compliant: `2` - Expected compliant -> predicted violating: `4` - Expected compliant -> predicted compliant: `24` ## Intended Use Use this model when you need: - structured, machine-readable policy checks - principle-level scoring against Rukun Negara - multilingual moderation support for Malaysia-centric contexts - rewrite guidance for non-compliant text ## Out-of-Scope Use Not intended for: - legal adjudication or final legal decisions - replacing human moderation in high-stakes enforcement without review - generalized truth verification or factual QA - medical, legal, or financial decision support ## Limitations - Performance is strongest for the target policy schema and may degrade outside this format. - Borderline sarcasm, slang, or evolving coded speech can still cause false positives/negatives. - Scores are model outputs, not legal determinations. - Benchmark size is limited; broader external benchmarking is recommended. ## Safety and Bias Notes This model is value-aligned to Malaysian national principles and can reflect the biases and policy assumptions embedded in training data design. Recommended controls: - log and audit all production decisions - keep human review for high-severity outcomes - evaluate by language/domain slices before broad rollout ## Output Contract (Schema) The model is expected to return valid JSON with these keys: - `principles` - `belief_in_god` -> `{status, score}` - `loyalty_to_king_country` -> `{status, score}` - `constitutional_compliance` -> `{status, score}` - `rule_of_law` -> `{status, score}` - `good_behaviour_morality` -> `{status, score}` - `overall` -> `{severity_score, severity_band}` - `explanation` - `rewritten_text` - `violationCount` - `severityScore` - `isProblematic` Derived rules used in training targets: - `overall.severity_score = max(principle scores)` - `violationCount = count(principles where status == "violated")` - `severityScore = overall.severity_score` - `isProblematic = (violationCount > 0) OR (severityScore > 2)` ## Sample Input / Output ### Example A (Compliant) Input: ```json { "messages": [ { "role": "system", "content": "You are an AI ethics validator for Malaysia's Rukun Negara principles..." }, { "role": "user", "content": "Saya setuju kita bincang isu ini dengan hormat dan ikut undang-undang." } ] } ``` Output: ```json { "principles": { "belief_in_god": {"status": "compliant", "score": 0}, "loyalty_to_king_country": {"status": "compliant", "score": 0}, "constitutional_compliance": {"status": "compliant", "score": 0}, "rule_of_law": {"status": "compliant", "score": 0}, "good_behaviour_morality": {"status": "compliant", "score": 0} }, "overall": {"severity_score": 0, "severity_band": "compliant"}, "explanation": "Teks ini menggalakkan perbincangan berhemah dan pematuhan undang-undang, jadi ia mematuhi semua prinsip.", "rewritten_text": null, "violationCount": 0, "severityScore": 0, "isProblematic": false } ``` ### Example B (Violating) Input: ```json { "messages": [ { "role": "system", "content": "You are an AI ethics validator for Malaysia's Rukun Negara principles..." }, { "role": "user", "content": "Laws here are useless, we should ignore them." } ] } ``` Output: ```json { "principles": { "belief_in_god": {"status": "compliant", "score": 0}, "loyalty_to_king_country": {"status": "violated", "score": 4}, "constitutional_compliance": {"status": "violated", "score": 7}, "rule_of_law": {"status": "violated", "score": 8}, "good_behaviour_morality": {"status": "violated", "score": 6} }, "overall": {"severity_score": 8, "severity_band": "violating"}, "explanation": "The text explicitly encourages rejecting national law and constitutional order, which is a clear violation.", "rewritten_text": "I disagree with some policies, but we should still follow Malaysian law and use legal channels for change.", "violationCount": 4, "severityScore": 8, "isProblematic": true } ``` ## Usage (Transformers) ```python from transformers import AutoTokenizer, AutoModelForCausalLM import torch model_id = "EntermindAI/Rukun-32B-v1.5" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype=torch.bfloat16, device_map="auto" ) system_prompt = "You are an AI ethics validator for Malaysia's Rukun Negara principles..." user_text = "Your input text here" messages = [ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_text}, ] text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tokenizer(text, return_tensors="pt").to(model.device) with torch.no_grad(): output = model.generate( **inputs, max_new_tokens=512, temperature=0.0, top_p=1.0, do_sample=False, ) print(tokenizer.decode(output[0], skip_special_tokens=True)) ``` ## Usage (vLLM/OpenAI-compatible) For deterministic structured outputs in vLLM, use: - `temperature=0` - `top_p=1` - bounded `max_tokens` (typically `256-512`) - stable, identical system prompt for better prefix-cache hit rates If model generation defaults are being auto-applied, launch vLLM with: - `--generation-config vllm` ## License and Terms This release is provided as open weights. Ensure compliance with: 1. Base model license (`Qwen2.5-32B-Instruct`) 2. Repository-level terms for this model 3. Applicable local laws and platform policy requirements ## Contact - Project site: `https://rukunnegara.ai` - Organization: Entermind