fruitpicker01 commited on
Commit
f0c0344
·
verified ·
1 Parent(s): 7494102

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +415 -65
app.py CHANGED
@@ -14,22 +14,10 @@ openai_api_key = os.getenv('GPT_KEY')
14
  gc_key = os.getenv('GC_KEY')
15
  token = os.getenv('GITHUB_TOKEN')
16
 
17
- # Функция аутентификации в сервисе GigaChat с заданной температурой
18
- def authenticate_gigachat(model, max_tokens, temperature):
19
- return GigaChat(credentials=gc_key, model=model, max_tokens=max_tokens, temperature=float(temperature), verify_ssl_certs=False)
20
-
21
- # Функция аутентификации для GPT-4o
22
- def authenticate_gpt4o(max_tokens, temperature):
23
- headers = {
24
- "Content-Type": "application/json",
25
- "Authorization": f"Bearer {openai_api_key}"
26
- }
27
- return {
28
- "model": "chatgpt-4o-latest",
29
- "max_tokens": max_tokens,
30
- "temperature": float(temperature),
31
- "headers": headers
32
- }
33
 
34
  # Загрузка данных из Excel-файла
35
  try:
@@ -87,56 +75,98 @@ def generate_standard_prompt(description, advantages, *selected_values):
87
  )
88
  return prompt
89
 
90
- # Функция для генерации сообщений GPT-4o
91
- def generate_message_gpt4o(auth_params, prompt):
92
  try:
 
 
 
 
93
  data = {
94
- "model": auth_params["model"],
95
  "messages": [{"role": "system", "content": prompt}],
96
- "max_tokens": auth_params["max_tokens"],
97
- "temperature": auth_params["temperature"]
98
  }
99
- response = requests.post("https://api.openai.com/v1/chat/completions", json=data, headers=auth_params["headers"])
100
  response_data = response.json()
101
- return clean_message(response_data["choices"][0]["message"]["content"].strip())
102
  except Exception as e:
103
  return f"Ошибка при обращении к ChatGPT-4o-Latest: {e}"
104
 
105
- # Функции для генерации сообщений GigaChat
106
- def generate_message_gigachat(chat_instance, prompt):
107
- try:
108
- messages = [SystemMessage(content=prompt)]
109
- res = chat_instance(messages)
110
- cleaned_message = clean_message(res.content.strip())
111
- return cleaned_message
112
- except Exception as e:
113
- return f"Ошибка при обращении к GigaChat: {e}"
114
 
115
  def clean_message(message):
116
  # Если сообщение не заканчивается на точку или восклицательный знак, обрезаем его до последней точки
117
  if not message.endswith(('.', '!', '?')):
118
  last_period = message.rfind('.')
119
- if (last_period != -1):
120
  message = message[:last_period + 1]
121
  return message
122
 
123
- # Функции для генерации сообщений с повторными попытками
124
- def generate_message_gpt4o_with_retry(auth_params, prompt):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  for _ in range(10): # Максимум 10 попыток
126
- message = generate_message_gpt4o(auth_params, prompt)
127
  if len(message) <= 250:
128
  return message
129
  return message # Возвращаем последнее сгенерированное сообщение, если все попытки не удались
130
 
131
- def generate_message_gigachat_with_retry(chat_instance, prompt):
132
  for _ in range(10):
133
- message = generate_message_gigachat(chat_instance, prompt)
134
  if len(message) <= 250:
135
  return message
136
  return message
137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  # Обновляем генерацию сообщений для отображения в интерфейсе
139
- def generate_messages(description, advantages, *selected_values, gpt4o_auth_params, chat_pro, chat_lite, chat_plus):
140
  standard_prompt = generate_standard_prompt(description, advantages, *selected_values)
141
 
