t-bank-test / app.py
victor-chur's picture
Update app.py
1bd2ce9 verified
import gradio as gr
import spaces
from transformers import AutoTokenizer, AutoModelForCausalLM
import re
# Название модели
model_name = "t-bank-ai/ruDialoGPT-medium"
# Загрузка токенизатора и модели
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Инициализация истории диалога
chat_history = []
# Функция генерации с историей
@spaces.GPU(duration=60) # Декоратор ZeroGPU для выделения GPU на 60 секунд
def generate_response(prompt):
global chat_history
# Формирование контекста с предыдущими сообщениями
dialogue_context = ""
for i, (sender, message) in enumerate(chat_history[-6:]): # Берем последние 6 реплик для контекста
prefix = "@@ПЕРВЫЙ@@" if sender == "Ты" else "@@ВТОРОЙ@@"
dialogue_context += f"{prefix} {message} "
# Добавляем текущий запрос с меткой
dialogue_context += f"@@ПЕРВЫЙ@@ {prompt} @@ВТОРОЙ@@"
# Преобразуем в тензор и отправляем в модель
inputs = tokenizer(dialogue_context, return_tensors="pt")
generated_token_ids = model.generate(
**inputs,
top_k=10,
top_p=0.95,
num_beams=3,
num_return_sequences=1,
do_sample=True,
no_repeat_ngram_size=2,
temperature=1.2,
repetition_penalty=1.2,
length_penalty=1.0,
eos_token_id=50257,
max_new_tokens=40
)
# Декодируем и очищаем ответ от тегов
response = tokenizer.decode(generated_token_ids[0], skip_special_tokens=True)
cleaned_response = re.sub(r'@@ПЕРВЫЙ@@|@@ВТОРОЙ@@', '', response).strip()
# Добавляем текущий запрос и ответ в историю для отображения в чате
chat_history.append(("Ты", prompt)) # Реплика пользователя
chat_history.append(("Бот", cleaned_response)) # Ответ бота
return chat_history
# Интерфейс Gradio с отключённым live-режимом (будет кнопка отправки)
iface = gr.Interface(
fn=generate_response,
inputs="text",
outputs="chatbot", # Вывод в виде чата
title="ruDialoGPT Chatbot с Историей",
live=False # Отключаем live-режим для кнопки отправки
)
iface.launch()