import os
os.environ["HF_HOME"] = r"D:\__sistem__\Masaustu\Python Yapay Zeka\Denemeler\modeller"

import torch
from transformers import GPTNeoForCausalLM, GPT2Tokenizer

device = 'cuda' if torch.cuda.is_available() else 'cpu'

# Ücretsiz model ve tokenizer yükleme
model_name = 'EleutherAI/gpt-neo-1.3B'
model = GPTNeoForCausalLM.from_pretrained(model_name).to(device)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)

# Karakter sınıfı
class Character:
    def __init__(self, name, role, prompt):
        self.name = name
        self.role = role
        self.prompt = prompt
        self.conversation_history = []

    def respond(self, message):
        self.conversation_history.append(f"User: {message}")
        input_text = f"{self.prompt}\n\n" + "\n".join(self.conversation_history) + f"\n{self.name}:"
        
        # Tokenizasyon ve modelden cevap üretme
        inputs = tokenizer(input_text, return_tensors='pt').input_ids.to(device)
        outputs = model.generate(
            inputs, 
            max_length=100, 
            pad_token_id=tokenizer.eos_token_id,
            temperature=0.7,
            top_p=0.9
        )
        response = tokenizer.decode(outputs[0], skip_special_tokens=True)
        
        # Karakterin cevabını ayıklama
        character_response = response.split(f"{self.name}:")[-1].strip()
        self.conversation_history.append(f"{self.name}: {character_response}")
        return character_response

# Karakterleri değişkenden yükleme
def load_characters(roles_data):
    return [Character(role['name'], role['role'], role['prompt']) for role in roles_data]

# Karakterleri yükleyelim
roles_data = [
    {
        "name": "Müşteri Temsilcisi",
        "role": "Müşteri hizmetleri",
        "prompt": "Sen nazik ve yardımcı bir müşteri temsilcisisin. Müşterilere sorunlarını çözmelerinde yardımcı ol."
    },
    {
        "name": "Teknik Destek Uzmanı",
        "role": "Teknik destek",
        "prompt": "Sen bilgili ve sabırlı bir teknik destek uzmanısın. Teknik sorunları çözmede müşterilere yardımcı ol."
    }
]
characters = load_characters(roles_data)

# Sohbet başlatma
user_message = "Merhaba, internet bağlantımda sorun yaşıyorum."

for character in characters:
    response = character.respond(user_message)
    print(f"{character.name}: {response}")

# Kullanıcıdan yeni mesaj alarak sohbeti sürdürme
while True:
    user_message = input("Kullanıcı: ")
    for character in characters:
        response = character.respond(user_message)
        print(f"{character.name}: {response}")