SimrusDenuvo commited on
Commit
57878bd
·
verified ·
1 Parent(s): ff70684

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -36
app.py CHANGED
@@ -1,69 +1,76 @@
1
  import gradio as gr
2
  from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
3
- from datasets import load_dataset
4
 
5
- # 1. Загрузка датасета (используем реальный существующий датасет)
6
  try:
7
- dataset = load_dataset("blinoff/ru_customer_support", split="train[:50]")
8
- examples = [d["question"] for d in dataset]
9
- except Exception as e:
10
- print(f"Ошибка загрузки датасета: {e}")
11
- examples = [
12
- "Мой заказ #12345 не пришел",
13
- "Как оформить возврат товара?",
14
- "Не приходит SMS-код подтверждения",
15
- "Ошибка при оплате картой"
16
- ]
17
-
18
- # 2. Загрузка модели (используем локальное выполнение)
19
- try:
20
- model_name = "ai-forever/rugpt3small_based_on_gpt2" # Рабочая альтернатива
21
-
22
  tokenizer = AutoTokenizer.from_pretrained(model_name)
23
- model = AutoModelForCausalLM.from_pretrained(model_name)
24
-
 
 
 
 
25
  generator = pipeline(
26
  "text-generation",
27
  model=model,
28
  tokenizer=tokenizer,
29
- device="cpu"
30
  )
31
  except Exception as e:
32
  raise RuntimeError(f"Ошибка загрузки модели: {str(e)}")
33
 
34
- # 3. Функция генерации ответа
35
- def generate_response(message):
36
- prompt = f"""Ты оператор поддержки. Ответь клиенту вежливо на русском.
37
-
38
- Клиент: {message}
39
- Оператор:"""
 
 
 
 
 
 
 
 
 
40
 
41
  try:
 
42
  response = generator(
43
  prompt,
44
- max_new_tokens=150,
45
- temperature=0.4,
46
  do_sample=True,
47
  top_p=0.9
48
  )
49
- return response[0]["generated_text"].split("Оператор:")[-1].strip()
 
 
 
50
  except Exception as e:
51
- return f"Извините, произошла ошибка. ({str(e)})"
 
52
 
53
- # 4. Интерфейс Gradio
54
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
55
  gr.Markdown("""<h1><center>📞 Поддержка клиентов</center></h1>""")
56
 
57
  with gr.Row():
58
  with gr.Column():
59
- chatbot = gr.Chatbot(height=350, type="messages")
60
- msg = gr.Textbox(label="Опишите проблему")
61
  btn = gr.Button("Отправить", variant="primary")
62
 
63
  with gr.Column():
64
  gr.Examples(examples, inputs=msg, label="Примеры обращений")
65
- gr.Markdown("**Совет:** Укажите номер заказа для быстрого решения")
66
 
67
- btn.click(lambda m, c: (m, generate_response(m)), [msg, chatbot], [msg, chatbot])
 
 
68
 
69
- demo.launch()
 
 
1
  import gradio as gr
2
  from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
3
+ import torch
4
 
5
+ # 1. Инициализация модели (с квантованием для экономии памяти)
6
  try:
7
+ model_name = "ai-forever/rugpt3small_based_on_gpt2"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  tokenizer = AutoTokenizer.from_pretrained(model_name)
9
+ model = AutoModelForCausalLM.from_pretrained(
10
+ model_name,
11
+ torch_dtype=torch.float16,
12
+ device_map="auto",
13
+ load_in_8bit=True
14
+ )
15
  generator = pipeline(
16
  "text-generation",
17
  model=model,
18
  tokenizer=tokenizer,
19
+ device="cuda" if torch.cuda.is_available() else "cpu"
20
  )
21
  except Exception as e:
22
  raise RuntimeError(f"Ошибка загрузки модели: {str(e)}")
23
 
24
+ # 2. Примеры обращений
25
+ examples = [
26
+ "Мой заказ #12345 не пришел",
27
+ "Как оформить возврат товара?",
28
+ "Не приходит SMS-подтверждение",
29
+ "Ошибка при оплате картой"
30
+ ]
31
+
32
+ # 3. Функция генерации ответа с правильным форматом сообщений
33
+ def generate_response(message, chat_history):
34
+ # Формируем промпт с историей диалога
35
+ prompt = "Ты оператор поддержки. Вежливо отвечай клиенту на русском.\n\n"
36
+ for user_msg, bot_msg in chat_history:
37
+ prompt += f"Клиент: {user_msg}\nОператор: {bot_msg}\n"
38
+ prompt += f"Клиент: {message}\nОператор:"
39
 
40
  try:
41
+ # Генерация ответа
42
  response = generator(
43
  prompt,
44
+ max_new_tokens=200,
45
+ temperature=0.7,
46
  do_sample=True,
47
  top_p=0.9
48
  )
49
+ bot_message = response[0]["generated_text"].split("Оператор:")[-1].strip()
50
+
51
+ # Возвращаем обновленную историю диалога в правильном формате
52
+ return chat_history + [(message, bot_message)]
53
  except Exception as e:
54
+ print(f"Ошибка генерации: {str(e)}")
55
+ return chat_history + [(message, f"Извините, произошла ошибка. {str(e)}")]
56
 
57
+ # 4. Создание интерфейса с правильным форматом Chatbot
58
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
59
  gr.Markdown("""<h1><center>📞 Поддержка клиентов</center></h1>""")
60
 
61
  with gr.Row():
62
  with gr.Column():
63
+ chatbot = gr.Chatbot(height=350)
64
+ msg = gr.Textbox(label="Ваш вопрос", placeholder="Опишите проблему...")
65
  btn = gr.Button("Отправить", variant="primary")
66
 
67
  with gr.Column():
68
  gr.Examples(examples, inputs=msg, label="Примеры обращений")
69
+ gr.Markdown("**Подсказки:**\n1. Укажите номер заказа\n2. Опишите проблему подробно")
70
 
71
+ # Обработчики с правильным форматом сообщений
72
+ btn.click(generate_response, [msg, chatbot], [chatbot])
73
+ msg.submit(generate_response, [msg, chatbot], [chatbot])
74
 
75
+ if __name__ == "__main__":
76
+ demo.launch(server_name="0.0.0.0", server_port=7860)