File size: 3,461 Bytes
2f4d877 841e241 460930f 841e241 30a0c61 2f4d877 841e241 ca2b34f 651545d ca2b34f 651545d ca2b34f 651545d ca2b34f 841e241 30a0c61 daff9c0 841e241 2f4d877 460930f 841e241 30a0c61 841e241 2f4d877 841e241 2f4d877 841e241 611a3ed 0a4c821 e3edf6d 841e241 611a3ed 841e241 1c1cb58 841e241 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 |
import asyncio
import gradio as gr
import pandas as pd
from huggingface_hub import HfFileSystem
import src.constants as constants
from src.hub import load_details_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=5,
visible=True,
)
def update_subtasks_component(task):
return gr.Radio(
constants.SUBTASKS.get(task),
info="Evaluation subtasks to be loaded",
value=None,
)
def update_load_details_component(model_id_1, model_id_2, subtask):
if (model_id_1 or model_id_2) and subtask:
return gr.Button("Load Details", interactive=True)
else:
return gr.Button("Load Details", interactive=False)
async def load_details_dataframe(model_id, subtask):
fs = HfFileSystem()
if not model_id or not subtask:
return
model_name_sanitized = model_id.replace("/", "__")
paths = fs.glob(
f"{constants.DETAILS_DATASET_ID}/**/{constants.DETAILS_FILENAME}".format(
model_name_sanitized=model_name_sanitized, subtask=subtask
)
)
if not paths:
return
path = max(paths)
data = await load_details_file(path)
df = pd.json_normalize(data)
# df = df.rename_axis("Parameters", axis="columns")
df["model_name"] = model_id # Keep model_name
return df
# return df.set_index(pd.Index([model_id])).reset_index()
async def load_details_dataframes(subtask, *model_ids):
result = await asyncio.gather(*[load_details_dataframe(model_id, subtask) for model_id in model_ids])
return result
def display_details(sample_idx, *dfs):
rows = [df.iloc[sample_idx] for df in dfs if "model_name" in df.columns and sample_idx < len(df)]
if not rows:
return
# Pop model_name and add it to the column name
df = pd.concat([row.rename(row.pop("model_name")) for row in rows], axis="columns")
# Wrap long strings to avoid overflow; e.g. URLs in "doc.Websites visited_NEV_2"
def wrap(row):
try:
result = row.str.wrap(140)
return result if result.notna().all() else row # NaN when data is a list
except AttributeError: # when data is number
return row
df = df.apply(wrap, axis=1)
# Style
return (
df.style.format(escape="html", na_rep="")
# .hide(axis="index")
.to_html()
)
def update_sample_idx_component(*dfs):
maximum = max([len(df) - 1 for df in dfs])
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_id_1, model_id_2, details_dataframe_1, details_dataframe_2, details_task, subtask, load_details_btn, sample_idx
return (
None,
None,
None,
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>"
|