Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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=
|
1340 |
product_name = gr.Textbox(label="Наименование продукта", lines=1, value="", interactive=True)
|
1341 |
-
benefits = gr.Textbox(label="Преимущества", lines=
|
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 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
-
|
1367 |
-
|
1368 |
-
|
1369 |
-
|
1370 |
-
|
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=[
|
1428 |
-
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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(
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
|
|
|
|
|
|
|
|
|
|
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]
|