Spaces:
Sleeping
Sleeping
fruitpicker01
commited on
Commit
•
f840ace
1
Parent(s):
c15f0a1
Update app.py
Browse files
app.py
CHANGED
@@ -23,6 +23,105 @@ for sheet_name, df in data.items():
|
|
23 |
print(f"Ошибка при обработке данных листа {sheet_name}: {e}")
|
24 |
features[sheet_name] = {}
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
# Функция для создания спидометра
|
27 |
def create_gauge(value):
|
28 |
fig = go.Figure(go.Indicator(
|
@@ -108,6 +207,21 @@ with gr.Blocks() as demo:
|
|
108 |
|
109 |
btn_to_prompts = gr.Button("Создать")
|
110 |
btn_to_prompts.click(fn=change_tab, inputs=[gr.Number(value=1, visible=False)], outputs=tabs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
|
112 |
# Вкладка 2: Промпты
|
113 |
with gr.TabItem("Ассистент", id=1):
|
|
|
23 |
print(f"Ошибка при обработке данных листа {sheet_name}: {e}")
|
24 |
features[sheet_name] = {}
|
25 |
|
26 |
+
# Функция для генерации стандартного промпта
|
27 |
+
def generate_standard_prompt(description, advantages, key_message):
|
28 |
+
prompt = (
|
29 |
+
f"Сгенерируй смс-сообщение для клиента.\n"
|
30 |
+
f"Описание предложения: {description}\n"
|
31 |
+
f"Преимущества: {advantages}\n"
|
32 |
+
"В тексте смс запрещено использование:\n"
|
33 |
+
"- Запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, доступный, банкротство, долги, займ, срочно, сейчас, лучший, главный, номер 1, гарантия, успех, лидер;\n"
|
34 |
+
"- Обращение к клиенту;\n"
|
35 |
+
"- Приветствие клиента;\n"
|
36 |
+
"- Обещания и гарантии;\n"
|
37 |
+
"- Использовать составные конструкции из двух глаголов;\n"
|
38 |
+
"- Причастия и причастные обороты;\n"
|
39 |
+
"- Деепричастия и деепричастные обороты;\n"
|
40 |
+
"- Превосходная степень прилагательных;\n"
|
41 |
+
"- Страдательный залог;\n"
|
42 |
+
"- Порядковые числительные от 10 прописью;\n"
|
43 |
+
"- Цепочки с придаточными предложениями;\n"
|
44 |
+
"- Разделительные повторяющиеся союзы;\n"
|
45 |
+
"- Вводные конструкции;\n"
|
46 |
+
"- Усилители;\n"
|
47 |
+
"- Паразиты времени;\n"
|
48 |
+
"- Несколько существительных подряд, в том числе отглагольных;\n"
|
49 |
+
"- Производные предлоги;\n"
|
50 |
+
"- Сложные предложения, в которых нет связи между частями;\n"
|
51 |
+
"- Сложноподчинённые предложения;\n"
|
52 |
+
"- Даты прописью;\n"
|
53 |
+
"- Близкие по смыслу однородные члены предложения;\n"
|
54 |
+
"- Шокирующие, экстравагантные, кликбейтные фразы;\n"
|
55 |
+
"- Абстрактные заявления без поддержки фактами и отсутствие доказательства пользы для клиента;\n"
|
56 |
+
"- Гарантирующие фразы;\n"
|
57 |
+
"- Узкоспециализированные термины;\n"
|
58 |
+
"- Фразы, способные создать двойственное ощущение, обидеть;\n"
|
59 |
+
"- Речевые клише, рекламные штампы, канцеляризмы;\n"
|
60 |
+
"Убедись, что в готовом тексте до 250 знаков с пробелами.\n"
|
61 |
+
)
|
62 |
+
if key_message.strip():
|
63 |
+
prompt += f"Убедись, что в готовом тексте есть следующая ключевая информация: {key_message.strip()}"
|
64 |
+
return prompt.strip()
|
65 |
+
|
66 |
+
|
67 |
+
# Функция для генерации персонализированного промпта
|
68 |
+
def generate_personalization_prompt(key_message, *selected_values):
|
69 |
+
prompt = "Адаптируй, не превышая длину сообщения в 250 знаков с пробелами, текст с учетом следующих особенностей:\n"
|
70 |
+
gender, generation, psychotype = selected_values[0], selected_values[1], selected_values[2]
|
71 |
+
combined_instruction = ""
|
72 |
+
additional_instructions = ""
|
73 |
+
|
74 |
+
print(f"Выбранные значения: Пол={gender}, Поколение={generation}, Психотип={psychotype}")
|
75 |
+
|
76 |
+
# Проверяем, выбраны ли все три параметра: Пол, Поколение, Психотип
|
77 |
+
if gender and generation and psychotype:
|
78 |
+
# Получаем данные с листа "Пол Поколение Психотип"
|
79 |
+
sheet = features.get("Пол Поколение Психотип", {})
|
80 |
+
|
81 |
+
# Ищем ключ, соответствующий комбинации "Пол", "Поколение", "Психотип"
|
82 |
+
key = (gender, generation, psychotype)
|
83 |
+
if key in sheet:
|
84 |
+
combined_instruction = sheet[key]
|
85 |
+
print(f"Найдена комбинированная инструкция: {combined_instruction}")
|
86 |
+
else:
|
87 |
+
print(f"Комбинированная инструкция для ключа {key} не найдена.")
|
88 |
+
|
89 |
+
# Если не найдена комбинированная инструкция, добавляем индивидуальные инструкции
|
90 |
+
if not combined_instruction:
|
91 |
+
print("Добавляем индивидуальные инструкции для Пол, Поколение, Психотип.")
|
92 |
+
for i, feature in enumerate(["Пол", "Поколение", "Психотип"]):
|
93 |
+
if selected_values[i]:
|
94 |
+
try:
|
95 |
+
instruction = features[feature][selected_values[i]]
|
96 |
+
additional_instructions += f"{instruction}\n"
|
97 |
+
print(f"Добавлена инструкция из {feature}: {instruction}")
|
98 |
+
except KeyError:
|
99 |
+
return f"Ошибка: выбранное значение {selected_values[i]} не найдено в данных."
|
100 |
+
|
101 |
+
# Добавляем инструкции для остальных параметров (например, Отрасль)
|
102 |
+
for i, feature in enumerate(features.keys()):
|
103 |
+
if feature not in ["Пол", "Поколение", "Психотип", "Пол Поколение Психотип"]:
|
104 |
+
if i < len(selected_values) and selected_values[i]:
|
105 |
+
try:
|
106 |
+
instruction = features[feature][selected_values[i]]
|
107 |
+
additional_instructions += f"{instruction}\n"
|
108 |
+
print(f"Добавлена инструкция из {feature}: {instruction}")
|
109 |
+
except KeyError:
|
110 |
+
return f"Ошибка: выбранное значение {selected_values[i]} не найдено в данных."
|
111 |
+
|
112 |
+
# Формируем итоговый промпт
|
113 |
+
if combined_instruction:
|
114 |
+
prompt += combined_instruction # Добавляем комбинированную инструкцию, если она есть
|
115 |
+
if additional_instructions:
|
116 |
+
prompt += additional_instructions # Добавляем остальные инструкции
|
117 |
+
|
118 |
+
prompt += "Убедись, что в готовом тексте до 250 знаков с пробелами.\n"
|
119 |
+
|
120 |
+
prompt += f"Убедись, что в готовом тексте есть следующая ключевая информация: {key_message.strip()}"
|
121 |
+
|
122 |
+
return prompt.strip()
|
123 |
+
|
124 |
+
|
125 |
# Функция для создания спидометра
|
126 |
def create_gauge(value):
|
127 |
fig = go.Figure(go.Indicator(
|
|
|
207 |
|
208 |
btn_to_prompts = gr.Button("Создать")
|
209 |
btn_to_prompts.click(fn=change_tab, inputs=[gr.Number(value=1, visible=False)], outputs=tabs)
|
210 |
+
|
211 |
+
# Добавляем генерацию стандартного промпта при клике
|
212 |
+
btn_to_prompts.click(
|
213 |
+
fn=generate_standard_prompt,
|
214 |
+
inputs=[desc, benefits, key_message],
|
215 |
+
outputs=[non_personalized_prompt]
|
216 |
+
)
|
217 |
+
|
218 |
+
# Добавляем генерацию персонализированного промпта при клике
|
219 |
+
btn_to_prompts.click(
|
220 |
+
fn=generate_personalization_prompt,
|
221 |
+
inputs=[key_message, gender, generation, psychotype, business_stage, industry, opf],
|
222 |
+
outputs=[personalized_prompt]
|
223 |
+
)
|
224 |
+
|
225 |
|
226 |
# Вкладка 2: Промпты
|
227 |
with gr.TabItem("Ассистент", id=1):
|