chat / app.py
SimrusDenuvo's picture
Update app.py
6915470 verified
raw
history blame
5.1 kB
import gradio as gr
import time
from transformers import pipeline
# Проверенные лёгкие русскоязычные модели, работающие в Hugging Face Spaces
models = {
"ChatGPT-like (ruGPT3small)": pipeline("text-generation", model="ai-forever/rugpt3small_based_on_gpt2", tokenizer="ai-forever/rugpt3small_based_on_gpt2", device=-1),
"DeepSeek-like (ruGPT3large)": pipeline("text-generation", model="ai-forever/rugpt3large_based_on_gpt2", tokenizer="ai-forever/rugpt3large_based_on_gpt2", device=-1),
"GigaChat-like (rubert-tiny2)": pipeline("text-generation", model="cointegrated/rubert-tiny2", tokenizer="cointegrated/rubert-tiny2", device=-1),
}
# Промпты
cot_instruction = """Ты — банковский помощник. Клиент описал проблему.
Проанализируй обращение шаг за шагом:
1. Что случилось?
2. Почему это могло произойти?
3. Как клиенту поступить?
Вывод: укажи категорию обращения (например: доступ, безопасность, платежи, перевод и т.д.)"""
simple_instruction = "Ты — банковский помощник. Определи кратко, к какой категории относится обращение клиента (например: доступ, платежи, безопасность и т.д.)."
# Формирование промптов
def build_prompt(instruction, user_input):
return f"{instruction}\n\nКлиент: {user_input}"
# Генерация вывода с защитой
def get_output(pipe, prompt, max_tokens=200):
try:
output = pipe(prompt, max_new_tokens=max_tokens, truncation=True, do_sample=True, temperature=0.7)[0]
return output.get("generated_text") or output.get("output_text") or "(нет ответа)"
except Exception as e:
return f"Ошибка: {e}"
# Основная функция сравнения
def generate_comparison(user_input):
result = {}
prompt_cot = build_prompt(cot_instruction, user_input)
prompt_simple = build_prompt(simple_instruction, user_input)
for name, pipe in models.items():
# CoT ответ
start_cot = time.time()
answer_cot = get_output(pipe, prompt_cot)
time_cot = round(time.time() - start_cot, 2)
# Обычный ответ
start_simple = time.time()
answer_simple = get_output(pipe, prompt_simple)
time_simple = round(time.time() - start_simple, 2)
result[name] = {
"cot_answer": answer_cot.strip(),
"cot_time": f"{time_cot} сек",
"simple_answer": answer_simple.strip(),
"simple_time": f"{time_simple} сек"
}
return (
result["ChatGPT-like (ruGPT3small)"]["cot_answer"], result["ChatGPT-like (ruGPT3small)"]["cot_time"],
result["ChatGPT-like (ruGPT3small)"]["simple_answer"], result["ChatGPT-like (ruGPT3small)"]["simple_time"],
result["DeepSeek-like (ruGPT3large)"]["cot_answer"], result["DeepSeek-like (ruGPT3large)"]["cot_time"],
result["DeepSeek-like (ruGPT3large)"]["simple_answer"], result["DeepSeek-like (ruGPT3large)"]["simple_time"],
result["GigaChat-like (rubert-tiny2)"]["cot_answer"], result["GigaChat-like (rubert-tiny2)"]["cot_time"],
result["GigaChat-like (rubert-tiny2)"]["simple_answer"], result["GigaChat-like (rubert-tiny2)"]["simple_time"]
)
# Интерфейс
with gr.Blocks() as demo:
gr.Markdown("## Сравнение моделей: ruGPT3small, ruGPT3large, rubert-tiny2 (Классификация обращений)")
inp = gr.Textbox(label="Вопрос клиента", placeholder="Например: Я не могу войти в личный кабинет", lines=2)
btn = gr.Button("Сгенерировать")
# ChatGPT-like
gr.Markdown("### ChatGPT-like (ruGPT3small)")
cot1 = gr.Textbox(label="CoT ответ")
cot1_time = gr.Textbox(label="Время CoT")
simple1 = gr.Textbox(label="Обычный ответ")
simple1_time = gr.Textbox(label="Время обычного")
# DeepSeek-like
gr.Markdown("### DeepSeek-like (ruGPT3large)")
cot2 = gr.Textbox(label="CoT ответ")
cot2_time = gr.Textbox(label="Время CoT")
simple2 = gr.Textbox(label="Обычный ответ")
simple2_time = gr.Textbox(label="Время обычного")
# GigaChat-like
gr.Markdown("### GigaChat-like (rubert-tiny2)")
cot3 = gr.Textbox(label="CoT ответ")
cot3_time = gr.Textbox(label="Время CoT")
simple3 = gr.Textbox(label="Обычный ответ")
simple3_time = gr.Textbox(label="Время обычного")
btn.click(generate_comparison, inputs=[inp], outputs=[
cot1, cot1_time, simple1, simple1_time,
cot2, cot2_time, simple2, simple2_time,
cot3, cot3_time, simple3, simple3_time
])
if __name__ == '__main__':
demo.launch()