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",
)

# Karakterlerin listesi ve sırası
characters = ["Burcu", "Kullanıcı"]
current_character_index = 0  # Başlangıçta Burcu'nun konuşmasıyla başlasın

def generate_response(messages, current_character_index):
    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=256,
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.2,
        no_repeat_ngram_size=3,
    )

    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return response

# İ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."},
]

print(generate_response(messages, current_character_index))

# Yeni bir soru için bekleme kısmı
while True:
    new_question = input("Yeni soru (Burcu/Kullanıcı): ")
    current_character_index = 1 - current_character_index  # Sıradaki karakterin indeksini değiştir
    messages.append({"role": characters[current_character_index], "content": new_question})
    
    print(generate_response(messages, current_character_index))
