KennyOry commited on
Commit
128622e
·
verified ·
1 Parent(s): 03569ac

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -16
app.py CHANGED
@@ -22,6 +22,7 @@ MAX_RESULTS = 5
22
  # Новый клиент Mistral
23
  mistral_client = Mistral(api_key=os.getenv("MISTRAL_API_KEY"))
24
 
 
25
  SYSTEM_PROMPT = """
26
  Ты PrintMaster, сервисный инженер по печатной технике. Правила:
27
  1. Формат ответа строго:
@@ -29,8 +30,8 @@ SYSTEM_PROMPT = """
29
  **Решение:** [пошаговые действия]
30
  2. В решении включай ВСЕ шаги из найденной информации
31
  3. Шаги решения нумеруй цифрами с точкой (1., 2., 3.)
32
- 4. Не добавляй дополнительные разделы после "Источники"
33
- 5. Не дублируй разделы
34
  6. Будь краток, но исчерпывающе
35
  7. Используй точные технические термины
36
  8. Указывай артикулы деталей при замене
@@ -192,19 +193,22 @@ def web_search(query: str) -> tuple:
192
 
193
 
194
  def clean_response(response: str) -> str:
195
- response = re.sub(r'</?assistant>|<\|system\|>|</s>', '', response, flags=re.IGNORECASE)
196
- response = re.sub(r'(\*\*Проблема:\*\*.+?)(\*\*Проблема:\*\*)', r'\1', response, flags=re.DOTALL)
197
- response = re.sub(r'(\*\*Решение:\*\*.+?)(\*\*Решение:\*\*)', r'\1', response, flags=re.DOTALL)
198
  response = re.sub(r'(\*\*Источники:\*\*.+?)(\*\*Источники:\*\*)', r'\1', response, flags=re.DOTALL)
 
 
 
 
 
199
  response = re.sub(r'\n\s*\n', '\n\n', response)
200
  response = re.sub(r'[ \t]+', ' ', response)
201
  response = re.sub(r'\s*\[Решение\]\s*', '', response)
202
- response = re.sub(r'\*\*Источники:\*\*\s*$', '', response)
203
-
204
- last_dot = response.rfind('.')
205
- if last_dot != -1:
206
- response = response[:last_dot + 1]
207
-
208
  return response.strip()
209
 
210
 
@@ -278,16 +282,15 @@ def process_query(prompt: str):
278
  critical_steps.append("При необходимости замените неисправные компоненты")
279
 
280
  if critical_steps:
281
- solution_section = re.search(r'\*\*Решение:\*\*(.+?)(\*\*Источники:\*\*|$)',
282
  final_response,
283
  flags=re.DOTALL)
284
  if solution_section:
285
  updated_solution = solution_section.group(1) + "\n" + "\n".join(critical_steps)
286
  final_response = final_response.replace(solution_section.group(1), updated_solution)
287
 
288
- if sources:
289
- sources_ref = ", ".join([f"[{i+1}]" for i in range(len(sources))])
290
- final_response += f"\n\n**Источники:** {sources_ref}"
291
 
292
  message_queue.put(('response_end', final_response))
293
  message_queue.put(('sources', json.dumps(sources)))
@@ -332,4 +335,4 @@ def stream():
332
 
333
 
334
  if __name__ == '__main__':
335
- app.run(host='0.0.0.0', port=7860, debug=False)
 
22
  # Новый клиент Mistral
23
  mistral_client = Mistral(api_key=os.getenv("MISTRAL_API_KEY"))
24
 
25
+ # Обновленный SYSTEM_PROMPT с улучшенным форматированием
26
  SYSTEM_PROMPT = """
27
  Ты PrintMaster, сервисный инженер по печатной технике. Правила:
28
  1. Формат ответа строго:
 
30
  **Решение:** [пошаговые действия]
31
  2. В решении включай ВСЕ шаги из найденной информации
32
  3. Шаги решения нумеруй цифрами с точкой (1., 2., 3.)
33
+ 4. Всегда завершай ответ разделом **Источники информации** (без нумерации)
34
+ 5. Не добавляй дополнительные разделы после "Источники информации"
35
  6. Будь краток, но исчерпывающе
36
  7. Используй точные технические термины
37
  8. Указывай артикулы деталей при замене
 
193
 
194
 
195
  def clean_response(response: str) -> str:
196
+ # Удаляем все упоминания источников с нумерацией
197
+ response = re.sub(r'Источники:\s*(\[\d+\](,\s*)?+', '', response)
 
198
  response = re.sub(r'(\*\*Источники:\*\*.+?)(\*\*Источники:\*\*)', r'\1', response, flags=re.DOTALL)
199
+
200
+ # Оставляем только раздел "Источники информации"
201
+ response = re.sub(r'(\*\*Источники информация?\*\*)', '', response, flags=re.IGNORECASE)
202
+
203
+ # Убираем лишние переносы
204
  response = re.sub(r'\n\s*\n', '\n\n', response)
205
  response = re.sub(r'[ \t]+', ' ', response)
206
  response = re.sub(r'\s*\[Решение\]\s*', '', response)
207
+
208
+ # Убираем дублирование разделов
209
+ response = re.sub(r'(\*\*Проблема:\*\*.+?)(\*\*Проблема:\*\*)', r'\1', response, flags=re.DOTALL)
210
+ response = re.sub(r'(\*\*Решение:\*\*.+?)(\*\*Решение:\*\*)', r'\1', response, flags=re.DOTALL)
211
+
 
212
  return response.strip()
213
 
214
 
 
282
  critical_steps.append("При необходимости замените неисправные компоненты")
283
 
284
  if critical_steps:
285
+ solution_section = re.search(r'\*\*Решение:\*\*(.+?)(\*\*Источники информация?\*\*|$)',
286
  final_response,
287
  flags=re.DOTALL)
288
  if solution_section:
289
  updated_solution = solution_section.group(1) + "\n" + "\n".join(critical_steps)
290
  final_response = final_response.replace(solution_section.group(1), updated_solution)
291
 
292
+ # Всегда добавляем раздел "Источники информации"
293
+ final_response += "\n\n**Источники информации**"
 
294
 
295
  message_queue.put(('response_end', final_response))
296
  message_queue.put(('sources', json.dumps(sources)))
 
335
 
336
 
337
  if __name__ == '__main__':
338
+ app.run(host='0.0.0.0', port=7860, debug=False)