fruitpicker01 commited on
Commit
47c50bf
·
verified ·
1 Parent(s): f596bc7

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +406 -0
app.py ADDED
@@ -0,0 +1,406 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import requests
3
+ import os
4
+ import json
5
+ import pandas as pd
6
+ import time
7
+ from langchain.schema import SystemMessage
8
+ from langchain_community.chat_models.gigachat import GigaChat
9
+ from openpyxl import load_workbook
10
+ import base64
11
+
12
+ # Установка ключа API для OpenAI и GigaChat
13
+ openai_api_key = os.getenv('GPT_KEY')
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', verify_ssl_certs=False)
19
+ chat_lite = GigaChat(credentials=gc_key, model='GigaChat', verify_ssl_certs=False)
20
+ chat_plus = GigaChat(credentials=gc_key, model='GigaChat-Plus', verify_ssl_certs=False)
21
+
22
+ # Загрузка данных из Excel-файла
23
+ try:
24
+ data = pd.read_excel('Признаки.xlsx', sheet_name=None)
25
+ except Exception as e:
26
+ print(f"Ошибка при загрузке Excel-файла: {e}")
27
+ data = {}
28
+
29
+ # Создание списка признаков и их значений
30
+ features = {}
31
+ for sheet_name, df in data.items():
32
+ try:
33
+ features[sheet_name] = df.set_index(df.columns[0]).to_dict()[df.columns[1]]
34
+ except Exception as e:
35
+ print(f"Ошибка при обработке данных листа {sheet_name}: {e}")
36
+ features[sheet_name] = {}
37
+
38
+ # Функция для генерации стандартного промпта
39
+ def generate_standard_prompt(description, advantages, *selected_values):
40
+ prompt = (
41
+ "Сгенерируй смс-сообщение для клиента.\n"
42
+ "Объем готового текста: до 250 знаков с пробелами.\n"
43
+ "Начни сообщение с призыва к действию с продуктом.\n"
44
+ f"Описание предложения: {description}\n"
45
+ f"Преимущества: {advantages}\n"
46
+ "Вклад на короткий срок.\n"
47
+ "В тексте смс запрещено использование:\n"
48
+ "- Запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, доступный, банкротство, долги, займ, срочно, сейчас, лучший, главный, номер 1, гарантия, успех, лидер;\n"
49
+ "- Обращение к клиенту;\n"
50
+ "- Приветствие клиента;\n"
51
+ "- Обещания и гарантии;\n"
52
+ "- Использовать составные конструкции из двух глаголов;\n"
53
+ "- Причастия и причастные обороты;\n"
54
+ "- Деепричастия и деепричастные обороты;\n"
55
+ "- Превосходная степень прилагательных;\n"
56
+ "- Страдательный залог;\n"
57
+ "- Порядковые числительные от 10 прописью;\n"
58
+ "- Цепочки с придаточными предложениями;\n"
59
+ "- Разделительные повторяющиеся союзы;\n"
60
+ "- Вводные конструкции;\n"
61
+ "- Усилители;\n"
62
+ "- Паразиты времени;\n"
63
+ "- Несколько существительных подряд, в том числе отглагольных;\n"
64
+ "- Производные предлоги;\n"
65
+ "- Сложные предложения, в которых нет связи между частями;\n"
66
+ "- Сложноподчинённые предложения;\n"
67
+ "- Даты прописью;\n"
68
+ "- Близкие по смыслу однородные члены предложения;\n"
69
+ "- Шокирующие, экстравагантные, кликбейтные фразы;\n"
70
+ "- Абстрактные заявления без поддержки фактами и отсутствие доказательства пользы для клиента;\n"
71
+ "- Гарантирующие фразы;\n"
72
+ "- Узкоспециализированные термины;\n"
73
+ "- Фразы, способные создать двойственное ощущение, обидеть;\n"
74
+ "- Речевые клише, рекламные штампы, канцеляризмы;\n"
75
+ "Убедись, что в готовом тексте до 250 знаков с пробелами."
76
+ )
77
+ return prompt
78
+
79
+ # Функции для генерации сообщений
80
+ def generate_message_gpt4o(prompt):
81
+ try:
82
+ headers = {
83
+ "Content-Type": "application/json",
84
+ "Authorization": f"Bearer {openai_api_key}"
85
+ }
86
+ data = {
87
+ "model": "chatgpt-4o-latest",
88
+ "messages": [{"role": "system", "content": prompt}],
89
+ "max_tokens": 700
90
+ }
91
+ response = requests.post("https://api.openai.com/v1/chat/completions", json=data, headers=headers)
92
+ response_data = response.json()
93
+ return response_data["choices"][0]["message"]["content"].strip()
94
+ except Exception as e:
95
+ return f"Ошибка при обращении к ChatGPT-4o-Latest: {e}"
96
+
97
+ def generate_message_gigachat_pro(prompt):
98
+ try:
99
+ messages = [SystemMessage(content=prompt)]
100
+ res = chat_pro(messages)
101
+ return res.content.strip()
102
+ except Exception as e:
103
+ return f"Ошибка при обращении к GigaChat-Pro: {e}"
104
+
105
+ def generate_message_gigachat_lite(prompt):
106
+ try:
107
+ time.sleep(2)
108
+ messages = [SystemMessage(content=prompt)]
109
+ res = chat_lite(messages)
110
+ return res.content.strip()
111
+ except Exception as e:
112
+ return f"Ошибка при обращении к GigaChat-Lite: {e}"
113
+
114
+ def generate_message_gigachat_plus(prompt):
115
+ try:
116
+ time.sleep(2)
117
+ messages = [SystemMessage(content=prompt)]
118
+ res = chat_plus(messages)
119
+ return res.content.strip()
120
+ except Exception as e:
121
+ return f"Ошибка при обращении к GigaChat-Lite+: {e}"
122
+
123
+ # Функция для обработки нажатия кнопки Submit и последовательного отображения результатов
124
+ def generate_messages(description, advantages, *selected_values):
125
+ standard_prompt = generate_standard_prompt(description, advantages, *selected_values)
126
+
127
+ results = {
128
+ "prompt": standard_prompt,
129
+ "gpt4o": None,
130
+ "gigachat_pro": None,
131
+ "gigachat_lite": None,
132
+ "gigachat_plus": None
133
+ }
134
+
135
+ yield results["prompt"], "", "", "", "", "Генерация стандартного промпта завершена"
136
+
137
+ results["gpt4o"] = generate_message_gpt4o(standard_prompt)
138
+ yield results["prompt"], results["gpt4o"], "", "", "", "Сообщение GPT-4o сгенерировано"
139
+
140
+ results["gigachat_pro"] = generate_message_gigachat_pro(standard_prompt)
141
+ yield results["prompt"], results["gpt4o"], results["gigachat_pro"], "", "", "Сообщение GigaChat-Pro сгенерировано"
142
+ time.sleep(2)
143
+
144
+ results["gigachat_lite"] = generate_message_gigachat_lite(standard_prompt)
145
+ yield results["prompt"], results["gpt4o"], results["gigachat_pro"], results["gigachat_lite"], "", "Сообщение GigaChat-Lite сгенерировано"
146
+ time.sleep(2)
147
+
148
+ results["gigachat_plus"] = generate_message_gigachat_plus(standard_prompt)
149
+ yield results["prompt"], results["gpt4o"], results["gigachat_pro"], results["gigachat_lite"], results["gigachat_plus"], "Все сообщения сгенерированы"
150
+
151
+ return results
152
+
153
+ # Функция для генерации персонализированного промпта
154
+ def generate_personalization_prompt(*selected_values):
155
+ prompt = "Адаптируй, не превышая длину сообщения в 250 знаков с пробелами, текст с учетом следующих особенностей:\n"
156
+ for i, feature in enumerate(features.keys()):
157
+ if selected_values[i]:
158
+ try:
159
+ prompt += f"{features[feature][selected_values[i]]}\n"
160
+ except KeyError:
161
+ return f"Ошибка: выбранное значение {selected_values[i]} не найдено в данных."
162
+
163
+ prompt += "Убедись, что в готовом тексте до 250 знаков с пробелами."
164
+
165
+ return prompt.strip()
166
+
167
+ # Функция для выполнения персонализации на основе сгенерированного промпта и сообщения
168
+ def perform_personalization(standard_message, personalization_prompt):
169
+ full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}"
170
+ return generate_message_gpt4o(full_prompt)
171
+
172
+ def perform_personalization_gigachat(standard_message, personalization_prompt, model):
173
+ full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}"
174
+ if model == "gigachat_pro":
175
+ return generate_message_gigachat_pro(full_prompt)
176
+ elif model == "gigachat_lite":
177
+ return generate_message_gigachat_lite(full_prompt)
178
+ elif model == "gigachat_plus":
179
+ return generate_message_gigachat_plus(full_prompt)
180
+
181
+ # Функция для выполнения персонализации с использованием yield
182
+ def personalize_messages_with_yield(gpt4o_message, gigachat_pro_message, gigachat_lite_message, gigachat_plus_message, *selected_values):
183
+ personalization_prompt = generate_personalization_prompt(*selected_values)
184
+ yield personalization_prompt, "", "", "", "", "Промпт для персонализации сгенерирован"
185
+
186
+ personalized_message_gpt4o = perform_personalization(gpt4o_message, personalization_prompt)
187
+ yield personalization_prompt, personalized_message_gpt4o, "", "", "", "Персонализированное сообщение GPT-4o сгенерировано"
188
+
189
+ personalized_message_gigachat_pro = perform_personalization_gigachat(gigachat_pro_message, personalization_prompt, "gigachat_pro")
190
+ yield personalization_prompt, personalized_message_gpt4o, personalized_message_gigachat_pro, "", "", "Персонализированное сообщение GigaChat-Pro сгенерировано"
191
+
192
+ personalized_message_gigachat_lite = perform_personalization_gigachat(gigachat_lite_message, personalization_prompt, "gigachat_lite")
193
+ yield personalization_prompt, personalized_message_gpt4o, personalized_message_gigachat_pro, personalized_message_gigachat_lite, "", "Персонализированное сообщение GigaChat-Lite сгенерировано"
194
+
195
+ personalized_message_gigachat_plus = perform_personalization_gigachat(gigachat_plus_message, personalization_prompt, "gigachat_plus")
196
+ yield personalization_prompt, personalized_message_gpt4o, personalized_message_gigachat_pro, personalized_message_gigachat_lite, personalized_message_gigachat_plus, "Все персонализированные сообщения сгенерированы"
197
+
198
+ # Функция для генерации промпта проверки текста
199
+ def generate_error_check_prompt():
200
+ prompt = (
201
+ "Проверь текст SMS-сообщения на соответствие установленным правилам и ограничениям, касающимся его формирования. На основе выявленных несоответствий предоставь рекомендации по исправлению текста. "
202
+ "Особое внимание удели проверке: количества символов в тексте SMS-сообщения, орфографическим и пунктуационным ошибкам, определению частей речи (причастия, деепричастия, причастный оборот, деепричастный оборот). "
203
+ "Анализируй только текст SMS-сообщения, ничего не придумывай и не добавляй лишнего. "
204
+ "Правила и ограничения, которым должен соответствовать текст SMS-сообщения:\n"
205
+ "1. Количество символов в SMS-сообщении должно быть до 250 знаков с учетом пробелов.\n"
206
+ "2. В тексте должен быть призыв к действию с использованием глагола в повелительном наклонении (например: оформите, получите, разместите, размещайте, откройте, подключите, подайте заявку).\n"
207
+ "3. Должно соблюдаться соответствие фактов о продукте.\n"
208
+ "4. В генерациях смс запрещено использовать обещания и гарантии.\n"
209
+ "5. В генерациях смс запрещено использовать составные конструкции из двух глаголов.\n"
210
+ "6. В генерациях смс запрещено использовать причастия и причастные обороты.\n"
211
+ "7. В генерациях смс запрещено использовать деепричастия и деепричастные обороты.\n"
212
+ "8. В генерациях смс запрещено использовать превосходную степень прилагательных.\n"
213
+ "9. В генерациях смс запрещено использовать страдательный залог.\n"
214
+ "10. В генерациях смс запрещено использовать порядковые числительные от 10 прописью.\n"
215
+ "11. В генерациях смс запрещено использовать цепочки с придаточными предложениями.\n"
216
+ "12. В генерациях смс запрещено использовать разделительные повторяющиеся союзы.\n"
217
+ "13. В генерациях смс запрещено использовать вводные конструкции.\n"
218
+ "14. В генерациях смс запрещено использовать усилители.\n"
219
+ "15. В генерациях смс запрещено использовать паразиты времени.\n"
220
+ "16. В генерациях смс запрещено использовать несколько существительных подряд, в том числе отг��агольных.\n"
221
+ "17. В генерациях смс запрещено использовать производные предлоги.\n"
222
+ "18. В генерациях смс запрещено использовать сложные предложения, в которых нет связи между частями.\n"
223
+ "19. В генерациях смс запрещено использовать сложноподчинённые предложения.\n"
224
+ "20. В генерациях смс запрещено использовать даты прописью.\n"
225
+ "21. В генерациях смс запрещено использовать близкие по смыслу однородные члены.\n"
226
+ "22. В генерациях смс запрещено использовать шокирующие, экстравагантные, кликбейтные фразы.\n"
227
+ "23. В генерациях смс запрещено использовать абстрактные заявления без поддержки фактами и отсутствие доказательства пользы для клиента.\n"
228
+ "24. В генерациях смс запрещено использовать гарантирующие фразы.\n"
229
+ "25. В генерациях смс запрещено использовать узкоспециализированные термины.\n"
230
+ "26. В генерациях смс запрещено использовать фразы, способные создать двойственное ощущение, обидеть.\n"
231
+ "27. В генерациях смс запрещено использовать речевые клише, рекламные штампы, канцеляризмы.\n"
232
+ "28. В генерациях смс запрещено использовать запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, банкротство, долги, займ, срочно, лучший, главный, номер 1, успех, лидер.\n"
233
+ "29. Сообщение должно быть написано без орфографических и грамматических ошибок.\n"
234
+ "30. Запрещены повторы слов.\n"
235
+ "31. В тексте должны использоваться правильные знаки препинания.\n"
236
+ "32. Если в тексте используются кавычки, они должны быть в форме «кавычки-ёлочки».\n"
237
+ "33. В тексте SMS сообщения должны обязательно присутствовать: название продукта, условия использования продукта / Преимущества продукта / Шаги для подключения или начала использования / Условия акции (если предложение по продукту акционное).\n"
238
+ "Форма ответа: [Ответ должен быть кратким, должен содержать только рекомендации по устранению найденных несоответствий, соответствия каждому пункту правил описывать категорически запрещено]."
239
+ )
240
+ return prompt
241
+
242
+
243
+ # Функция для выполнения проверки текста с использованием yield
244
+ def check_errors_with_yield(*personalized_messages):
245
+ if len(personalized_messages) < 4:
246
+ yield "", "", "", "", "", "Ошибка: недостаточно сообщений для проверки"
247
+ return
248
+
249
+ error_check_prompt = generate_error_check_prompt()
250
+ yield error_check_prompt, "", "", "", "", "Промпт для проверки текста сгенерирован"
251
+
252
+ error_message_gpt4o = perform_personalization(f"{error_check_prompt}\n\n{personalized_messages[0]}", "")
253
+ yield error_check_prompt, error_message_gpt4o, "", "", "", "Результат проверки GPT-4o сгенерирован"
254
+
255
+ error_message_gigachat_pro = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[1]}", "", "gigachat_pro")
256
+ yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, "", "", "Результат проверки GigaChat-Pro сгенерирован"
257
+
258
+ time.sleep(3)
259
+ error_message_gigachat_lite = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[2]}", "", "gigachat_lite")
260
+ yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, "", "Результат проверки GigaChat-Lite сгенерирован"
261
+
262
+ try:
263
+ time.sleep(3)
264
+ error_message_gigachat_plus = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[3]}", "", "gigachat_plus")
265
+ except Exception as e:
266
+ error_message_gigachat_plus = f"Ошибка при обработке GigaChat-Plus: {e}"
267
+
268
+ yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, "Все результаты проверки сгенерированы"
269
+
270
+
271
+ def save_to_github(message, model_name):
272
+ # Формируем уникальное имя файла на основе текущего времени
273
+ timestamp = int(time.time())
274
+ file_name = f"file_{timestamp}.json"
275
+
276
+ # Данные для записи
277
+ file_content = {
278
+ "Модель": model_name,
279
+ "Сообщение": message
280
+ }
281
+
282
+ # Преобразуем контент в JSON-строку и кодируем в base64
283
+ file_content_encoded = base64.b64encode(json.dumps(file_content).encode()).decode()
284
+
285
+ # Параметры для GitHub API
286
+ repo = "fruitpicker01/Storage_1"
287
+ path = file_name
288
+ url = f"https://api.github.com/repos/{repo}/contents/{path}"
289
+ headers = {
290
+ "Authorization": f"token {token}",
291
+ "Content-Type": "application/json"
292
+ }
293
+ data = {
294
+ "message": f"Добавлен новый файл {file_name}",
295
+ "content": file_content_encoded
296
+ }
297
+
298
+ # Отправка POST-запроса на GitHub API для создания файла в репозитории
299
+ response = requests.put(url, headers=headers, data=json.dumps(data))
300
+
301
+ if response.status_code == 201:
302
+ print(f"Файл {file_name} успешно добавлен в репозиторий.")
303
+ else:
304
+ print(f"Ошибка при добавлении файла: {response.status_code}")
305
+ print(response.json())
306
+
307
+
308
+ # Создание интерфейса Gradio
309
+ with gr.Blocks() as demo:
310
+ gr.Markdown("# Генерация SMS-сообщений по заданным признакам")
311
+
312
+ with gr.Row():
313
+ with gr.Column(scale=1):
314
+ description_input = gr.Textbox(
315
+ label="Описание предложения (предзаполненный пример можно поменять на свой)",
316
+ lines=13,
317
+ value=(
318
+ "Необходимо предложить клиенту оформить дебетовую премиальную бизнес-карту Mastercard Preffered. "
319
+ "Обслуживание карты стоит 700 рублей в месяц, но клиент может пользоваться ей бесплатно. "
320
+ "Что необходимо сделать, чтобы воспользоваться предложением:\n"
321
+ "1. Оформить премиальную бизнес-карту в офисе банка или онлайн в интернет-банке СберБизнес.\n"
322
+ "2. Забрать карту.\n"
323
+ "3. В течение календарного месяца совершить по ней покупки на сумму от 100 000 рублей.\n"
324
+ "4. В течение следующего месяца пользоваться ей бесплатно."
325
+ )
326
+ )
327
+ advantages_input = gr.Textbox(
328
+ label="Преимущества (предзаполненный пример можно поменять на свой)",
329
+ lines=6,
330
+ value=(
331
+ "Предложение по бесплатному обслуживанию — бессрочное.\n"
332
+ "Оплата покупок без отчётов и платёжных поручений.\n"
333
+ "Платёжные документы без комиссии.\n"
334
+ "Лимиты на расходы сотрудников.\n"
335
+ "Мгновенные переводы на карты любых банков."
336
+ )
337
+ )
338
+ selections = []
339
+ for feature in features.keys():
340
+ selections.append(gr.Dropdown(choices=[None] + list(features[feature].keys()), label=f"Выберите {feature}"))
341
+
342
+ submit_btn = gr.Button("1. Создать неперсонализированное сообщение") # Оранжевая кнопка по умолчанию
343
+
344
+ with gr.Column(scale=2):
345
+ prompt_display = gr.Textbox(label="Неперсонализированный промпт", lines=28, interactive=False)
346
+ output_text_gpt4o = gr.Textbox(label="Неперсонализированное сообщение GPT-4o", lines=3, interactive=False)
347
+ output_text_gigachat_pro = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Pro", lines=3, interactive=False)
348
+ output_text_gigachat_lite = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Lite", lines=3, interactive=False)
349
+ output_text_gigachat_plus = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Lite+", lines=3, interactive=False)
350
+
351
+ submit_btn.click(
352
+ generate_messages,
353
+ inputs=[description_input, advantages_input] + selections,
354
+ outputs=[prompt_display, output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus]
355
+ )
356
+
357
+ with gr.Row():
358
+ personalize_btn = gr.Button("2. Выполнить персонализацию (нажимать только после кнопки 1)", elem_id="personalize_button")
359
+
360
+ with gr.Row():
361
+ personalize_btn.click(
362
+ personalize_messages_with_yield,
363
+ inputs=[output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus] + selections,
364
+ outputs=[
365
+ gr.Textbox(label="Промпт для персонализации", lines=6, interactive=False),
366
+ personalized_output_text_gpt4o := gr.Textbox(label="Персонализированное сообщение GPT-4o", lines=6, interactive=False),
367
+ personalized_output_text_gigachat_pro := gr.Textbox(label="Персонализированное сообщение GigaChat-Pro", lines=6, interactive=False),
368
+ personalized_output_text_gigachat_lite := gr.Textbox(label="Персонализированное сообщение GigaChat-Lite", lines=6, interactive=False),
369
+ personalized_output_text_gigachat_plus := gr.Textbox(label="Персонализированное сообщение GigaChat-Lite+", lines=6, interactive=False)
370
+ ]
371
+ )
372
+
373
+ # Отдельная строка для кнопок с использованием пустой колонки
374
+ with gr.Row():
375
+ gr.Button("Жми 👍 для сохранения удачного SMS в базу =>")
376
+ save_gpt4o_btn = gr.Button("👍")
377
+ save_gigachat_pro_btn = gr.Button("👍")
378
+ save_gigachat_lite_btn = gr.Button("👍")
379
+ save_gigachat_plus_btn = gr.Button("👍")
380
+
381
+ # Привязка кнопок к функциям сохранения
382
+ save_gpt4o_btn.click(fn=lambda x: save_to_github(x, "GPT-4o"), inputs=personalized_output_text_gpt4o, outputs=None)
383
+ save_gigachat_pro_btn.click(fn=lambda x: save_to_github(x, "GigaChat-Pro"), inputs=personalized_output_text_gigachat_pro, outputs=None)
384
+ save_gigachat_lite_btn.click(fn=lambda x: save_to_github(x, "GigaChat-Lite"), inputs=personalized_output_text_gigachat_lite, outputs=None)
385
+ save_gigachat_plus_btn.click(fn=lambda x: save_to_github(x, "GigaChat-Lite+"), inputs=personalized_output_text_gigachat_plus, outputs=None)
386
+
387
+
388
+ # Использование сохраненных переменных в следующем блоке
389
+ with gr.Row():
390
+ check_errors_btn = gr.Button("3. Проверить текст (нажимать только после кнопки 2)", elem_id="check_errors_button")
391
+
392
+ with gr.Row():
393
+ check_errors_btn.click(
394
+ check_errors_with_yield,
395
+ inputs=[personalized_output_text_gpt4o, personalized_output_text_gigachat_pro, personalized_output_text_gigachat_lite, personalized_output_text_gigachat_plus],
396
+ outputs=[
397
+ gr.Textbox(label="Промпт для проверки текста", lines=6, interactive=False),
398
+ gr.Textbox(label="Результат проверки GPT-4o", lines=6),
399
+ gr.Textbox(label="Результат проверки GigaChat-Pro", lines=6),
400
+ gr.Textbox(label="Результат проверки GigaChat-Lite", lines=6),
401
+ gr.Textbox(label="Результат проверки GigaChat-Lite+", lines=6)
402
+ ]
403
+ )
404
+
405
+
406
+ demo.launch()