Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -253,11 +253,9 @@ def generate_message_with_retry(model_prompt):
|
|
253 |
msg = clean_message(msg)
|
254 |
length = len(msg)
|
255 |
if 160 <= length <= 250:
|
256 |
-
# Добавляем информацию о количестве знаков
|
257 |
msg += f"\n\n------\nКоличество знаков: {length}"
|
258 |
return msg
|
259 |
last_message = msg
|
260 |
-
# Если не удалось подобрать длину
|
261 |
length = len(last_message)
|
262 |
last_message += f"\n\n------\nКоличество знаков: {length}"
|
263 |
return last_message
|
@@ -268,7 +266,8 @@ def update_prompts_on_params_change(description, product_name, benefits, key_mes
|
|
268 |
prompt_1, prompt_2 = generate_display_prompts(description, product_name, benefits, key_message,
|
269 |
chosen_approach, gender, generation, psychotype,
|
270 |
business_stage, industry, opf)
|
271 |
-
|
|
|
272 |
|
273 |
def save_user_request_to_github(selected_product, description, product_name, benefits, key_message, approach, personalization_params):
|
274 |
global current_request_index
|
@@ -313,7 +312,7 @@ def load_previous_user_request_from_github():
|
|
313 |
json_files = [file for file in files if file['name'].startswith("user_request_")]
|
314 |
if not json_files:
|
315 |
print("Нет сохраненных запросов.")
|
316 |
-
return "", "", "", "", "", None, None, None, None, None,
|
317 |
current_request_index -= 1
|
318 |
if abs(current_request_index) > len(json_files):
|
319 |
current_request_index = -len(json_files)
|
@@ -322,7 +321,7 @@ def load_previous_user_request_from_github():
|
|
322 |
file_response = requests.get(file_url)
|
323 |
if file_response.status_code == 200:
|
324 |
data = json.loads(file_response.text)
|
325 |
-
selected_product = data.get('selected_product',
|
326 |
description = data.get('description', "")
|
327 |
product_name = data.get('product_name', "")
|
328 |
benefits = data.get('benefits', "")
|
@@ -331,13 +330,13 @@ def load_previous_user_request_from_github():
|
|
331 |
personalization_params = data.get('personalization_params', [None]*6)
|
332 |
if len(personalization_params) < 6:
|
333 |
personalization_params += [None]*(6-len(personalization_params))
|
334 |
-
return selected_product, description, product_name, benefits, key_message, approach, *personalization_params
|
335 |
else:
|
336 |
print(f"Ошибка при загрузке файла: {file_response.status_code}")
|
337 |
-
return
|
338 |
else:
|
339 |
print(f"Ошибка при обращении к GitHub: {response.status_code}")
|
340 |
-
return
|
341 |
|
342 |
def generate_final_prompt_from_display(prompt_text, single_approach, is_prompt_1=True):
|
343 |
prefix = approach_dict[single_approach]["prefix"]
|
@@ -348,9 +347,9 @@ def generate_final_prompt_from_display(prompt_text, single_approach, is_prompt_1
|
|
348 |
f"\n{suffix}.\nУбедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин.\nУбедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта:\nУбедись, что в SMS есть следующая ключевая информация:", prompt_text, flags=re.DOTALL)
|
349 |
return prompt_text
|
350 |
|
351 |
-
def
|
352 |
-
|
353 |
-
|
354 |
if "Для формирования промпта выберите хотя бы один личный персональный параметр" in prompt_1 or chosen_approach == "Подход не найден для выбранных параметров.":
|
355 |
gr.Warning("Задайте хотя бы о��ин личный персональный параметр для определения подхода, чтобы был сформирован промпт")
|
356 |
return "", ""
|
@@ -365,7 +364,12 @@ def generate_personalized_sms(description, product_name, benefits, key_message,
|
|
365 |
sms_1 = generate_message_with_retry(final_prompt_1)
|
366 |
sms_2 = generate_message_with_retry(final_prompt_2)
|
367 |
personalization_params = [gender, generation, psychotype, business_stage, industry, opf]
|
|
|
|
|
368 |
|
|
|
|
|
|
|
369 |
|
370 |
with gr.Blocks(theme="default") as demo:
|
371 |
gr.Markdown("**Процент созданных SMS по выбранному продукту**")
|
@@ -412,7 +416,7 @@ with gr.Blocks(theme="default") as demo:
|
|
412 |
gr.update(value=new_pname, interactive=(selected=="Свой продукт")),
|
413 |
gr.update(value=new_ben, interactive=(selected=="Свой продукт")),
|
414 |
gr.update(value=new_kmsg, interactive=(selected=="Свой продукт")),
|
415 |
-
chosen_approach_val, p1, p2)
|
416 |
|
417 |
with gr.Column(scale=1):
|
418 |
gr.Markdown("**Клиент**")
|
@@ -464,40 +468,29 @@ with gr.Blocks(theme="default") as demo:
|
|
464 |
gender_dropdown, generation_dropdown, psychotype_dropdown,
|
465 |
business_stage_dropdown, industry_dropdown, opf_dropdown],
|
466 |
outputs=[description, product_name, benefits, key_message,
|
467 |
-
chosen_approach, prompt_1, prompt_2
|
|
|
468 |
)
|
469 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
470 |
client_params = [gender_dropdown, generation_dropdown, psychotype_dropdown,
|
471 |
business_stage_dropdown, industry_dropdown, opf_dropdown]
|
472 |
for cp in client_params:
|
473 |
cp.change(
|
474 |
-
fn=
|
475 |
inputs=[description, product_name, benefits, key_message,
|
476 |
gender_dropdown, generation_dropdown, psychotype_dropdown,
|
477 |
business_stage_dropdown, industry_dropdown, opf_dropdown],
|
478 |
-
outputs=[chosen_approach, prompt_1, prompt_2
|
|
|
479 |
)
|
480 |
|
481 |
-
def generate_personalized_sms_wrapper(selected_product, description, product_name, benefits, key_message,
|
482 |
-
gender, generation, psychotype, business_stage, industry, opf,
|
483 |
-
chosen_approach, prompt_1, prompt_2):
|
484 |
-
if "Для формирования промпта выберите хотя бы один личный персональный параметр" in prompt_1 or chosen_approach == "Подход не найден для выбранных параметров.":
|
485 |
-
gr.Warning("Задайте хотя бы один личный персональный параметр для определения подхода, чтобы был сформирован промпт")
|
486 |
-
return "", ""
|
487 |
-
approach_list = [a.strip() for a in chosen_approach.split(',') if a.strip()]
|
488 |
-
if not approach_list:
|
489 |
-
gr.Warning("Задайте хотя бы один личный персональный параметр для определения подхода, чтобы был сформирован промпт")
|
490 |
-
return "", ""
|
491 |
-
chosen_single_approach_1 = random.choice(approach_list) if len(approach_list) > 1 else approach_list[0]
|
492 |
-
chosen_single_approach_2 = random.choice(approach_list) if len(approach_list) > 1 else approach_list[0]
|
493 |
-
final_prompt_1 = generate_final_prompt_from_display(prompt_1, chosen_single_approach_1, is_prompt_1=True)
|
494 |
-
final_prompt_2 = generate_final_prompt_from_display(prompt_2, chosen_single_approach_2, is_prompt_1=False)
|
495 |
-
sms_1 = generate_message_with_retry(final_prompt_1)
|
496 |
-
sms_2 = generate_message_with_retry(final_prompt_2)
|
497 |
-
personalization_params = [gender, generation, psychotype, business_stage, industry, opf]
|
498 |
-
save_user_request_to_github(selected_product, description, product_name, benefits, key_message, chosen_approach, personalization_params)
|
499 |
-
return sms_1, sms_2
|
500 |
-
|
501 |
create_personal_sms_btn.click(
|
502 |
fn=generate_personalized_sms_wrapper,
|
503 |
inputs=[product_dropdown, description, product_name, benefits, key_message,
|
@@ -510,7 +503,7 @@ with gr.Blocks(theme="default") as demo:
|
|
510 |
def on_load_previous():
|
511 |
loaded_data = load_previous_user_request_from_github()
|
512 |
if not loaded_data or len(loaded_data) < 11:
|
513 |
-
return (products[0], "", "", "", "", None, None, None, None, None, None, "", "", "")
|
514 |
selected_product_val, description_val, product_name_val, benefits_val, key_message_val, approach_val = loaded_data[0], loaded_data[1], loaded_data[2], loaded_data[3], loaded_data[4], loaded_data[5]
|
515 |
gender_val, generation_val, psychotype_val, business_stage_val, industry_val, opf_val = loaded_data[6:12]
|
516 |
chosen_approach_val, p1, p2 = update_prompts_on_params_change(description_val, product_name_val, benefits_val, key_message_val,
|
@@ -518,7 +511,7 @@ with gr.Blocks(theme="default") as demo:
|
|
518 |
business_stage_val, industry_val, opf_val)
|
519 |
return (selected_product_val, description_val, product_name_val, benefits_val, key_message_val,
|
520 |
gender_val, generation_val, psychotype_val, business_stage_val, industry_val, opf_val,
|
521 |
-
chosen_approach_val, p1, p2)
|
522 |
|
523 |
return_params_btn.click(
|
524 |
fn=on_load_previous,
|
@@ -526,7 +519,8 @@ with gr.Blocks(theme="default") as demo:
|
|
526 |
outputs=[product_dropdown, description, product_name, benefits, key_message,
|
527 |
gender_dropdown, generation_dropdown, psychotype_dropdown,
|
528 |
business_stage_dropdown, industry_dropdown, opf_dropdown,
|
529 |
-
chosen_approach, prompt_1, prompt_2
|
|
|
530 |
)
|
531 |
|
532 |
demo.queue().launch()
|
|
|
253 |
msg = clean_message(msg)
|
254 |
length = len(msg)
|
255 |
if 160 <= length <= 250:
|
|
|
256 |
msg += f"\n\n------\nКоличество знаков: {length}"
|
257 |
return msg
|
258 |
last_message = msg
|
|
|
259 |
length = len(last_message)
|
260 |
last_message += f"\n\n------\nКоличество знаков: {length}"
|
261 |
return last_message
|
|
|
266 |
prompt_1, prompt_2 = generate_display_prompts(description, product_name, benefits, key_message,
|
267 |
chosen_approach, gender, generation, psychotype,
|
268 |
business_stage, industry, opf)
|
269 |
+
# Очистка полей SMS и комментариев при изменении параметров
|
270 |
+
return chosen_approach, prompt_1, prompt_2, "", "", "", "", "", ""
|
271 |
|
272 |
def save_user_request_to_github(selected_product, description, product_name, benefits, key_message, approach, personalization_params):
|
273 |
global current_request_index
|
|
|
312 |
json_files = [file for file in files if file['name'].startswith("user_request_")]
|
313 |
if not json_files:
|
314 |
print("Нет сохраненных запросов.")
|
315 |
+
return products[0], "", "", "", "", "", None, None, None, None, None, "", "", ""
|
316 |
current_request_index -= 1
|
317 |
if abs(current_request_index) > len(json_files):
|
318 |
current_request_index = -len(json_files)
|
|
|
321 |
file_response = requests.get(file_url)
|
322 |
if file_response.status_code == 200:
|
323 |
data = json.loads(file_response.text)
|
324 |
+
selected_product = data.get('selected_product', products[0])
|
325 |
description = data.get('description', "")
|
326 |
product_name = data.get('product_name', "")
|
327 |
benefits = data.get('benefits', "")
|
|
|
330 |
personalization_params = data.get('personalization_params', [None]*6)
|
331 |
if len(personalization_params) < 6:
|
332 |
personalization_params += [None]*(6-len(personalization_params))
|
333 |
+
return (selected_product, description, product_name, benefits, key_message, approach, *personalization_params)
|
334 |
else:
|
335 |
print(f"Ошибка при загрузке файла: {file_response.status_code}")
|
336 |
+
return products[0], "", "", "", "", "", None, None, None, None, None, "", "", ""
|
337 |
else:
|
338 |
print(f"Ошибка при обращении к GitHub: {response.status_code}")
|
339 |
+
return products[0], "", "", "", "", "", None, None, None, None, None, "", "", ""
|
340 |
|
341 |
def generate_final_prompt_from_display(prompt_text, single_approach, is_prompt_1=True):
|
342 |
prefix = approach_dict[single_approach]["prefix"]
|
|
|
347 |
f"\n{suffix}.\nУбедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин.\nУбедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта:\nУбедись, что в SMS есть следующая ключевая информация:", prompt_text, flags=re.DOTALL)
|
348 |
return prompt_text
|
349 |
|
350 |
+
def generate_personalized_sms_wrapper(selected_product, description, product_name, benefits, key_message,
|
351 |
+
gender, generation, psychotype, business_stage, industry, opf,
|
352 |
+
chosen_approach, prompt_1, prompt_2):
|
353 |
if "Для формирования промпта выберите хотя бы один личный персональный параметр" in prompt_1 or chosen_approach == "Подход не найден для выбранных параметров.":
|
354 |
gr.Warning("Задайте хотя бы о��ин личный персональный параметр для определения подхода, чтобы был сформирован промпт")
|
355 |
return "", ""
|
|
|
364 |
sms_1 = generate_message_with_retry(final_prompt_1)
|
365 |
sms_2 = generate_message_with_retry(final_prompt_2)
|
366 |
personalization_params = [gender, generation, psychotype, business_stage, industry, opf]
|
367 |
+
save_user_request_to_github(selected_product, description, product_name, benefits, key_message, chosen_approach, personalization_params)
|
368 |
+
return sms_1, sms_2
|
369 |
|
370 |
+
def clear_sms_fields(chosen_approach, p1, p2):
|
371 |
+
# очистка sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2
|
372 |
+
return chosen_approach, p1, p2, "", "", "", "", "", ""
|
373 |
|
374 |
with gr.Blocks(theme="default") as demo:
|
375 |
gr.Markdown("**Процент созданных SMS по выбранному продукту**")
|
|
|
416 |
gr.update(value=new_pname, interactive=(selected=="Свой продукт")),
|
417 |
gr.update(value=new_ben, interactive=(selected=="Свой продукт")),
|
418 |
gr.update(value=new_kmsg, interactive=(selected=="Свой продукт")),
|
419 |
+
chosen_approach_val, p1, p2, "", "", "", "", "", "")
|
420 |
|
421 |
with gr.Column(scale=1):
|
422 |
gr.Markdown("**Клиент**")
|
|
|
468 |
gender_dropdown, generation_dropdown, psychotype_dropdown,
|
469 |
business_stage_dropdown, industry_dropdown, opf_dropdown],
|
470 |
outputs=[description, product_name, benefits, key_message,
|
471 |
+
chosen_approach, prompt_1, prompt_2,
|
472 |
+
sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2]
|
473 |
)
|
474 |
|
475 |
+
def params_change_wrapper(description, product_name, benefits, key_message,
|
476 |
+
gender, generation, psychotype, business_stage, industry, opf):
|
477 |
+
chosen_approach_val, p1, p2 = update_prompts_on_params_change(description, product_name, benefits, key_message,
|
478 |
+
gender, generation, psychotype,
|
479 |
+
business_stage, industry, opf)
|
480 |
+
return chosen_approach_val, p1, p2, "", "", "", "", "", ""
|
481 |
+
|
482 |
client_params = [gender_dropdown, generation_dropdown, psychotype_dropdown,
|
483 |
business_stage_dropdown, industry_dropdown, opf_dropdown]
|
484 |
for cp in client_params:
|
485 |
cp.change(
|
486 |
+
fn=params_change_wrapper,
|
487 |
inputs=[description, product_name, benefits, key_message,
|
488 |
gender_dropdown, generation_dropdown, psychotype_dropdown,
|
489 |
business_stage_dropdown, industry_dropdown, opf_dropdown],
|
490 |
+
outputs=[chosen_approach, prompt_1, prompt_2,
|
491 |
+
sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2]
|
492 |
)
|
493 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
create_personal_sms_btn.click(
|
495 |
fn=generate_personalized_sms_wrapper,
|
496 |
inputs=[product_dropdown, description, product_name, benefits, key_message,
|
|
|
503 |
def on_load_previous():
|
504 |
loaded_data = load_previous_user_request_from_github()
|
505 |
if not loaded_data or len(loaded_data) < 11:
|
506 |
+
return (products[0], "", "", "", "", None, None, None, None, None, None, "", "", "", "", "", "")
|
507 |
selected_product_val, description_val, product_name_val, benefits_val, key_message_val, approach_val = loaded_data[0], loaded_data[1], loaded_data[2], loaded_data[3], loaded_data[4], loaded_data[5]
|
508 |
gender_val, generation_val, psychotype_val, business_stage_val, industry_val, opf_val = loaded_data[6:12]
|
509 |
chosen_approach_val, p1, p2 = update_prompts_on_params_change(description_val, product_name_val, benefits_val, key_message_val,
|
|
|
511 |
business_stage_val, industry_val, opf_val)
|
512 |
return (selected_product_val, description_val, product_name_val, benefits_val, key_message_val,
|
513 |
gender_val, generation_val, psychotype_val, business_stage_val, industry_val, opf_val,
|
514 |
+
chosen_approach_val, p1, p2, "", "", "")
|
515 |
|
516 |
return_params_btn.click(
|
517 |
fn=on_load_previous,
|
|
|
519 |
outputs=[product_dropdown, description, product_name, benefits, key_message,
|
520 |
gender_dropdown, generation_dropdown, psychotype_dropdown,
|
521 |
business_stage_dropdown, industry_dropdown, opf_dropdown,
|
522 |
+
chosen_approach, prompt_1, prompt_2,
|
523 |
+
sms_1, sms_2, comment_sms_1, comment_sms_2, corrected_sms_1, corrected_sms_2]
|
524 |
)
|
525 |
|
526 |
demo.queue().launch()
|