142
  results = {
@@ -149,32 +179,224 @@ def generate_messages(description, advantages, *selected_values, gpt4o_auth_para
149
 
150
  yield results["prompt"], "", "", "", "", "Генерация стандартного промпта завершена"
151
 
152
- results["gpt4o"] = generate_message_gpt4o_with_retry(gpt4o_auth_params, standard_prompt)
153
  gpt4o_length = len(results["gpt4o"])
154
  gpt4o_display = f"{results['gpt4o']}\n\n------\nКоличество знаков: {gpt4o_length}"
155
  yield results["prompt"], gpt4o_display, "", "", "", "Сообщение GPT-4o сгенерировано"
156
 
157
- results["gigachat_pro"] = generate_message_gigachat_with_retry(chat_pro, standard_prompt)
158
  gigachat_pro_length = len(results["gigachat_pro"])
159
  gigachat_pro_display = f"{results['gigachat_pro']}\n\n------\nКоличество знаков: {gigachat_pro_length}"
160
  yield results["prompt"], gpt4o_display, gigachat_pro_display, "", "", "Сообщение GigaChat-Pro сгенерировано"
161
 
162
  time.sleep(2)
163
 
164
- results["gigachat_lite"] = generate_message_gigachat_with_retry(chat_lite, standard_prompt)
165
  gigachat_lite_length = len(results["gigachat_lite"])
166
  gigachat_lite_display = f"{results['gigachat_lite']}\n\n------\nКоличество знаков: {gigachat_lite_length}"
167
  yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, "", "Сообщение GigaChat-Lite сгенерировано"
168
 
169
  time.sleep(2)
170
 
171
- results["gigachat_plus"] = generate_message_gigachat_with_retry(chat_plus, standard_prompt)
172
  gigachat_plus_length = len(results["gigachat_plus"])
173
  gigachat_plus_display = f"{results['gigachat_plus']}\n\n------\nКоличество знаков: {gigachat_plus_length}"
174
  yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, "Все сообщения сгенерированы"
175
 
176
  return results
177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  # Создание интерфейса Gradio
179
  with gr.Blocks() as demo:
180
  gr.Markdown("# Генерация SMS-сообщений по заданным признакам")
@@ -222,40 +444,168 @@ with gr.Blocks() as demo:
222
  output_text_gpt4o = gr.Textbox(label="Неперсонализированное сообщение GPT-4o", lines=3, interactive=False)
223
  output_text_gigachat_pro = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Pro", lines=3, interactive=False)
224
  output_text_gigachat_lite = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Lite", lines=3, interactive=False)
225
- output_text_gigachat_plus = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Plus", lines=3, interactive=False)
226
 
227
  submit_btn.click(
228
  generate_messages,
229
  inputs=[
230
  description_input,
231
  advantages_input,
232
- *selections,
233
- gpt4o_temperature, # Передаем температуру как компонент
234
- gigachat_pro_temperature, # Передаем температуру как компонент
235
- gigachat_lite_temperature, # Передаем температуру как компонент
236
- gigachat_plus_temperature # Передаем температуру как компонент
237
  ],
238
  outputs=[prompt_display, output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus]
239
  )
240
 
241
 
242
- submit_btn.click(
243
- fn=lambda description, advantages, *selected_values, gpt4o_temperature, gigachat_pro_temperature, gigachat_lite_temperature, gigachat_plus_temperature:
244
- generate_messages(description, advantages, *selected_values,
245
- authenticate_gpt4o(101, gpt4o_temperature),
246
- authenticate_gigachat('GigaChat-Pro', 68, gigachat_pro_temperature),
247
- authenticate_gigachat('GigaChat', 68, gigachat_lite_temperature),
248
- authenticate_gigachat('GigaChat-Plus', 68, gigachat_plus_temperature)),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  inputs=[
250
- description_input,
251
- advantages_input,
252
- *selections,
253
- gpt4o_temperature, # Передаем значение температуры
254
- gigachat_pro_temperature, # Передаем значение температуры
255
- gigachat_lite_temperature, # Передаем значение температуры
256
- gigachat_plus_temperature # Передаем значение температуры
257
- ],
258
- outputs=[prompt_display, output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  )
260
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  demo.launch()
 
14
  gc_key = os.getenv('GC_KEY')
15
  token = os.getenv('GITHUB_TOKEN')
16
 
17
+ # Авторизация в сервисе GigaChat
18
+ chat_pro = GigaChat(credentials=gc_key, model='GigaChat-Pro', max_tokens=68, verify_ssl_certs=False)
19
+ chat_lite = GigaChat(credentials=gc_key, model='GigaChat', max_tokens=68, verify_ssl_certs=False)
20
+ chat_plus = GigaChat(credentials=gc_key, model='GigaChat-Plus', max_tokens=68, verify_ssl_certs=False)
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
  # Загрузка данных из Excel-файла
23
  try:
 
75
  )
76
  return prompt
77
 
78
+ # Функции для генерации сообщений
79
+ def generate_message_gpt4o(prompt, temperature=1):
80
  try:
81
+ headers = {
82
+ "Content-Type": "application/json",
83
+ "Authorization": f"Bearer {openai_api_key}"
84
+ }
85
  data = {
86
+ "model": "chatgpt-4o-latest",
87
  "messages": [{"role": "system", "content": prompt}],
88
+ "max_tokens": 101,
89
+ "temperature": temperature # Передача температуры
90
  }
91
+ response = requests.post("https://api.openai.com/v1/chat/completions", json=data, headers=headers)
92
  response_data = response.json()
93
+ return clean_message(response_data["choices"][0]["message"]["content"].strip()) + f" {temperature}"
94
  except Exception as e:
95
  return f"Ошибка при обращении к ChatGPT-4o-Latest: {e}"
96
 
 
 
 
 
 
 
 
 
 
97
 
98
  def clean_message(message):
99
  # Если сообщение не заканчивается на точку или восклицательный знак, обрезаем его до последней точки
100
  if not message.endswith(('.', '!', '?')):
101
  last_period = message.rfind('.')
102
+ if last_period != -1:
103
  message = message[:last_period + 1]
104
  return message
105
 
106
+ # Обновленные функции генерации сообщений с учетом обрезки незаконченных предложений
107
+ def generate_message_gigachat_pro(prompt, temperature=0.87):
108
+ try:
109
+ messages = [SystemMessage(content=prompt)]
110
+ chat_pro = GigaChat(credentials=gc_key, model='GigaChat-Pro', max_tokens=68, temperature=temperature, verify_ssl_certs=False)
111
+ res = chat_pro(messages)
112
+ cleaned_message = clean_message(res.content.strip())
113
+ return cleaned_message
114
+ except Exception as e:
115
+ return f"Ошибка при обращении к GigaChat-Pro: {e}"
116
+
117
+ def generate_message_gigachat_lite(prompt, temperature=0.87):
118
+ try:
119
+ time.sleep(2)
120
+ messages = [SystemMessage(content=prompt)]
121
+ chat_lite = GigaChat(credentials=gc_key, model='GigaChat', max_tokens=68, temperature=temperature, verify_ssl_certs=False)
122
+ res = chat_lite(messages)
123
+ cleaned_message = clean_message(res.content.strip())
124
+ return cleaned_message
125
+ except Exception as e:
126
+ return f"Ошибка при обращении к GigaChat-Lite: {e}"
127
+
128
+ def generate_message_gigachat_plus(prompt, temperature=0.87):
129
+ try:
130
+ time.sleep(2)
131
+ messages = [SystemMessage(content=prompt)]
132
+ chat_plus = GigaChat(credentials=gc_key, model='GigaChat-Plus', max_tokens=68, temperature=temperature, verify_ssl_certs=False)
133
+ res = chat_plus(messages)
134
+ cleaned_message = clean_message(res.content.strip())
135
+ return cleaned_message
136
+ except Exception as e:
137
+ return f"Ошибка при обращении к GigaChat-Plus: {e}"
138
+
139
+ def generate_message_gpt4o_with_retry(prompt):
140
  for _ in range(10): # Максимум 10 попыток
141
+ message = generate_message_gpt4o(prompt)
142
  if len(message) <= 250:
143
  return message
144
  return message # Возвращаем последнее сгенерированное сообщение, если все попытки не удались
145
 
146
+ def generate_message_gigachat_pro_with_retry(prompt):
147
  for _ in range(10):
148
+ message = generate_message_gigachat_pro(prompt)
149
  if len(message) <= 250:
150
  return message
151
  return message
152
 
153
+ def generate_message_gigachat_lite_with_retry(prompt):
154
+ for _ in range(10):
155
+ message = generate_message_gigachat_lite(prompt)
156
+ if len(message) <= 250:
157
+ return message
158
+ return message
159
+
160
+ def generate_message_gigachat_plus_with_retry(prompt):
161
+ for _ in range(10):
162
+ message = generate_message_gigachat_plus(prompt)
163
+ if len(message) <= 250:
164
+ return message
165
+ return message
166
+
167
+
168
  # Обновляем генерацию сообщений для отображения в интерфейсе
169
+ def generate_messages(description, advantages, *selected_values):
170
  standard_prompt = generate_standard_prompt(description, advantages, *selected_values)
171
 
172
  results = {
 
179
 
180
  yield results["prompt"], "", "", "", "", "Генерация стандартного промпта завершена"
181
 
182
+ results["gpt4o"] = generate_message_gpt4o_with_retry(standard_prompt)
183
  gpt4o_length = len(results["gpt4o"])
184
  gpt4o_display = f"{results['gpt4o']}\n\n------\nКоличество знаков: {gpt4o_length}"
185
  yield results["prompt"], gpt4o_display, "", "", "", "Сообщение GPT-4o сгенерировано"
186
 
187
+ results["gigachat_pro"] = generate_message_gigachat_pro_with_retry(standard_prompt)
188
  gigachat_pro_length = len(results["gigachat_pro"])
189
  gigachat_pro_display = f"{results['gigachat_pro']}\n\n------\nКоличество знаков: {gigachat_pro_length}"
190
  yield results["prompt"], gpt4o_display, gigachat_pro_display, "", "", "Сообщение GigaChat-Pro сгенерировано"
191
 
192
  time.sleep(2)
193
 
194
+ results["gigachat_lite"] = generate_message_gigachat_lite_with_retry(standard_prompt)
195
  gigachat_lite_length = len(results["gigachat_lite"])
196
  gigachat_lite_display = f"{results['gigachat_lite']}\n\n------\nКоличество знаков: {gigachat_lite_length}"
197
  yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, "", "Сообщение GigaChat-Lite сгенерировано"
198
 
199
  time.sleep(2)
200
 
201
+ results["gigachat_plus"] = generate_message_gigachat_plus_with_retry(standard_prompt)
202
  gigachat_plus_length = len(results["gigachat_plus"])
203
  gigachat_plus_display = f"{results['gigachat_plus']}\n\n------\nКоличество знаков: {gigachat_plus_length}"
204
  yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, "Все сообщения сгенерированы"
205
 
206
  return results
207
 
208
+
209
+
210
+ # Функция для генерации персонализированного промпта
211
+ def generate_personalization_prompt(*selected_values):
212
+ prompt = "Адаптируй, не превышая длину сообщения в 250 знаков с пробелами, текст с учетом следующих особенностей:\n"
213
+ for i, feature in enumerate(features.keys()):
214
+ if selected_values[i]:
215
+ try:
216
+ prompt += f"{features[feature][selected_values[i]]}\n"
217
+ except KeyError:
218
+ return f"Ошибка: выбранное значение {selected_values[i]} не найдено в данных."
219
+
220
+ prompt += "Убедись, что в готовом те��сте до 250 знаков с пробелами."
221
+
222
+ return prompt.strip()
223
+
224
+ # Функция для выполнения персонализации на основе сгенерированного промпта и сообщения
225
+ def perform_personalization(standard_message, personalization_prompt):
226
+ full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}"
227
+ return generate_message_gpt4o(full_prompt)
228
+
229
+ # Также обновляем функции персонализации
230
+ def perform_personalization_gigachat(standard_message, personalization_prompt, model):
231
+ full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}"
232
+ if model == "gigachat_pro":
233
+ result = generate_message_gigachat_pro(full_prompt)
234
+ elif model == "gigachat_lite":
235
+ result = generate_message_gigachat_lite(full_prompt)
236
+ elif model == "gigachat_plus":
237
+ result = generate_message_gigachat_plus(full_prompt)
238
+ return clean_message(result)
239
+
240
+ def perform_personalization_with_retry(standard_message, personalization_prompt):
241
+ for _ in range(10): # Максимум 10 попыток
242
+ message = perform_personalization(standard_message, personalization_prompt)
243
+ if len(message) <= 250:
244
+ return message
245
+ return message # Возвращаем последнее сгенерированное сообщение, если все попытки не удались
246
+
247
+ def perform_personalization_gigachat_with_retry(standard_message, personalization_prompt, model):
248
+ for _ in range(10):
249
+ message = perform_personalization_gigachat(standard_message, personalization_prompt, model)
250
+ if len(message) <= 250:
251
+ return message
252
+ return message
253
+
254
+
255
+ # Обновляем блок персонализации
256
+ def personalize_messages_with_yield(gpt4o_message, gigachat_pro_message, gigachat_lite_message, gigachat_plus_message, *selected_values):
257
+ personalization_prompt = generate_personalization_prompt(*selected_values)
258
+ yield personalization_prompt, "", "", "", "", "Промпт для персонализации сгенерирован"
259
+
260
+ personalized_message_gpt4o = perform_personalization_with_retry(gpt4o_message, personalization_prompt)
261
+ gpt4o_length = len(personalized_message_gpt4o)
262
+ gpt4o_display = f"{personalized_message_gpt4o}\n\n------\nКоличество знаков: {gpt4o_length}"
263
+ yield personalization_prompt, gpt4o_display, "", "", "", "Персонализированное сообщение GPT-4o сгенерировано"
264
+
265
+ personalized_message_gigachat_pro = perform_personalization_gigachat_with_retry(gigachat_pro_message, personalization_prompt, "gigachat_pro")
266
+ gigachat_pro_length = len(personalized_message_gigachat_pro)
267
+ gigachat_pro_display = f"{personalized_message_gigachat_pro}\n\n------\nКоличество знаков: {gigachat_pro_length}"
268
+ yield personalization_prompt, gpt4o_display, gigachat_pro_display, "", "", "Персонализированное сообщение GigaChat-Pro сгенерировано"
269
+
270
+ personalized_message_gigachat_lite = perform_personalization_gigachat_with_retry(gigachat_lite_message, personalization_prompt, "gigachat_lite")
271
+ gigachat_lite_length = len(personalized_message_gigachat_lite)
272
+ gigachat_lite_display = f"{personalized_message_gigachat_lite}\n\n------\nКоличество знаков: {gigachat_lite_length}"
273
+ yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, "", "Персонализированное сообщение GigaChat-Lite сгенерировано"
274
+
275
+ personalized_message_gigachat_plus = perform_personalization_gigachat_with_retry(gigachat_plus_message, personalization_prompt, "gigachat_plus")
276
+ gigachat_plus_length = len(personalized_message_gigachat_plus)
277
+ gigachat_plus_display = f"{personalized_message_gigachat_plus}\n\n------\nКоличество знаков: {gigachat_plus_length}"
278
+ yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, "Все персонализированные сообщения сгенерированы"
279
+
280
+
281
+ # Функция для генерации промпта проверки текста
282
+ def generate_error_check_prompt():
283
+ prompt = (
284
+ "Проверь текст SMS-сообщения на соответствие установленным правилам и ограничениям, касающимся его формирования. На основе выявленных несоответствий предоставь рекомендации по исправлению текста. "
285
+ "Особое внимание удели проверке: количества символов в тексте SMS-сообщения, орфографическим и пунктуационным ошибкам, определению частей речи (причастия, деепричастия, причастный оборот, деепричастный оборот). "
286
+ "Анализируй только текст SMS-сообщения, ничего не придумывай и не добавляй лишнего. "
287
+ "Правила и ограничения, которым должен соответствовать текст SMS-сообщения:\n"
288
+ "1. Количество символов в SMS-сообщении должно быть до 250 знаков с учетом пробелов.\n"
289
+ "2. В тексте должен быть призыв к действию с использованием глагола в повелительном наклонении (например: оформите, получите, разместите, размещайте, откройте, подключите, подайте заявку).\n"
290
+ "3. Должно соблюдаться соответствие фактов о продукте.\n"
291
+ "4. В генерациях смс запрещено использовать обещания и гарантии.\n"
292
+ "5. В генерациях смс запрещено использовать составные конструкции из двух глаголов.\n"
293
+ "6. В генерациях смс запрещено использовать причастия и причастные обороты.\n"
294
+ "7. В генерациях смс запрещено использовать деепричастия и деепричастные обороты.\n"
295
+ "8. В генерациях смс запрещено использовать превосходную степень прилагательных.\n"
296
+ "9. В генерациях смс запрещено использовать страдательный залог.\n"
297
+ "10. В генерациях смс запрещено использовать порядковые числительные от 10 прописью.\n"
298
+ "11. В генерациях смс запрещено использовать цепочки с придаточными предложениями.\n"
299
+ "12. В генерациях смс запрещено использовать разделительные повторяющиеся союзы.\n"
300
+ "13. В генерациях смс запрещено использовать вводные конструкции.\n"
301
+ "14. В генерациях смс запрещено использовать усилители.\n"
302
+ "15. В генерациях смс запрещено использовать паразиты времени.\n"
303
+ "16. В генерациях смс запрещено использовать несколько существительных подряд, в том числе отглагольных.\n"
304
+ "17. В генерациях смс запрещено использовать производные предлоги.\n"
305
+ "18. В генерациях смс запрещено использовать сложные предложения, в которых нет связи между частями.\n"
306
+ "19. В генерациях смс запрещено использовать сложноподчинённые предложения.\n"
307
+ "20. В генерациях смс запрещено использовать даты прописью.\n"
308
+ "21. В генерациях смс запрещено использовать близкие по смыслу однородные члены.\n"
309
+ "22. В генерациях смс запрещено использовать шокирующие, экстравагантные, кликбейтные фразы.\n"
310
+ "23. В генерациях смс запрещено использовать абстрактные заявления без поддержки фактами и отсутствие доказательства пользы для клиента.\n"
311
+ "24. В генерациях смс запрещено использовать гарантирующие фразы.\n"
312
+ "25. В генерациях смс запрещено использовать узкоспециализированные термины.\n"
313
+ "26. В генерациях смс запрещено использовать фразы, способные создать двойственное ощущение, обидеть.\n"
314
+ "27. В генерациях смс запрещено использовать речевые клише, рекламные штампы, канцеляризмы.\n"
315
+ "28. В генерациях смс запрещено использовать запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, бан��ротство, долги, займ, срочно, лучший, главный, номер 1, успех, лидер.\n"
316
+ "29. Сообщение должно быть написано без орфографических и грамматических ошибок.\n"
317
+ "30. Запрещены повторы слов.\n"
318
+ "31. В тексте должны использоваться правильные знаки препинания.\n"
319
+ "32. Если в тексте используются кавычки, они должны быть в форме «кавычки-ёлочки».\n"
320
+ "33. В тексте SMS сообщения должны обязательно присутствовать: название продукта, условия использования продукта / Преимущества продукта / Шаги для подключения или начала использования / Условия акции (если предложение по продукту акционное).\n"
321
+ "Форма ответа: [Ответ должен быть кратким, должен содержать только рекомендации по устранению найденных несоответствий, соответствия каждому пункту правил описывать категорически запрещено]."
322
+ )
323
+ return prompt
324
+
325
+
326
+ # Функция для выполнения проверки текста с использованием yield
327
+ def check_errors_with_yield(*personalized_messages):
328
+ if len(personalized_messages) < 4:
329
+ yield "", "", "", "", "", "Ошибка: недостаточно сообщений для проверки"
330
+ return
331
+
332
+ error_check_prompt = generate_error_check_prompt()
333
+ yield error_check_prompt, "", "", "", "", "Промпт для проверки текста сгенерирован"
334
+
335
+ error_message_gpt4o = perform_personalization(f"{error_check_prompt}\n\n{personalized_messages[0]}", "")
336
+ yield error_check_prompt, error_message_gpt4o, "", "", "", "Результат проверки GPT-4o сгенерирован"
337
+
338
+ error_message_gigachat_pro = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[1]}", "", "gigachat_pro")
339
+ yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, "", "", "Результат проверки GigaChat-Pro сгенерирован"
340
+
341
+ time.sleep(3)
342
+ error_message_gigachat_lite = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[2]}", "", "gigachat_lite")
343
+ yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, "", "Результат проверки GigaChat-Lite сгенерирован"
344
+
345
+ try:
346
+ time.sleep(3)
347
+ error_message_gigachat_plus = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[3]}", "", "gigachat_plus")
348
+ except Exception as e:
349
+ error_message_gigachat_plus = f"Ошибка при обработке GigaChat-Plus: {e}"
350
+
351
+ yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, "Все результаты проверки сгенерированы"
352
+
353
+
354
+ def save_to_github(personalized_message, model_name, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature):
355
+ # Собираем все данные в один словарь
356
+ data_to_save = {
357
+ "Модель": model_name,
358
+ "Температура": temperature, # Добавляем температуру
359
+ "Персонализированное сообщение": personalized_message,
360
+ "Комментарий": comment,
361
+ "Откорректированное сообщение": corrected_message,
362
+ "Описание предложения": description,
363
+ "Преимущества": advantages,
364
+ "Неперсонализированный промпт": non_personalized_prompt,
365
+ "Неперсонализированное сообщение": non_personalized_message,
366
+ "Пол": gender,
367
+ "Поколение": generation,
368
+ "Психотип": psychotype,
369
+ "Стадия бизнеса": business_stage,
370
+ "Отрасль": industry,
371
+ "ОПФ": legal_form
372
+ }
373
+
374
+ # Преобразуем контент в JSON-строку и кодируем в base64
375
+ file_content_encoded = base64.b64encode(json.dumps(data_to_save).encode()).decode()
376
+
377
+ # Параметры для GitHub API
378
+ repo = "fruitpicker01/Storage_1"
379
+ path = f"file_{int(time.time())}.json"
380
+ url = f"https://api.github.com/repos/{repo}/contents/{path}"
381
+ headers = {
382
+ "Authorization": f"token {token}",
383
+ "Content-Type": "application/json"
384
+ }
385
+ data = {
386
+ "message": f"Добавлен новый файл {path}",
387
+ "content": file_content_encoded
388
+ }
389
+
390
+ # Отправка POST-запроса на GitHub API для создания файла в репозитории
391
+ response = requests.put(url, headers=headers, data=json.dumps(data))
392
+
393
+ if response.status_code == 201:
394
+ print("Файл успешно загружен на GitHub.")
395
+ else:
396
+ print(f"Ошибка при загрузке файла на GitHub: {response.status_code}")
397
+ print(f"Ответ сервера: {response.json()}")
398
+
399
+
400
  # Создание интерфейса Gradio
