fruitpicker01
commited on
Commit
•
f15befd
1
Parent(s):
538b376
Update app.py
Browse files
app.py
CHANGED
@@ -521,7 +521,7 @@ def notify_failed_checks(checks):
|
|
521 |
# return last_message
|
522 |
|
523 |
|
524 |
-
def generate_message_mistral_with_retry(prompt, approach_name, description, key_message, product_name,
|
525 |
global approach_stats
|
526 |
last_message = None
|
527 |
for attempt in range(20):
|
@@ -538,7 +538,7 @@ def generate_message_mistral_with_retry(prompt, approach_name, description, key_
|
|
538 |
last_message = message
|
539 |
time.sleep(1)
|
540 |
continue
|
541 |
-
checks = perform_checks(message, description, key_message, product_name,
|
542 |
last_message = message
|
543 |
# Инициализируем статистику для подхода, если ее нет
|
544 |
if approach_name not in approach_stats:
|
@@ -558,11 +558,11 @@ def generate_message_mistral_with_retry(prompt, approach_name, description, key_
|
|
558 |
|
559 |
|
560 |
# Функция для создания задания для копирайтера
|
561 |
-
def generate_standard_prompt(description,
|
562 |
prompt = (
|
563 |
f"Сгенерируй смс-сообщение для клиента. Напиши 3 или 4 предложения.\n"
|
564 |
f"Описание предложения: {description}\n"
|
565 |
-
f"Преимущества: {
|
566 |
"В тексте смс запрещено использование:\n"
|
567 |
"- Запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, доступный, банкротство, долги, займ, срочно, сейчас, лучший, главный, номер 1, гарантия, успех, лидер, никакой;\n"
|
568 |
"- Повторы слов;\n"
|
@@ -668,7 +668,7 @@ def clean_prompt_for_display(prompt, prefixes, suffixes):
|
|
668 |
return cleaned_prompt.strip()
|
669 |
|
670 |
# Функция для постепенной генерации всех сообщений через yield
|
671 |
-
def generate_all_messages(desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf, product_name
|
672 |
standard_prompt = generate_standard_prompt(desc, benefits, key_message)
|
673 |
standard_prompt_for_display = f"Не изменяй название продукта: {product_name}.\n{standard_prompt}\nУбедись, что в готовом тексте без изменений, синонимов и перестановок слов используется наименование продукта: {product_name}.\n"
|
674 |
approach_mapping = {
|
@@ -740,7 +740,7 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
740 |
yield selected_approaches_text_content, standard_prompt_for_display, display_personalization_prompt, None, None
|
741 |
flag += 1
|
742 |
prompt = add_prefix_suffix(standard_prompt, current_prefix, current_suffix, product_name)
|
743 |
-
non_personalized_message = generate_message_mistral_with_retry(prompt, approach_name, desc, key_message, product_name,
|
744 |
non_personalized_length = len(non_personalized_message)
|
745 |
non_personalized_display = f"{non_personalized_message}\n------\nКоличество знаков: {non_personalized_length}"
|
746 |
if non_personalized_messages:
|
@@ -752,7 +752,7 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
752 |
non_personalized_messages, personalized_messages
|
753 |
)
|
754 |
full_personalized_prompt = f"{personalization_prompt}\n\nТекст для адаптации: {non_personalized_message}"
|
755 |
-
personalized_message = generate_message_mistral_with_retry(full_personalized_prompt, approach_name, desc, key_message, product_name,
|
756 |
personalized_length = len(personalized_message)
|
757 |
personalized_display = f"{personalized_message}\n------\nКоличество знаков: {personalized_length}"
|
758 |
if personalized_messages:
|
@@ -1236,7 +1236,7 @@ def check_synonymous_members(message):
|
|
1236 |
|
1237 |
|
1238 |
# 24. Проверка на шокирующие, экстравагантные или кликбейтные фразы
|
1239 |
-
def check_clickbait_phrases(message, description,
|
1240 |
message_clean = cut_message(message)
|
1241 |
print()
|
1242 |
print()
|
@@ -1251,7 +1251,7 @@ def check_clickbait_phrases(message, description, advantages):
|
|
1251 |
2. Ищи фразы, которые явно преувеличивают или вводят в заблуждение, обещая нечто чрезмерно идеализированное или сенсационное, что не может быть доказано или подтверждено. Примеры кликбейтных фраз: "Шокирующая правда", "Вы не поверите, что произошло", "Это изменит вашу жизнь за один день".
|
1252 |
3. Стандартные рекламные призывы к действию, такие как "купите сейчас" или "узнайте больше", не считаются кликбейтом, если они не преувеличивают преимущества или не используют явную манипуляцию эмоциями.
|
1253 |
4. Не считай фразы, используемые в исходном описании продукта, кликбейтными. Исходное описание: "{description}".
|
1254 |
-
5. Не считай фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{
|
1255 |
Пример ответа:
|
1256 |
{{"decision": false, "explanation": "Текст нейтрален и не содержит кликбейтных фраз."}}
|
1257 |
|
@@ -1274,7 +1274,7 @@ def check_clickbait_phrases(message, description, advantages):
|
|
1274 |
|
1275 |
|
1276 |
# 25. Проверка на абстрактные заявления без поддержки фактами
|
1277 |
-
def check_abstract_claims(message, description,
|
1278 |
print()
|
1279 |
print("Проверка 25: Проверка на абстрактные заявления без поддержки фактами")
|
1280 |
print()
|
@@ -1302,7 +1302,7 @@ def check_abstract_claims(message, description, advantages):
|
|
1302 |
4. Ищи общие фразы, которые не дают представления о конкретной пользе, такие как "лучшее решение", "высокое качество", "отличный сервис", если они не сопровождаются пояснением о том, почему это так.
|
1303 |
5. Учитывай, что в рекламных сообщениях допустимы эмоциональные и обобщённые фразы, если они достаточно конкретны для понимания аудитории, однако они должны сопровождаться фактами или подробными примерами.
|
1304 |
6. Не считай фразы, используемые в исходном описании продукта, кликбейтными. Исходное описание: "{description}".
|
1305 |
-
7. Не считай фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{
|
1306 |
|
1307 |
Пример ответа:
|
1308 |
{{"decision": false, "explanation": "Текст не содержит абстрактные утверждения без конкретики."}}
|
@@ -1391,7 +1391,7 @@ def check_offensive_phrases(message):
|
|
1391 |
return None
|
1392 |
|
1393 |
# 28. Проверка на речевые клише, рекламные штампы и канцеляризмы
|
1394 |
-
def check_cliches_and_bureaucratese(message, description,
|
1395 |
print()
|
1396 |
print("Проверка 28: Проверка на речевые клише, рекламные штампы и канцеляризмы")
|
1397 |
print()
|
@@ -1405,7 +1405,7 @@ def check_cliches_and_bureaucratese(message, description, advantages):
|
|
1405 |
- Описания способов оформления или получения услуг (например, "оформление возможно онлайн или в офисе").
|
1406 |
- Стандартные отраслевые термины и фразы, необходимые для понимания сообщения (например, "премиальная бизнес-карта", "Mastercard Preferred"), но **не** их использование в комбинации с общими словами, как например, "идеальное решение для вашего бизнеса".
|
1407 |
- Фразы, используемые в исходном описании продукта, кликбейтными. Исходное описание: "{description}".
|
1408 |
-
- Фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{
|
1409 |
**Считай клише или канцеляризмами следующие типы выражений:**
|
1410 |
- Избитые фразы, такие как:
|
1411 |
- "Обеспечьте стабильность и развитие вашего бизнеса"
|
@@ -1530,7 +1530,7 @@ def safe_check(func, *args):
|
|
1530 |
print(f"Ошибка в {func.__name__}: {e}")
|
1531 |
return None # Indicate that the check could not be performed
|
1532 |
|
1533 |
-
def perform_checks(message, description, key_message, product_name,
|
1534 |
checks = {}
|
1535 |
|
1536 |
# 2. Morphological checks using pymorphy3
|
@@ -1590,11 +1590,11 @@ def perform_checks(message, description, key_message, product_name, advantages):
|
|
1590 |
elif check_name == "product_name_consistency":
|
1591 |
result = safe_check(check_func, message, product_name)
|
1592 |
elif check_name == "clickbait_phrases":
|
1593 |
-
result = safe_check(check_func, message, description,
|
1594 |
elif check_name == "abstract_claims":
|
1595 |
-
result = safe_check(check_func, message, description,
|
1596 |
elif check_name == "cliches_and_bureaucratese":
|
1597 |
-
result = safe_check(check_func, message, description,
|
1598 |
else:
|
1599 |
result = safe_check(check_func, message)
|
1600 |
checks[check_name] = result
|
@@ -1752,7 +1752,7 @@ with gr.Blocks() as demo:
|
|
1752 |
outputs=tabs
|
1753 |
).then(
|
1754 |
fn=generate_all_messages,
|
1755 |
-
inputs=[desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf, product_name
|
1756 |
outputs=[
|
1757 |
selected_approaches_text,
|
1758 |
non_personalized_prompt, personalized_prompt,
|
|
|
521 |
# return last_message
|
522 |
|
523 |
|
524 |
+
def generate_message_mistral_with_retry(prompt, approach_name, description, key_message, product_name, benefits):
|
525 |
global approach_stats
|
526 |
last_message = None
|
527 |
for attempt in range(20):
|
|
|
538 |
last_message = message
|
539 |
time.sleep(1)
|
540 |
continue
|
541 |
+
checks = perform_checks(message, description, key_message, product_name, benefits)
|
542 |
last_message = message
|
543 |
# Инициализируем статистику для подхода, если ее нет
|
544 |
if approach_name not in approach_stats:
|
|
|
558 |
|
559 |
|
560 |
# Функция для создания задания для копирайтера
|
561 |
+
def generate_standard_prompt(description, benefits, key_message, *selected_values):
|
562 |
prompt = (
|
563 |
f"Сгенерируй смс-сообщение для клиента. Напиши 3 или 4 предложения.\n"
|
564 |
f"Описание предложения: {description}\n"
|
565 |
+
f"Преимущества: {benefits}\n"
|
566 |
"В тексте смс запрещено использование:\n"
|
567 |
"- Запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, доступный, банкротство, долги, займ, срочно, сейчас, лучший, главный, номер 1, гарантия, успех, лидер, никакой;\n"
|
568 |
"- Повторы слов;\n"
|
|
|
668 |
return cleaned_prompt.strip()
|
669 |
|
670 |
# Функция для постепенной генерации всех сообщений через yield
|
671 |
+
def generate_all_messages(desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf, product_name):
|
672 |
standard_prompt = generate_standard_prompt(desc, benefits, key_message)
|
673 |
standard_prompt_for_display = f"Не изменяй название продукта: {product_name}.\n{standard_prompt}\nУбедись, что в готовом тексте без изменений, синонимов и перестановок слов используется наименование продукта: {product_name}.\n"
|
674 |
approach_mapping = {
|
|
|
740 |
yield selected_approaches_text_content, standard_prompt_for_display, display_personalization_prompt, None, None
|
741 |
flag += 1
|
742 |
prompt = add_prefix_suffix(standard_prompt, current_prefix, current_suffix, product_name)
|
743 |
+
non_personalized_message = generate_message_mistral_with_retry(prompt, approach_name, desc, key_message, product_name, benefits)
|
744 |
non_personalized_length = len(non_personalized_message)
|
745 |
non_personalized_display = f"{non_personalized_message}\n------\nКоличество знаков: {non_personalized_length}"
|
746 |
if non_personalized_messages:
|
|
|
752 |
non_personalized_messages, personalized_messages
|
753 |
)
|
754 |
full_personalized_prompt = f"{personalization_prompt}\n\nТекст для адаптации: {non_personalized_message}"
|
755 |
+
personalized_message = generate_message_mistral_with_retry(full_personalized_prompt, approach_name, desc, key_message, product_name, benefits)
|
756 |
personalized_length = len(personalized_message)
|
757 |
personalized_display = f"{personalized_message}\n------\nКоличество знаков: {personalized_length}"
|
758 |
if personalized_messages:
|
|
|
1236 |
|
1237 |
|
1238 |
# 24. Проверка на шокирующие, экстравагантные или кликбейтные фразы
|
1239 |
+
def check_clickbait_phrases(message, description, benefits):
|
1240 |
message_clean = cut_message(message)
|
1241 |
print()
|
1242 |
print()
|
|
|
1251 |
2. Ищи фразы, которые явно преувеличивают или вводят в заблуждение, обещая нечто чрезмерно идеализированное или сенсационное, что не может быть доказано или подтверждено. Примеры кликбейтных фраз: "Шокирующая правда", "Вы не поверите, что произошло", "Это изменит вашу жизнь за один день".
|
1252 |
3. Стандартные рекламные призывы к действию, такие как "купите сейчас" или "узнайте больше", не считаются кликбейтом, если они не преувеличивают преимущества или не используют явную манипуляцию эмоциями.
|
1253 |
4. Не считай фразы, используемые в исходном описании продукта, кликбейтными. Исходное описание: "{description}".
|
1254 |
+
5. Не считай фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{benefits}".
|
1255 |
Пример ответа:
|
1256 |
{{"decision": false, "explanation": "Текст нейтрален и не содержит кликбейтных фраз."}}
|
1257 |
|
|
|
1274 |
|
1275 |
|
1276 |
# 25. Проверка на абстрактные заявления без поддержки фактами
|
1277 |
+
def check_abstract_claims(message, description, benefits):
|
1278 |
print()
|
1279 |
print("Проверка 25: Проверка на абстрактные заявления без поддержки фактами")
|
1280 |
print()
|
|
|
1302 |
4. Ищи общие фразы, которые не дают представления о конкретной пользе, такие как "лучшее решение", "высокое качество", "отличный сервис", если они не сопровождаются пояснением о том, почему это так.
|
1303 |
5. Учитывай, что в рекламных сообщениях допустимы эмоциональные и обобщённые фразы, если они достаточно конкретны для понимания аудитории, однако они должны сопровождаться фактами или подробными примерами.
|
1304 |
6. Не считай фразы, используемые в исходном описании продукта, кликбейтными. Исходное описание: "{description}".
|
1305 |
+
7. Не считай фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{benefits}".
|
1306 |
|
1307 |
Пример ответа:
|
1308 |
{{"decision": false, "explanation": "Текст не содержит абстрактные утверждения без конкретики."}}
|
|
|
1391 |
return None
|
1392 |
|
1393 |
# 28. Проверка на речевые клише, рекламные штампы и канцеляризмы
|
1394 |
+
def check_cliches_and_bureaucratese(message, description, benefits):
|
1395 |
print()
|
1396 |
print("Проверка 28: Проверка на речевые клише, рекламные штампы и канцеляризмы")
|
1397 |
print()
|
|
|
1405 |
- Описания способов оформления или получения услуг (например, "оформление возможно онлайн или в офисе").
|
1406 |
- Стандартные отраслевые термины и фразы, необходимые для понимания сообщения (например, "премиальная бизнес-карта", "Mastercard Preferred"), но **не** их использование в комбинации с общими словами, как например, "идеальное решение для вашего бизнеса".
|
1407 |
- Фразы, используемые в исходном описании продукта, кликбейтными. Исходное описание: "{description}".
|
1408 |
+
- Фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{benefits}".
|
1409 |
**Считай клише или канцеляризмами следующие типы выражений:**
|
1410 |
- Избитые фразы, такие как:
|
1411 |
- "Обеспечьте стабильность и развитие вашего бизнеса"
|
|
|
1530 |
print(f"Ошибка в {func.__name__}: {e}")
|
1531 |
return None # Indicate that the check could not be performed
|
1532 |
|
1533 |
+
def perform_checks(message, description, key_message, product_name, benefits):
|
1534 |
checks = {}
|
1535 |
|
1536 |
# 2. Morphological checks using pymorphy3
|
|
|
1590 |
elif check_name == "product_name_consistency":
|
1591 |
result = safe_check(check_func, message, product_name)
|
1592 |
elif check_name == "clickbait_phrases":
|
1593 |
+
result = safe_check(check_func, message, description, benefits)
|
1594 |
elif check_name == "abstract_claims":
|
1595 |
+
result = safe_check(check_func, message, description, benefits)
|
1596 |
elif check_name == "cliches_and_bureaucratese":
|
1597 |
+
result = safe_check(check_func, message, description, benefits)
|
1598 |
else:
|
1599 |
result = safe_check(check_func, message)
|
1600 |
checks[check_name] = result
|
|
|
1752 |
outputs=tabs
|
1753 |
).then(
|
1754 |
fn=generate_all_messages,
|
1755 |
+
inputs=[desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf, product_name],
|
1756 |
outputs=[
|
1757 |
selected_approaches_text,
|
1758 |
non_personalized_prompt, personalized_prompt,
|