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 = """
""" 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()