fruitpicker01 commited on
Commit
37329aa
1 Parent(s): f2764da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -5
app.py CHANGED
@@ -423,7 +423,8 @@ def append_errors_to_prompt(prompt, checks):
423
  "offensive_phrases": "Избегать двусмысленных или оскорбительных фраз.",
424
  "cliches_and_bureaucratese": "Не использовать речевые клише, рекламные штампы, канцеляризмы.",
425
  "no_contradictions": "Избегать противоречий с описанием предложения.",
426
- "contains_key_message": "Обязательно включить ключевое сообщение."
 
427
  }
428
 
429
  # Находим первую не пройденную проверку
@@ -476,7 +477,8 @@ def notify_failed_checks(checks):
476
  "offensive_phrases": "Двусмысленные или оскорбительные фразы",
477
  "cliches_and_bureaucratese": "Речевые клише, рекламные штампы, канцеляризмы",
478
  "no_contradictions": "Противоречия с описанием предложения",
479
- "contains_key_message": "Отсутствие ключевого сообщения"
 
480
  }
481
 
482
  # Находим первую не пройденную проверку
@@ -1283,7 +1285,11 @@ def check_abstract_claims(message):
1283
  - "оптимизируйте управление финансами"
1284
  - "выгодные условия для бизнеса"
1285
  - "лёгкие условия и кэшбэк"
1286
- - "мобильно, удобно, комфортно".
 
 
 
 
1287
  4. Ищи общие фразы, которые не дают представления о конкретной пользе, такие как "лучшее решение", "высокое качество", "отличный сервис", если они не сопровождаются пояснением о том, почему это так.
1288
  5. Учитывай, что в рекламных сообщениях допустимы эмоциональные и обобщённые фразы, если они достаточно конкретны для понимания аудитории, однако они должны сопровождаться фактами или подробными примерами.
1289
 
@@ -1470,6 +1476,36 @@ def check_contains_key_message(message, key_message):
1470
  else:
1471
  return None
1472
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1473
  # ФУНКЦИИ ПРОВЕРОК (КОНЕЦ)
1474
 
1475
 
@@ -1481,7 +1517,7 @@ def safe_check(func, *args):
1481
  print(f"Ошибка в {func.__name__}: {e}")
1482
  return None # Indicate that the check could not be performed
1483
 
1484
- def perform_checks(message, description, key_message):
1485
  checks = {}
1486
 
1487
  # 2. Morphological checks using pymorphy3
@@ -1514,6 +1550,7 @@ def perform_checks(message, description, key_message):
1514
  ("cliches_and_bureaucratese", check_cliches_and_bureaucratese),
1515
  ("no_contradictions", check_no_contradictions),
1516
  ("contains_key_message", check_contains_key_message),
 
1517
  ]
1518
 
1519
  # 4. Remaining LLM checks
@@ -1537,6 +1574,8 @@ def perform_checks(message, description, key_message):
1537
  result = safe_check(check_func, message, description)
1538
  elif check_name == "contains_key_message":
1539
  result = safe_check(check_func, message, key_message)
 
 
1540
  else:
1541
  result = safe_check(check_func, message)
1542
  checks[check_name] = result
@@ -1584,7 +1623,8 @@ def format_checks(checks):
1584
  "offensive_phrases": "Двусмысленные или оскорбительные фразы",
1585
  "cliches_and_bureaucratese": "Речевые клише, рекламные штампы, канцеляризмы",
1586
  "no_contradictions": "Отсутствие противоречий с описанием предложения",
1587
- "contains_key_message": "Наличие ключевого сообщения"
 
1588
  }
1589
  formatted_results = []
1590
  for rule, result in checks.items():
 
423
  "offensive_phrases": "Избегать двусмысленных или оскорбительных фраз.",
424
  "cliches_and_bureaucratese": "Не использовать речевые клише, рекламные штампы, канцеляризмы.",
425
  "no_contradictions": "Избегать противоречий с описанием предложения.",
426
+ "contains_key_message": "Обязательно включить ключевое сообщение.",
427
+ "product_name_consistency": "Обязательно использовать точное наименование продукта."
428
  }
429
 
430
  # Находим первую не пройденную проверку
 
477
  "offensive_phrases": "Двусмысленные или оскорбительные фразы",
478
  "cliches_and_bureaucratese": "Речевые клише, рекламные штампы, канцеляризмы",
479
  "no_contradictions": "Противоречия с описанием предложения",
