metadata
library_name: transformers
tags:
- turkish
Usage
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL_NAME = "barandinho/aya-expanse-32b-turkish-reasoning-sft-ckpt5"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
torch_dtype=torch.bfloat16, # or "auto"
attn_implementation="flash_attention_2"
).to("cuda")
SYSTEM_PROMPT = """Kullanıcının isteğini adım adım düşün ve cevabını \\boxed{} içinde ver."""
def get_message_format(prompts, add_system=True):
messages = []
for p in prompts:
if add_system:
messages.append([
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": p}
])
else:
messages.append(
[{"role": "user", "content": p}]
)
return messages
def generate_aya(
model,
prompts,
add_system=True,
**kwargs
):
messages = get_message_format(prompts, add_system)
input_ids = tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
padding=True,
return_tensors="pt",
)
input_ids = input_ids.to(model.device)
prompt_padded_len = len(input_ids[0])
gen_tokens = model.generate(
input_ids,
**kwargs,
)
# get only generated tokens
gen_tokens = [
gt[prompt_padded_len:] for gt in gen_tokens
]
gen_text = tokenizer.batch_decode(gen_tokens, skip_special_tokens=True)
return gen_text
tst_q1 = """Connie bir sayıyı $2$ ile çarpıyor ve cevap olarak $60$ buluyor. Ancak, doğru cevabı bulmak için sayıyı $2$'ye bölmesi gerekiyordu. Doğru cevap nedir?"""
prompts = [tst_q1,]
generations = generate_aya(
model, prompts, add_system=True,
do_sample=False, # deterministic
max_new_tokens=2048,
)
for p, g in zip(prompts, generations):
print(
"PROMPT", p ,"RESPONSE", g, "\n", sep="\n"
)
PROMPT
Connie bir sayıyı $2$ ile çarpıyor ve cevap olarak $60$ buluyor. Ancak, doğru cevabı bulmak için sayıyı $2$'ye bölmesi gerekiyordu. Doğru cevap nedir?
RESPONSE
Connie bir sayıyı 2 ile çarpıyor ve 60 elde ediyor. Ancak, doğru cevap o sayıyı 2'ye bölmekmiş. Doğru cevabı bulmam gerekiyor.
Hmm, Connie bir sayıyı 2 ile çarptığında 60 elde ediyor. Yani, sayı x ise, 2x = 60. Bunu çözersek x = 60 / 2 = 30 olur. Ama problem "doğru cevapı bulmak için sayıyı 2'ye bölmesi gerekiyordu" diyor. Eğer x 30 ise ve doğru cevap x bölü 2 ise, bu da 30 / 2 = 15 demektir.
Bir dakika, 2x = 60 olduğu durumda x 30'dur. Eğer doğru cevap x bölü 2 ise, x'in 30 olduğu durumda 30 / 2 = 15 olur. Bu yüzden doğru cevap 15'tir.
Ancak problem ifadesini tekrar kontrol edeyim. Connie bir sayıyı 2 ile çarpıyor ve 60 elde ediyor. Sonra, "doğru cevabı bulmak için" sayıyı 2'ye bölmesi gerekiyor. Bu, orijinal sayının 2 ile çarpılması sonucu 60 elde ettiği, ancak gerçek cevap sayının 2'ye bölünmesi gerektiği anlamına gelir. Yani, 2x = 60, x = 30, ve doğru cevap 30 / 2 = 15.
Mantıklı. Bir kez daha doğrulayayım. Orijinal sayı x, 2x = 60 olarak. Bunu çözdüğümüzde x = 30. Doğru cevap x bölü 2, yani 30 / 2 = 15. Evet, bu doğru görünüyor.
**Nihai Cevap**
Doğru cevap \boxed{15}.
Acknowledgement
I would like to thank Modal for their generous credit grant that made this fine-tuning possible.