""" File: tabs.py Author: Elena Ryumina and Dmitry Ryumin Description: Gradio app tabs - Contains the definition of various tabs for the Gradio app interface. License: MIT License """ import gradio as gr # Importing necessary components for the Gradio app from app.description import DESCRIPTION from app.description_steps import STEP_1, STEP_2 from app.mbti_description import MBTI_DESCRIPTION, MBTI_DATA from app.app import APP from app.authors import AUTHORS from app.requirements_app import read_requirements_to_df from app.config import config_data from app.practical_tasks import supported_practical_tasks from app.utils import read_csv_file, extract_profession_weights from app.components import ( html_message, files_create_ui, video_create_ui, button, dataframe, radio_create_ui, number_create_ui, dropdown_create_ui, textbox_create_ui, ) def app_tab(): gr.Markdown(value=DESCRIPTION) gr.HTML(value=STEP_1) with gr.Row(): files = files_create_ui(file_types=[".mp4"]) video = video_create_ui() with gr.Row(): examples = button( config_data.OtherMessages_EXAMPLES_APP, True, 1, "./images/examples.ico", True, "examples_oceanai", ) calculate_pt_scores = button( config_data.OtherMessages_CALCULATE_PT_SCORES, False, 3, "./images/calculate_pt_scores.ico", True, "calculate_oceanai", ) clear_app = button( config_data.OtherMessages_CLEAR_APP, False, 1, "./images/clear.ico", True, "clear_oceanai", ) notifications = html_message(config_data.InformationMessages_NOTI_VIDEOS, False) pt_scores = dataframe(visible=False) csv_pt_scores = files_create_ui( None, "single", [".csv"], config_data.OtherMessages_EXPORT_PT_SCORES, True, False, False, "csv-container", ) step_2 = gr.HTML(value=STEP_2, visible=False) first_practical_task = next(iter(supported_practical_tasks)) with gr.Column(scale=1, visible=False, render=True) as practical_tasks_column: practical_tasks = radio_create_ui( first_practical_task, config_data.Labels_PRACTICAL_TASKS_LABEL, list(map(str, supported_practical_tasks.keys())), config_data.InformationMessages_PRACTICAL_TASKS_INFO, True, True, ) practical_subtasks = radio_create_ui( supported_practical_tasks[first_practical_task][0], config_data.Labels_PRACTICAL_SUBTASKS_LABEL, supported_practical_tasks[first_practical_task], config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO, True, True, ) with gr.Row( visible=False, render=True, variant="default", elem_classes="settings-container", ) as settings_practical_tasks: dropdown_mbti = dropdown_create_ui( label=f"Potential candidates by Personality Type of MBTI ({len(config_data.Settings_DROPDOWN_MBTI)})", info=config_data.InformationMessages_DROPDOWN_MBTI_INFO, choices=config_data.Settings_DROPDOWN_MBTI, value=config_data.Settings_DROPDOWN_MBTI[0], visible=False, elem_classes="dropdown-container", ) threshold_mbti = number_create_ui( value=0.5, minimum=0.0, maximum=1.0, step=0.01, label=config_data.Labels_THRESHOLD_MBTI_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) threshold_professional_skills = number_create_ui( value=0.45, minimum=0.0, maximum=1.0, step=0.01, label=config_data.Labels_THRESHOLD_PROFESSIONAL_SKILLS_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) dropdown_professional_skills = dropdown_create_ui( label=f"Professional skills ({len(config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS)})", info=config_data.InformationMessages_DROPDOWN_PROFESSIONAL_SKILLS_INFO, choices=config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS, value=config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS[0], visible=False, elem_classes="dropdown-container", ) target_score_ope = number_create_ui( value=config_data.Values_TARGET_SCORES[0], minimum=0.0, maximum=1.0, step=0.000001, label=config_data.Labels_TARGET_SCORE_OPE_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) target_score_con = number_create_ui( value=config_data.Values_TARGET_SCORES[1], minimum=0.0, maximum=1.0, step=0.000001, label=config_data.Labels_TARGET_SCORE_CON_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) target_score_ext = number_create_ui( value=config_data.Values_TARGET_SCORES[2], minimum=0.0, maximum=1.0, step=0.000001, label=config_data.Labels_TARGET_SCORE_EXT_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) target_score_agr = number_create_ui( value=config_data.Values_TARGET_SCORES[3], minimum=0.0, maximum=1.0, step=0.000001, label=config_data.Labels_TARGET_SCORE_AGR_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) target_score_nneu = number_create_ui( value=config_data.Values_TARGET_SCORES[4], minimum=0.0, maximum=1.0, step=0.000001, label=config_data.Labels_TARGET_SCORE_NNEU_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) equal_coefficient = number_create_ui( value=0.5, minimum=0.0, maximum=1.0, step=0.01, label=config_data.Labels_EQUAL_COEFFICIENT_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) df_correlation_coefficients = read_csv_file( config_data.Links_CAR_CHARACTERISTICS, ["Trait", "Style and performance", "Safety and practicality"], ) number_priority = number_create_ui( value=1, minimum=1, maximum=df_correlation_coefficients.columns.size, step=1, label=config_data.Labels_NUMBER_PRIORITY_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format( 1, df_correlation_coefficients.columns.size ), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) number_importance_traits = number_create_ui( value=1, minimum=1, maximum=5, step=1, label=config_data.Labels_NUMBER_IMPORTANCE_TRAITS_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(1, 5), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) threshold_consumer_preferences = number_create_ui( value=0.55, minimum=0.0, maximum=1.0, step=0.01, label=config_data.Labels_THRESHOLD_CONSUMER_PREFERENCES_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0), show_label=True, interactive=True, visible=False, render=True, elem_classes="number-container", ) dropdown_candidates = dropdown_create_ui( label=f"Potential candidates by professional responsibilities ({len(config_data.Settings_DROPDOWN_CANDIDATES)})", info=config_data.InformationMessages_DROPDOWN_CANDIDATES_INFO, choices=config_data.Settings_DROPDOWN_CANDIDATES, value=config_data.Settings_DROPDOWN_CANDIDATES[0], visible=False, elem_classes="dropdown-container", ) df_traits_priority_for_professions = read_csv_file( config_data.Links_PROFESSIONS ) weights_professions, interactive_professions = extract_profession_weights( df_traits_priority_for_professions, config_data.Settings_DROPDOWN_CANDIDATES[0], ) number_openness = number_create_ui( value=weights_professions[0], minimum=config_data.Values_0_100[0], maximum=config_data.Values_0_100[1], step=1, label=config_data.Labels_NUMBER_IMPORTANCE_OPE_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format( config_data.Values_0_100[0], config_data.Values_0_100[1] ), show_label=True, interactive=interactive_professions, visible=False, render=True, elem_classes="number-container", ) number_conscientiousness = number_create_ui( value=weights_professions[1], minimum=config_data.Values_0_100[0], maximum=config_data.Values_0_100[1], step=1, label=config_data.Labels_NUMBER_IMPORTANCE_CON_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format( config_data.Values_0_100[0], config_data.Values_0_100[1] ), show_label=True, interactive=interactive_professions, visible=False, render=True, elem_classes="number-container", ) number_extraversion = number_create_ui( value=weights_professions[2], minimum=config_data.Values_0_100[0], maximum=config_data.Values_0_100[1], step=1, label=config_data.Labels_NUMBER_IMPORTANCE_EXT_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format( config_data.Values_0_100[0], config_data.Values_0_100[1] ), show_label=True, interactive=interactive_professions, visible=False, render=True, elem_classes="number-container", ) number_agreeableness = number_create_ui( value=weights_professions[3], minimum=config_data.Values_0_100[0], maximum=config_data.Values_0_100[1], step=1, label=config_data.Labels_NUMBER_IMPORTANCE_AGR_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format( config_data.Values_0_100[0], config_data.Values_0_100[1] ), show_label=True, interactive=interactive_professions, visible=False, render=True, elem_classes="number-container", ) number_non_neuroticism = number_create_ui( value=weights_professions[4], minimum=config_data.Values_0_100[0], maximum=config_data.Values_0_100[1], step=1, label=config_data.Labels_NUMBER_IMPORTANCE_NNEU_LABEL, info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format( config_data.Values_0_100[0], config_data.Values_0_100[1] ), show_label=True, interactive=interactive_professions, visible=False, render=True, elem_classes="number-container", ) calculate_practical_task = button( config_data.OtherMessages_CALCULATE_PRACTICAL_TASK, True, 1, "./images/pt.ico", False, "calculate_practical_task", ) with gr.Row( visible=False, render=True, variant="default", ) as sorted_videos: with gr.Column(scale=1, visible=False, render=True) as sorted_videos_column: practical_task_sorted = dataframe(visible=False) with gr.Accordion( label=config_data.Labels_NOTE_MBTI_LABEL, open=False, visible=False, ) as mbti_accordion: mbti_description = gr.HTML(value=MBTI_DESCRIPTION, visible=False) mbti_description_data = dataframe( headers=MBTI_DATA.columns.tolist(), values=MBTI_DATA.values.tolist(), visible=False, elem_classes="mbti-dataframe", ) csv_practical_task_sorted = files_create_ui( None, "single", [".csv"], config_data.OtherMessages_EXPORT_PS, True, False, False, "csv-container", ) with gr.Column( scale=1, visible=False, render=True, elem_classes="video-column-container", ) as video_sorted_column: video_sorted = video_create_ui( visible=False, elem_classes="video-sorted-container" ) with gr.Column(scale=1, visible=False, render=True) as metadata: with gr.Row( visible=False, render=True, variant="default" ) as metadata_1: with gr.Row( visible=False, render=True, variant="default", elem_classes="name-container", ) as name_row: name_logo = gr.Image( value="images/name.svg", container=False, interactive=False, show_label=False, visible=False, show_download_button=False, elem_classes="metadata_name-logo", ) name = textbox_create_ui( "First name", "text", "First name", None, None, 1, True, False, False, False, 1, False, ) with gr.Row( visible=False, render=True, variant="default", elem_classes="surname-container", ) as surname_row: surname_logo = gr.Image( value="images/name.svg", container=False, interactive=False, show_label=False, visible=False, show_download_button=False, elem_classes="metadata_surname-logo", ) surname = textbox_create_ui( "Last name", "text", "Last name", None, None, 1, True, False, False, False, 1, False, ) with gr.Row( visible=False, render=True, variant="default" ) as metadata_2: with gr.Row( visible=False, render=True, variant="default", elem_classes="email-container", ) as email_row: email_logo = gr.Image( value="images/email.svg", container=False, interactive=False, show_label=False, visible=False, show_download_button=False, elem_classes="metadata_email-logo", ) email = textbox_create_ui( "example@example.com", "email", "Email", None, None, 1, True, False, False, False, 1, False, ) with gr.Row( visible=False, render=True, variant="default", elem_classes="phone-container", ) as phone_row: phone_logo = gr.Image( value="images/phone.svg", container=False, interactive=False, show_label=False, visible=False, show_download_button=False, elem_classes="metadata_phone-logo", ) phone = textbox_create_ui( "+1 (555) 123-4567", "text", "Phone number", None, None, 1, True, False, False, False, 1, False, ) practical_subtasks_selected = gr.JSON( value={ str(task): supported_practical_tasks.get(task, [None])[0] for task in supported_practical_tasks.keys() }, visible=False, render=True, ) in_development = html_message( config_data.InformationMessages_NOTI_IN_DEV, False, False ) return ( notifications, files, video, examples, calculate_pt_scores, clear_app, pt_scores, csv_pt_scores, step_2, practical_tasks, practical_subtasks, settings_practical_tasks, dropdown_mbti, threshold_mbti, threshold_professional_skills, dropdown_professional_skills, target_score_ope, target_score_con, target_score_ext, target_score_agr, target_score_nneu, equal_coefficient, number_priority, number_importance_traits, threshold_consumer_preferences, dropdown_candidates, number_openness, number_conscientiousness, number_extraversion, number_agreeableness, number_non_neuroticism, calculate_practical_task, practical_subtasks_selected, practical_tasks_column, sorted_videos, sorted_videos_column, practical_task_sorted, csv_practical_task_sorted, mbti_accordion, mbti_description, mbti_description_data, video_sorted_column, video_sorted, metadata, metadata_1, name_row, name_logo, name, surname_row, surname_logo, surname, metadata_2, email_row, email_logo, email, phone_row, phone_logo, phone, in_development, ) def about_app_tab(): return gr.HTML(value=APP) def about_authors_tab(): return gr.HTML(value=AUTHORS) def requirements_app_tab(): requirements_df = read_requirements_to_df() return dataframe( headers=requirements_df.columns.tolist(), values=requirements_df.values.tolist(), visible=True, elem_classes="requirements-dataframe", )