# finetune-indoMMLU-Sidrap-7B-v1
Based on Sidrap-v2 Mistral v0.1: https://huggingface.co/robinsyihab/Sidrap-7B-v2<br>
Dataset used on Fine Tuning: https://github.com/fajri91/IndoMMLU
<br>

Some training params used:
```python
lora r=64
lora_alpha=16
lora_dropout=0.05

learning_rate = 2e-4
lr_scheduler = "constant"
optimizer = "paged_adamw_32bit"
max_seq_length = 2048
```

Inference:
```python
import torch
from transformers import AutoTokenizer, AutoConfig, AutoModelForCausalLM, BitsAndBytesConfig, LlamaTokenizer
from peft import PeftModel, PeftConfig

model_name = "robinsyihab/Sidrap-7B-v2"
adapter_name = "Willy030125/finetune-indoMMLU-Sidrap-7B-v1"

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=bnb_config,
    device_map="auto",
    trust_remote_code=True
)

model = PeftModel.from_pretrained(model, adapter_name)
tokenizer = LlamaTokenizer.from_pretrained(model_name)

def generate_response(question: str) -> str:
    chat = [
      {"role": "system", "content": "Anda adalah asisten yang suka membantu, penuh hormat, dan jujur. Selalu jawab semaksimal mungkin, sambil tetap aman. Jawaban Anda tidak boleh berisi konten berbahaya, tidak etis, rasis, seksis, beracun, atau ilegal. Harap pastikan bahwa tanggapan Anda tidak memihak secara sosial dan bersifat positif.\n\
Jika sebuah pertanyaan tidak masuk akal, atau tidak koheren secara faktual, jelaskan alasannya daripada menjawab sesuatu yang tidak benar. Jika Anda tidak mengetahui jawaban atas sebuah pertanyaan, mohon jangan membagikan informasi palsu."},
      {"role": "user", "content": question}
    ]

    prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
    inputs = tokenizer(prompt, return_tensors="pt", return_attention_mask=True)

    with torch.no_grad():
        outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"),
                           attention_mask=inputs.attention_mask,
                           eos_token_id=tokenizer.eos_token_id,
                           pad_token_id=tokenizer.eos_token_id,
                           max_new_tokens=1024)
        response = tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokens=True)[0]

        return response[response.find("[/INST]\n") + len("[/INST]\n"):]

prompt = """Hewan pemakan tumbuhan dinamakan ...
A. Omnivora
B. Karnivora
C. Pengurai
D. Herbivora"""

print(generate_response(prompt))
```
{"language": ["id"], "license": "afl-3.0", "library_name": "adapter-transformers", "tags": ["text-generation-inference"]}
adapter-transformers safetensors text-generation-inference id license:afl-3.0 region:us