File size: 3,623 Bytes
9be823f
881357e
 
 
 
9be823f
881357e
 
 
 
 
 
 
 
 
 
 
 
9be823f
881357e
9be823f
 
952f09b
9be823f
c35b4eb
9be823f
 
 
 
 
 
 
 
 
 
 
881357e
9be823f
 
 
881357e
9be823f
881357e
9be823f
881357e
 
 
 
 
 
9be823f
881357e
 
 
 
9be823f
881357e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9be823f
881357e
 
 
 
 
9be823f
881357e
 
 
 
 
 
 
 
 
 
 
 
9be823f
881357e
 
 
 
 
 
 
c35b4eb
9be823f
 
 
 
 
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
from dataclasses import dataclass
from enum import Enum

from src.about import Tasks


def fields(raw_class):
    return [v for k, v in raw_class.__dict__.items() if k[:2] != "__" and k[-2:] != "__"]


@dataclass
class ColumnContent:
    name: str
    type: str
    displayed_by_default: bool
    hidden: bool = False
    never_hidden: bool = False


## Leaderboard columns
class AutoEvalColumn:
    model_type_symbol = ColumnContent("T", "str", False, never_hidden=True)
    model = ColumnContent("Model", "str", True, never_hidden=True)
    team = ColumnContent("Team", "str", True, never_hidden=True)
    average = ColumnContent("Total Score ⬆️", "number", True)
    model_type = ColumnContent("Type", "str", False)
    architecture = ColumnContent("Architecture", "str", False)
    weight_type = ColumnContent("Weight type", "str", False, True)
    precision = ColumnContent("Precision", "str", False)
    license = ColumnContent("Hub License", "str", False)
    params = ColumnContent("#Params (B)", "number", False)
    likes = ColumnContent("Hub ❤️", "number", False)
    still_on_hub = ColumnContent("Available on the hub", "bool", False)
    revision = ColumnContent("Model sha", "str", False, False)


for task in Tasks:
    setattr(AutoEvalColumn, task.name, ColumnContent(task.value.col_name, "number", True))


@dataclass(frozen=True)
class EvalQueueColumn:
    model = ColumnContent("model", "markdown", True)
    team = ColumnContent("team", "str", True)
    revision = ColumnContent("revision", "str", True)
    private = ColumnContent("private", "bool", True)
    precision = ColumnContent("precision", "str", True)
    weight_type = ColumnContent("weight_type", "str", "Original")
    status = ColumnContent("status", "str", True)


@dataclass
class ModelDetails:
    name: str
    display_name: str = ""
    symbol: str = ""


class ModelType(Enum):
    PT = ModelDetails(name="pretrained", symbol="🟢")
    FT = ModelDetails(name="fine-tuned", symbol="🔶")
    IFT = ModelDetails(name="instruction-tuned", symbol="⭕")
    RL = ModelDetails(name="RL-tuned", symbol="🟦")
    Unknown = ModelDetails(name="", symbol="?")

    def to_str(self, separator=" "):
        return f"{self.value.symbol}{separator}{self.value.name}"

    @staticmethod
    def from_str(type):
        if "fine-tuned" in type or "🔶" in type:
            return ModelType.FT
        if "pretrained" in type or "🟢" in type:
            return ModelType.PT
        if "RL-tuned" in type or "🟦" in type:
            return ModelType.RL
        if "instruction-tuned" in type or "⭕" in type:
            return ModelType.IFT
        return ModelType.Unknown


class WeightType(Enum):
    Adapter = ModelDetails("Adapter")
    Original = ModelDetails("Original")
    Delta = ModelDetails("Delta")


class Precision(Enum):
    float16 = ModelDetails("float16")
    bfloat16 = ModelDetails("bfloat16")
    Unknown = ModelDetails("?")

    def from_str(precision):
        if precision in ["torch.float16", "float16"]:
            return Precision.float16
        if precision in ["torch.bfloat16", "bfloat16"]:
            return Precision.bfloat16
        return Precision.Unknown


COLS = [c.name for c in fields(AutoEvalColumn) if not c.hidden]

EVAL_COLS = [c.name for c in fields(EvalQueueColumn)]
EVAL_TYPES = [c.type for c in fields(EvalQueueColumn)]

BENCHMARK_COLS = [t.value.col_name for t in Tasks]

DATASET_LEADERBOARD_COLS = ["model", "team"]


def get_dataset_metric_cols(task) -> list[str]:
    """Column names for per-dataset metric display."""
    return [m.col_name for m in task.value.metrics]