ggcristian's picture
Align models and Parameters to the left on the 'Other Models' tab
9d7fc91
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",
]
)