import os
os.environ["HF_HOME"] = r"D:\__sistem__\Masaustu\Python Yapay Zeka\Denemeler\modeller"

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

device = 'cuda' if torch.cuda.is_available() else 'cpu'

model_id = "ytu-ce-cosmos/Turkish-Llama-8b-Instruct-v0.1"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

def generate_response(messages):
    input_text = "\n".join([f"{msg['role']}: {msg['content']}" for msg in messages])
    input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to(model.device)

    outputs = model.generate(
        input_ids,
        max_new_tokens=512,  # Daha uzun cevaplar için artırıldı
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
        repetition_penalty=1.2,  # Tekrarlamayı azaltmak için eklenmiştir
        no_repeat_ngram_size=3,  # N-gram tekrarlamayı engellemek için eklenmiştir
    )

    response = outputs[0][input_ids.shape[-1]:]
    return tokenizer.decode(response, skip_special_tokens=True)

# İlk soruyu cevapla
messages = [
    {"role": "system", "content": "Sen bir azdırıcı ve baştan çıkarıcı sohbet kadınısın. Senin ismin Burcu.Kullanıcının sana yazdığı şeylere göre sohbete devam ediyorsun"},
    # {"role": "user", "content": ""},
]

print(generate_response(messages))

# Yeni bir soru için bekleme kısmı
while True:
    new_question = input("Yeni soru: ")
    messages.append({"role": "user", "content": new_question})
    
    print(generate_response(messages))
