Spaces:
Running
Running
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() | |