]
- Convert numeric columns
"""
model_col, columns, mapping = build_dataset_to_labels()
if dataset not in mapping:
return pd.DataFrame({"Info": [f"No columns found for dataset '{dataset}'."]})
if label and label != "(All)":
if label not in mapping[dataset]:
return pd.DataFrame({"Info": [f"Label '{label}' not found in dataset '{dataset}'."]})
selected_cols = [mapping[dataset][label]]
labels = [label]
else:
# include ALL labels for this dataset (attacks, means, TTS names…)
labels = sorted(mapping[dataset].keys(), key=lambda s: s.lower())
selected_cols = [mapping[dataset][lab] for lab in labels]
try:
use_positions = _indices_for_columns(columns, [model_col] + selected_cols)
except KeyError as e:
return pd.DataFrame({"Info": [f"{e}"]})
df = pd.read_excel(
DATA_PATH,
sheet_name="TTS all",
usecols=use_positions,
header=0,
**READ_KW
)
# First data row holds the labels; drop it.
if len(df) > 0:
df = df.iloc[1:].reset_index(drop=True)
# Rename columns
df.columns = ["Model"] + labels
df["Model"] = df["Model"].astype(str)
# Coerce numeric where possible
for lab in labels:
df[lab] = pd.to_numeric(df[lab], errors="coerce")
return df
# ─────────────────────────────────────────────────────────────────────────────
# Build Gradio app
# ─────────────────────────────────────────────────────────────────────────────
def build_app():
with gr.Blocks(title="🎙️ Benchmarking Linear-Head Classifiers") as demo:
if os.path.exists(BANNER_PATH):
gr.Image(value=BANNER_PATH, show_label=False)
gr.Markdown("🎙️ Benchmarking Linear-Head Classifiers Built on S3PRL Embeddings
")
with gr.Tabs():
# 1–4: Auto-load the four main tabs
for sheet in TAB_ORDER:
try:
df = load_sheet(sheet)
except Exception as e:
df = pd.DataFrame({"Error": [str(e)]})
with gr.TabItem(sheet):
gr.Markdown(f"{SHEET_DESCRIPTIONS.get(sheet, '')}
")
gr.Dataframe(value=df, interactive=False)
# Explorer (all labels, not just Axx)
with gr.TabItem("Explorer for Attacks"):
gr.Markdown(
""
"Pick a Dataset then (optionally) pick a specific label.
"
"Rows = Models, Columns = ALL labels for that dataset (attacks, means, TTS names, etc.)."
"
"
)
try:
_, _, mapping = build_dataset_to_labels()
datasets = sorted(mapping.keys())
except Exception:
mapping, datasets = {}, []
if not datasets:
gr.Markdown("❗ No valid 'TTS all' sheet detected (first row must contain labels; first column models).")
else:
default_ds = datasets[0]
default_labels = ["(All)"] + sorted(mapping[default_ds].keys(), key=lambda s: s.lower())
with gr.Row():
ds_dd = gr.Dropdown(datasets, value=default_ds, label="Dataset")
lab_dd = gr.Dropdown(default_labels, value="(All)", label="Label (optional)")
out = gr.Dataframe(interactive=False)
def on_ds_change(ds):
new_labels = ["(All)"] + sorted(mapping.get(ds, {}).keys(), key=lambda s: s.lower())
table = read_tts_subset_for_dataset(ds, None)
return gr.update(choices=new_labels, value="(All)"), table
ds_dd.change(on_ds_change, ds_dd, [lab_dd, out])
def on_label_change(ds, lab):
return read_tts_subset_for_dataset(ds, lab if lab != "(All)" else None)
lab_dd.change(on_label_change, [ds_dd, lab_dd], out)
# initial render
out.value = read_tts_subset_for_dataset(default_ds, None)
return demo
demo = build_app()
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860, share=True)