barandinho's picture
Update README.md
5acd16e verified
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.