File size: 4,253 Bytes
2f4d877 841e241 30a0c61 7e32ac7 841e241 ca2b34f 651545d ca2b34f 651545d ca2b34f e970061 ca2b34f 26ef426 841e241 bea7063 841e241 7e32ac7 2f4d877 841e241 4a05739 841e241 fae0e19 719c272 841e241 bea7063 841e241 523fad9 719c272 bea7063 966ae7b 841e241 bea7063 841e241 bea7063 611a3ed d46be0d 6cf57e4 d46be0d 841e241 611a3ed 841e241 6cf57e4 d46be0d bea7063 d46be0d 841e241 bea7063 841e241 bea7063 841e241 bea7063 611a3ed 1c1cb58 611a3ed 841e241 8f7c83f |
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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
import asyncio
import gradio as gr
import pandas as pd
import src.constants as constants
from src.hub import glob, load_jsonlines_file
def update_task_description_component(task):
base_description = constants.TASK_DESCRIPTIONS.get(task, "")
additional_info = "A higher score is a better score."
description = f"{base_description}\n\n{additional_info}" if base_description else additional_info
return gr.Textbox(
description,
label="Task Description",
lines=6,
visible=True,
)
def update_subtasks_component(task, profile: gr.OAuthProfile | None):
visible_login_btn = True if task == "leaderboard_gpqa" else False
subtasks = None if task == "leaderboard_gpqa" and not profile else constants.SUBTASKS.get(task)
return (
gr.LoginButton(size="sm", visible=visible_login_btn),
gr.Radio(
choices=subtasks,
info="Evaluation subtasks to be loaded",
value=None,
),
)
def update_load_details_component(model_id, subtask):
if model_id and subtask:
return gr.Button("Load Details", interactive=True)
else:
return gr.Button("Load Details", interactive=False)
def fetch_details_paths(model_id, subtask):
model_name_sanitized = model_id.replace("/", "__")
dataset_id = constants.DETAILS_DATASET_ID.format(model_name_sanitized=model_name_sanitized)
filename = constants.DETAILS_FILENAME.format(subtask=subtask)
path = f"{dataset_id}/**/{filename}"
return glob(path)
async def load_details_dataframe(model_id, subtask):
if not model_id or not subtask:
return
paths = await asyncio.to_thread(fetch_details_paths, model_id, subtask)
if not paths:
return
path = max(paths)
data = await load_jsonlines_file(path)
if not data:
return
df = pd.json_normalize(data)
# Keep model_name:
df["model_name"] = model_id
return df.sort_values("doc_id").set_index("doc_id", drop=False).set_index("model_name", append=True)
async def load_details(subtask, *model_ids_lists):
dfs = await asyncio.gather(
*[
load_details_dataframe(model_id, subtask)
for model_ids in model_ids_lists
if model_ids
for model_id in model_ids
]
)
dfs = [df for df in dfs if df is not None]
if dfs:
return pd.concat(dfs), None
else:
return None, None
def display_details(df, sample_idx, show_only_differences):
if df is None:
return
df = df.loc[df.index.levels[0][sample_idx]]
df = df.T.rename_axis(columns=None)
# Style
# - Option: Show only differences
any_difference = pd.Series(False, index=df.index)
if show_only_differences:
any_difference = df.ne(df.iloc[:, 0], axis=0).any(axis=1)
return (
df.style.format(escape="html", na_rep="")
# .hide(axis="index")
# Hide non-different rows
.hide([row for row in df.index if show_only_differences and not any_difference[row]])
# Fix overflow
.set_table_styles(
[
{
"selector": "td",
"props": [("overflow-wrap", "break-word"), ("max-width", "1px")],
},
{
"selector": ".col_heading",
"props": [("width", f"{100 / len(df.columns)}%")],
},
]
)
.to_html()
)
def update_sample_idx_component(df):
if df is None:
return
maximum = len(df) - 1
return gr.Number(
label="Sample Index",
info="Index of the sample to be displayed",
value=0,
minimum=0,
maximum=maximum,
visible=True,
)
def clear_details():
# model_ids, details_dataframe, details_task, subtask, load_details_btn, sample_idx
return (
gr.Dropdown(value=[]),
None,
None,
None,
gr.Button("Load Details", interactive=False),
gr.Number(label="Sample Index", info="Index of the sample to be displayed", value=0, minimum=0, visible=False),
)
def display_loading_message_for_details():
return "<h3 style='text-align: center;'>Loading...</h3>"
|