fruitpicker01 commited on
Commit
2511b12
·
verified ·
1 Parent(s): 518431d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +178 -21
app.py CHANGED
@@ -822,6 +822,82 @@ def reset_button_text_2():
822
  time.sleep(2)
823
  return gr.update(value="Я предпочитаю это SMS", visible=True)
824
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
825
  # ФУНКЦИИ ПРОВЕРОК (НАЧАЛО)
826
 
827
  # 1. Запрещенные слова
@@ -1336,13 +1412,15 @@ with gr.Blocks(theme="default") as demo:
1336
  with gr.Column(scale=1):
1337
  gr.Markdown("**Продукт**")
1338
  product_dropdown = gr.Dropdown(label="Продукт", choices=products, value=products[0])
1339
- description = gr.Textbox(label="Описание предложения", lines=5, value="", interactive=True)
1340
  product_name = gr.Textbox(label="Наименование продукта", lines=1, value="", interactive=True)
1341
- benefits = gr.Textbox(label="Преимущества", lines=9, value="", interactive=True)
1342
  key_message = gr.Textbox(label="Ключевое сообщение", lines=2, value="")
 
1343
 
1344
  def on_product_change(selected, description, product_name, benefits, key_message,
1345
  gender, generation, psychotype, business_stage, industry, opf):
 
1346
  if selected == "Свой продукт":
1347
  new_desc = ""
1348
  new_pname = ""
@@ -1360,15 +1438,28 @@ with gr.Blocks(theme="default") as demo:
1360
  new_pname = ""
1361
  new_ben = ""
1362
  new_kmsg = ""
1363
- chosen_approach_val, p1, p2 = update_prompts_on_params_change(new_desc, new_pname, new_ben, new_kmsg,
1364
- gender, generation, psychotype,
1365
- business_stage, industry, opf)
1366
- return (gr.update(value=new_desc, interactive=(selected=="Свой продукт")),
1367
- gr.update(value=new_pname, interactive=(selected=="Свой продукт")),
1368
- gr.update(value=new_ben, interactive=(selected=="Свой продукт")),
1369
- gr.update(value=new_kmsg, interactive=(selected=="Свой продукт")),
1370
- chosen_approach_val, p1, p2,
1371
- "", "", "", "", "", "")
 
 
 
 
 
 
 
 
 
 
 
 
 
1372
 
1373
  with gr.Column(scale=1):
1374
  gr.Markdown("**Клиент**")
@@ -1424,20 +1515,86 @@ with gr.Blocks(theme="default") as demo:
1424
 
