File size: 9,641 Bytes
04c268e
2fe1da4
04c268e
15a7be8
 
cc4b607
9192fe9
cc4b607
 
 
7eb0855
9192fe9
29f5b29
3158ca9
9192fe9
 
15a7be8
 
 
 
 
 
2fe1da4
9192fe9
 
3158ca9
2fe1da4
 
cc4b607
9192fe9
 
 
 
 
 
 
2fe1da4
 
9192fe9
 
3158ca9
9192fe9
 
3158ca9
 
 
 
 
9192fe9
cc4b607
9192fe9
 
 
cc4b607
9192fe9
3158ca9
 
cc4b607
3158ca9
 
9192fe9
3158ca9
cc4b607
9192fe9
 
cc4b607
9192fe9
 
 
 
 
cc4b607
 
 
 
9192fe9
3158ca9
2fe1da4
8976186
b033846
2fe1da4
8837319
2fe1da4
 
 
 
 
 
 
8837319
4fdbb1d
 
 
 
8837319
 
29f5b29
cc4b607
8837319
bdd1b10
8837319
bdd1b10
8837319
4fdbb1d
15a7be8
 
 
 
 
 
2fe1da4
4fdbb1d
 
cc4b607
 
 
 
 
 
9192fe9
2b67471
9192fe9
 
 
 
 
3158ca9
2818eb7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15a7be8
 
4fdbb1d
2fe1da4
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
160
161
162
163
164
165
166
167
168
169
import gradio as gr
import pandas as pd

# Функция для загрузки данных из вкладок Excel
def load_dropdown_data(file_path, sheet_name, column_name):
    """Загружает уникальные значения из столбца на заданной вкладке и добавляет 'Не выбрано'."""
    data = pd.read_excel(file_path, sheet_name=sheet_name)
    unique_values = data[column_name].dropna().unique().tolist()
    unique_values = ["Не выбрано"] + unique_values  # Добавляем 'Не выбрано' в начало списка
    return unique_values

# Путь к файлу
file_path = "Исходные данные.xlsx"

# Загрузка данных
products, data_products = load_dropdown_data(file_path, "Продукты", "Наименование продукта"), pd.read_excel(file_path, sheet_name="Продукты")
genders = load_dropdown_data(file_path, "Пол", "Пол")
generations = load_dropdown_data(file_path, "Поколение", "Поколение")
psychotypes = load_dropdown_data(file_path, "Психотип", "Психотип")
business_stages = load_dropdown_data(file_path, "Стадия бизнеса", "Стадия бизнеса")
industries = load_dropdown_data(file_path, "Отрасль", "Отрасль")
opfs = load_dropdown_data(file_path, "ОПФ", "ОПФ")

# Загрузка данных для "Подход"
approaches_data = pd.read_excel(file_path, sheet_name="Подход")

# Функция для заполнения полей на основе выбранного продукта
def fill_product_details(selected_product, data):
    if selected_product and selected_product != "Не выбрано":
        product_row = data[data["Наименование продукта"] == selected_product].iloc[0]
        return (
            product_row.get("Описание предложения", ""),
            product_row.get("Наименование продукта", ""),
            product_row.get("Преимущества", ""),
            product_row.get("Ключевое сообщение", "")
        )
    return "", "", "", ""

# Функция для получения списка подходов
def get_approaches(gender, generation, psychotype, approaches_df):
    if approaches_df is None or approaches_df.empty:
        return "Таблица 'Подход' не найдена."

    filters = []
    for param_name, param_value in [('Пол', gender), ('Поколение', generation), ('Психотип', psychotype)]:
        if param_value:
            filters.append(approaches_df[param_name].fillna('') == param_value)
        else:
            filters.append(approaches_df[param_name].isnull() | (approaches_df[param_name].fillna('') == ''))

    combined_filter = filters[0]
    for f in filters[1:]:
        combined_filter &= f

    matching_rows = approaches_df[combined_filter]
    if matching_rows.empty:
        return "Подход не найден для выбранных параметров."

    approach_list = []
    for approaches in matching_rows['Подход']:
        approach_names = [a.strip() for a in str(approaches).split(',')]
        approach_list.extend(approach_names)

    # Убираем дубликаты
    approach_list = list(set(approach_list))

    selected_approaches_text_content = ', '.join(approach_list)
    return selected_approaches_text_content

# Функция-обёртка для обновления подхода
def update_approach(gender, generation, psychotype):
    # Заменяем 'Не выбрано' на None
    gender = None if gender == "Не выбрано" else gender
    generation = None if generation == "Не выбрано" else generation
    psychotype = None if psychotype == "Не выбрано" else psychotype
    return get_approaches(gender, generation, psychotype, approaches_data)

