import sys import gradio as gr from gradio.themes.utils import colors from config import constants as C from handlers.leaderboard_handlers import create_leaderboard_handlers from results.parse import get_metadata, parse_agg, read_dataframe from data_processing import filter_leaderboard, generate_scatter_plot, Simulator from static.about import CITATION_BUTTON_LABEL, CITATION_BUTTON_TEXT from static.html_content import ( ABOUT_US_HTML, HEADER_HTML, INTRO_HTML, LC_FOOTNOTE_HTML, NAV_BUTTONS_HTML, REFERENCES_HTML, OTHER_MODELS_HTML, ) from style.css_html_js import custom_css def make_leaderboard_tab(state: Simulator, name: str, html: str=None): """ Create a leaderboard tab with the given name and state """ with gr.Tab(name): """" Add text box """ if html: gr.HTML(html) # 1st row filters (select task, benchmark and sim) with gr.Row(equal_height=True): with gr.Column(scale=4): task_radio = gr.Radio(choices=C.TASKS, label="Select Task", value=C.DEFAULT_TASK) with gr.Column(scale=3): benchmark_radio = gr.Radio( choices=[C.DEFAULT_BENCHMARK] + C.S2R_BENCHMARKS, label="Select Benchmark", value=C.DEFAULT_BENCHMARK, ) with gr.Column(scale=2, min_width=180): simulator_radio = gr.Radio( choices=C.SIMULATORS, value=C.SIMULATORS[0], label="Select Simulator", scale=1, ) # 2nd row filters (search, model type, params) with gr.Row(equal_height=True): search_box = gr.Textbox( label="Search Model", placeholder="Type model name...", scale=2, ) model_type_dropdown = gr.Radio( choices=C.MODEL_TYPES, label="Select Model Type", value=C.DEFAULT_MODEL_TYPE, scale=3, ) params_slider = gr.Slider( minimum=state.get_current_df()["Params"].min(), maximum=C.DEFAULT_MAX_PARAMS, value=C.DEFAULT_MAX_PARAMS, label="Max Params", step=1, scale=2, ) if name == "Other Models": show = False elem_classes = "dataframe-leaderboard dataframe-other-models" else: show = True elem_classes = "dataframe-leaderboard" # main leaderboard content leaderboard = gr.DataFrame( value=filter_leaderboard(C.DEFAULT_TASK, C.DEFAULT_BENCHMARK, C.DEFAULT_MODEL_TYPE, "", C.DEFAULT_MAX_PARAMS, state, name), headers="first row", show_row_numbers=show, wrap=True, datatype=["html", "html"], interactive=False, column_widths=["7%", "28%", "13%", "10%", "13%", "10%", "14%"], elem_classes=elem_classes, ) # caption for the Base vs Instruct models gr.HTML(LC_FOOTNOTE_HTML) return ( task_radio, benchmark_radio, simulator_radio, search_box, model_type_dropdown, params_slider, leaderboard, ) with gr.Blocks(css=custom_css, theme=gr.themes.Default(primary_hue=colors.emerald)) as app: # Load csv results df_icarus = read_dataframe(C.ICARUS_RESULTS) df_verilator = read_dataframe(C.VERILATOR_RESULTS) # Load aggregated scores df_agg_icarus = parse_agg(C.ICARUS_AGG) df_agg_verilator = parse_agg(C.VERILATOR_AGG) # columns of the csvs benchmarks, metrics, default_metric = get_metadata(df_icarus) # Each time we select a simulator, we need to use that sim's dataframe state = Simulator( icarus_df=df_icarus, icarus_agg=df_agg_icarus, verilator_df=df_verilator, verilator_agg=df_agg_verilator, ) # Header view gr.HTML(HEADER_HTML) gr.HTML(NAV_BUTTONS_HTML) gr.HTML(INTRO_HTML) # Main view with gr.Tabs() as tabs: # Leaderboard name_main = "Latest Leaderboard" ( task_radio_main, benchmark_radio_main, simulator_radio_main, search_box_main, model_type_dropdown_main, params_slider_main, leaderboard_main, ) = make_leaderboard_tab(state, name_main) # Other models name_other = "Other Models" ( task_radio_other, benchmark_radio_other, simulator_radio_other, search_box_other, model_type_dropdown_other, params_slider_other, leaderboard_other, ) = make_leaderboard_tab(state, name_other, html=OTHER_MODELS_HTML) # all plots using Plotly with gr.Tab("Plot View"): with gr.Row(equal_height=True): default_benchmark = C.S2R_BENCHMARKS[0] bubble_benchmark = gr.Dropdown( choices=benchmarks, label="Select Benchmark", value=default_benchmark, elem_classes="gr-dropdown", ) default_metric = C.NON_RTL_METRICS[0] bubble_metric = gr.Dropdown( choices=C.NON_RTL_METRICS, label="Select Metric", value=default_metric, ) with gr.Row(equal_height=True): scatter_plot = gr.Plot( value=generate_scatter_plot(default_benchmark, default_metric, state), label="Bubble Chart", elem_id="full-width-plot", ) # Markdown / Latex explaining our metrics with gr.Tab("Metrics Information"): with open("./static/metrics.md", "r") as file: gr.Markdown( file.read(), latex_delimiters=[ {"left": "$$", "right": "$$", "display": True}, {"left": "$", "right": "$", "display": False}, ], elem_classes="metrics-page", ) with gr.Tab("About Us"): gr.HTML(ABOUT_US_HTML) with gr.Tab("References"): gr.HTML(REFERENCES_HTML) with gr.Row(): with gr.Accordion("📙 Citation", open=False): citation_button = gr.Textbox( value=CITATION_BUTTON_TEXT, label=CITATION_BUTTON_LABEL, lines=14, elem_id="citation-button", show_copy_button=True, ) # all event handlers are declared at /handlers/ # if you need to add interactivity, then you'll need to add one! create_leaderboard_handlers( filter_leaderboard_fn=filter_leaderboard, generate_scatter_plot_fn=generate_scatter_plot, task_radio=task_radio_main, benchmark_radio=benchmark_radio_main, model_type_dropdown=model_type_dropdown_main, search_box=search_box_main, params_slider=params_slider_main, bubble_benchmark=bubble_benchmark, bubble_metric=bubble_metric, scatter_plot=scatter_plot, leaderboard=leaderboard_main, simulator_radio=simulator_radio_main, state=state, name=name_main, ) create_leaderboard_handlers( filter_leaderboard_fn=filter_leaderboard, generate_scatter_plot_fn=generate_scatter_plot, task_radio=task_radio_other, benchmark_radio=benchmark_radio_other, model_type_dropdown=model_type_dropdown_other, search_box=search_box_other, params_slider=params_slider_other, bubble_benchmark=bubble_benchmark, bubble_metric=bubble_metric, scatter_plot=scatter_plot, leaderboard=leaderboard_other, simulator_radio=simulator_radio_other, state=state, name=name_other, ) app.launch( allowed_paths=[ "logo_new.png", "hpai_logo_grad.png", "bsc-logo.png", ] )