Spaces:
Sleeping
Sleeping
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() |