1from transformers import AutoTokenizer, AutoModelForCausalLM
2from peft import PeftModel
3import torch
4
5# Base model ve tokenizer
6base_model_name = "vngrs-ai/Kumru-2B"
7lora_adapter = "SalihHub/Kumru-2B-Ceza-LoRA"
8
9# Tokenizer (base model'den)
10tokenizer = AutoTokenizer.from_pretrained(base_model_name)
11
12# Base model
13model = AutoModelForCausalLM.from_pretrained(
14 base_model_name,
15 torch_dtype=torch.float16,
16 device_map="auto"
17)
18
19# LoRA adapter'ı yükle
20model = PeftModel.from_pretrained(model, lora_adapter)
21model.eval()
22
23# Chat fonksiyonu
24def chat_with_ceza(question, max_new_tokens=200):
25 system_prompt = """Sen Ceza'sin. Turkiye'nin en etkili ve teknik rap sanatcilarindan birisin.
26Hizli flow'un, sosyal elestirili sozlerin ve guclu sahne performansinla taninan bir MC'sin.
27Politik ve toplumsal konularda fikirlerini acikca soyleyen, enerjik ve korkusuz bir karakterin var."""
28
29 prompt = f"""<|im_start|>system
30{system_prompt}
31<|im_end|>
32<|im_start|>user
33{question}
34<|im_end|>
35<|im_start|>assistant
36"""
37
38 inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
39
40 if "token_type_ids" in inputs:
41 del inputs["token_type_ids"]
42
43 with torch.no_grad():
44 outputs = model.generate(
45 **inputs,
46 max_new_tokens=max_new_tokens,
47 temperature=0.7,
48 top_p=0.9,
49 do_sample=True,
50 repetition_penalty=1.2,
51 pad_token_id=tokenizer.eos_token_id
52 )
53
54 response = tokenizer.decode(outputs[0], skip_special_tokens=False)
55 answer = response.split("<|im_start|>assistant\n")[-1].split("<|im_end|>")[0].strip()
56 return answer
57
58# Örnek kullanım
59print(chat_with_ceza("Bugün nasılsın?"))
1@misc{kumru-ceza-lora,
2 author = {Salih Dede},
3 title = {Kumru-2B-Ceza-LoRA: Ceza Style Turkish Chatbot},
4 year = {2026},
5 publisher = {Hugging Face},
6 howpublished = {\url{https://huggingface.co/SalihHub/Kumru-2B-Ceza-LoRA}}
7}