Spaces:
Sleeping
Sleeping
fruitpicker01
commited on
Commit
•
37329aa
1
Parent(s):
f2764da
Update app.py
Browse files
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():
|