fruitpicker01 commited on
Commit
a2df846
·
verified ·
1 Parent(s): 97aceee

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -108
app.py CHANGED
@@ -60,7 +60,6 @@ def get_approaches(gender, generation, psychotype, approaches_df):
60
 
61
  filters = []
62
  for param_name, param_value in [('Пол', gender), ('Поколение', generation), ('Психотип', psychotype)]:
63
- # Если значение параметра "Не выбрано" или пустое
64
  if not param_value or param_value == "Не выбрано":
65
  filters.append(approaches_df[param_name].isnull() | (approaches_df[param_name].fillna('') == ''))
66
  else:
@@ -84,11 +83,7 @@ def get_approaches(gender, generation, psychotype, approaches_df):
84
  selected_approaches_text_content = ', '.join(approach_list)
85
  return selected_approaches_text_content
86
 
87
- def update_approach(gender, generation, psychotype):
88
- return get_approaches(gender, generation, psychotype, approaches_data)
89
-
90
  def get_instructions_for_param(param_value, df, col):
91
- # Если param_value пустое или "Не выбрано" – игнорируем
92
  if not param_value or param_value == "Не выбрано":
93
  return None
94
  row = df[df[col] == param_value]
@@ -100,7 +95,6 @@ def get_instructions_for_param(param_value, df, col):
100
  return instr1
101
 
102
  def format_instruction_string(instr):
103
- # "слово1, слово2, слово3" -> "слово1 или слово2 или слово3"
104
  terms = [t.strip() for t in instr.split(',') if t.strip()]
105
  return " или ".join(terms) if terms else ""
106
 
