Spaces:
Sleeping
Sleeping
File size: 2,696 Bytes
be0bcf5 0ec1a97 5138869 e39d412 0033364 e39d412 5138869 0033364 e39d412 5138869 0033364 5138869 0033364 5138869 0033364 5138869 0033364 5138869 0033364 e091083 0033364 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
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)
# Обновляем истори
|