File size: 9,129 Bytes
f154467
235357d
10f64b7
c250f7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235357d
e9254f3
235357d
 
 
 
 
 
 
 
d196f5f
235357d
d196f5f
235357d
 
 
 
 
 
 
 
 
593d3df
 
 
 
5731d63
235357d
 
10f64b7
 
 
7721ac8
5c41f19
d1bdca6
6711778
783515c
7ce2a54
11d46da
5c41f19
593d3df
 
 
 
b1fd5e3
593d3df
 
 
c250f7e
 
 
 
 
 
 
593d3df
 
 
 
 
 
 
 
ae090c3
593d3df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1eaf6bf
593d3df
4c358e9
 
5c08b1a
 
 
 
593d3df
 
5c08b1a
df1915c
 
593d3df
 
460c086
 
 
 
df1915c
 
 
593d3df
 
460c086
 
 
 
df1915c
 
 
593d3df
460c086
 
 
 
 
9bada96
 
 
1eaf6bf
ae090c3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
import gradio as gr
import plotly.graph_objects as go
import random
import pandas as pd

# Загрузка данных из Excel-файла
try:
    data = pd.read_excel('Признаки.xlsx', sheet_name=None)
except Exception as e:
    print(f"Ошибка при загрузке Excel-файла: {e}")
    data = {}

# Создание списка признаков и их значений
features = {}
for sheet_name, df in data.items():
    try:
        if sheet_name == "Пол Поколение Психотип":
            # Создаем словарь, где ключи — это кортежи (Пол, Поколение, Психотип), а значения — инструкции
            features[sheet_name] = df.set_index(['Пол', 'Поколение', 'Психотип'])['Инструкция'].to_dict()
        else:
            features[sheet_name] = df.set_index(df.columns[0]).to_dict()[df.columns[1]]
    except Exception as e:
        print(f"Ошибка при обработке данных листа {sheet_name}: {e}")
        features[sheet_name] = {}

# Функция для создания спидометра
def create_gauge(value):
    fig = go.Figure(go.Indicator(
        mode="gauge+number",
        value=value,
        gauge={
            'axis': {'range': [0, 100]},
            'bar': {'color': "black"},  # Цвет стрелки
            'steps': [
                {'range': [0, 40], 'color': "#55efc4"},  # Мягкий зеленый
                {'range': [40, 70], 'color': "#ffeaa7"},  # Желтый
                {'range': [70, 100], 'color': "#ff7675"}  # Мягкий красный
            ],
            'threshold': {
                'line': {'color': "black", 'width': 4},
                'thickness': 0.75,
                'value': value
            }
        },
        number={'font': {'size': 48}}  # Размер шрифта числа
    ))
    # Изменение размеров спидометра и центровка
    fig.update_layout(paper_bgcolor="#f8f9fa",  # Цвет фона
                      font={'color': "#2d3436", 'family': "Arial"},  # Цвет текста
                      width=250,  # Уменьшенная ширина
                      height=150)  # Уменьшенная высота
    return fig

# Функция для генерации случайных значений спидометров
def generate_random_gauges():
    return create_gauge(random.randint(60, 90)), create_gauge(random.randint(60, 90)), create_gauge(random.randint(60, 90))

# Функция для смены вкладки
def change_tab(id):
    return gr.Tabs(selected=id)

