fruitpicker01
commited on
Commit
•
46f46f2
1
Parent(s):
ad07361
Update app.py
Browse files
app.py
CHANGED
@@ -660,10 +660,7 @@ def clean_prompt_for_display(prompt, prefixes, suffixes):
|
|
660 |
|
661 |
# Функция для постепенной генерации всех сообщений через yield
|
662 |
def generate_all_messages(desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf):
|
663 |
-
|
664 |
-
yield standard_prompt, None, None, None
|
665 |
-
|
666 |
-
# Сопоставление названий подходов с префиксами и суффиксами
|
667 |
approach_mapping = {
|
668 |
"Указание на пользу": (
|
669 |
"Начни сообщение с указания на пользу продукта. Используй глагол в побудительном наклонении.",
|
@@ -678,40 +675,34 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
678 |
"Убедись, что готовый текст начинается с вопроса, который указывает на пользу продукта для клиента."
|
679 |
)
|
680 |
}
|
681 |
-
|
682 |
-
# Получаем DataFrame подходов
|
683 |
approaches_df = features.get("Подход", None)
|
684 |
-
|
685 |
if approaches_df is None:
|
686 |
gr.Warning("Таблица 'Подход' не найдена.")
|
687 |
return
|
688 |
-
|
689 |
-
# Создаем фильтры на основе выбранных параметров
|
690 |
filters = []
|
691 |
for param_name, param_value in [('Пол', gender), ('Поколение', generation), ('Психотип', psychotype)]:
|
692 |
if param_value:
|
693 |
filters.append(approaches_df[param_name].fillna('') == param_value)
|
694 |
else:
|
695 |
filters.append(approaches_df[param_name].isnull() | (approaches_df[param_name] == ''))
|
696 |
-
|
697 |
-
# Применяем комбинированный фильтр
|
698 |
combined_filter = filters[0]
|
699 |
for f in filters[1:]:
|
700 |
combined_filter &= f
|
701 |
-
|
702 |
matching_rows = approaches_df[combined_filter]
|
703 |
-
|
704 |
if matching_rows.empty:
|
705 |
gr.Warning("Подход не найден для выбранных параметров.")
|
706 |
return
|
707 |
-
|
708 |
-
# Извлекаем уникальные подходы из отфильтрованных строк
|
709 |
approach_set = set()
|
710 |
for approaches in matching_rows['Подход']:
|
711 |
approach_names = [a.strip() for a in approaches.split(',')]
|
712 |
approach_set.update(approach_names)
|
713 |
-
|
714 |
-
|
|
|
|
|
|
|
|
|
|
|
715 |
non_personalized_messages = ''
|
716 |
personalized_messages = ''
|
717 |
flag = 1
|
@@ -726,7 +717,7 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
726 |
)
|
727 |
display_personalization_prompt = clean_prompt_for_display(personalization_prompt, [current_prefix], [current_suffix])
|
728 |
if flag == 1:
|
729 |
-
yield standard_prompt, display_personalization_prompt, None, None
|
730 |
flag += 1
|
731 |
prompt = add_prefix_suffix(standard_prompt, current_prefix, current_suffix)
|
732 |
non_personalized_message = generate_message_mistral_with_retry(prompt, approach_name, desc, key_message)
|
@@ -737,7 +728,7 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
737 |
else:
|
738 |
non_personalized_messages = non_personalized_display
|
739 |
yield (
|
740 |
-
standard_prompt, display_personalization_prompt,
|
741 |
non_personalized_messages, personalized_messages
|
742 |
)
|
743 |
full_personalized_prompt = f"{personalization_prompt}\n\nТекст для адаптации: {non_personalized_message}"
|
@@ -749,7 +740,7 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
749 |
else:
|
750 |
personalized_messages = personalized_display
|
751 |
yield (
|
752 |
-
standard_prompt, display_personalization_prompt,
|
753 |
non_personalized_messages, personalized_messages
|
754 |
)
|
755 |
time.sleep(1)
|
@@ -1641,14 +1632,16 @@ with gr.Blocks() as demo:
|
|
1641 |
|
1642 |
# Вкладка 2: Промпты
|
1643 |
with gr.TabItem("Ассистент", id=1):
|
|
|
1644 |
with gr.Row():
|
1645 |
with gr.Column():
|
1646 |
non_personalized_prompt = gr.Textbox(
|
1647 |
-
label="Задание для копирайтера",
|
1648 |
-
lines=
|
1649 |
interactive=False)
|
1650 |
with gr.Column():
|
1651 |
-
personalized_prompt = gr.Textbox(label="Задание для редактора", lines=
|
|
|
1652 |
|
1653 |
# Вкладка 3: Сообщения
|
1654 |
with gr.TabItem("Сообщения", id=2):
|
@@ -1662,15 +1655,16 @@ with gr.Blocks() as demo:
|
|
1662 |
|
1663 |
# Сначала переключаем вкладку, потом запускаем генерацию сообщений
|
1664 |
btn_to_prompts.click(
|
1665 |
-
fn=change_tab,
|
1666 |
-
inputs=[gr.Number(value=1, visible=False)],
|
1667 |
-
outputs=tabs
|
1668 |
).then(
|
1669 |
-
fn=generate_all_messages,
|
1670 |
-
inputs=[desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf],
|
1671 |
outputs=[
|
1672 |
-
|
1673 |
-
|
|
|
1674 |
]
|
1675 |
)
|
1676 |
|
|
|
660 |
|
661 |
# Функция для постепенной генерации всех сообщений через yield
|
662 |
def generate_all_messages(desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf):
|
663 |
+
# Определение подходов
|
|
|
|
|
|
|
664 |
approach_mapping = {
|
665 |
"Указание на пользу": (
|
666 |
"Начни сообщение с указания на пользу продукта. Используй глагол в побудительном наклонении.",
|
|
|
675 |
"Убедись, что готовый текст начинается с вопроса, который указывает на пользу продукта для клиента."
|
676 |
)
|
677 |
}
|
|
|
|
|
678 |
approaches_df = features.get("Подход", None)
|
|
|
679 |
if approaches_df is None:
|
680 |
gr.Warning("Таблица 'Подход' не найдена.")
|
681 |
return
|
|
|
|
|
682 |
filters = []
|
683 |
for param_name, param_value in [('Пол', gender), ('Поколение', generation), ('Психотип', psychotype)]:
|
684 |
if param_value:
|
685 |
filters.append(approaches_df[param_name].fillna('') == param_value)
|
686 |
else:
|
687 |
filters.append(approaches_df[param_name].isnull() | (approaches_df[param_name] == ''))
|
|
|
|
|
688 |
combined_filter = filters[0]
|
689 |
for f in filters[1:]:
|
690 |
combined_filter &= f
|
|
|
691 |
matching_rows = approaches_df[combined_filter]
|
|
|
692 |
if matching_rows.empty:
|
693 |
gr.Warning("Подход не найден для выбранных параметров.")
|
694 |
return
|
|
|
|
|
695 |
approach_set = set()
|
696 |
for approaches in matching_rows['Подход']:
|
697 |
approach_names = [a.strip() for a in approaches.split(',')]
|
698 |
approach_set.update(approach_names)
|
699 |
+
selected_approaches_text_content = "Выбранные подходы согласно рекомендациям Нейролаборатории: " + ', '.join(approach_set)
|
700 |
+
|
701 |
+
# Генерация стандартного задания
|
702 |
+
standard_prompt = generate_standard_prompt(desc, benefits, key_message)
|
703 |
+
yield selected_approaches_text_content, standard_prompt, None, None, None
|
704 |
+
|
705 |
+
# Инициализация переменных для сообщений
|
706 |
non_personalized_messages = ''
|
707 |
personalized_messages = ''
|
708 |
flag = 1
|
|
|
717 |
)
|
718 |
display_personalization_prompt = clean_prompt_for_display(personalization_prompt, [current_prefix], [current_suffix])
|
719 |
if flag == 1:
|
720 |
+
yield selected_approaches_text_content, standard_prompt, display_personalization_prompt, None, None
|
721 |
flag += 1
|
722 |
prompt = add_prefix_suffix(standard_prompt, current_prefix, current_suffix)
|
723 |
non_personalized_message = generate_message_mistral_with_retry(prompt, approach_name, desc, key_message)
|
|
|
728 |
else:
|
729 |
non_personalized_messages = non_personalized_display
|
730 |
yield (
|
731 |
+
selected_approaches_text_content, standard_prompt, display_personalization_prompt,
|
732 |
non_personalized_messages, personalized_messages
|
733 |
)
|
734 |
full_personalized_prompt = f"{personalization_prompt}\n\nТекст для адаптации: {non_personalized_message}"
|
|
|
740 |
else:
|
741 |
personalized_messages = personalized_display
|
742 |
yield (
|
743 |
+
selected_approaches_text_content, standard_prompt, display_personalization_prompt,
|
744 |
non_personalized_messages, personalized_messages
|
745 |
)
|
746 |
time.sleep(1)
|
|
|
1632 |
|
1633 |
# Вкладка 2: Промпты
|
1634 |
with gr.TabItem("Ассистент", id=1):
|
1635 |
+
selected_approaches_text = gr.Markdown()
|
1636 |
with gr.Row():
|
1637 |
with gr.Column():
|
1638 |
non_personalized_prompt = gr.Textbox(
|
1639 |
+
label="Задание для копирайтера",
|
1640 |
+
lines=23,
|
1641 |
interactive=False)
|
1642 |
with gr.Column():
|
1643 |
+
personalized_prompt = gr.Textbox(label="Задание для редактора", lines=23)
|
1644 |
+
|
1645 |
|
1646 |
# Вкладка 3: Сообщения
|
1647 |
with gr.TabItem("Сообщения", id=2):
|
|
|
1655 |
|
1656 |
# Сначала переключаем вкладку, потом запускаем генерацию сообщений
|
1657 |
btn_to_prompts.click(
|
1658 |
+
fn=change_tab,
|
1659 |
+
inputs=[gr.Number(value=1, visible=False)],
|
1660 |
+
outputs=tabs
|
1661 |
).then(
|
1662 |
+
fn=generate_all_messages,
|
1663 |
+
inputs=[desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf],
|
1664 |
outputs=[
|
1665 |
+
selected_approaches_text,
|
1666 |
+
non_personalized_prompt, personalized_prompt,
|
1667 |
+
non_personalized_messages, personalized_messages
|
1668 |
]
|
1669 |
)
|
1670 |
|