@@ -111,7 +105,6 @@ def generate_prompts(description, product_name, benefits, key_message, chosen_ap
111
  return ("Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода",
112
  "Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода")
113
 
114
- # Собираем подходы
115
  approach_list = [a.strip() for a in chosen_approach.split(',') if a.strip()]
116
  prefix_parts = []
117
  suffix_parts = []
@@ -119,7 +112,7 @@ def generate_prompts(description, product_name, benefits, key_message, chosen_ap
119
  if a in approach_dict:
120
  prefix_parts.append(approach_dict[a]["prefix"])
121
  suffix_parts.append(approach_dict[a]["suffix"])
122
- # Если несколько подходов, соединяем через "/"
123
  if len(prefix_parts) > 1:
124
  approach_prefix = " / ".join(prefix_parts)
125
  approach_suffix = " / ".join(suffix_parts)
@@ -127,7 +120,6 @@ def generate_prompts(description, product_name, benefits, key_message, chosen_ap
127
  approach_prefix = prefix_parts[0] if prefix_parts else ""
128
  approach_suffix = suffix_parts[0] if suffix_parts else ""
129
 
130
- # Собираем выбранные параметры
131
  instructions_data = [
132
  (gender, genders_data, "Пол"),
133
  (generation, generations_data, "Поколение"),
@@ -143,13 +135,6 @@ def generate_prompts(description, product_name, benefits, key_message, chosen_ap
143
  if instr1:
144
  chosen_params_instructions.append(instr1)
145
 
146
- # Теперь, согласно новой логике:
147
- # - Если один параметр выбран -> 1 пункт
148
- # - Если два параметра -> 2 пункта (по одному с каждого параметра)
149
- # И так далее. Используем только Инструкция 1.
150
- # Таким образом, количество пунктов = количество выбранных параметров
151
- # каждый пункт — это Инструкция 1 для параметра.
152
-
153
  if chosen_params_instructions:
154
  lines = []
155
  for i, instr_line in enumerate(chosen_params_instructions, start=1):
@@ -157,10 +142,8 @@ def generate_prompts(description, product_name, benefits, key_message, chosen_ap
157
  lines.append(f"{i}. {formatted_line}")
158
  mandatory_terms = "\n".join(lines)
159
  else:
160
- # Если нет выбранных параметров с инструкциями
161
  mandatory_terms = "Нет обязательных терминов, так как не выбрано ни одного параметра"
162
 
163
- # Формируем итоговый промпт
164
  if chosen_params_instructions:
165
  prompt = f"""Напиши три или четыре предложения. {approach_prefix}. Напиши рекламное SMS для следующего продукта:
166
  «{description}».
@@ -175,8 +158,7 @@ def generate_prompts(description, product_name, benefits, key_message, chosen_ap
175
  Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
176
  Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
177
  else:
178
- # Если нет ни одного параметра, но подход найден,
179
- # просто не указываем обязательные термины.
180
  prompt = f"""Напиши три или четыре предложения. {approach_prefix}. Напиши рекламное SMS для следующего продукта:
181
  «{description}».
182
  Не изменяй название продукта: «{product_name}».
@@ -189,12 +171,15 @@ def generate_prompts(description, product_name, benefits, key_message, chosen_ap
189
 
190
  return prompt, prompt
191
 
192
- def create_personalized_sms(description, product_name, benefits, key_message, chosen_approach,
193
- gender, generation, psychotype, business_stage, industry, opf):
 
 
 
194
  prompt_1, prompt_2 = generate_prompts(description, product_name, benefits, key_message,
195
- chosen_approach, gender, generation, psychotype,
196
- business_stage, industry, opf)
197
- return prompt_1, prompt_2
198
 
199
  with gr.Blocks(theme="default") as demo:
200
  gr.Markdown("**Процент созданных SMS по выбранному продукту**")
@@ -232,26 +217,10 @@ with gr.Blocks(theme="default") as demo:
232
  opf_dropdown = gr.Dropdown(label="ОПФ", choices=["Не выбрано"]+opfs, value=None)
233
  chosen_approach = gr.Textbox(label="Выбранный подход", lines=1, value="")
234
  presence_in_db = gr.Textbox(label="Наличие в базе", lines=1, value="", interactive=False)
235
-
236
- # При изменении Пол, Поколение, Психотип вычисляем подход
237
- def on_personal_params_change(gender, generation, psychotype):
238
- return update_approach(gender, generation, psychotype)
239
-
240
- gender_dropdown.change(fn=on_personal_params_change,
241
- inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown],
242
- outputs=[chosen_approach])
243
- generation_dropdown.change(fn=on_personal_params_change,
244
- inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown],
245
- outputs=[chosen_approach])
246
- psychotype_dropdown.change(fn=on_personal_params_change,
247
- inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown],
248
- outputs=[chosen_approach])
249
-
250
  with gr.Row():
251
- # Убрали кнопку "Создать персонализированное SMS" для формирования промптов
252
- # Теперь промпты формируются при изменении параметров
253
  return_params_btn = gr.Button("Вернуть параметры предыдущего запроса")
254
- create_personal_sms_btn = gr.Button("Создать персонализированное SMS") # Можно оставить для другого функционала, но промпты будут обновляться без нее.
255
 
256
  with gr.Row():
257
  with gr.Column():
@@ -282,70 +251,15 @@ with gr.Blocks(theme="default") as demo:
282
  save_sms_1_btn = gr.Button("Сохранить в базу")
283
  save_sms_2_btn = gr.Button("Сохранить в базу")
284
 
285
- # Теперь обновляем промпты при любом изменении параметров клиента и продукта
286
- # Функция-обертка, чтобы получить текущие значения и сгенерировать промпты
287
- def update_prompts_on_change(description, product_name, benefits, key_message, chosen_approach,
288
- gender, generation, psychotype, business_stage, industry, opf):
289
- return create_personalized_sms(description, product_name, benefits, key_message, chosen_approach,
290
- gender, generation, psychotype, business_stage, industry, opf)
291
-
292
- # Добавляем события при изменении всех параметров
293
- # Продукт
294
- product_dropdown.change(
295
- fn=update_prompts_on_change,
296
- inputs=[description, product_name, benefits, key_message, chosen_approach,
297
- gender_dropdown, generation_dropdown, psychotype_dropdown,
298
- business_stage_dropdown, industry_dropdown, opf_dropdown],
299
- outputs=[prompt_1, prompt_2]
300
- )
301
-
302
- # Параметры клиента
303
- gender_dropdown.change(
304
- fn=update_prompts_on_change,
305
- inputs=[description, product_name, benefits, key_message, chosen_approach,
306
- gender_dropdown, generation_dropdown, psychotype_dropdown,
307
- business_stage_dropdown, industry_dropdown, opf_dropdown],
308
- outputs=[prompt_1, prompt_2]
309
- )
310
-
311
- generation_dropdown.change(
312
- fn=update_prompts_on_change,
313
- inputs=[description, product_name, benefits, key_message, chosen_approach,
314
- gender_dropdown, generation_dropdown, psychotype_dropdown,
315
- business_stage_dropdown, industry_dropdown, opf_dropdown],
316
- outputs=[prompt_1, prompt_2]
317
- )
318
-
319
- psychotype_dropdown.change(
320
- fn=update_prompts_on_change,
321
- inputs=[description, product_name, benefits, key_message, chosen_approach,
322
- gender_dropdown, generation_dropdown, psychotype_dropdown,
323
- business_stage_dropdown, industry_dropdown, opf_dropdown],
324
- outputs=[prompt_1, prompt_2]
325
- )
326
-
327
- business_stage_dropdown.change(
328
- fn=update_prompts_on_change,
329
- inputs=[description, product_name, benefits, key_message, chosen_approach,
330
- gender_dropdown, generation_dropdown, psychotype_dropdown,
331
- business_stage_dropdown, industry_dropdown, opf_dropdown],
332
- outputs=[prompt_1, prompt_2]
333
- )
334
-
335
- industry_dropdown.change(
336
- fn=update_prompts_on_change,
337
- inputs=[description, product_name, benefits, key_message, chosen_approach,
338
- gender_dropdown, generation_dropdown, psychotype_dropdown,
339
- business_stage_dropdown, industry_dropdown, opf_dropdown],
340
- outputs=[prompt_1, prompt_2]
341
- )
342
-
343
- opf_dropdown.change(
344
- fn=update_prompts_on_change,
345
- inputs=[description, product_name, benefits, key_message, chosen_approach,
346
- gender_dropdown, generation_dropdown, psychotype_dropdown,
347
- business_stage_dropdown, industry_dropdown, opf_dropdown],
348
- outputs=[prompt_1, prompt_2]
349
- )
350
 
351
  demo.launch()
 
60
 
61
  filters = []
62
  for param_name, param_value in [('Пол', gender), ('Поколение', generation), ('Психотип', psychotype)]:
 
63
  if not param_value or param_value == "Не выбрано":
64
  filters.append(approaches_df[param_name].isnull() | (approaches_df[param_name].fillna('') == ''))
65
  else:
 
83
  selected_approaches_text_content = ', '.join(approach_list)
84
  return selected_approaches_text_content
85
 
 
 
 
86
  def get_instructions_for_param(param_value, df, col):
 
87
  if not param_value or param_value == "Не выбрано":
88
  return None
89
  row = df[df[col] == param_value]
 
95
  return instr1
96
 
97
  def format_instruction_string(instr):
 
98
  terms = [t.strip() for t in instr.split(',') if t.strip()]
99
  return " или ".join(terms) if terms else ""
100
 
 
105
  return ("Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода",
106
  "Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода")
107
 
 
108
  approach_list = [a.strip() for a in chosen_approach.split(',') if a.strip()]
109
  prefix_parts = []
110
  suffix_parts = []
 
112
  if a in approach_dict:
113
  prefix_parts.append(approach_dict[a]["prefix"])
114
  suffix_parts.append(approach_dict[a]["suffix"])
115
+
116
  if len(prefix_parts) > 1:
117
  approach_prefix = " / ".join(prefix_parts)
118
  approach_suffix = " / ".join(suffix_parts)
 
120
  approach_prefix = prefix_parts[0] if prefix_parts else ""
121
  approach_suffix = suffix_parts[0] if suffix_parts else ""
122
 
 
123
  instructions_data = [
124
  (gender, genders_data, "Пол"),
125
  (generation, generations_data, "Поколение"),
 
135
  if instr1:
136
  chosen_params_instructions.append(instr1)
137
 
 
 
 
 
 
 
 
138
  if chosen_params_instructions:
139
  lines = []
140
  for i, instr_line in enumerate(chosen_params_instructions, start=1):
 
142
  lines.append(f"{i}. {formatted_line}")
143
  mandatory_terms = "\n".join(lines)
144
  else:
 
145
  mandatory_terms = "Нет обязательных терминов, так как не выбрано ни одного параметра"
146
 
 
147
  if chosen_params_instructions:
148
  prompt = f"""Напиши три или четыре предложения. {approach_prefix}. Напиши рекламное SMS для следующего продукта:
149
  «{description}».
 
158
  Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
159
  Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
160
  else:
161
+ # Нет персональных параметров нет обязательных терминов
 
162
  prompt = f"""Напиши три или четыре предложения. {approach_prefix}. Напиши рекламное SMS для следующего продукта:
163
  «{description}».
164
  Не изменяй название продукта: «{product_name}».
 
171
 
172
  return prompt, prompt
173
 
174
+ def update_all_params(description, product_name, benefits, key_message,
175
+ gender, generation, psychotype, business_stage, industry, opf):
176
+ # Сначала определяем подход
177
+ chosen_approach = get_approaches(gender, generation, psychotype, approaches_data)
178
+ # Затем формируем промпты
179
  prompt_1, prompt_2 = generate_prompts(description, product_name, benefits, key_message,
180
+ chosen_approach, gender, generation, psychotype,
181
+ business_stage, industry, opf)
182
+ return chosen_approach, prompt_1, prompt_2
183
 
184
  with gr.Blocks(theme="default") as demo:
185
  gr.Markdown("**Процент созданных SMS по выбранному продукту**")
 
217
  opf_dropdown = gr.Dropdown(label="ОПФ", choices=["Не выбрано"]+opfs, value=None)
218
  chosen_approach = gr.Textbox(label="Выбранный подход", lines=1, value="")
219
  presence_in_db = gr.Textbox(label="Наличие в базе", lines=1, value="", interactive=False)
220
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  with gr.Row():
 
 
222
  return_params_btn = gr.Button("Вернуть параметры предыдущего запроса")
223
+ create_personal_sms_btn = gr.Button("Создать персонализированное SMS")
224
 
225
  with gr.Row():
226
  with gr.Column():
 
251
  save_sms_1_btn = gr.Button("Сохранить в базу")
252
  save_sms_2_btn = gr.Button("Сохранить в базу")
253
 
254
+ # Обновляем промпты и подход при изменении параметров клиента
255
+ client_params = [gender_dropdown, generation_dropdown, psychotype_dropdown, business_stage_dropdown, industry_dropdown, opf_dropdown]
256
+ for cp in client_params:
257
+ cp.change(
258
+ fn=update_all_params,
259
+ inputs=[description, product_name, benefits, key_message,
260
+ gender_dropdown, generation_dropdown, psychotype_dropdown,
261
+ business_stage_dropdown, industry_dropdown, opf_dropdown],
262
+ outputs=[chosen_approach, prompt_1, prompt_2]
263
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
 
265
  demo.launch()