with gr.Blocks() as demo:
    with gr.Tabs() as tabs:
        
        # Вкладка 1: Исходные данные
        with gr.TabItem("Исходные данные", id=0):
            with gr.Row():
                with gr.Column():
                    desc = gr.Textbox(label="Описание предложения", lines=6)  # Увеличенная высота
                    benefits = gr.Textbox(label="Преимущества", lines=5)  # Увеличенная высота
                    key_message = gr.Textbox(label="Ключевое сообщение", lines=5)  # Увеличенная высота
                with gr.Column():
                    # Используем данные из Excel для выбора
                    gender = gr.Dropdown(label="Пол", choices=[None] + list(features.get('Пол', {}).keys()))
                    generation = gr.Dropdown(label="Поколение", choices=[None] + list(features.get('Поколение', {}).keys()))
                    psychotype = gr.Dropdown(label="Психотип", choices=[None] + list(features.get('Психотип', {}).keys()))
                    business_stage = gr.Dropdown(label="Стадия бизнеса", choices=[None] + list(features.get('Стадия бизнеса', {}).keys()))
                    industry = gr.Dropdown(label="Отрасль", choices=[None] + list(features.get('Отрасль', {}).keys()))
                    opf = gr.Dropdown(label="ОПФ", choices=[None] + list(features.get('ОПФ', {}).keys()))

            btn_to_prompts = gr.Button("Создать")
            btn_to_prompts.click(fn=change_tab, inputs=[gr.Number(value=1, visible=False)], outputs=tabs)
        
        # Вкладка 2: Промпты
        with gr.TabItem("Ассистент", id=1):
            with gr.Row():
                with gr.Column():
                    non_personalized_prompt = gr.Textbox(label="Задание для копирайтера", lines=25)  # Увеличенная высота
                with gr.Column():
                    personalized_prompt = gr.Textbox(label="Задание для редактора", lines=25)  # Увеличенная высота
            
        # Вкладка 3: Сообщения
        with gr.TabItem("Сообщения", id=2):

            # Заголовки столбцов
            with gr.Row():
                gr.Markdown("### Копирайтер")  # Название для столбца "Копирайтер"
                gr.Markdown("### Редактор")  # Название для столбца "Редактор"
                
            # Первый ряд
            with gr.Row():
                non_personalized_1 = gr.Textbox(label="Стандартное сообщение 1", lines=4, interactive=False)
                personalized_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=4, interactive=False)

            # Второй ряд
            with gr.Row():
                non_personalized_2 = gr.Textbox(label="Стандартное сообщение 2", lines=4, interactive=False)
                personalized_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=4, interactive=False)

            # Третий ряд
            with gr.Row():
                non_personalized_3 = gr.Textbox(label="Стандартное сообщение 3", lines=4, interactive=False)
                personalized_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=4, interactive=False)

            # Четвертый ряд
            with gr.Row():
                btn_check = gr.Button("Проверить", elem_id="check3")
                btn_check.click(fn=change_tab, inputs=[gr.Number(value=3, visible=False)], outputs=tabs)

        # Вкладка 4: Проверка
        with gr.TabItem("Проверка", id=3):
            
            # Заголовки столбцов
            with gr.Row():
                gr.Markdown("")
                gr.Markdown("### Корректор")  # Название для столбца "Копирайтер"
                gr.Markdown("### Аналитик")  # Название для столбца "Редактор"
                
            # Первый ряд
            with gr.Row():
                personalized_message_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=5)
                check_message_1 = gr.Textbox(label="Проверка сообщения 1", lines=5)
                with gr.Column():
                    gr.HTML("<div style='display:flex; justify-content:center; width:100%;'>")
                    success_forecast_1 = gr.Plot(label="Прогноз успешности сообщения 1")
                    gr.HTML("</div>")
            
            # Второй ряд
            with gr.Row():
                personalized_message_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=5)
                check_message_2 = gr.Textbox(label="Проверка сообщения 2", lines=5)
                with gr.Column():
                    gr.HTML("<div style='display:flex; justify-content:center; width:100%;'>")
                    success_forecast_2 = gr.Plot(label="Прогноз успешности сообщения 2")
                    gr.HTML("</div>")
            
            # Третий ряд
            with gr.Row():
                personalized_message_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=5)
                check_message_3 = gr.Textbox(label="Проверка сообщения 3", lines=5)              
                with gr.Column():
                    gr.HTML("<div style='display:flex; justify-content:center; width:100%;'>")
                    success_forecast_3 = gr.Plot(label="Прогноз успешности сообщения 3")
                    gr.HTML("</div>")
                
            # Кнопка для обновления спидометров
            btn_check.click(fn=generate_random_gauges, inputs=[], outputs=[success_forecast_1, success_forecast_2, success_forecast_3])

demo.launch()