File size: 2,700 Bytes
57645e8
b87b483
81433b0
bd826f0
796d2fd
81433b0
b87b483
81433b0
 
 
 
b87b483
 
 
81433b0
 
fdefd2f
796d2fd
e0ba145
796d2fd
b87b483
796d2fd
 
b87b483
 
e0ba145
b87b483
 
796d2fd
e0ba145
 
 
884ac0c
81433b0
796d2fd
b87b483
884ac0c
fdefd2f
37f0934
fdefd2f
5dee7eb
b87b483
884ac0c
796d2fd
 
b87b483
796d2fd
fdefd2f
37f0934
5dee7eb
796d2fd
5dee7eb
81433b0
884ac0c
37f0934
fdefd2f
 
884ac0c
40a3af9
796d2fd
81433b0
fdefd2f
884ac0c
81433b0
796d2fd
5dee7eb
796d2fd
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, type="messages")
            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()