1425
  product_dropdown.change(
1426
  fn=on_product_change,
1427
- inputs=[product_dropdown, description, product_name, benefits, key_message,
1428
- gender_dropdown, generation_dropdown, psychotype_dropdown,
1429
- business_stage_dropdown, industry_dropdown, opf_dropdown],
1430
- outputs=[description, product_name, benefits, key_message,
1431
- chosen_approach, prompt_1, prompt_2,
1432
- sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1433
  )
1434
 
1435
  def params_change_wrapper(description, product_name, benefits, key_message,
1436
  gender, generation, psychotype, business_stage, industry, opf):
1437
- chosen_approach_val, p1, p2 = update_prompts_on_params_change(description, product_name, benefits, key_message,
1438
- gender, generation, psychotype,
1439
- business_stage, industry, opf)
1440
- return chosen_approach_val, p1, p2, "", "", "", "", "", ""
 
 
 
 
 
1441
 
1442
  client_params = [gender_dropdown, generation_dropdown, psychotype_dropdown,
1443
  business_stage_dropdown, industry_dropdown, opf_dropdown]
 
822
  time.sleep(2)
823
  return gr.update(value="Я предпочитаю это SMS", visible=True)
824
 
825
+ def check_source_fields(description, product_name, benefits, key_message):
826
+
827
+ results = []
828
+
829
+ # Проверяем "Описание предложения"
830
+ desc_checks = perform_checks(description, "")
831
+ not_passed_desc = extract_failed_checks(desc_checks) # функция, которая из словаря checks вытягивает только не пройденные проверки
832
+ if not_passed_desc:
833
+ results.append(f"Описание предложения:\n{not_passed_desc}")
834
+
835
+ # Проверяем "Наименование продукта"
836
+ name_checks = perform_checks(product_name, "")
837
+ not_passed_name = extract_failed_checks(name_checks)
838
+ if not_passed_name:
839
+ results.append(f"Наименование продукта:\n{not_passed_name}")
840
+
841
+ # Проверяем "Преимущества"
842
+ ben_checks = perform_checks(benefits, "")
843
+ not_passed_ben = extract_failed_checks(ben_checks)
844
+ if not_passed_ben:
845
+ results.append(f"Преимущества:\n{not_passed_ben}")
846
+
847
+ # Проверяем "Ключевое сообщение"
848
+ km_checks = perform_checks(key_message, "")
849
+ not_passed_km = extract_failed_checks(km_checks)
850
+ if not_passed_km:
851
+ results.append(f"Ключевое сообщение:\n{not_passed_km}")
852
+
853
+ if not results:
854
+ # Всё пройдено
855
+ return "Проверка исходных данных пройдена"
856
+ else:
857
+ # Склеиваем блоки
858
+ return "\n\n".join(results)
859
+
860
+
861
+ def extract_failed_checks(checks_dict):
862
+ lines = []
863
+ for rule_key, result in checks_dict.items():
864
+ # Определяем, было ли нарушение
865
+ if isinstance(result, tuple):
866
+ passed, reason = result
867
+ if not passed: # passed == False
868
+ # например: "Запрещенные слова: успех"
869
+ lines.append(f"{rule_to_str(rule_key)}: {reason}")
870
+ elif result is False:
871
+ # Если функция вернула просто False без пояснения
872
+ lines.append(f"{rule_to_str(rule_key)}: (без пояснения)")
873
+ return "\n".join(lines)
874
+
875
+
876
+ def rule_to_str(rule_key):
877
+ translation = {
878
+ "forbidden_words": "Запрещенные слова",
879
+ "client_addressing": "Обращение к клиенту",
880
+ "promises": "Обещания и гарантии",
881
+ "double_verbs": "Два глагола подряд",
882
+ "participles": "Причастия",
883
+ "adverbial_participles": "Деепричастия",
884
+ "superlative_adjectives": "Превосходная степень",
885
+ "passive_voice": "Страдательный залог",
886
+ "written_out_ordinals": "Порядковые числительные",
887
+ "subordinate_clauses_chain": "Цепочки придаточных",
888
+ "repeating_conjunctions": "Повторяющиеся союзы",
889
+ "introductory_phrases": "Вводные конструкции",
890
+ "amplifiers": "Усилители",
891
+ "time_parasites": "Паразиты времени",
892
+ "multiple_nouns": "Несколько существительных подряд",
893
+ "derived_prepositions": "Производные предлоги",
894
+ "compound_sentences": "Сложноподчиненные предложения",
895
+ "dates_written_out": "Даты прописью",
896
+ "no_word_repetitions": "Повторы слов",
897
+ }
898
+ return translation.get(rule_key, rule_key)
899
+
900
+
901
  # ФУНКЦИИ ПРОВЕРОК (НАЧАЛО)
902
 
903
  # 1. Запрещенные слова
 
1412
  with gr.Column(scale=1):
1413
  gr.Markdown("**Продукт**")
1414
  product_dropdown = gr.Dropdown(label="Продукт", choices=products, value=products[0])
1415
+ description = gr.Textbox(label="Описание предложения", lines=4, value="", interactive=True)
1416
  product_name = gr.Textbox(label="Наименование продукта", lines=1, value="", interactive=True)
1417
+ benefits = gr.Textbox(label="Преимущества", lines=6, value="", interactive=True)
1418
  key_message = gr.Textbox(label="Ключевое сообщение", lines=2, value="")
1419
+ source_check_md = gr.Textbox(label="Результат проверки исходных данных", lines=2, value="")
1420
 
1421
  def on_product_change(selected, description, product_name, benefits, key_message,
1422
  gender, generation, psychotype, business_stage, industry, opf):
1423
+
1424
  if selected == "Свой продукт":
1425
  new_desc = ""
1426
  new_pname = ""
 
1438
  new_pname = ""
1439
  new_ben = ""
1440
  new_kmsg = ""
1441
+
1442
+ chosen_approach_val, p1, p2 = update_prompts_on_params_change(
1443
+ new_desc, new_pname, new_ben, new_kmsg,
1444
+ gender, generation, psychotype,
1445
+ business_stage, industry, opf
1446
+ )
1447
+
1448
+ source_fields_report = check_source_fields(new_desc, new_pname, new_ben, new_kmsg)
1449
+
1450
+ return (
1451
+ gr.update(value=new_desc, interactive=(selected=="Свой продукт")),
1452
+ gr.update(value=new_pname, interactive=(selected=="Свой продукт")),
1453
+ gr.update(value=new_ben, interactive=(selected=="Свой продукт")),
1454
+ gr.update(value=new_kmsg, interactive=(selected=="Свой продукт")),
1455
+ chosen_approach_val, p1, p2,
1456
+ "",
1457
+ "",
1458
+ "",
1459
+ "",
1460
+ "",
1461
+ source_fields_report
1462
+ )
1463
 
1464
  with gr.Column(scale=1):
1465
  gr.Markdown("**Клиент**")
 
1515
 
1516
  product_dropdown.change(
1517
  fn=on_product_change,
1518
+ inputs=[
1519
+ product_dropdown, description, product_name, benefits, key_message,
1520
+ gender_dropdown, generation_dropdown, psychotype_dropdown,
1521
+ business_stage_dropdown, industry_dropdown, opf_dropdown
1522
+ ],
1523
+ outputs=[
1524
+ description, product_name, benefits, key_message,
1525
+ chosen_approach, prompt_1, prompt_2,
1526
+ sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2,
1527
+ source_check_md
1528
+ ]
1529
+ )
1530
+
1531
+ description.change(
1532
+ fn=params_change_wrapper,
1533
+ inputs=[
1534
+ description, product_name, benefits, key_message,
1535
+ gender_dropdown, generation_dropdown, psychotype_dropdown,
1536
+ business_stage_dropdown, industry_dropdown, opf_dropdown
1537
+ ],
1538
+ outputs=[
1539
+ chosen_approach, prompt_1, prompt_2,
1540
+ sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2,
1541
+ source_check_md
1542
+ ]
1543
+ )
1544
+
1545
+ product_name.change(
1546
+ fn=params_change_wrapper,
1547
+ inputs=[
1548
+ description, product_name, benefits, key_message,
1549
+ gender_dropdown, generation_dropdown, psychotype_dropdown,
1550
+ business_stage_dropdown, industry_dropdown, opf_dropdown
1551
+ ],
1552
+ outputs=[
1553
+ chosen_approach, prompt_1, prompt_2,
1554
+ sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2,
1555
+ source_check_md
1556
+ ]
1557
+ )
1558
+
1559
+ benefits.change(
1560
+ fn=params_change_wrapper,
1561
+ inputs=[
1562
+ description, product_name, benefits, key_message,
1563
+ gender_dropdown, generation_dropdown, psychotype_dropdown,
1564
+ business_stage_dropdown, industry_dropdown, opf_dropdown
1565
+ ],
1566
+ outputs=[
1567
+ chosen_approach, prompt_1, prompt_2,
1568
+ sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2,
1569
+ source_check_md
1570
+ ]
1571
+ )
1572
+
1573
+ key_message.change(
1574
+ fn=params_change_wrapper,
1575
+ inputs=[
1576
+ description, product_name, benefits, key_message,
1577
+ gender_dropdown, generation_dropdown, psychotype_dropdown,
1578
+ business_stage_dropdown, industry_dropdown, opf_dropdown
1579
+ ],
1580
+ outputs=[
1581
+ chosen_approach, prompt_1, prompt_2,
1582
+ sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2,
1583
+ source_check_md
1584
+ ]
1585
  )
1586
 
1587
  def params_change_wrapper(description, product_name, benefits, key_message,
1588
  gender, generation, psychotype, business_stage, industry, opf):
1589
+ chosen_approach_val, p1, p2 = update_prompts_on_params_change(
1590
+ description, product_name, benefits, key_message,
1591
+ gender, generation, psychotype,
1592
+ business_stage, industry, opf
1593
+ )
1594
+
1595
+ source_fields_report = check_source_fields(description, product_name, benefits, key_message)
1596
+
1597
+ return chosen_approach_val, p1, p2, "", "", "", "", "", source_fields_report
1598
 
1599
  client_params = [gender_dropdown, generation_dropdown, psychotype_dropdown,
1600
  business_stage_dropdown, industry_dropdown, opf_dropdown]