Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -7,22 +7,43 @@ def load_dropdown_data(file_path, sheet_name, column_name):
|
|
7 |
data = pd.read_excel(file_path, sheet_name=sheet_name)
|
8 |
return data[column_name].dropna().unique().tolist()
|
9 |
|
10 |
-
# Путь к файлу
|
11 |
file_path = "Исходные данные.xlsx"
|
12 |
|
13 |
# Загрузка данных
|
14 |
products, data_products = load_dropdown_data(file_path, "Продукты", "Наименование продукта"), pd.read_excel(file_path, sheet_name="Продукты")
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
approaches_data = pd.read_excel(file_path, sheet_name="Подход")
|
24 |
|
25 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
def fill_product_details(selected_product, data):
|
27 |
if selected_product:
|
28 |
product_row = data[data["Наименование продукта"] == selected_product].iloc[0]
|
@@ -34,7 +55,6 @@ def fill_product_details(selected_product, data):
|
|
34 |
)
|
35 |
return "", "", "", ""
|
36 |
|
37 |
-
# Функция для получения списка подходов
|
38 |
def get_approaches(gender, generation, psychotype, approaches_df):
|
39 |
if approaches_df is None or approaches_df.empty:
|
40 |
return "Таблица 'Подход' не найдена."
|
@@ -65,15 +85,122 @@ def get_approaches(gender, generation, psychotype, approaches_df):
|
|
65 |
selected_approaches_text_content = ', '.join(approach_list)
|
66 |
return selected_approaches_text_content
|
67 |
|
68 |
-
# Функция-обёртка для обновления подхода
|
69 |
def update_approach(gender, generation, psychotype):
|
70 |
return get_approaches(gender, generation, psychotype, approaches_data)
|
71 |
|
72 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
with gr.Blocks(theme="default") as demo:
|
74 |
gr.Markdown("**Процент созданных SMS по выбранному продукту**")
|
75 |
-
|
76 |
-
# Прогресс-бар
|
77 |
progress_bar_html = """
|
78 |
<div style="width: 100%; background-color: #e0e0e0; border-radius: 10px; overflow: hidden;">
|
79 |
<div style="width: 0%; background-color: #4caf50; height: 20px; text-align: center; color: white;">
|
@@ -86,17 +213,12 @@ with gr.Blocks(theme="default") as demo:
|
|
86 |
with gr.Row():
|
87 |
with gr.Column(scale=1):
|
88 |
gr.Markdown("**Продукт**")
|
89 |
-
product_dropdown = gr.Dropdown(
|
90 |
-
label="Продукт",
|
91 |
-
choices=products,
|
92 |
-
value=None
|
93 |
-
)
|
94 |
description = gr.Textbox(label="Описание предложения", lines=5, value="")
|
95 |
product_name = gr.Textbox(label="Наименование продукта", lines=1, value="")
|
96 |
benefits = gr.Textbox(label="Преимущества", lines=9, value="")
|
97 |
key_message = gr.Textbox(label="Ключевое сообщение", lines=2, value="")
|
98 |
|
99 |
-
# Обработчик выбора продукта
|
100 |
product_dropdown.change(
|
101 |
fn=lambda selected: fill_product_details(selected, data_products),
|
102 |
inputs=[product_dropdown],
|
@@ -105,59 +227,59 @@ with gr.Blocks(theme="default") as demo:
|
|
105 |
|
106 |
with gr.Column(scale=1):
|
107 |
gr.Markdown("**Клиент**")
|
108 |
-
gender_dropdown = gr.Dropdown(label="Пол", choices=genders, value=None)
|
109 |
-
generation_dropdown = gr.Dropdown(label="Поколение", choices=generations, value=None)
|
110 |
-
psychotype_dropdown = gr.Dropdown(label="Психотип", choices=psychotypes, value=None)
|
111 |
-
business_stage_dropdown = gr.Dropdown(label="Стадия бизнеса", choices=business_stages, value=None)
|
112 |
-
industry_dropdown = gr.Dropdown(label="Отрасль", choices=industries, value=None)
|
113 |
-
opf_dropdown = gr.Dropdown(label="ОПФ", choices=opfs, value=None)
|
114 |
chosen_approach = gr.Textbox(label="Выбранный подход", lines=1, value="")
|
115 |
presence_in_db = gr.Textbox(label="Наличие в базе", lines=1, value="", interactive=False)
|
116 |
|
117 |
-
# При изменении Пол, Поколение, Психотип вызываем update_approach
|
118 |
gender_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
|
119 |
generation_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
|
120 |
psychotype_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
|
121 |
|
122 |
-
# Кнопки: Вернуть параметры, Создать персонализированное SMS
|
123 |
with gr.Row():
|
124 |
return_params_btn = gr.Button("Вернуть параметры предыдущего запроса")
|
125 |
create_personal_sms_btn = gr.Button("Создать персонализированное SMS")
|
126 |
-
|
127 |
-
# Блок для Модель 1, Промпт 1, SMS 1
|
128 |
with gr.Row():
|
129 |
with gr.Column():
|
130 |
-
model_1_name = gr.Textbox(label="Модель 1", value="
|
131 |
-
prompt_1 = gr.Textbox(label="Промпт 1", value="
|
132 |
sms_1 = gr.Textbox(label="SMS 1", lines=3, value="")
|
133 |
|
134 |
-
# Блок для Модель 2, Промпт 2, SMS 2
|
135 |
with gr.Column():
|
136 |
-
model_2_name = gr.Textbox(label="Модель 2", value="
|
137 |
-
prompt_2 = gr.Textbox(label="Промпт 2", value="
|
138 |
sms_2 = gr.Textbox(label="SMS 2", lines=3, value="")
|
139 |
|
140 |
-
# Кнопки выбора SMS
|
141 |
with gr.Row():
|
142 |
prefer_sms_1_btn = gr.Button("Я предпочитаю это SMS")
|
143 |
prefer_sms_2_btn = gr.Button("Я предпочитаю это SMS")
|
144 |
|
145 |
-
# Кнопка "Перегенерировать SMS"
|
146 |
regen_btn = gr.Button("Перегенерировать SMS (не нравится ни одно из SMS)")
|
147 |
|
148 |
-
# Комментарии к SMS 1 и 2
|
149 |
with gr.Row():
|
150 |
comment_sms_1 = gr.Textbox(label="Комментарий к SMS 1", lines=2, value="")
|
151 |
comment_sms_2 = gr.Textbox(label="Комментарий к SMS 2", lines=2, value="")
|
152 |
|
153 |
-
# Откорректированные SMS
|
154 |
with gr.Row():
|
155 |
corrected_sms_1 = gr.Textbox(label="Откорректированное SMS 1", lines=3, value="")
|
156 |
corrected_sms_2 = gr.Textbox(label="Откорректированное SMS 2", lines=3, value="")
|
157 |
|
158 |
-
# Кнопки сохранения
|
159 |
with gr.Row():
|
160 |
save_sms_1_btn = gr.Button("Сохранить в базу")
|
161 |
save_sms_2_btn = gr.Button("Сохранить в базу")
|
162 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
demo.launch()
|
|
|
7 |
data = pd.read_excel(file_path, sheet_name=sheet_name)
|
8 |
return data[column_name].dropna().unique().tolist()
|
9 |
|
|
|
10 |
file_path = "Исходные данные.xlsx"
|
11 |
|
12 |
# Загрузка данных
|
13 |
products, data_products = load_dropdown_data(file_path, "Продукты", "Наименование продукта"), pd.read_excel(file_path, sheet_name="Продукты")
|
14 |
+
genders_data = pd.read_excel(file_path, sheet_name="Пол")
|
15 |
+
generations_data = pd.read_excel(file_path, sheet_name="Поколение")
|
16 |
+
psychotypes_data = pd.read_excel(file_path, sheet_name="Психотип")
|
17 |
+
business_stages_data = pd.read_excel(file_path, sheet_name="Стадия бизнеса")
|
18 |
+
industries_data = pd.read_excel(file_path, sheet_name="Отрасль")
|
19 |
+
opfs_data = pd.read_excel(file_path, sheet_name="ОПФ")
|
20 |
+
|
21 |
+
genders = genders_data["Пол"].dropna().unique().tolist()
|
22 |
+
generations = generations_data["Поколение"].dropna().unique().tolist()
|
23 |
+
psychotypes = psychotypes_data["Психотип"].dropna().unique().tolist()
|
24 |
+
business_stages = business_stages_data["Стадия бизнеса"].dropna().unique().tolist()
|
25 |
+
industries = industries_data["Отрасль"].dropna().unique().tolist()
|
26 |
+
opfs = opfs_data["ОПФ"].dropna().unique().tolist()
|
27 |
+
|
28 |
approaches_data = pd.read_excel(file_path, sheet_name="Подход")
|
29 |
|
30 |
+
# Словарь подходов
|
31 |
+
approach_dict = {
|
32 |
+
"Указание на пользу": {
|
33 |
+
"prefix": "Начни SMS с указания на пользу продукта. Используй глагол в побудительном наклонении. Не начинай с вопроса",
|
34 |
+
"suffix": "Убедись, что SMS начинается с указания на пользу продукта и использования глагола в побудительном наклонении и не начинается с вопроса"
|
35 |
+
},
|
36 |
+
"Вопрос": {
|
37 |
+
"prefix": "Начни сообщение с вопроса, который указывает на пользу продукта для клиента",
|
38 |
+
"suffix": "Убедись, что готовый текст начинается с вопроса, который указывает на пользу продукта для клиента"
|
39 |
+
},
|
40 |
+
"Призыв к действию": {
|
41 |
+
"prefix": "Начни SMS с призыва к действию с продуктом. Не начинай с вопроса",
|
42 |
+
"suffix": "Убедись, что готовый текст начинается с призыва к действию с продуктом и не начинается с вопроса"
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
# Функция для заполнения полей продукта
|
47 |
def fill_product_details(selected_product, data):
|
48 |
if selected_product:
|
49 |
product_row = data[data["Наименование продукта"] == selected_product].iloc[0]
|
|
|
55 |
)
|
56 |
return "", "", "", ""
|
57 |
|
|
|
58 |
def get_approaches(gender, generation, psychotype, approaches_df):
|
59 |
if approaches_df is None or approaches_df.empty:
|
60 |
return "Таблица 'Подход' не найдена."
|
|
|
85 |
selected_approaches_text_content = ', '.join(approach_list)
|
86 |
return selected_approaches_text_content
|
87 |
|
|
|
88 |
def update_approach(gender, generation, psychotype):
|
89 |
return get_approaches(gender, generation, psychotype, approaches_data)
|
90 |
|
91 |
+
# Функция для извлечения инструкций из таблиц параметров
|
92 |
+
def get_instructions_for_param(param_name, param_value, df, param_col_name):
|
93 |
+
# Если param_value пустое или "Не выбрано" – игнорируем
|
94 |
+
if not param_value or param_value == "Не выбрано":
|
95 |
+
return None, None
|
96 |
+
row = df[df[param_col_name] == param_value]
|
97 |
+
if row.empty:
|
98 |
+
return None, None
|
99 |
+
instr1 = row.iloc[0].get("Инструкция 1", "")
|
100 |
+
instr2 = row.iloc[0].get("Ин��трукция 2", "")
|
101 |
+
return instr1, instr2
|
102 |
+
|
103 |
+
def format_instruction_string(instr):
|
104 |
+
# Превращаем "слово1, слово2, слово3" в "слово1 или слово2 или слово3"
|
105 |
+
terms = [t.strip() for t in instr.split(',') if t.strip()]
|
106 |
+
return " или ".join(terms) if terms else ""
|
107 |
+
|
108 |
+
def generate_prompts(description, product_name, benefits, key_message, chosen_approach,
|
109 |
+
gender, generation, psychotype, business_stage, industry, opf):
|
110 |
+
# Если подход не определён
|
111 |
+
if chosen_approach == "Подход не найден для выбранных параметров.":
|
112 |
+
return ("Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода",
|
113 |
+
"Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода")
|
114 |
+
|
115 |
+
# Собираем approach_prefix и approach_suffix
|
116 |
+
approach_list = [a.strip() for a in chosen_approach.split(',')]
|
117 |
+
prefix_parts = []
|
118 |
+
suffix_parts = []
|
119 |
+
for a in approach_list:
|
120 |
+
if a in approach_dict:
|
121 |
+
prefix_parts.append(approach_dict[a]["prefix"])
|
122 |
+
suffix_parts.append(approach_dict[a]["suffix"])
|
123 |
+
approach_prefix = " ".join(prefix_parts) if prefix_parts else ""
|
124 |
+
approach_suffix = " ".join(suffix_parts) if suffix_parts else ""
|
125 |
+
|
126 |
+
# Собираем инструкции из персонализационных параметров
|
127 |
+
# Порядок: Пол, Поколение, Психотип, Стадия бизнеса, Отрасль, ОПФ
|
128 |
+
instructions_data = [
|
129 |
+
("Пол", gender, genders_data, "Пол"),
|
130 |
+
("Поколение", generation, generations_data, "Поколение"),
|
131 |
+
("Психотип", psychotype, psychotypes_data, "Психотип"),
|
132 |
+
("Стадия бизнеса", business_stage, business_stages_data, "Стадия бизнеса"),
|
133 |
+
("Отрасль", industry, industries_data, "Отрасль"),
|
134 |
+
("ОПФ", opf, opfs_data, "ОПФ")
|
135 |
+
]
|
136 |
+
|
137 |
+
used_instructions = []
|
138 |
+
for (param_name, param_value, df, col) in instructions_data:
|
139 |
+
instr1, instr2 = get_instructions_for_param(param_name, param_value, df, col)
|
140 |
+
# Добавляем инструкцию, только если есть значение
|
141 |
+
if instr1 and instr1.strip():
|
142 |
+
instr_str = format_instruction_string(instr1)
|
143 |
+
used_instructions.append(instr_str)
|
144 |
+
if instr2 and instr2.strip():
|
145 |
+
instr_str = format_instruction_string(instr2)
|
146 |
+
used_instructions.append(instr_str)
|
147 |
+
|
148 |
+
# Формируем блок обязательных терминов
|
149 |
+
# Каждый элемент used_instructions – это уже подготовленная строка с "или".
|
150 |
+
# Нужно их пронумеровать:
|
151 |
+
mandatory_terms = ""
|
152 |
+
if used_instructions:
|
153 |
+
lines = []
|
154 |
+
for i, instr_line in enumerate(used_instructions, start=1):
|
155 |
+
lines.append(f"{i}. {instr_line}")
|
156 |
+
mandatory_terms = "\n".join(lines)
|
157 |
+
else:
|
158 |
+
# Если нет выбранных параметров или инструкции пусты,
|
159 |
+
# можно по умолчанию не выводить пункты или оставить пустым
|
160 |
+
# Но по условию задачи, если нет подхода, уже обработали выше.
|
161 |
+
# Если есть подход, но нет инструкций, значит никаких персональных параметров не выбрано
|
162 |
+
# Тогда будет без обязательных терминов. Можно просто не выводить пункты.
|
163 |
+
mandatory_terms = "Нет обязательных терминов, так как не выбрано ни одного параметра"
|
164 |
+
|
165 |
+
# Формируем итоговый промпт
|
166 |
+
if used_instructions:
|
167 |
+
prompt = f"""Напиши три или четыре предложения. {approach_prefix}. Напиши рекламное SMS для следующего продукта:
|
168 |
+
«{description}».
|
169 |
+
Не изменяй название продукта: «{product_name}».
|
170 |
+
Преимущества:
|
171 |
+
«{benefits}».
|
172 |
+
ОБЯЗАТЕЛЬНО используй в SMS КАЖДЫЙ из следующих терминов:
|
173 |
+
{mandatory_terms}
|
174 |
+
Убедись, что написал не меньше трех и не больше четырех предложений.
|
175 |
+
{approach_suffix}.
|
176 |
+
Убедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин.
|
177 |
+
Убедись, что в SMS без изменений, синонимов и перестановок слов используется ��аименование продукта: «{product_name}».
|
178 |
+
Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
|
179 |
+
else:
|
180 |
+
# Если нет выбранных параметров с инструкциями, можно вывести вариант без инструкций
|
181 |
+
prompt = f"""Напиши три или четыре предложения. {approach_prefix}. Напиши рекламное SMS для следующего продукта:
|
182 |
+
«{description}».
|
183 |
+
Не изменяй название продукта: «{product_name}».
|
184 |
+
Преимущества:
|
185 |
+
«{benefits}».
|
186 |
+
Убедись, что написал не меньше трех и не больше четырех предложений.
|
187 |
+
{approach_suffix}.
|
188 |
+
Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
|
189 |
+
Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
|
190 |
+
|
191 |
+
return prompt, prompt
|
192 |
+
|
193 |
+
def create_personalized_sms(description, product_name, benefits, key_message, chosen_approach,
|
194 |
+
gender, generation, psychotype, business_stage, industry, opf):
|
195 |
+
# Генерируем промпты 1 и 2 по новой логике
|
196 |
+
prompt_1, prompt_2 = generate_prompts(description, product_name, benefits, key_message,
|
197 |
+
chosen_approach, gender, generation, psychotype,
|
198 |
+
business_stage, industry, opf)
|
199 |
+
# Возвращаем промпты для отображения
|
200 |
+
return prompt_1, prompt_2
|
201 |
+
|
202 |
with gr.Blocks(theme="default") as demo:
|
203 |
gr.Markdown("**Процент созданных SMS по выбранному продукту**")
|
|
|
|
|
204 |
progress_bar_html = """
|
205 |
<div style="width: 100%; background-color: #e0e0e0; border-radius: 10px; overflow: hidden;">
|
206 |
<div style="width: 0%; background-color: #4caf50; height: 20px; text-align: center; color: white;">
|
|
|
213 |
with gr.Row():
|
214 |
with gr.Column(scale=1):
|
215 |
gr.Markdown("**Продукт**")
|
216 |
+
product_dropdown = gr.Dropdown(label="Продукт", choices=products, value=None)
|
|
|
|
|
|
|
|
|
217 |
description = gr.Textbox(label="Описание предложения", lines=5, value="")
|
218 |
product_name = gr.Textbox(label="Наименование продукта", lines=1, value="")
|
219 |
benefits = gr.Textbox(label="Преимущества", lines=9, value="")
|
220 |
key_message = gr.Textbox(label="Ключевое сообщение", lines=2, value="")
|
221 |
|
|
|
222 |
product_dropdown.change(
|
223 |
fn=lambda selected: fill_product_details(selected, data_products),
|
224 |
inputs=[product_dropdown],
|
|
|
227 |
|
228 |
with gr.Column(scale=1):
|
229 |
gr.Markdown("**Клиент**")
|
230 |
+
gender_dropdown = gr.Dropdown(label="Пол", choices=["Не выбрано"]+genders, value=None)
|
231 |
+
generation_dropdown = gr.Dropdown(label="Поколение", choices=["Не выбрано"]+generations, value=None)
|
232 |
+
psychotype_dropdown = gr.Dropdown(label="Психотип", choices=["Не выбрано"]+psychotypes, value=None)
|
233 |
+
business_stage_dropdown = gr.Dropdown(label="Стадия бизнеса", choices=["Не выбрано"]+business_stages, value=None)
|
234 |
+
industry_dropdown = gr.Dropdown(label="Отрасль", choices=["Не выбрано"]+industries, value=None)
|
235 |
+
opf_dropdown = gr.Dropdown(label="ОПФ", choices=["Не выбрано"]+opfs, value=None)
|
236 |
chosen_approach = gr.Textbox(label="Выбранный подход", lines=1, value="")
|
237 |
presence_in_db = gr.Textbox(label="Наличие в базе", lines=1, value="", interactive=False)
|
238 |
|
|
|
239 |
gender_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
|
240 |
generation_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
|
241 |
psychotype_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
|
242 |
|
|
|
243 |
with gr.Row():
|
244 |
return_params_btn = gr.Button("Вернуть параметры предыдущего запроса")
|
245 |
create_personal_sms_btn = gr.Button("Создать персонализированное SMS")
|
246 |
+
|
|
|
247 |
with gr.Row():
|
248 |
with gr.Column():
|
249 |
+
model_1_name = gr.Textbox(label="Модель 1", value="Модель 1", interactive=False)
|
250 |
+
prompt_1 = gr.Textbox(label="Промпт 1", value="", interactive=False, lines=10)
|
251 |
sms_1 = gr.Textbox(label="SMS 1", lines=3, value="")
|
252 |
|
|
|
253 |
with gr.Column():
|
254 |
+
model_2_name = gr.Textbox(label="Модель 2", value="Модель 2", interactive=False)
|
255 |
+
prompt_2 = gr.Textbox(label="Промпт 2", value="", interactive=False, lines=10)
|
256 |
sms_2 = gr.Textbox(label="SMS 2", lines=3, value="")
|
257 |
|
|
|
258 |
with gr.Row():
|
259 |
prefer_sms_1_btn = gr.Button("Я предпочитаю это SMS")
|
260 |
prefer_sms_2_btn = gr.Button("Я предпочитаю это SMS")
|
261 |
|
|
|
262 |
regen_btn = gr.Button("Перегенерировать SMS (не нравится ни одно из SMS)")
|
263 |
|
|
|
264 |
with gr.Row():
|
265 |
comment_sms_1 = gr.Textbox(label="Комментарий к SMS 1", lines=2, value="")
|
266 |
comment_sms_2 = gr.Textbox(label="Комментарий к SMS 2", lines=2, value="")
|
267 |
|
|
|
268 |
with gr.Row():
|
269 |
corrected_sms_1 = gr.Textbox(label="Откорректированное SMS 1", lines=3, value="")
|
270 |
corrected_sms_2 = gr.Textbox(label="Откорректированное SMS 2", lines=3, value="")
|
271 |
|
|
|
272 |
with gr.Row():
|
273 |
save_sms_1_btn = gr.Button("Сохранить в базу")
|
274 |
save_sms_2_btn = gr.Button("Сохранить в базу")
|
275 |
+
|
276 |
+
# При нажатии на "Создать персонализированное SMS" формируем промпты
|
277 |
+
create_personal_sms_btn.click(
|
278 |
+
fn=create_personalized_sms,
|
279 |
+
inputs=[description, product_name, benefits, key_message, chosen_approach,
|
280 |
+
gender_dropdown, generation_dropdown, psychotype_dropdown,
|
281 |
+
business_stage_dropdown, industry_dropdown, opf_dropdown],
|
282 |
+
outputs=[prompt_1, prompt_2]
|
283 |
+
)
|
284 |
+
|
285 |
demo.launch()
|