File size: 2,683 Bytes
57645e8
b87b483
81433b0
bd826f0
b87b483
81433b0
b87b483
81433b0
 
 
 
b87b483
 
 
81433b0
 
fdefd2f
b87b483
e0ba145
b87b483
 
 
 
 
 
e0ba145
b87b483
 
81433b0
e0ba145
 
 
884ac0c
81433b0
e0ba145
b87b483
884ac0c
fdefd2f
37f0934
fdefd2f
5dee7eb
b87b483
884ac0c
e0ba145
b87b483
 
 
fdefd2f
37f0934
5dee7eb
b87b483
5dee7eb
81433b0
884ac0c
37f0934
fdefd2f
 
884ac0c
b87b483
81433b0
 
fdefd2f
884ac0c
81433b0
b87b483
5dee7eb
81433b0
5dee7eb
884ac0c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import gradio as gr
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
from datasets import load_dataset

# 1. Загрузка датасета (используем реальный существующий датасет)
try:
    dataset = load_dataset("blinoff/ru_customer_support", split="train[:50]")
    examples = [d["question"] for d in dataset]
except Exception as e:
    print(f"Ошибка загрузки датасета: {e}")
    examples = [
        "Мой заказ #12345 не пришел",
        "Как оформить возврат товара?",
        "Не приходит SMS-код подтверждения",
        "Ошибка при оплате картой"
    ]

# 2. Загрузка модели (используем локальное выполнение)
try:
    model_name = "ai-forever/rugpt3small_based_on_gpt2"  # Рабочая альтернатива
    
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(model_name)
    
    generator = pipeline(
        "text-generation",
        model=model,
        tokenizer=tokenizer,
        device="cpu"
    )
except Exception as e:
    raise RuntimeError(f"Ошибка загрузки модели: {str(e)}")

# 3. Функция генерации ответа
def generate_response(message):
    prompt = f"""Ты оператор поддержки. Ответь клиенту вежливо на русском.
    
Клиент: {message}
Оператор:"""
    
    try:
        response = generator(
            prompt,
            max_new_tokens=150,
            temperature=0.4,
            do_sample=True,
            top_p=0.9
        )
        return response[0]["generated_text"].split("Оператор:")[-1].strip()
    except Exception as e:
        return f"Извините, произошла ошибка. ({str(e)})"

# 4. Интерфейс Gradio
with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.Markdown("""<h1><center>📞 Поддержка клиентов</center></h1>""")
    
    with gr.Row():
        with gr.Column():
            chatbot = gr.Chatbot(height=350)
            msg = gr.Textbox(label="Опишите проблему")
            btn = gr.Button("Отправить", variant="primary")
        
        with gr.Column():
            gr.Examples(examples, inputs=msg, label="Примеры обращений")
            gr.Markdown("**Совет:** Укажите номер заказа для быстрого решения")

    btn.click(lambda m, c: (m, generate_response(m)), [msg, chatbot], [msg, chatbot])

demo.launch()