# Создание интерфейса
with gr.Blocks(theme="default") as demo:
    gr.Markdown("**Процент созданных SMS по выбранному продукту**")
    
    # Прогресс-бар
    progress_bar_html = """
    <div style="width: 100%; background-color: #e0e0e0; border-radius: 10px; overflow: hidden;">
        <div style="width: 0%; background-color: #4caf50; height: 20px; text-align: center; color: white;">
            0%
        </div>
    </div>
    """
    gr.HTML(progress_bar_html)
    
    with gr.Row():
        with gr.Column(scale=1):
            gr.Markdown("**Продукт**")
            product_dropdown = gr.Dropdown(
                label="Продукт", 
                choices=products,
                value="Не выбрано"  # Устанавливаем 'Не выбрано' как значение по умолчанию
            )
            description = gr.Textbox(label="Описание предложения", lines=5, value="")
            product_name = gr.Textbox(label="Наименование продукта", lines=1, value="")
            benefits = gr.Textbox(label="Преимущества", lines=9, value="")
            key_message = gr.Textbox(label="Ключевое сообщение", lines=2, value="")
        
            # Обработчик выбора продукта
            product_dropdown.change(
                fn=lambda selected: fill_product_details(selected, data_products),
                inputs=[product_dropdown],
                outputs=[description, product_name, benefits, key_message]
            )
        
        with gr.Column(scale=1):
            gr.Markdown("**Клиент**")
            gender_dropdown = gr.Dropdown(label="Пол", choices=genders, value="Не выбрано")
            generation_dropdown = gr.Dropdown(label="Поколение", choices=generations, value="Не выбрано")
            psychotype_dropdown = gr.Dropdown(label="Психотип", choices=psychotypes, value="Не выбрано")
            business_stage_dropdown = gr.Dropdown(label="Стадия бизнеса", choices=business_stages, value="Не выбрано")
            industry_dropdown = gr.Dropdown(label="Отрасль", choices=industries, value="Не выбрано")
            opf_dropdown = gr.Dropdown(label="ОПФ", choices=opfs, value="Не выбрано")
            chosen_approach = gr.Textbox(label="Выбранный подход", lines=1, value="")
            presence_in_db = gr.Textbox(label="Наличие в базе", lines=1, value="", interactive=False)
            
            # При изменении Пол, Поколение, Психотип вызываем update_approach
            gender_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
            generation_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])
            psychotype_dropdown.change(fn=update_approach, inputs=[gender_dropdown, generation_dropdown, psychotype_dropdown], outputs=[chosen_approach])

    # Кнопки: Вернуть параметры, Создать персонализированное SMS
    with gr.Row():
        return_params_btn = gr.Button("Вернуть параметры предыдущего запроса")
        create_personal_sms_btn = gr.Button("Создать персонализированное SMS")
    
    # Блок для Модель 1, Промпт 1, SMS 1
    with gr.Row():
        with gr.Column():
            model_1_name = gr.Textbox(label="Модель 1", value="Скрыто для слепого тестирования", interactive=False)
            prompt_1 = gr.Textbox(label="Промпт 1", value="Скрыто для слепого тестирования", interactive=False)
            sms_1 = gr.Textbox(label="SMS 1", lines=3, value="")
        
        # Блок для Модель 2, Промпт 2, SMS 2
        with gr.Column():
            model_2_name = gr.Textbox(label="Модель 2", value="Скрыто для слепого тестирования", interactive=False)
            prompt_2 = gr.Textbox(label="Промпт 2", value="Скрыто для слепого тестирования", interactive=False)
            sms_2 = gr.Textbox(label="SMS 2", lines=3, value="")
    
    # Кнопки выбора SMS
    with gr.Row():
        prefer_sms_1_btn = gr.Button("Я предпочитаю это SMS")
        prefer_sms_2_btn = gr.Button("Я предпочитаю это SMS")

    # Кнопка "Перегенерировать SMS"
    regen_btn = gr.Button("Перегенерировать SMS (не нравится ни одно из SMS)")
    
    # Комментарии к SMS 1 и 2
    with gr.Row():
        comment_sms_1 = gr.Textbox(label="Комментарий к SMS 1", lines=2, value="")
        comment_sms_2 = gr.Textbox(label="Комментарий к SMS 2", lines=2, value="")
    
    # Откорректированные SMS
    with gr.Row():
        corrected_sms_1 = gr.Textbox(label="Откорректированное SMS 1", lines=3, value="")
        corrected_sms_2 = gr.Textbox(label="Откорректированное SMS 2", lines=3, value="")
    
    # Кнопки сохранения
    with gr.Row():
        save_sms_1_btn = gr.Button("Сохранить в базу")
        save_sms_2_btn = gr.Button("Сохранить в базу")
    
    demo.launch()