from dataclasses import dataclass, make_dataclass from enum import Enum import pandas as pd from src.about import Tasks # assume Tasks = [Task1, Task2, ...] def fields(raw_class): return [ v for k, v in raw_class.__dict__.items() if not (k.startswith("__") and k.endswith("__")) ] @dataclass class ColumnContent: name: str type: str displayed_by_default: bool hidden: bool = False never_hidden: bool = False # ------------------------------------------------------------------- # Build leaderboard columns # ------------------------------------------------------------------- auto_eval_column_dict = [] # Rank/Model/Badge auto_eval_column_dict.append(["rank", ColumnContent, ColumnContent("Rank", "number", True, never_hidden=True)]) auto_eval_column_dict.append(["model", ColumnContent, ColumnContent("Model", "markdown", True, never_hidden=True)]) auto_eval_column_dict.append(["badge", ColumnContent, ColumnContent("Badge", "str", True)]) # Per-dataset metrics # Example: "PER ⬇️ (TIMIT)", "Avg Duration (s) (TIMIT)" for task in Tasks: dataset_name = task.name # short name col_base = task.value.col_name # e.g. "PER ⬇️" # allow multiple metrics per dataset if needed auto_eval_column_dict.append([ f"{dataset_name}_per", ColumnContent, ColumnContent(f"{col_base} ({dataset_name})", "number", True), ]) auto_eval_column_dict.append([ f"{dataset_name}_avg_duration", ColumnContent, ColumnContent(f"Avg Duration (s) ({dataset_name})", "number", True), ]) # Global average across datasets auto_eval_column_dict.append([ "average", ColumnContent, ColumnContent("Avg PER ⬇️ (All)", "number", True) ]) # Extra model info auto_eval_column_dict.append(["model_type", ColumnContent, ColumnContent("Type", "str", False)]) auto_eval_column_dict.append(["architecture", ColumnContent, ColumnContent("Architecture", "str", False)]) auto_eval_column_dict.append(["weight_type", ColumnContent, ColumnContent("Weight type", "str", False, True)]) auto_eval_column_dict.append(["precision", ColumnContent, ColumnContent("Precision", "str", False)]) auto_eval_column_dict.append(["license", ColumnContent, ColumnContent("Hub License", "str", False)]) auto_eval_column_dict.append(["params", ColumnContent, ColumnContent("#Params (B)", "number", False)]) auto_eval_column_dict.append(["likes", ColumnContent, ColumnContent("Hub ❤️", "number", False)]) auto_eval_column_dict.append(["still_on_hub", ColumnContent, ColumnContent("Available on the hub", "bool", False)]) auto_eval_column_dict.append(["revision", ColumnContent, ColumnContent("Model sha", "str", False, False)]) # Final dataclass AutoEvalColumn = make_dataclass("AutoEvalColumn", auto_eval_column_dict, frozen=True) # ------------------------------------------------------------------- # Example: Create dataframe header # ------------------------------------------------------------------- COLS = [c.name for c in fields(AutoEvalColumn) if not c.hidden] df = pd.DataFrame(columns=[c.name for c in fields(AutoEvalColumn)])