480
+ "contains_key_message": "Отсутствие ключевого сообщения",
481
+ "product_name_consistency": "Несовпадение наименования продукта"
482
  }
483
 
484
  # Находим первую не пройденную проверку
 
1285
  - "оптимизируйте управление финансами"
1286
  - "выгодные условия для бизнеса"
1287
  - "лёгкие условия и кэшбэк"
1288
+ - "мобильно, удобно, комфортно"
1289
+ - "Действуйте сейчас!"
1290
+ - "Контролируйте лимиты на расходы сотрудников"
1291
+ - "Оптимизируйте свои бизнес-затраты"
1292
+ - "Снизьте финансовую нагрузку"
1293
  4. Ищи общие фразы, которые не дают представления о конкретной пользе, такие как "лучшее решение", "высокое качество", "отличный сервис", если они не сопровождаются пояснением о том, почему это так.
1294
  5. Учитывай, что в рекламных сообщениях допустимы эмоциональные и обобщённые фразы, если они достаточно конкретны для понимания аудитории, однако они должны сопровождаться фактами или подробными примерами.
1295
 
 
1476
  else:
1477
  return None
1478
 
1479
+ # 31. Проверка на точное совпадение названий продуктов
1480
+ def check_product_name_consistency(message, product_name):
1481
+ print()
1482
+ print("Проверка 31: Проверка на точное совпадение названий продуктов")
1483
+ print()
1484
+
1485
+ message_clean = cut_message(message)
1486
+
1487
+ prompt = f'''Проверь, полностью ли совпадает название продукта в сообщении с эталонным названием продукта.
1488
+ Не допускай никаких изменений, таких как перестановка слов, добавление или удаление кавычек, изменение порядка слов, пропуск или добавление слов. Название должно совпадать **точно**.
1489
+ Описание предложения:
1490
+ "{product_name}"
1491
+ Сообщение:
1492
+ "{message_clean}"
1493
+ Если название продукта в сообщении **точно** совпадает с эталонным названием продукта, **верни только** JSON {{"decision": false, "explanation": "Название продукта полностью совпадает с описанием."}}.
1494
+ Если название продукта **не** совпадает, **верни только** JSON {{"decision": true, "explanation": "<описание несоответствия>"}}.
1495
+ **Не добавляй никакого дополнительного текста. Ответ должен быть только в формате JSON с закрывающими кавычками и скобками.**'''
1496
+
1497
+ response = generate_message_mistral_check(prompt)
1498
+ time.sleep(3)
1499
+ print("Mistral response:", response)
1500
+ result = parse_json_response(response)
1501
+ if result is not None:
1502
+ decision = result.get("decision", False)
1503
+ explanation = result.get("explanation", "")
1504
+ print("Explanation:", explanation)
1505
+ return not decision # Возвращаем True, если совпадение найдено
1506
+ else:
1507
+ return None
1508
+
1509
  # ФУНКЦИИ ПРОВЕРОК (КОНЕЦ)
1510
 
1511
 
 
1517
  print(f"Ошибка в {func.__name__}: {e}")
1518
  return None # Indicate that the check could not be performed
1519
 
1520
+ def perform_checks(message, description, key_message, product_name):
1521
  checks = {}
1522
 
1523
  # 2. Morphological checks using pymorphy3
 
1550
  ("cliches_and_bureaucratese", check_cliches_and_bureaucratese),
1551
  ("no_contradictions", check_no_contradictions),
1552
  ("contains_key_message", check_contains_key_message),
1553
+ ("product_name_consistency", check_product_name_consistency)
1554
  ]
1555
 
1556
  # 4. Remaining LLM checks
 
1574
  result = safe_check(check_func, message, description)
1575
  elif check_name == "contains_key_message":
1576
  result = safe_check(check_func, message, key_message)
1577
+ elif check_name == "product_name_consistency":
1578
+ result = safe_check(check_func, message, product_name)
1579
  else:
1580
  result = safe_check(check_func, message)
1581
  checks[check_name] = result
 
1623
  "offensive_phrases": "Двусмысленные или оскорбительные фразы",
1624
  "cliches_and_bureaucratese": "Речевые клише, рекламные штампы, канцеляризмы",
1625
  "no_contradictions": "Отсутствие противоречий с описанием предложения",
1626
+ "contains_key_message": "Наличие ключевого сообщения",
1627
+ "product_name_consistency": "Совпадение наименования продукта"
1628
  }
1629
  formatted_results = []
1630
  for rule, result in checks.items():