Spaces:
Running
Running
""" | |
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", | |
) | |