Spaces:
Running
Running
import gradio as gr | |
import time | |
from transformers import pipeline | |
# Настройка моделей | |
models = { | |
"ChatGPT-like (FRED-T5)": pipeline("text2text-generation", model="ai-forever/FRED-T5-1.7B", tokenizer="ai-forever/FRED-T5-1.7B", device=-1), | |
"DeepSeek-like (Qwen7B)": pipeline("text-generation", model="lightblue/DeepSeek-R1-Distill-Qwen-7B-Multilingual", tokenizer="lightblue/DeepSeek-R1-Distill-Qwen-7B-Multilingual", device=-1), | |
"GigaChat-like (GigaChat-20B)": pipeline("text-generation", model="ai-sage/GigaChat-20B-A3B-instruct", tokenizer="ai-sage/GigaChat-20B-A3B-instruct", 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=300): | |
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 (FRED-T5)"]["cot_answer"], result["ChatGPT-like (FRED-T5)"]["cot_time"], | |
result["ChatGPT-like (FRED-T5)"]["simple_answer"], result["ChatGPT-like (FRED-T5)"]["simple_time"], | |
result["DeepSeek-like (Qwen7B)"]["cot_answer"], result["DeepSeek-like (Qwen7B)"]["cot_time"], | |
result["DeepSeek-like (Qwen7B)"]["simple_answer"], result["DeepSeek-like (Qwen7B)"]["simple_time"], | |
result["GigaChat-like (GigaChat-20B)"]["cot_answer"], result["GigaChat-like (GigaChat-20B)"]["cot_time"], | |
result["GigaChat-like (GigaChat-20B)"]["simple_answer"], result["GigaChat-like (GigaChat-20B)"]["simple_time"] | |
) | |
# Интерфейс | |
with gr.Blocks() as demo: | |
gr.Markdown("## Сравнение моделей: ChatGPT, DeepSeek, GigaChat (банковская классификация)") | |
inp = gr.Textbox(label="Вопрос клиента", placeholder="Например: Я не могу оплатить картой", lines=2) | |
btn = gr.Button("Сгенерировать") | |
# ChatGPT-like | |
gr.Markdown("### ChatGPT-like (FRED-T5)") | |
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 (Qwen7B)") | |
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 (GigaChat-20B)") | |
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() | |