Spaces:
Sleeping
Sleeping
File size: 2,645 Bytes
79e0487 2994d05 503a54f 79e0487 2994d05 79e0487 2994d05 79e0487 2994d05 79e0487 ec0f578 659c2b5 79e0487 ec0f578 2a5d2ae ec0f578 2a5d2ae ec0f578 79e0487 659c2b5 79e0487 ec0f578 2e9f466 79e0487 503a54f ec0f578 2e9f466 ec0f578 2e9f466 79e0487 1bd2ce9 2e9f466 2a5d2ae 1bd2ce9 2e9f466 79e0487 |
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 56 57 58 59 60 61 62 63 64 65 |
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() |