from __future__ import annotations import gradio as gr import pandas as pd from .leaderboard_category import ( filter_leaderboard, style_leaderboard, ) TASK_DISPLAY_COLUMNS = ["Org", "Model", "Size", "Overall", "MCQ", "Y/N", "Open"] def render_task_leaderboard( leaderboard_df: pd.DataFrame, search_query: str, selected_split: str, selected_types: list[str], selected_size_ranges: list[str], selected_families: list[str], ): filtered = filter_leaderboard( leaderboard_df, TASK_DISPLAY_COLUMNS, search_query, selected_split, selected_types, selected_size_ranges, selected_families, ) return style_leaderboard(filtered, TASK_DISPLAY_COLUMNS) def update_split_task_leaderboards( leaderboard_df: pd.DataFrame, search_query: str, selected_types: list[str], selected_size_ranges: list[str], selected_families: list[str], ): return ( render_task_leaderboard( leaderboard_df, search_query, "Test", selected_types, selected_size_ranges, selected_families, ), render_task_leaderboard( leaderboard_df, search_query, "Validation", selected_types, selected_size_ranges, selected_families, ), ) def render_leaderboard_task_tab( leaderboard_df: pd.DataFrame, search_box, type_filter, size_filter, family_filter, ) -> None: initial_test_table_value = render_task_leaderboard( leaderboard_df, "", "Test", [], [], [], ) initial_validation_table_value = render_task_leaderboard( leaderboard_df, "", "Validation", [], [], [], ) with gr.Tabs(elem_id="leaderboard-task-split-tabs", elem_classes=["leaderboard-split-tabs"]): with gr.Tab("Test"): test_leaderboard_table = gr.Dataframe( value=initial_test_table_value, max_height=760, interactive=False, wrap=True, buttons=[], elem_id="leaderboard-table-test", elem_classes=["leaderboard-table"], ) with gr.Tab("Validation"): validation_leaderboard_table = gr.Dataframe( value=initial_validation_table_value, max_height=760, interactive=False, wrap=True, buttons=[], elem_id="leaderboard-table-validation", elem_classes=["leaderboard-table"], ) search_box.submit( fn=lambda search_query, selected_type, selected_size, selected_family: update_split_task_leaderboards( leaderboard_df, search_query, selected_type, selected_size, selected_family, ), inputs=[search_box, type_filter, size_filter, family_filter], outputs=[test_leaderboard_table, validation_leaderboard_table], ) for component in (type_filter, size_filter, family_filter): component.change( fn=lambda search_query, selected_type, selected_size, selected_family: update_split_task_leaderboards( leaderboard_df, search_query, selected_type, selected_size, selected_family, ), inputs=[search_box, type_filter, size_filter, family_filter], outputs=[test_leaderboard_table, validation_leaderboard_table], )