Spaces:
Running
Running
File size: 3,410 Bytes
881357e 96c29e4 9be823f 54bda52 d187930 30b8f34 c7a8a09 6d68931 881357e c7a8a09 54bda52 881357e c7a8a09 881357e 54bda52 881357e 30b8f34 9be823f c35b4eb 9be823f c7a8a09 54bda52 9be823f c7a8a09 9be823f c7a8a09 9be823f c7a8a09 952f09b c7a8a09 9be823f c7a8a09 9be823f c7a8a09 54bda52 9be823f 54bda52 c35b4eb 54bda52 9be823f 30b8f34 9be823f 30b8f34 96c29e4 30b8f34 96c29e4 30b8f34 96c29e4 30b8f34 c7a8a09 e6a31da 30b8f34 c7a8a09 30b8f34 6d68931 30b8f34 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | import pandas as pd
import gradio as gr
from src.about import Tasks
from src.display.columns import localize_dataset_leaderboard_df, localize_main_leaderboard_df
from src.display.formatting import has_no_nan_values, make_clickable_model
from src.display.dataset_readmes import get_dataset_readme_markdown
from src.display.i18n import t
from src.display.utils import AutoEvalColumn, get_dataset_metric_cols
from src.leaderboard.read_evals import get_dataset_metrics_for_row, get_stored_eval_rows
from src.leaderboard.sync import sync_results_from_hub
def get_leaderboard_df(cols: list, benchmark_cols: list) -> pd.DataFrame:
rows = get_stored_eval_rows()
if not rows:
return localize_main_leaderboard_df(pd.DataFrame(columns=cols))
display_rows = [{k: v for k, v in row.items() if not k.startswith("_")} for row in rows]
df = pd.DataFrame.from_records(display_rows)
df = df.sort_values(by=[AutoEvalColumn.average.name], ascending=False)
df = df[cols].round(decimals=2)
df = df[has_no_nan_values(df, benchmark_cols)]
return localize_main_leaderboard_df(df)
def get_dataset_leaderboard_df(task_name: str) -> pd.DataFrame:
task = Tasks[task_name]
task_val = task.value
metric_cols = get_dataset_metric_cols(task)
columns = ["model", "team"] + metric_cols
sort_col = metric_cols[0] if metric_cols else None
rows = get_stored_eval_rows()
if not rows:
return localize_dataset_leaderboard_df(pd.DataFrame(columns=columns))
dataset_rows = []
for row in rows:
dataset_score = row.get("_results", {}).get(task_val.benchmark)
if dataset_score is None:
continue
metrics = get_dataset_metrics_for_row(row, task)
if not any(v is not None for v in metrics.values()):
continue
dataset_row = {
"model": make_clickable_model(row["_model"]),
"team": row[AutoEvalColumn.team.name],
}
for col_name, value in metrics.items():
dataset_row[col_name] = round(value, 2) if value is not None else None
dataset_rows.append(dataset_row)
if not dataset_rows:
return localize_dataset_leaderboard_df(pd.DataFrame(columns=columns))
df = pd.DataFrame.from_records(dataset_rows, columns=columns)
if sort_col:
df = df.sort_values(by=sort_col, ascending=False)
return localize_dataset_leaderboard_df(df.reset_index(drop=True))
def get_dataset_info_markdown(task_name: str) -> str:
return get_dataset_readme_markdown(task_name)
def get_empty_leaderboard_notice() -> str:
return t("empty_leaderboard")
def get_empty_leaderboard_notice_update(main_df: pd.DataFrame):
if main_df.empty:
return gr.update(value=get_empty_leaderboard_notice(), visible=True)
return gr.update(value="", visible=False)
def get_all_leaderboard_outputs():
"""Reload main and per-dataset tables from results/."""
from src.display.utils import BENCHMARK_COLS, COLS
main_df = get_leaderboard_df(COLS, BENCHMARK_COLS)
dataset_dfs = [get_dataset_leaderboard_df(task.name) for task in Tasks]
return (main_df, *dataset_dfs)
def reload_leaderboard_tables():
"""Reload all tables, syncing persisted results on HF Spaces first."""
sync_results_from_hub()
outputs = get_all_leaderboard_outputs()
return (*outputs, get_empty_leaderboard_notice_update(outputs[0]))
|