Spaces:
Sleeping
Sleeping
fruitpicker01
commited on
Commit
•
4469aa0
1
Parent(s):
29f48d8
Update app.py
Browse files
app.py
CHANGED
@@ -96,22 +96,63 @@ def replace_k_with_thousands(message):
|
|
96 |
message = re.sub(r'(\d+)[kкКK]', r'\1 000', message, flags=re.IGNORECASE)
|
97 |
return message
|
98 |
|
99 |
-
# Функция для
|
100 |
-
|
101 |
-
|
102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
def generate_message_gigachat_pro_with_retry(prompt):
|
104 |
last_message = None # Храним последнее сообщение
|
105 |
|
106 |
for attempt in range(10):
|
107 |
-
#
|
108 |
-
|
109 |
-
time.sleep(1) # Ждем, чтобы старое уведомление успело исчезнуть
|
110 |
-
gr.Info(f"Попытка {attempt + 1}: генерируется сообщение...")
|
111 |
|
|
|
112 |
message = generate_message_gigachat_pro(prompt)
|
113 |
message_length = len(message)
|
114 |
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
# Выполняем замены и проверки
|
116 |
message = replace_k_with_thousands(message)
|
117 |
checks = perform_checks(message)
|
@@ -119,16 +160,17 @@ def generate_message_gigachat_pro_with_retry(prompt):
|
|
119 |
# Обновляем последнее сообщение
|
120 |
last_message = message
|
121 |
|
122 |
-
|
123 |
-
|
124 |
return message
|
125 |
|
126 |
-
#
|
127 |
-
|
128 |
-
time.sleep(1) # Добавляем небольшую паузу между попытками
|
129 |
|
130 |
-
|
131 |
-
|
|
|
|
|
132 |
return last_message
|
133 |
|
134 |
|
@@ -240,7 +282,6 @@ def clean_prompt_for_display(prompt, prefixes, suffixes):
|
|
240 |
|
241 |
return cleaned_prompt.strip()
|
242 |
|
243 |
-
# Функция для постепенной генерации всех сообщений через yield
|
244 |
# Функция для постепенной генерации всех сообщений через yield
|
245 |
def generate_all_messages(desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf):
|
246 |
# Генерация задания для копирайтера
|
@@ -262,8 +303,16 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
262 |
non_personalized_messages = []
|
263 |
personalized_messages = []
|
264 |
|
265 |
-
# Генерация
|
266 |
for i in range(3):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
personalization_prompt = generate_personalization_prompt(
|
268 |
key_message, gender, generation, psychotype, business_stage, industry, opf,
|
269 |
prefix=prefixes[i], suffix=suffixes[i]
|
@@ -272,19 +321,17 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
272 |
# Удаляем префиксы, суффиксы и пустые строки перед выводом на экран
|
273 |
display_personalization_prompt = clean_prompt_for_display(personalization_prompt, prefixes, suffixes)
|
274 |
|
275 |
-
#
|
276 |
yield (
|
277 |
standard_prompt, display_personalization_prompt, # Задание для редактора без префиксов, суффиксов и пустых строк
|
278 |
-
|
|
|
|
|
|
|
|
|
|
|
279 |
)
|
280 |
|
281 |
-
# Генерация неперсонализированного сообщения
|
282 |
-
prompt = add_prefix_suffix(standard_prompt, prefixes[i], suffixes[i])
|
283 |
-
non_personalized_message = generate_message_gigachat_pro_with_retry(prompt)
|
284 |
-
non_personalized_length = len(non_personalized_message)
|
285 |
-
non_personalized_display = f"{non_personalized_message}\n------\nКоличество знаков: {non_personalized_length}"
|
286 |
-
non_personalized_messages.append(non_personalized_display)
|
287 |
-
|
288 |
# Генерация персонализированного сообщения
|
289 |
full_personalized_prompt = f"{personalization_prompt}\n\nТекст для адаптации: {non_personalized_message}"
|
290 |
personalized_message = generate_message_gigachat_pro_with_retry(full_personalized_prompt)
|
@@ -295,11 +342,11 @@ def generate_all_messages(desc, benefits, key_message, gender, generation, psych
|
|
295 |
# Выводим персонализированное сообщение
|
296 |
yield (
|
297 |
standard_prompt, display_personalization_prompt, # Задание для редактора без префиксов, суффиксов и пустых строк
|
298 |
-
non_personalized_messages[0] if
|
299 |
personalized_messages[0] if len(personalized_messages) > 0 else None,
|
300 |
-
non_personalized_messages[1] if
|
301 |
personalized_messages[1] if len(personalized_messages) > 1 else None,
|
302 |
-
non_personalized_messages[2] if
|
303 |
personalized_messages[2] if len(personalized_messages) > 2 else None
|
304 |
)
|
305 |
|
|
|
96 |
message = re.sub(r'(\d+)[kкКK]', r'\1 000', message, flags=re.IGNORECASE)
|
97 |
return message
|
98 |
|
99 |
+
# Функция для добавления ошибок в промпт для перегенерации
|
100 |
+
def append_errors_to_prompt(prompt, checks):
|
101 |
+
errors = []
|
102 |
+
|
103 |
+
if not checks["forbidden_words"]:
|
104 |
+
errors.append("Не использовать запрещённые слова.")
|
105 |
+
if not checks["client_addressing"]:
|
106 |
+
errors.append("Не обращаться к клиенту напрямую.")
|
107 |
+
if not checks["promises"]:
|
108 |
+
errors.append("Не давать обещания и гарантии.")
|
109 |
+
if not checks["double_verbs"]:
|
110 |
+
errors.append("Не использовать составные конструкции из двух глаголов.")
|
111 |
+
if not checks["participles"]:
|
112 |
+
errors.append("Не использовать причастия.")
|
113 |
+
if not checks["adverbial_participles"]:
|
114 |
+
errors.append("Не использовать деепричастия.")
|
115 |
+
|
116 |
+
# Добавляем ошибки в конец промпта
|
117 |
+
if errors:
|
118 |
+
error_instructions = "Следующие ошибки необходимо избежать:\n" + "\n".join(errors)
|
119 |
+
prompt += f"\n\n{error_instructions}"
|
120 |
+
|
121 |
+
return prompt
|
122 |
+
|
123 |
+
def notify_failed_length(message_length):
|
124 |
+
if message_length < 190:
|
125 |
+
gr.Warning(f"Сообщение слишком короткое: {message_length} знаков. Минимум 190.")
|
126 |
+
return False
|
127 |
+
elif message_length > 250:
|
128 |
+
gr.Warning(f"Сообщение слишком длинное: {message_length} знаков. Максимум 250.")
|
129 |
+
return False
|
130 |
+
return True
|
131 |
+
|
132 |
+
# Функция для уведомления о непройденных проверках
|
133 |
+
def notify_failed_checks(checks):
|
134 |
+
failed_checks = [rule for rule, passed in checks.items() if not passed]
|
135 |
+
if failed_checks:
|
136 |
+
gr.Warning(f"Сообщение не прошло следующие проверки: {', '.join(failed_checks)}")
|
137 |
+
|
138 |
+
# Модифицированная функция перегенерации сообщений с уведомлениями о номере попытки
|
139 |
def generate_message_gigachat_pro_with_retry(prompt):
|
140 |
last_message = None # Храним последнее сообщение
|
141 |
|
142 |
for attempt in range(10):
|
143 |
+
# Уведомление о текущей попытке
|
144 |
+
gr.Info(f"Итерация {attempt + 1}: генерируется сообщение...")
|
|
|
|
|
145 |
|
146 |
+
# Генерация сообщения
|
147 |
message = generate_message_gigachat_pro(prompt)
|
148 |
message_length = len(message)
|
149 |
|
150 |
+
# Проверка длины сообщения. Если не проходит, сразу перегенерируем
|
151 |
+
if not notify_failed_length(message_length):
|
152 |
+
last_message = message # Обновляем последнее сообщение
|
153 |
+
time.sleep(1) # Пауза перед следующей попыткой
|
154 |
+
continue
|
155 |
+
|
156 |
# Выполняем замены и проверки
|
157 |
message = replace_k_with_thousands(message)
|
158 |
checks = perform_checks(message)
|
|
|
160 |
# Обновляем последнее сообщение
|
161 |
last_message = message
|
162 |
|
163 |
+
# Если сообщение прошло все проверки
|
164 |
+
if all(checks.values()):
|
165 |
return message
|
166 |
|
167 |
+
# Если есть ошибки, уведомляем о непройденных проверках
|
168 |
+
notify_failed_checks(checks)
|
|
|
169 |
|
170 |
+
time.sleep(1) # Пауза перед следующей попыткой
|
171 |
+
|
172 |
+
# Возвращаем последнее сообщение после 10 попыток
|
173 |
+
gr.Info("Не удалось сгенерировать сообщение, соответствующее требованиям, за 10 итераций. Возвращаем последнее сгенерированное сообщение.")
|
174 |
return last_message
|
175 |
|
176 |
|
|
|
282 |
|
283 |
return cleaned_prompt.strip()
|
284 |
|
|
|
285 |
# Функция для постепенной генерации всех сообщений через yield
|
286 |
def generate_all_messages(desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf):
|
287 |
# Генерация задания для копирайтера
|
|
|
303 |
non_personalized_messages = []
|
304 |
personalized_messages = []
|
305 |
|
306 |
+
# Генерация и постепенная подача каждого сообщения
|
307 |
for i in range(3):
|
308 |
+
# Генерация неперсонализированного сообщения
|
309 |
+
prompt = add_prefix_suffix(standard_prompt, prefixes[i], suffixes[i])
|
310 |
+
non_personalized_message = generate_message_gigachat_pro_with_retry(prompt)
|
311 |
+
non_personalized_length = len(non_personalized_message)
|
312 |
+
non_personalized_display = f"{non_personalized_message}\n------\nКоличество знаков: {non_personalized_length}"
|
313 |
+
non_personalized_messages.append(non_personalized_display)
|
314 |
+
|
315 |
+
# Генерация задания для редактора
|
316 |
personalization_prompt = generate_personalization_prompt(
|
317 |
key_message, gender, generation, psychotype, business_stage, industry, opf,
|
318 |
prefix=prefixes[i], suffix=suffixes[i]
|
|
|
321 |
# Удаляем префиксы, суффиксы и пустые строки перед выводом на экран
|
322 |
display_personalization_prompt = clean_prompt_for_display(personalization_prompt, prefixes, suffixes)
|
323 |
|
324 |
+
# Выводим неперсонализированное сообщение и задание для редактора
|
325 |
yield (
|
326 |
standard_prompt, display_personalization_prompt, # Задание для редактора без префиксов, суффиксов и пустых строк
|
327 |
+
non_personalized_messages[0] if i >= 0 else None,
|
328 |
+
personalized_messages[0] if len(personalized_messages) > 0 else None,
|
329 |
+
non_personalized_messages[1] if i >= 1 else None,
|
330 |
+
personalized_messages[1] if len(personalized_messages) > 1 else None,
|
331 |
+
non_personalized_messages[2] if i >= 2 else None,
|
332 |
+
personalized_messages[2] if len(personalized_messages) > 2 else None
|
333 |
)
|
334 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
335 |
# Генерация персонализированного сообщения
|
336 |
full_personalized_prompt = f"{personalization_prompt}\n\nТекст для адаптации: {non_personalized_message}"
|
337 |
personalized_message = generate_message_gigachat_pro_with_retry(full_personalized_prompt)
|
|
|
342 |
# Выводим персонализированное сообщение
|
343 |
yield (
|
344 |
standard_prompt, display_personalization_prompt, # Задание для редактора без префиксов, суффиксов и пустых строк
|
345 |
+
non_personalized_messages[0] if len(non_personalized_messages) > 0 else None,
|
346 |
personalized_messages[0] if len(personalized_messages) > 0 else None,
|
347 |
+
non_personalized_messages[1] if len(non_personalized_messages) > 1 else None,
|
348 |
personalized_messages[1] if len(personalized_messages) > 1 else None,
|
349 |
+
non_personalized_messages[2] if len(non_personalized_messages) > 2 else None,
|
350 |
personalized_messages[2] if len(personalized_messages) > 2 else None
|
351 |
)
|
352 |
|