chat / app.py
SimrusDenuvo's picture
Update app.py
19236d7 verified
raw
history blame
4.4 kB
import gradio as gr
import time
from transformers import pipeline
# Инициализация моделей
models = {
"ruGPT3-Medium": pipeline(
"text-generation",
model="ai-forever/rugpt3medium_based_on_gpt2",
tokenizer="ai-forever/rugpt3medium_based_on_gpt2",
device=-1
),
"ruGPT3-Small": pipeline(
"text-generation",
model="ai-forever/rugpt3small_based_on_gpt2",
tokenizer="ai-forever/rugpt3small_based_on_gpt2",
device=-1
),
"SambaLingo": pipeline(
"text-generation",
model="sambanovasystems/SambaLingo-Russian-Chat",
tokenizer="sambanovasystems/SambaLingo-Russian-Chat",
device=-1
)
}
# Построение обычного промпта
def build_simple_prompt(user_input):
return f"Клиент: {user_input}\nКатегория обращения:"
# Построение CoT-промпта
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_output = pipe(prompt_cot, max_new_tokens=100, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
end_cot = round(time.time() - start_cot, 2)
# Обычный ответ
start_simple = time.time()
simple_output = pipe(prompt_simple, max_new_tokens=60, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
end_simple = round(time.time() - start_simple, 2)
results[name] = {
"cot_answer": cot_output.strip(),
"cot_time": end_cot,
"simple_answer": simple_output.strip(),
"simple_time": end_simple
}
return (
results["ruGPT3-Medium"]["cot_answer"], f"{results['ruGPT3-Medium"]["cot_time"]} сек",
results["ruGPT3-Medium"]["simple_answer"], f"{results["ruGPT3-Medium"]["simple_time"]} сек",
results["ruGPT3-Small"]["cot_answer"], f"{results["ruGPT3-Small"]["cot_time"]} сек",
results["ruGPT3-Small"]["simple_answer"], f"{results["ruGPT3-Small"]["simple_time"]} сек",
results["SambaLingo"]["cot_answer"], f"{results["SambaLingo"]["cot_time"]} сек",
results["SambaLingo"]["simple_answer"], f"{results["SambaLingo"]["simple_time"]} сек"
)
# Gradio UI
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("🏦 **Банковский помощник: CoT vs. Обычный ответ (магистерская работа)**")
inp = gr.Textbox(label="Вопрос клиента", placeholder="Например: Я не могу перевести деньги на другую карту", lines=2)
btn = gr.Button("Сгенерировать")
gr.Markdown("### ruGPT3-Medium")
cot1 = gr.Textbox(label="CoT ответ")
cot1_time = gr.Textbox(label="Время CoT")
simple1 = gr.Textbox(label="Обычный ответ")
simple1_time = gr.Textbox(label="Время обычного")
gr.Markdown("### ruGPT3-Small")
cot2 = gr.Textbox(label="CoT ответ")
cot2_time = gr.Textbox(label="Время CoT")
simple2 = gr.Textbox(label="Обычный ответ")
simple2_time = gr.Textbox(label="Время обычного")
gr.Markdown("### SambaLingo-Russian-Chat")
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()