Spaces:
Running
Running
import json | |
import re | |
import gradio as gr | |
import numpy | |
import pandas as pd | |
from src.display.css_html_js import custom_css | |
from src.about import ( | |
INTRODUCTION_TEXT, | |
TITLE, | |
AUTHORS, | |
) | |
from src.display.formatting import make_clickable_model | |
demo = gr.Blocks(css=custom_css) | |
with demo: | |
gr.HTML(TITLE) | |
gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text") | |
NUMBER_OF_QUESTIONS = 171.0 | |
# load dataframe from csv | |
# leaderboard_df = pd.read_csv("benchmark_results.csv") | |
leaderboard_df = [] | |
with open("benchmark_results.csv", "r") as f: | |
header = f.readline().strip().split(",") | |
header = [h.strip() for h in header] | |
for i, line in enumerate(f): | |
leaderboard_df.append(line.strip().split(",", 13)) | |
metadata = json.load(open('metadata.json')) | |
for k, v in list(metadata.items()): | |
metadata[k.split(",")[0]] = v | |
# create dataframe from list and header | |
leaderboard_df = pd.DataFrame(leaderboard_df, columns=header) | |
# filter column with value eq-bench_v2_pl | |
print(header) | |
leaderboard_df = leaderboard_df[(leaderboard_df["Benchmark Version"] == "eq-bench_v2_pl") | ( | |
leaderboard_df["Benchmark Version"] == 'eq-bench_pl')] | |
# fix: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). | |
# leave only defined columns | |
leaderboard_df = leaderboard_df[["Model Path", "Benchmark Score", "Num Questions Parseable", "Error"]] | |
# create new column with model name | |
def parse_parseable(x): | |
if x["Num Questions Parseable"] == 'FAILED': | |
m = re.match(r'(\d+)\.0 questions were parseable', x["Error"]) | |
return m.group(1) | |
return x["Num Questions Parseable"] | |
leaderboard_df["Num Questions Parseable"] = leaderboard_df[["Num Questions Parseable", "Error"]].apply( | |
lambda x: parse_parseable(x), axis=1) | |
def fraction_to_percentage(numerator: float, denominator: float) -> float: | |
return (numerator / denominator) * 100 | |
leaderboard_df["Num Questions Parseable"] = leaderboard_df["Num Questions Parseable"].apply(lambda x: fraction_to_percentage(float(x), NUMBER_OF_QUESTIONS)) | |
def get_params(model_name): | |
if model_name in metadata: | |
return metadata[model_name] | |
return numpy.nan | |
leaderboard_df["Params"] = leaderboard_df["Model Path"].apply(lambda x: get_params(x)) | |
# move column order | |
leaderboard_df = leaderboard_df[["Model Path", "Params", "Benchmark Score", "Num Questions Parseable", 'Error']] | |
leaderboard_df["Model Path"] = leaderboard_df["Model Path"].apply(lambda x: make_clickable_model(x)) | |
# change value of column to nan | |
leaderboard_df["Benchmark Score"] = leaderboard_df["Benchmark Score"].replace('FAILED', numpy.nan) | |
# set datatype of column | |
leaderboard_df["Benchmark Score"] = leaderboard_df["Benchmark Score"].astype(float) | |
leaderboard_df["Num Questions Parseable"] = leaderboard_df["Num Questions Parseable"].astype(float) | |
# set nan if value of column is less than 0 | |
leaderboard_df.loc[leaderboard_df["Benchmark Score"] < 0, "Benchmark Score"] = 0 | |
# sort by 2 columns | |
leaderboard_df = leaderboard_df.sort_values(by=["Benchmark Score", "Num Questions Parseable"], | |
ascending=[False, False]) | |
# rename columns | |
leaderboard_df = leaderboard_df.rename(columns={"Model Path": "Model"}) | |
leaderboard_df = leaderboard_df.rename(columns={"Num Questions Parseable": "Percentage Questions Parseable"}) | |
leaderboard_df_styled = leaderboard_df.style.background_gradient(cmap="RdYlGn") | |
leaderboard_df_styled = leaderboard_df_styled.background_gradient(cmap="RdYlGn_r", subset=['Params']) | |
rounding = {} | |
# for col in ["Benchmark Score", "Num Questions Parseable"]: | |
rounding["Benchmark Score"] = "{:.2f}" | |
rounding["Percentage Questions Parseable"] = "{:.2f}" | |
rounding["Params"] = "{:.0f}" | |
leaderboard_df_styled = leaderboard_df_styled.format(rounding) | |
leaderboard_table = gr.components.Dataframe( | |
value=leaderboard_df_styled, | |
# headers=[c.name for c in fields(AutoEvalColumn) if c.never_hidden] + shown_columns.value, | |
datatype=['markdown', 'number', 'number', 'number', 'str'], | |
elem_id="leaderboard-table", | |
interactive=False, | |
visible=True, | |
) | |
gr.Markdown(AUTHORS, elem_classes="markdown-text") | |
demo.queue(default_concurrency_limit=40).launch() | |