fruitpicker01 commited on
Commit
b532214
·
verified ·
1 Parent(s): 3973b79

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -42
app.py CHANGED
@@ -109,7 +109,7 @@ def format_instruction_string(instr):
109
 
110
  def generate_display_prompts(description, product_name, benefits, key_message, chosen_approach,
111
  gender, generation, psychotype, business_stage, industry, opf):
112
- # Формируем промпты для отображения (с объединением всех подходов)
113
  if chosen_approach == "Подход не найден для выбранных параметров.":
114
  return ("Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода",
115
  "Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода")
@@ -151,10 +151,12 @@ def generate_display_prompts(description, product_name, benefits, key_message, c
151
  lines.append(f"{i}. {formatted_line}.")
152
  mandatory_terms = "\n".join(lines)
153
  else:
154
- mandatory_terms = "Нет обязательных терминов, так как не выбрано ни одного параметра"
 
 
155
 
156
- if chosen_params_instructions:
157
- prompt = f"""Напиши три или четыре предложения. {approach_prefix}.
158
  Напиши рекламное SMS для следующего продукта:
159
  «{description}».
160
  Не изменяй название продукта: «{product_name}».
@@ -166,16 +168,6 @@ def generate_display_prompts(description, product_name, benefits, key_message, c
166
  {approach_suffix}.
167
  Убедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин.
168
  Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
169
- Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
170
- else:
171
- prompt = f"""Напиши три или четыре предложения. {approach_prefix}. Напиши рекламное SMS для следующего продукта:
172
- «{description}».
173
- Не изменяй название продукта: «{product_name}».
174
- Преимущества:
175
- «{benefits}».
176
- Убедись, что написал не меньше трех и не больше четырех предложений.
177
- {approach_suffix}.
178
- Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
179
  Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
180
 
181
  return prompt, prompt
@@ -183,7 +175,7 @@ def generate_display_prompts(description, product_name, benefits, key_message, c
183
  def generate_model_prompt(description, product_name, benefits, key_message,
184
  gender, generation, psychotype, business_stage, industry, opf,
185
  single_approach):
186
- # Генерируем промпт для обращения к модели, используя только один выбранный подход (single_approach)
187
  prefix = approach_dict[single_approach]["prefix"]
188
  suffix = approach_dict[single_approach]["suffix"]
189
 
@@ -209,6 +201,7 @@ def generate_model_prompt(description, product_name, benefits, key_message,
209
  lines.append(f"{i}. {formatted_line}.")
210
  mandatory_terms = "\n".join(lines)
211
  else:
 
212
  mandatory_terms = None
213
 
214
  if mandatory_terms:
@@ -226,15 +219,8 @@ def generate_model_prompt(description, product_name, benefits, key_message,
226
  Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
227
  Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
228
  else:
229
- model_prompt = f"""Напиши три или четыре предложения. {prefix}. Напиши рекламное SMS для следующего продукта:
230
- «{description}».
231
- Не изменяй название продукта: «{product_name}».
232
- Преимущества:
233
- «{benefits}».
234
- Убедись, что написал не меньше трех и не больше четырех предложений.
235
- {suffix}.
236
- Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
237
- Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
238
 
239
  return model_prompt
240
 
@@ -248,23 +234,29 @@ def call_model(model_prompt):
248
  )
249
  return completion.choices[0].message.content.strip()
250
 
251
- def update_all_params(description, product_name, benefits, key_message,
252
- gender, generation, psychotype, business_stage, industry, opf):
253
- # Сначала определяем подход
254
  chosen_approach = get_approaches(gender, generation, psychotype, approaches_data)
255
- # Затем формируем промпты для отображения
256
  prompt_1, prompt_2 = generate_display_prompts(description, product_name, benefits, key_message,
257
  chosen_approach, gender, generation, psychotype,
258
  business_stage, industry, opf)
 
 
 
 
 
 
 
 
 
 
 
 
259
 
260
- # Если подход не найден или нет персональных параметров – показываем тексты как есть без генерации SMS
261
- if chosen_approach == "Подход не найден для выбранных параметров." or "Для формирования промпта выберите" in prompt_1:
262
- sms_1 = ""
263
- sms_2 = ""
264
- return chosen_approach, prompt_1, prompt_2, sms_1, sms_2
265
-
266
- # Если подход есть
267
  approach_list = [a.strip() for a in chosen_approach.split(',') if a.strip()]
 
 
268
 
269
  # Выбираем случайный подход для model_prompt_1
270
  if len(approach_list) > 1:
@@ -281,16 +273,15 @@ def update_all_params(description, product_name, benefits, key_message,
281
  model_prompt_1 = generate_model_prompt(description, product_name, benefits, key_message,
282
  gender, generation, psychotype, business_stage, industry, opf,
283
  chosen_single_approach_1)
284
-
285
  model_prompt_2 = generate_model_prompt(description, product_name, benefits, key_message,
286
  gender, generation, psychotype, business_stage, industry, opf,
287
  chosen_single_approach_2)
288
 
289
- # Вызываем модель для получения SMS
290
  sms_1 = call_model(model_prompt_1)
291
  sms_2 = call_model(model_prompt_2)
292
 
293
- return chosen_approach, prompt_1, prompt_2, sms_1, sms_2
 
294
 
295
  with gr.Blocks(theme="default") as demo:
296
  gr.Markdown("**Процент созданных SMS по выбранному продукту**")
@@ -327,10 +318,11 @@ with gr.Blocks(theme="default") as demo:
327
  industry_dropdown = gr.Dropdown(label="Отрасль", choices=["Не выбрано"]+industries, value=None)
328
  opf_dropdown = gr.Dropdown(label="ОПФ", choices=["Не выбрано"]+opfs, value=None)
329
  chosen_approach = gr.Textbox(label="Выбранный подход", lines=1, value="")
330
- presence_in_db = gr.Textbox(label="Наличие в базе", lines=1, value="", interactive=False)
331
 
332
  with gr.Row():
333
  return_params_btn = gr.Button("Вернуть параметры предыдущего запроса")
 
334
  create_personal_sms_btn = gr.Button("Создать персонализированное SMS")
335
 
336
  with gr.Row():
@@ -362,15 +354,25 @@ with gr.Blocks(theme="default") as demo:
362
  save_sms_1_btn = gr.Button("Сохранить в базу")
363
  save_sms_2_btn = gr.Button("Сохранить в базу")
364
 
365
- # Обновляем промпты, подход и генерируем SMS при изменении параметров клиента
366
  client_params = [gender_dropdown, generation_dropdown, psychotype_dropdown, business_stage_dropdown, industry_dropdown, opf_dropdown]
367
  for cp in client_params:
368
  cp.change(
369
- fn=update_all_params,
370
  inputs=[description, product_name, benefits, key_message,
371
  gender_dropdown, generation_dropdown, psychotype_dropdown,
372
  business_stage_dropdown, industry_dropdown, opf_dropdown],
373
- outputs=[chosen_approach, prompt_1, prompt_2, sms_1, sms_2]
374
  )
375
 
 
 
 
 
 
 
 
 
 
 
376
  demo.launch()
 
109
 
110
  def generate_display_prompts(description, product_name, benefits, key_message, chosen_approach,
111
  gender, generation, psychotype, business_stage, industry, opf):
112
+ # Формируем промпты для отображения
113
  if chosen_approach == "Подход не найден для выбранных параметров.":
114
  return ("Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода",
115
  "Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода")
 
151
  lines.append(f"{i}. {formatted_line}.")
152
  mandatory_terms = "\n".join(lines)
153
  else:
154
+ # Нет персональных параметров
155
+ return ("Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода",
156
+ "Для формирования промпта выберите хотя бы один личный персональный параметр для определения подхода")
157
 
158
+ # Если есть персональные параметры
159
+ prompt = f"""Напиши три или четыре предложения. {approach_prefix}.
160
  Напиши рекламное SMS для следующего продукта:
161
  «{description}».
162
  Не изменяй название продукта: «{product_name}».
 
168
  {approach_suffix}.
169
  Убедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин.
170
  Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
 
 
 
 
 
 
 
 
 
 
171
  Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
172
 
173
  return prompt, prompt
 
175
  def generate_model_prompt(description, product_name, benefits, key_message,
176
  gender, generation, psychotype, business_stage, industry, opf,
177
  single_approach):
178
+ # Генерируем промпт для обращения к модели, используя только один выбранный подход
179
  prefix = approach_dict[single_approach]["prefix"]
180
  suffix = approach_dict[single_approach]["suffix"]
181
 
 
201
  lines.append(f"{i}. {formatted_line}.")
202
  mandatory_terms = "\n".join(lines)
203
  else:
204
+ # Не должно сюда попасться, т.к. мы проверим до вызова модели
205
  mandatory_terms = None
206
 
207
  if mandatory_terms:
 
219
  Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «{product_name}».
220
  Убедись, что в SMS есть следующая ключевая информация: «{key_message}»."""
221
  else:
222
+ # Теоретически сюда не попадём, если проверяем до вызова
223
+ model_prompt = ""
 
 
 
 
 
 
 
224
 
225
  return model_prompt
226
 
 
234
  )
235
  return completion.choices[0].message.content.strip()
236
 
237
+ def update_prompts_on_params_change(description, product_name, benefits, key_message,
238
+ gender, generation, psychotype, business_stage, industry, opf):
239
+ # Обновляем подход и промпты при изменении параметров клиента
240
  chosen_approach = get_approaches(gender, generation, psychotype, approaches_data)
 
241
  prompt_1, prompt_2 = generate_display_prompts(description, product_name, benefits, key_message,
242
  chosen_approach, gender, generation, psychotype,
243
  business_stage, industry, opf)
244
+ # Здесь SMS не генерируем
245
+ return chosen_approach, prompt_1, prompt_2
246
+
247
+ def generate_personalized_sms(description, product_name, benefits, key_message,
248
+ gender, generation, psychotype, business_stage, industry, opf,
249
+ chosen_approach, prompt_1, prompt_2):
250
+ # Проверяем, есть ли персональный параметр
251
+ if "Для формирования промпта выберите хотя бы один личный персональный параметр" in prompt_1:
252
+ # Выводим предупреждение
253
+ return gr.update(value="Задайте хотя бы один личный персональный параметр для определения подхода"), "", ""
254
+ if chosen_approach == "Подход не найден для выбранных параметров.":
255
+ return gr.update(value="Задайте хотя бы один личный персональный параметр для определения подхода"), "", ""
256
 
 
 
 
 
 
 
 
257
  approach_list = [a.strip() for a in chosen_approach.split(',') if a.strip()]
258
+ if not approach_list:
259
+ return gr.update(value="Задайте хотя бы один личный персональный параметр для определения подхода"), "", ""
260
 
261
  # Выбираем случайный подход для model_prompt_1
262
  if len(approach_list) > 1:
 
273
  model_prompt_1 = generate_model_prompt(description, product_name, benefits, key_message,
274
  gender, generation, psychotype, business_stage, industry, opf,
275
  chosen_single_approach_1)
 
276
  model_prompt_2 = generate_model_prompt(description, product_name, benefits, key_message,
277
  gender, generation, psychotype, business_stage, industry, opf,
278
  chosen_single_approach_2)
279
 
 
280
  sms_1 = call_model(model_prompt_1)
281
  sms_2 = call_model(model_prompt_2)
282
 
283
+ # Очистим warning (presence_in_db) если было
284
+ return gr.update(value=""), sms_1, sms_2
285
 
286
  with gr.Blocks(theme="default") as demo:
287
  gr.Markdown("**Процент созданных SMS по выбранному продукту**")
 
318
  industry_dropdown = gr.Dropdown(label="Отрасль", choices=["Не выбрано"]+industries, value=None)
319
  opf_dropdown = gr.Dropdown(label="ОПФ", choices=["Не выбрано"]+opfs, value=None)
320
  chosen_approach = gr.Textbox(label="Выбранный подход", lines=1, value="")
321
+ presence_in_db = gr.Textbox(label="Сообщение", lines=1, value="", interactive=False)
322
 
323
  with gr.Row():
324
  return_params_btn = gr.Button("Вернуть параметры предыдущего запроса")
325
+ set_unused_params_btn = gr.Button("Задать ранее невыставленные параметры")
326
  create_personal_sms_btn = gr.Button("Создать персонализированное SMS")
327
 
328
  with gr.Row():
 
354
  save_sms_1_btn = gr.Button("Сохранить в базу")
355
  save_sms_2_btn = gr.Button("Сохранить в базу")
356
 
357
+ # Обновляем промпты и подход при изменении параметров клиента (без генерации SMS)
358
  client_params = [gender_dropdown, generation_dropdown, psychotype_dropdown, business_stage_dropdown, industry_dropdown, opf_dropdown]
359
  for cp in client_params:
360
  cp.change(
361
+ fn=update_prompts_on_params_change,
362
  inputs=[description, product_name, benefits, key_message,
363
  gender_dropdown, generation_dropdown, psychotype_dropdown,
364
  business_stage_dropdown, industry_dropdown, opf_dropdown],
365
+ outputs=[chosen_approach, prompt_1, prompt_2]
366
  )
367
 
368
+ # Генерация SMS по нажатию кнопки
369
+ create_personal_sms_btn.click(
370
+ fn=generate_personalized_sms,
371
+ inputs=[description, product_name, benefits, key_message,
372
+ gender_dropdown, generation_dropdown, psychotype_dropdown,
373
+ business_stage_dropdown, industry_dropdown, opf_dropdown,
374
+ chosen_approach, prompt_1, prompt_2],
375
+ outputs=[presence_in_db, sms_1, sms_2]
376
+ )
377
+
378
  demo.launch()