chat / app.py
SimrusDenuvo's picture
Update app.py
240efaf verified
raw
history blame
4.17 kB
import gradio as gr
import time
from transformers import pipeline
# Инициализация моделей
models = {
"ChatGPT-like": pipeline(
"text-generation",
model="OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5",
tokenizer="OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5",
device=-1
),
"DeepSeek-like": pipeline(
"text-generation",
model="deepseek-ai/DeepSeek-Coder-1.3B-instruct",
tokenizer="deepseek-ai/DeepSeek-Coder-1.3B-instruct",
device=-1
),
"GigaChat-like": pipeline(
"text-generation",
model="tinkoff-ai/ruDialoGPT-medium",
tokenizer="tinkoff-ai/ruDialoGPT-medium",
device=-1
)
}
# Промпты
def build_simple_prompt(user_input):
return f"Клиент: {user_input}\nКатегория обращения:"
def build_cot_prompt(user_input):
return (
f"Клиент: {user_input}\n"
"Проанализируй обращение пошагово:\n"
"1. В чём суть проблемы?\n"
"2. Возможные причины?\n"
"3. Решение?\n"
"Вывод: категория обращения:"
)
# Генерация ответов
def generate_classification(user_input):
prompt_simple = build_simple_prompt(user_input)
prompt_cot = build_cot_prompt(user_input)
results = {}
for name, pipe in models.items():
# CoT
start_cot = time.time()
cot_out = pipe(prompt_cot, max_new_tokens=150, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
time_cot = round(time.time() - start_cot, 2)
# Simple
start_simple = time.time()
simple_out = pipe(prompt_simple, max_new_tokens=80, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
time_simple = round(time.time() - start_simple, 2)
results[name] = {
"cot": cot_out.strip(),
"cot_time": time_cot,
"simple": simple_out.strip(),
"simple_time": time_simple
}
return (
results["ChatGPT-like"]["cot"], f"{results['ChatGPT-like']['cot_time']} сек",
results["ChatGPT-like"]["simple"], f"{results['ChatGPT-like']['simple_time']} сек",
results["DeepSeek-like"]["cot"], f"{results['DeepSeek-like']['cot_time']} сек",
results["DeepSeek-like"]["simple"], f"{results['DeepSeek-like']['simple_time']} сек",
results["GigaChat-like"]["cot"], f"{results['GigaChat-like']['cot_time']} сек",
results["GigaChat-like"]["simple"], f"{results['GigaChat-like']['simple_time']} сек"
)
# Интерфейс
with gr.Blocks() as demo:
gr.Markdown("## 🤖 Сравнение моделей: ChatGPT, DeepSeek, GigaChat — классификация банковских обращений")
inp = gr.Textbox(label="Вопрос клиента", placeholder="Например: Я не могу перевести деньги", lines=2)
btn = gr.Button("Сгенерировать")
# ChatGPT
gr.Markdown("### ChatGPT-like (OpenAssistant)")
cot1 = gr.Textbox(label="CoT ответ")
cot1_time = gr.Textbox(label="Время CoT")
simple1 = gr.Textbox(label="Обычный ответ")
simple1_time = gr.Textbox(label="Время обычного")
# DeepSeek
gr.Markdown("### DeepSeek-like")
cot2 = gr.Textbox(label="CoT ответ")
cot2_time = gr.Textbox(label="Время CoT")
simple2 = gr.Textbox(label="Обычный ответ")
simple2_time = gr.Textbox(label="Время обычного")
# GigaChat
gr.Markdown("### GigaChat-like (ruDialoGPT)")
cot3 = gr.Textbox(label="CoT ответ")
cot3_time = gr.Textbox(label="Время CoT")
simple3 = gr.Textbox(label="Обычный ответ")
simple3_time = gr.Textbox(label="Время обычного")
btn.click(generate_classification, inputs=[inp], outputs=[
cot1, cot1_time, simple1, simple1_time,
cot2, cot2_time, simple2, simple2_time,
cot3, cot3_time, simple3, simple3_time
])
demo.launch()