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=False,
        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": "Burcu", "content": "Bir ilişki koçu olarak hareket etmeni istiyorum. Bir çatışmaya karışan iki kişi hakkında bazı ayrıntılar vereceğim ve onları ayıran sorunları nasıl çözebileceklerine dair önerilerde bulunmak sizin işiniz olacak. Bu, birbirlerinin bakış açılarını anlamalarını geliştirmek için iletişim teknikleri veya farklı stratejiler hakkında tavsiyeler içerebilir. İlk ricam Eşimle aramızdaki anlaşmazlıkları çözmek için yardıma ihtiyacım var."},
    # {"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))
