Xolkin commited on
Commit
85dd489
·
verified ·
1 Parent(s): 1a118aa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -73
app.py CHANGED
@@ -8,7 +8,7 @@ logging.basicConfig(level=logging.INFO)
8
  logger = logging.getLogger(__name__)
9
 
10
  # Загружаем модель
11
- model_name = "distilgpt2"
12
  try:
13
  logger.info(f"Попытка загрузки модели {model_name}...")
14
  generator = pipeline(
@@ -25,18 +25,11 @@ except Exception as e:
25
  logger.error(f"Ошибка загрузки модели: {e}")
26
  exit(1)
27
 
28
- def respond(message, history, max_tokens=256, temperature=0.7, top_p=0.9):
29
- # История как список кортежей [(user_msg, bot_msg), ...]
30
- history = history or []
31
- input_text = ""
32
- for user_msg, bot_msg in history:
33
- input_text += f"User: {user_msg}\nAssistant: {bot_msg}\n"
34
- input_text += f"User: {message}"
35
-
36
  try:
37
  logger.info(f"Генерация ответа для: {message}")
38
  outputs = generator(
39
- input_text,
40
  max_length=max_tokens,
41
  temperature=temperature,
42
  top_p=top_p,
@@ -44,72 +37,25 @@ def respond(message, history, max_tokens=256, temperature=0.7, top_p=0.9):
44
  no_repeat_ngram_size=2,
45
  num_return_sequences=1
46
  )
47
- response = outputs[0]["generated_text"][len(input_text):].strip()
48
  logger.info(f"Ответ сгенерирован: {response}")
49
  except Exception as e:
50
  logger.error(f"Ошибка генерации ответа: {e}")
51
- return f"Ошибка генерации: {e}", history
52
-
53
- formatted_response = format_response(response)
54
- history.append((message, formatted_response))
55
- return history
56
-
57
- def format_response(response):
58
- diagnosis = extract_diagnosis(response)
59
- operation = extract_operation(response)
60
- treatment = extract_treatment(response)
61
- return f"Предварительный диагноз: {diagnosis}\nОперация: {operation}\nЛечение: {treatment}"
62
-
63
- def extract_diagnosis(response):
64
- sentences = response.split(".")
65
- return sentences[0].strip() if sentences else response.strip()
66
-
67
- def extract_operation(response):
68
- return "Не требуется"
69
-
70
- def extract_treatment(response):
71
- sentences = response.split(".")
72
- return sentences[-1].strip() if len(sentences) > 1 else "Не указано"
73
-
74
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
75
- gr.Markdown("## Медицинский чат-бот на базе DistilGPT-2")
76
- chatbot = gr.Chatbot(label="Чат", height=400, type='messages')
77
- with gr.Row():
78
- msg = gr.Textbox(
79
- label="Ваше сообщение",
80
- placeholder="Опишите симптомы (например, 'Болит горло')...",
81
- lines=2,
82
- show_label=True
83
- )
84
- submit_btn = gr.Button("Отправить", variant="primary")
85
- with gr.Row():
86
- max_tokens = gr.Slider(minimum=50, maximum=512, value=256, step=10, label="Макс. токенов")
87
- temperature = gr.Slider(minimum=0.1, maximum=1.5, value=0.7, label="Температура")
88
- top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.9, label="Top-p")
89
- clear_btn = gr.Button("Очистить чат", variant="secondary")
90
-
91
- def submit_message(message, chat_history, max_tokens, temperature, top_p):
92
- if not message.strip():
93
- return chat_history, "Пожалуйста, введите сообщение."
94
- updated_history = respond(message, chat_history, max_tokens, temperature, top_p)
95
- return updated_history, ""
96
-
97
- submit_btn.click(
98
- fn=submit_message,
99
- inputs=[msg, chatbot, max_tokens, temperature, top_p],
100
- outputs=[chatbot, msg],
101
- queue=True
102
- )
103
- msg.submit(
104
- fn=submit_message,
105
- inputs=[msg, chatbot, max_tokens, temperature, top_p],
106
- outputs=[chatbot, msg],
107
- queue=True
108
- )
109
- clear_btn.click(
110
- fn=lambda: ([], ""),
111
- outputs=[chatbot, msg]
112
- )
113
 
114
  if __name__ == "__main__":
115
  demo.launch(server_name="0.0.0.0", server_port=7860)
 
8
  logger = logging.getLogger(__name__)
9
 
10
  # Загружаем модель
11
+ model_name = "gpt2" # Смена на базовую модель GPT-2
12
  try:
13
  logger.info(f"Попытка загрузки модели {model_name}...")
14
  generator = pipeline(
 
25
  logger.error(f"Ошибка загрузки модели: {e}")
26
  exit(1)
27
 
28
+ def respond(message, max_tokens=256, temperature=0.7, top_p=0.9):
 
 
 
 
 
 
 
29
  try:
30
  logger.info(f"Генерация ответа для: {message}")
31
  outputs = generator(
32
+ message,
33
  max_length=max_tokens,
34
  temperature=temperature,
35
  top_p=top_p,
 
37
  no_repeat_ngram_size=2,
38
  num_return_sequences=1
39
  )
40
+ response = outputs[0]["generated_text"].strip()
41
  logger.info(f"Ответ сгенерирован: {response}")
42
  except Exception as e:
43
  logger.error(f"Ошибка генерации ответа: {e}")
44
+ return f"Ошибка генерации: {e}"
45
+ return response
46
+
47
+ demo = gr.Interface(
48
+ fn=respond,
49
+ inputs=[
50
+ gr.Textbox(label="Ваше сообщение", placeholder="Опишите симптомы (например, 'Болит горло')..."),
51
+ gr.Slider(minimum=50, maximum=512, value=256, step=10, label="Макс. токенов"),
52
+ gr.Slider(minimum=0.1, maximum=1.5, value=0.7, label="Температура"),
53
+ gr.Slider(minimum=0.1, maximum=1.0, value=0.9, label="Top-p")
54
+ ],
55
+ outputs="text",
56
+ title="Медицинский чат-бот на базе GPT-2",
57
+ theme=gr.themes.Soft()
58
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
  if __name__ == "__main__":
61
  demo.launch(server_name="0.0.0.0", server_port=7860)