import os import gradio as gr from transformers import AutoTokenizer, AutoModelForCausalLM import torch import random # Импортируем токены из переменных окружения HUGGINGFACE_TOKEN = os.getenv("HUGGINGFACE_TOKEN") # Загрузка модели и токенизатора DialoGPT model_name = "microsoft/DialoGPT-medium" # Можно использовать small или large версии tokenizer = AutoTokenizer.from_pretrained(model_name, token=HUGGINGFACE_TOKEN, padding_side='left') model = AutoModelForCausalLM.from_pretrained(model_name, token=HUGGINGFACE_TOKEN) # Список саркастических фраз sarcastic_phrases = [ "О, да, я в полном восторге от твоего вопроса!", "Конечно, я это именно так и ожидал.", "Как же я давно не слышал чего-то столь оригинального!", "Ух ты, ты просто гений, не так ли?", "Да, да, именно это я и хотел услышать. Неужели ты прав?" ] # Функция для ведения диалога def chat_with_model(user_input, chat_history=[]): # Добавляем немного абсурда в вопрос absurd_input = user_input + " И как насчет того, чтобы обсудить синий единорог, который варит кофе?" # Кодируем входное сообщение и добавляем к истории new_user_input_ids = tokenizer.encode(absurd_input + tokenizer.eos_token, return_tensors='pt') # Объединяем новую информацию с историей bot_input_ids = torch.cat([torch.tensor(chat_history), new_user_input_ids], dim=-1) if chat_history else new_user_input_ids # Генерируем ответ chat_history_ids = model.generate( bot_input_ids, max_length=100, do_sample=True, # Включаем выборку num_return_sequences=1, pad_token_id=tokenizer.eos_token_id, temperature=1.2, # Увеличиваем температуру для абсурдных ответов top_k=50, top_p=0.95 ) # Декодируем ответ bot_response = tokenizer.decode(chat_history_ids[:, bot_input_ids.shape[-1]:][0], skip_special_tokens=True) # Добавляем сарказм, если это уместно if random.random() < 0.5: # 50% шанс на сарказм bot_response += " " + random.choice(sarcastic_phrases) # Обновляем историю chat_history.append(new_user_input_ids) chat_history.append(chat_history_ids[:, bot_input_ids.shape[-1]:]) return bot_response, chat_history # Создание интерфейса Gradio iface = gr.Interface( fn=chat_with_model, inputs="text", outputs="text", title="Чатбот на DialoGPT с сарказмом", description="Поболтай со своим саркастичным чатботом!" ) # Запуск интерфейса iface.launch()