fruitpicker01 commited on
Commit
f15befd
1 Parent(s): 538b376

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -18
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, advantages):
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, advantages)
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, advantages, key_message, *selected_values):
562
  prompt = (
563
  f"Сгенерируй смс-сообщение для клиента. Напиши 3 или 4 предложения.\n"
564
  f"Описание предложения: {description}\n"
565
- f"Преимущества: {advantages}\n"
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, advantages):
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, advantages)
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, advantages)
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, advantages):
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. Не считай фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{advantages}".
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, advantages):
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. Не считай фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{advantages}".
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, advantages):
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
- - Фразы, используемые в преимуществах продукта, кликбейтными. Преимущества: "{advantages}".
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, advantages):
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, advantages)
1594
  elif check_name == "abstract_claims":
1595
- result = safe_check(check_func, message, description, advantages)
1596
  elif check_name == "cliches_and_bureaucratese":
1597
- result = safe_check(check_func, message, description, advantages)
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, advantages],
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,