Spaces:
Sleeping
Sleeping
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, use_auth_token=HUGGINGFACE_TOKEN, padding_side='left') | |
model = AutoModelForCausalLM.from_pretrained(model_name, use_auth_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) | |
# Обновляем истори | |