Spaces:
Sleeping
Sleeping
fruitpicker01
commited on
Commit
•
edcf6fe
1
Parent(s):
a81af46
Update app.py
Browse files
app.py
CHANGED
@@ -2,6 +2,13 @@ import gradio as gr
|
|
2 |
import plotly.graph_objects as go
|
3 |
import random
|
4 |
import pandas as pd
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
# Загрузка данных из Excel-файла
|
7 |
try:
|
@@ -15,7 +22,6 @@ features = {}
|
|
15 |
for sheet_name, df in data.items():
|
16 |
try:
|
17 |
if sheet_name == "Пол Поколение Психотип":
|
18 |
-
# Создаем словарь, где ключи — это кортежи (Пол, Поколение, Психотип), а значения — инструкции
|
19 |
features[sheet_name] = df.set_index(['Пол', 'Поколение', 'Психотип'])['Инструкция'].to_dict()
|
20 |
else:
|
21 |
features[sheet_name] = df.set_index(df.columns[0]).to_dict()[df.columns[1]]
|
@@ -23,105 +29,6 @@ for sheet_name, df in data.items():
|
|
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(
|
@@ -143,11 +50,7 @@ def create_gauge(value):
|
|
143 |
},
|
144 |
number={'font': {'size': 48}} # Размер шрифта числа
|
145 |
))
|
146 |
-
#
|
147 |
-
fig.update_layout(paper_bgcolor="#f8f9fa", # Цвет фона
|
148 |
-
font={'color': "#2d3436", 'family': "Arial"}, # Цвет текста
|
149 |
-
width=250, # Уменьшенная ширина
|
150 |
-
height=150) # Уменьшенная высота
|
151 |
return fig
|
152 |
|
153 |
# Функция для генерации случайных значений спидометров
|
@@ -158,6 +61,69 @@ def generate_random_gauges():
|
|
158 |
def change_tab(id):
|
159 |
return gr.Tabs(selected=id)
|
160 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
with gr.Blocks() as demo:
|
162 |
with gr.Tabs() as tabs:
|
163 |
|
@@ -197,7 +163,6 @@ with gr.Blocks() as demo:
|
|
197 |
)
|
198 |
|
199 |
with gr.Column():
|
200 |
-
# Используем данные из Excel для выбора
|
201 |
gender = gr.Dropdown(label="Пол", choices=[None] + list(features.get('Пол', {}).keys()))
|
202 |
generation = gr.Dropdown(label="Поколение", choices=[None] + list(features.get('Поколение', {}).keys()))
|
203 |
psychotype = gr.Dropdown(label="Психотип", choices=[None] + list(features.get('Психотип', {}).keys()))
|
@@ -207,70 +172,46 @@ with gr.Blocks() as demo:
|
|
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 |
# Вкладка 2: Промпты
|
212 |
with gr.TabItem("Ассистент", id=1):
|
213 |
with gr.Row():
|
214 |
with gr.Column():
|
215 |
non_personalized_prompt = gr.Textbox(
|
216 |
-
label="
|
217 |
lines=25,
|
218 |
interactive=False)
|
219 |
with gr.Column():
|
220 |
personalized_prompt = gr.Textbox(label="Задание для редактора", lines=25) # Увеличенная высота
|
221 |
-
|
222 |
-
# Добавляем генерацию стандартного промпта при клике
|
223 |
-
btn_to_prompts.click(
|
224 |
-
fn=generate_standard_prompt,
|
225 |
-
inputs=[desc, benefits, key_message],
|
226 |
-
outputs=[non_personalized_prompt]
|
227 |
-
)
|
228 |
-
|
229 |
-
# Добавляем генерацию персонализированного промпта при клике
|
230 |
-
btn_to_prompts.click(
|
231 |
-
fn=generate_personalization_prompt,
|
232 |
-
inputs=[key_message, gender, generation, psychotype, business_stage, industry, opf],
|
233 |
-
outputs=[personalized_prompt]
|
234 |
-
)
|
235 |
|
236 |
# Вкладка 3: Сообщения
|
237 |
with gr.TabItem("Сообщения", id=2):
|
238 |
-
|
239 |
-
# Заголовки столбцов
|
240 |
with gr.Row():
|
241 |
-
gr.Markdown("### Копирайтер")
|
242 |
-
gr.Markdown("### Редактор")
|
243 |
|
244 |
-
# Первый ряд
|
245 |
with gr.Row():
|
246 |
non_personalized_1 = gr.Textbox(label="Стандартное сообщение 1", lines=4, interactive=False)
|
247 |
personalized_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=4, interactive=False)
|
248 |
|
249 |
-
# Второй ряд
|
250 |
with gr.Row():
|
251 |
non_personalized_2 = gr.Textbox(label="Стандартное сообщение 2", lines=4, interactive=False)
|
252 |
personalized_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=4, interactive=False)
|
253 |
|
254 |
-
# Третий ряд
|
255 |
with gr.Row():
|
256 |
non_personalized_3 = gr.Textbox(label="Стандартное сообщение 3", lines=4, interactive=False)
|
257 |
personalized_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=4, interactive=False)
|
258 |
|
259 |
-
|
260 |
-
|
261 |
-
btn_check = gr.Button("Проверить", elem_id="check3")
|
262 |
-
btn_check.click(fn=change_tab, inputs=[gr.Number(value=3, visible=False)], outputs=tabs)
|
263 |
|
264 |
# Вкладка 4: Проверка
|
265 |
with gr.TabItem("Проверка", id=3):
|
266 |
-
|
267 |
-
# Заголовки столбцов
|
268 |
with gr.Row():
|
269 |
gr.Markdown("### Редактор")
|
270 |
-
gr.Markdown("### Корректор")
|
271 |
-
gr.Markdown("### Аналитик")
|
272 |
|
273 |
-
# Первый ряд
|
274 |
with gr.Row():
|
275 |
personalized_message_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=5)
|
276 |
check_message_1 = gr.Textbox(label="Проверка сообщения 1", lines=5)
|
@@ -279,7 +220,6 @@ with gr.Blocks() as demo:
|
|
279 |
success_forecast_1 = gr.Plot(label="Прогноз успешности сообщения 1")
|
280 |
gr.HTML("</div>")
|
281 |
|
282 |
-
# Второй ряд
|
283 |
with gr.Row():
|
284 |
personalized_message_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=5)
|
285 |
check_message_2 = gr.Textbox(label="Проверка сообщения 2", lines=5)
|
@@ -288,7 +228,6 @@ with gr.Blocks() as demo:
|
|
288 |
success_forecast_2 = gr.Plot(label="Прогноз успешности сообщения 2")
|
289 |
gr.HTML("</div>")
|
290 |
|
291 |
-
# Третий ряд
|
292 |
with gr.Row():
|
293 |
personalized_message_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=5)
|
294 |
check_message_3 = gr.Textbox(label="Проверка сообщения 3", lines=5)
|
@@ -297,7 +236,7 @@ with gr.Blocks() as demo:
|
|
297 |
success_forecast_3 = gr.Plot(label="Прогноз успешности сообщения 3")
|
298 |
gr.HTML("</div>")
|
299 |
|
300 |
-
|
301 |
btn_check.click(fn=generate_random_gauges, inputs=[], outputs=[success_forecast_1, success_forecast_2, success_forecast_3])
|
302 |
|
303 |
demo.launch()
|
|
|
2 |
import plotly.graph_objects as go
|
3 |
import random
|
4 |
import pandas as pd
|
5 |
+
from langchain.schema import SystemMessage
|
6 |
+
from langchain_community.chat_models.gigachat import GigaChat
|
7 |
+
from openpyxl import load_workbook
|
8 |
+
|
9 |
+
# Авторизация в GigaChat Pro
|
10 |
+
gc_key = os.getenv('GC_KEY')
|
11 |
+
chat_pro = GigaChat(credentials=gc_key, model='GigaChat-Pro', max_tokens=68, temperature=1, verify_ssl_certs=False)
|
12 |
|
13 |
# Загрузка данных из Excel-файла
|
14 |
try:
|
|
|
22 |
for sheet_name, df in data.items():
|
23 |
try:
|
24 |
if sheet_name == "Пол Поколение Психотип":
|
|
|
25 |
features[sheet_name] = df.set_index(['Пол', 'Поколение', 'Психотип'])['Инструкция'].to_dict()
|
26 |
else:
|
27 |
features[sheet_name] = df.set_index(df.columns[0]).to_dict()[df.columns[1]]
|
|
|
29 |
print(f"Ошибка при обработке данных листа {sheet_name}: {e}")
|
30 |
features[sheet_name] = {}
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
# Функция для создания спидометра
|
33 |
def create_gauge(value):
|
34 |
fig = go.Figure(go.Indicator(
|
|
|
50 |
},
|
51 |
number={'font': {'size': 48}} # Размер шрифта числа
|
52 |
))
|
53 |
+
fig.update_layout(paper_bgcolor="#f8f9fa", font={'color': "#2d3436", 'family': "Arial"}, width=250, height=150)
|
|
|
|
|
|
|
|
|
54 |
return fig
|
55 |
|
56 |
# Функция для генерации случайных значений спидометров
|
|
|
61 |
def change_tab(id):
|
62 |
return gr.Tabs(selected=id)
|
63 |
|
64 |
+
# Вспомогательная функция для добавления префиксов и суффиксов
|
65 |
+
def add_prefix_suffix(prompt, prefix, suffix):
|
66 |
+
return f"{prefix}\n{prompt}\n{suffix}"
|
67 |
+
|
68 |
+
# Функция для обрезки сообщения до последнего знака препинания
|
69 |
+
def clean_message(message):
|
70 |
+
if not message.endswith(('.', '!', '?')):
|
71 |
+
last_period = max(message.rfind('.'), message.rfind('!'), message.rfind('?'))
|
72 |
+
if last_period != -1:
|
73 |
+
message = message[:last_period + 1]
|
74 |
+
return message
|
75 |
+
|
76 |
+
# Функция для генерации сообщения с GigaChat Pro
|
77 |
+
def generate_message_gigachat_pro(prompt):
|
78 |
+
try:
|
79 |
+
messages = [SystemMessage(content=prompt)]
|
80 |
+
res = chat_pro(messages)
|
81 |
+
cleaned_message = clean_message(res.content.strip())
|
82 |
+
return cleaned_message
|
83 |
+
except Exception as e:
|
84 |
+
return f"Ошибка при обращении к GigaChat-Pro: {e}"
|
85 |
+
|
86 |
+
# Функция для повторной генерации сообщения, пока оно не станет короче 250 знаков
|
87 |
+
def generate_message_gigachat_pro_with_retry(prompt):
|
88 |
+
for _ in range(10):
|
89 |
+
message = generate_message_gigachat_pro(prompt)
|
90 |
+
if len(message) <= 250:
|
91 |
+
return message
|
92 |
+
return message
|
93 |
+
|
94 |
+
# Функция для генерации всех сообщений
|
95 |
+
def generate_all_messages(non_personalized_prompt, personalized_prompt):
|
96 |
+
# Варианты предложений для начала и конца
|
97 |
+
prefixes = [
|
98 |
+
"Начни сообщение с призыва к действию с продуктом.",
|
99 |
+
"Начни сообщение с указания на пользу продукта. Используй глагол в побудительном наклонении.",
|
100 |
+
"Начни сообщение с вопроса, который указывает на пользу продукта для клиента."
|
101 |
+
]
|
102 |
+
suffixes = [
|
103 |
+
"Убедись, что готовый текст начинается с призыва к действию с продуктом.",
|
104 |
+
"Убедись, что готовый текст начинается с указания на пользу продукта и использования глагола в побудительном наклонении.",
|
105 |
+
"Убедись, что готовый текст начинается с вопроса, который указывает на пользу продукта для клиента."
|
106 |
+
]
|
107 |
+
|
108 |
+
non_personalized_messages = []
|
109 |
+
personalized_messages = []
|
110 |
+
|
111 |
+
# Генерация трех неперсонализированных сообщений
|
112 |
+
for i in range(3):
|
113 |
+
prompt = add_prefix_suffix(non_personalized_prompt, prefixes[i], suffixes[i])
|
114 |
+
message = generate_message_gigachat_pro_with_retry(prompt)
|
115 |
+
non_personalized_messages.append(message)
|
116 |
+
|
117 |
+
# Генерация трех персонализированных сообщений
|
118 |
+
for i in range(3):
|
119 |
+
full_personalized_prompt = f"{personalized_prompt}\n\nТекст для адаптации: {non_personalized_messages[i]}"
|
120 |
+
prompt = add_prefix_suffix(full_personalized_prompt, prefixes[i], suffixes[i])
|
121 |
+
message = generate_message_gigachat_pro_with_retry(prompt)
|
122 |
+
personalized_messages.append(message)
|
123 |
+
|
124 |
+
return non_personalized_messages, personalized_messages
|
125 |
+
|
126 |
+
# Интерфейс Gradio
|
127 |
with gr.Blocks() as demo:
|
128 |
with gr.Tabs() as tabs:
|
129 |
|
|
|
163 |
)
|
164 |
|
165 |
with gr.Column():
|
|
|
166 |
gender = gr.Dropdown(label="Пол", choices=[None] + list(features.get('Пол', {}).keys()))
|
167 |
generation = gr.Dropdown(label="Поколение", choices=[None] + list(features.get('Поколение', {}).keys()))
|
168 |
psychotype = gr.Dropdown(label="Психотип", choices=[None] + list(features.get('Психотип', {}).keys()))
|
|
|
172 |
|
173 |
btn_to_prompts = gr.Button("Создать")
|
174 |
btn_to_prompts.click(fn=change_tab, inputs=[gr.Number(value=1, visible=False)], outputs=tabs)
|
175 |
+
|
176 |
# Вкладка 2: Промпты
|
177 |
with gr.TabItem("Ассистент", id=1):
|
178 |
with gr.Row():
|
179 |
with gr.Column():
|
180 |
non_personalized_prompt = gr.Textbox(
|
181 |
+
label="Неперсонализированный промпт",
|
182 |
lines=25,
|
183 |
interactive=False)
|
184 |
with gr.Column():
|
185 |
personalized_prompt = gr.Textbox(label="Задание для редактора", lines=25) # Увеличенная высота
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
|
187 |
# Вкладка 3: Сообщения
|
188 |
with gr.TabItem("Сообщения", id=2):
|
|
|
|
|
189 |
with gr.Row():
|
190 |
+
gr.Markdown("### Копирайтер")
|
191 |
+
gr.Markdown("### Редактор")
|
192 |
|
|
|
193 |
with gr.Row():
|
194 |
non_personalized_1 = gr.Textbox(label="Стандартное сообщение 1", lines=4, interactive=False)
|
195 |
personalized_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=4, interactive=False)
|
196 |
|
|
|
197 |
with gr.Row():
|
198 |
non_personalized_2 = gr.Textbox(label="Стандартное сообщение 2", lines=4, interactive=False)
|
199 |
personalized_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=4, interactive=False)
|
200 |
|
|
|
201 |
with gr.Row():
|
202 |
non_personalized_3 = gr.Textbox(label="Стандартное сообщение 3", lines=4, interactive=False)
|
203 |
personalized_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=4, interactive=False)
|
204 |
|
205 |
+
btn_generate_messages = gr.Button("Генерировать сообщения")
|
206 |
+
btn_generate_messages.click(fn=generate_all_messages, inputs=[non_personalized_prompt, personalized_prompt], outputs=[non_personalized_1, personalized_1, non_personalized_2, personalized_2, non_personalized_3, personalized_3])
|
|
|
|
|
207 |
|
208 |
# Вкладка 4: Проверка
|
209 |
with gr.TabItem("Проверка", id=3):
|
|
|
|
|
210 |
with gr.Row():
|
211 |
gr.Markdown("### Редактор")
|
212 |
+
gr.Markdown("### Корректор")
|
213 |
+
gr.Markdown("### Аналитик")
|
214 |
|
|
|
215 |
with gr.Row():
|
216 |
personalized_message_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=5)
|
217 |
check_message_1 = gr.Textbox(label="Проверка сообщения 1", lines=5)
|
|
|
220 |
success_forecast_1 = gr.Plot(label="Прогноз успешности сообщения 1")
|
221 |
gr.HTML("</div>")
|
222 |
|
|
|
223 |
with gr.Row():
|
224 |
personalized_message_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=5)
|
225 |
check_message_2 = gr.Textbox(label="Проверка сообщения 2", lines=5)
|
|
|
228 |
success_forecast_2 = gr.Plot(label="Прогноз успешности сообщения 2")
|
229 |
gr.HTML("</div>")
|
230 |
|
|
|
231 |
with gr.Row():
|
232 |
personalized_message_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=5)
|
233 |
check_message_3 = gr.Textbox(label="Проверка сообщения 3", lines=5)
|
|
|
236 |
success_forecast_3 = gr.Plot(label="Прогноз успешности сообщения 3")
|
237 |
gr.HTML("</div>")
|
238 |
|
239 |
+
btn_check = gr.Button("Проверить")
|
240 |
btn_check.click(fn=generate_random_gauges, inputs=[], outputs=[success_forecast_1, success_forecast_2, success_forecast_3])
|
241 |
|
242 |
demo.launch()
|