Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
# Функция для загрузки данных из вкладок Excel | |
def load_dropdown_data(file_path, sheet_name, column_name): | |
"""Загружает уникальные значения из столбца на заданной вкладке и добавляет вариант 'Не выбрано'.""" | |
try: | |
data = pd.read_excel(file_path, sheet_name=sheet_name) | |
values = ["Не выбрано"] + data[column_name].dropna().unique().tolist() | |
print(f"Загружено для '{sheet_name}' столбца '{column_name}': {values}") | |
return values | |
except Exception as e: | |
print(f"Ошибка загрузки данных из листа '{sheet_name}': {e}") | |
return ["Не выбрано"] | |
# Путь к файлу Excel | |
file_path = "Исходные данные.xlsx" | |
# Загрузка данных из всех вкладок | |
products = load_dropdown_data(file_path, "Продукты", "Наименование продукта") | |
data_products = 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, "ОПФ", "ОПФ") | |
# Функция для заполнения полей на основе выбранного продукта | |
def fill_product_details(selected_product, data): | |
if selected_product and selected_product != "Не выбрано": | |
product_row = data[data["Наименование продукта"] == selected_product].iloc[0] | |
return ( | |
product_row["Описание предложения"], | |
product_row["Наименование продукта"], | |
product_row["Преимущества"], | |
product_row["Ключевое сообщение"] | |
) | |
return "", "", "", "" | |
# Создание интерфейса | |
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) | |
# Кнопки: Вернуть параметры, Создать персонализированное 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() |