401
  with gr.Blocks() as demo:
402
  gr.Markdown("# Генерация SMS-сообщений по заданным признакам")
 
444
  output_text_gpt4o = gr.Textbox(label="Неперсонализированное сообщение GPT-4o", lines=3, interactive=False)
445
  output_text_gigachat_pro = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Pro", lines=3, interactive=False)
446
  output_text_gigachat_lite = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Lite", lines=3, interactive=False)
447
+ output_text_gigachat_plus = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Lite+", lines=3, interactive=False)
448
 
449
  submit_btn.click(
450
  generate_messages,
451
  inputs=[
452
  description_input,
453
  advantages_input,
454
+ *selections,
455
+ gpt4o_temperature,
456
+ gigachat_pro_temperature,
457
+ gigachat_lite_temperature,
458
+ gigachat_plus_temperature
459
  ],
460
  outputs=[prompt_display, output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus]
461
  )
462
 
463
 
464
+ with gr.Row():
465
+ personalize_btn = gr.Button("2. Выполнить персонализацию (нажимать только после кнопки 1)", elem_id="personalize_button")
466
+
467
+ with gr.Row():
468
+ personalize_btn.click(
469
+ personalize_messages_with_yield,
470
+ inputs=[output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus] + selections,
471
+ outputs=[
472
+ gr.Textbox(label="Промпт для персонализации", lines=6, interactive=False),
473
+ personalized_output_text_gpt4o := gr.Textbox(label="Персонализированное сообщение GPT-4o", lines=6, interactive=False),
474
+ personalized_output_text_gigachat_pro := gr.Textbox(label="Персонализированное сообщение GigaChat-Pro", lines=6, interactive=False),
475
+ personalized_output_text_gigachat_lite := gr.Textbox(label="Персонализированное сообщение GigaChat-Lite", lines=6, interactive=False),
476
+ personalized_output_text_gigachat_plus := gr.Textbox(label="Персонализированное сообщение GigaChat-Lite+", lines=6, interactive=False)
477
+ ]
478
+ )
479
+
480
+ with gr.Row():
481
+ gr.Markdown("*Комментарий (опционально):*")
482
+ comment_gpt4o = gr.Textbox(label="", lines=3)
483
+ comment_gigachat_pro = gr.Textbox(label="", lines=3)
484
+ comment_gigachat_lite = gr.Textbox(label="", lines=3)
485
+ comment_gigachat_plus = gr.Textbox(label="", lines=3)
486
+
487
+ with gr.Row():
488
+ gr.Markdown("*Откорректирован��ое сообщение (опционально):*")
489
+ corrected_gpt4o = gr.Textbox(label="", lines=3)
490
+ corrected_gigachat_pro = gr.Textbox(label="", lines=3)
491
+ corrected_gigachat_lite = gr.Textbox(label="", lines=3)
492
+ corrected_gigachat_plus = gr.Textbox(label="", lines=3)
493
+
494
+
495
+ # Отдельная строка для кнопок с использованием пустой колонки
496
+ with gr.Row():
497
+ gr.Button("Жми 👍 для сохранения удачного SMS в базу =>")
498
+ save_gpt4o_btn = gr.Button("👍")
499
+ save_gigachat_pro_btn = gr.Button("👍")
500
+ save_gigachat_lite_btn = gr.Button("👍")
501
+ save_gigachat_plus_btn = gr.Button("👍")
502
+
503
+ # Привязка кнопок к функциям сохранения
504
+ save_gpt4o_btn.click(
505
+ fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature:
506
+ save_to_github(personalized_message, "GPT-4o", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature),
507
  inputs=[
508
+ personalized_output_text_gpt4o,
509
+ comment_gpt4o,
510
+ corrected_gpt4o,
511
+ description_input,
512
+ advantages_input,
513
+ prompt_display,
514
+ output_text_gpt4o,
515
+ selections[0], # Пол
516
+ selections[1], # Поколение
517
+ selections[2], # Психотип
518
+ selections[3], # Стадия бизнеса
519
+ selections[4], # Отрасль
520
+ selections[5], # ОПФ
521
+ gpt4o_temperature # Передача температуры
522
+ ],
523
+ outputs=None
524
+ )
525
+
526
+ save_gigachat_pro_btn.click(
527
+ fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature:
528
+ save_to_github(personalized_message, "GigaChat-Pro", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature),
529
+ inputs=[
530
+ personalized_output_text_gigachat_pro,
531
+ comment_gigachat_pro,
532
+ corrected_gigachat_pro,
533
+ description_input,
534
+ advantages_input,
535
+ prompt_display,
536
+ output_text_gigachat_pro,
537
+ selections[0], # Пол
538
+ selections[1], # Поколение
539
+ selections[2], # Психотип
540
+ selections[3], # Стадия бизнеса
541
+ selections[4], # Отрасль
542
+ selections[5], # ОПФ
543
+ gigachat_pro_temperature # Передача температуры
544
+ ],
545
+ outputs=None
546
+ )
547
+
548
+ save_gigachat_lite_btn.click(
549
+ fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature:
550
+ save_to_github(personalized_message, "GigaChat-Lite", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature),
551
+ inputs=[
552
+ personalized_output_text_gigachat_lite,
553
+ comment_gigachat_lite,
554
+ corrected_gigachat_lite,
555
+ description_input,
556
+ advantages_input,
557
+ prompt_display,
558
+ output_text_gigachat_lite,
559
+ selections[0], # Пол
560
+ selections[1], # Поколение
561
+ selections[2], # Психотип
562
+ selections[3], # Стадия бизнеса
563
+ selections[4], # Отрасль
564
+ selections[5], # ОПФ
565
+ gigachat_lite_temperature # Передача температуры
566
+ ],
567
+ outputs=None
568
+ )
569
+
570
+ save_gigachat_plus_btn.click(
571
+ fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature:
572
+ save_to_github(personalized_message, "GigaChat-Plus", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form, temperature),
573
+ inputs=[
574
+ personalized_output_text_gigachat_plus,
575
+ comment_gigachat_plus,
576
+ corrected_gigachat_plus,
577
+ description_input,
578
+ advantages_input,
579
+ prompt_display,
580
+ output_text_gigachat_plus,
581
+ selections[0], # Пол
582
+ selections[1], # Поколение
583
+ selections[2], # Психотип
584
+ selections[3], # Стадия бизнеса
585
+ selections[4], # Отрасль
586
+ selections[5], # ОПФ
587
+ gigachat_plus_temperature # Передача температуры
588
+ ],
589
+ outputs=None
590
  )
591
 
592
+
593
+ # Использование сохраненных переменных в следующем блоке
594
+ with gr.Row():
595
+ check_errors_btn = gr.Button("3. Проверить текст (нажимать только после кнопки 2) - экспериментальная фича, качество пока крайне низкое", elem_id="check_errors_button")
596
+
597
+ with gr.Row():
598
+ check_errors_btn.click(
599
+ check_errors_with_yield,
600
+ inputs=[personalized_output_text_gpt4o, personalized_output_text_gigachat_pro, personalized_output_text_gigachat_lite, personalized_output_text_gigachat_plus],
601
+ outputs=[
602
+ gr.Textbox(label="Промпт для проверки текста", lines=6, interactive=False),
603
+ gr.Textbox(label="Результат проверки GPT-4o", lines=6),
604
+ gr.Textbox(label="Результат проверки GigaChat-Pro", lines=6),
605
+ gr.Textbox(label="Результат проверки GigaChat-Lite", lines=6),
606
+ gr.Textbox(label="Результат проверки GigaChat-Lite+", lines=6)
607
+ ]
608
+ )
609
+
610
+
611
  demo.launch()