Spaces:
Sleeping
Sleeping
File size: 6,283 Bytes
3d8dbe8 8b1f7a0 3b3db42 01ea22b 29546b4 3d8dbe8 25c6939 3d8dbe8 91e8a06 8b1f7a0 29546b4 3d8dbe8 fefe31a 3d8dbe8 fefe31a 25c6939 3d8dbe8 8b1f7a0 29546b4 8b1f7a0 17f029a 8b1f7a0 29546b4 8b1f7a0 3d8dbe8 8b1f7a0 2a860f6 8b1f7a0 17f029a 8b1f7a0 17f029a 8b1f7a0 81722bf 17f029a 81722bf 3d8dbe8 fefe31a 3d8dbe8 8b1f7a0 ceb2102 8b1f7a0 |
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 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
from dataclasses import dataclass, make_dataclass
from enum import Enum
import pandas as pd
from src.about import Tasks
def fields(raw_class):
if hasattr(raw_class, '__dataclass_fields__'):
# For make_dataclass created classes
if raw_class.__dataclass_fields__:
return [field.type for field in raw_class.__dataclass_fields__.values()]
else:
# For regular @dataclass with empty __dataclass_fields__, check __dict__
return [v for k, v in raw_class.__dict__.items() if k[:2] != "__" and k[-2:] != "__" and hasattr(v, 'name')]
# Fallback for non-dataclass
return [v for k, v in raw_class.__dict__.items() if k[:2] != "__" and k[-2:] != "__" and hasattr(v, 'name')]
# These classes are for user facing column names,
# to avoid having to change them all around the code
# when a modif is needed
@dataclass
class ColumnContent:
name: str
type: str
displayed_by_default: bool
hidden: bool = False
never_hidden: bool = False
## Leaderboard columns
auto_eval_column_dict = []
# Init
auto_eval_column_dict.append(("model_type_symbol", ColumnContent("T", "str", True, never_hidden=True)))
auto_eval_column_dict.append(("model", ColumnContent("Model", "markdown", True, never_hidden=True)))
# Average score
auto_eval_column_dict.append(("average", ColumnContent("Average", "number", True)))
#Scores
for task in Tasks:
auto_eval_column_dict.append((task.name, ColumnContent(task.value.col_name, "number", True)))
# Model information - simplified to only essential columns
# We use make dataclass to dynamically fill the scores from Tasks
AutoEvalColumn = make_dataclass("AutoEvalColumn", auto_eval_column_dict, frozen=True)
## For the queue columns in the submission tab
@dataclass(frozen=True)
class EvalQueueColumn: # Queue column
model = ColumnContent("model", "markdown", True)
revision = ColumnContent("revision", "str", True)
precision = ColumnContent("precision", "str", True)
model_type = ColumnContent("model_type", "str", True)
status = ColumnContent("status", "str", True)
## All the model information that we might need
@dataclass
class ModelDetails:
name: str
display_name: str = ""
symbol: str = "" # emoji
class ModelType(Enum):
ENCODER = ModelDetails(name="encoder", symbol="π€") # BERT-like
DECODER = ModelDetails(name="decoder", symbol="π½") # GPT-like
ENCODER_DECODER = ModelDetails(name="encoder-decoder", symbol="π") # T5-like
Unknown = ModelDetails(name="unknown", symbol="?")
def to_str(self, separator=" "):
return f"{self.value.symbol}{separator}{self.value.name}"
@staticmethod
def from_str(type_str):
if "encoder-decoder" in type_str.lower() or "π" in type_str:
return ModelType.ENCODER_DECODER
elif "encoder" in type_str.lower() or "π€" in type_str:
return ModelType.ENCODER
elif "decoder" in type_str.lower() or "π½" in type_str:
return ModelType.DECODER
return ModelType.Unknown
@staticmethod
def from_config(config):
"""Detect model architecture type from config"""
if hasattr(config, 'model_type'):
model_type = config.model_type.lower()
# Encoder-decoder models
if model_type in ['t5', 'bart', 'pegasus', 'mbart', 'blenderbot', 'bigbird_pegasus']:
return ModelType.ENCODER_DECODER
# Decoder-only models (GPT-like)
elif model_type in ['gpt', 'gpt2', 'gpt_neo', 'gpt_neox', 'gptj', 'bloom', 'llama', 'mistral', 'qwen']:
return ModelType.DECODER
# Encoder-only models (BERT-like)
elif model_type in ['bert', 'roberta', 'camembert', 'distilbert', 'electra', 'deberta', 'albert']:
return ModelType.ENCODER
# Fallback: detect from architecture class name
if hasattr(config, 'architectures') and config.architectures:
arch_name = config.architectures[0].lower()
if any(name in arch_name for name in ['t5', 'bart', 'pegasus', 'mbart', 'blenderbot']):
return ModelType.ENCODER_DECODER
elif any(name in arch_name for name in ['gpt', 'bloom', 'llama', 'mistral', 'qwen']):
return ModelType.DECODER
elif any(name in arch_name for name in ['bert', 'roberta', 'camembert', 'distilbert', 'electra', 'deberta', 'albert']):
return ModelType.ENCODER
return ModelType.Unknown
@staticmethod
def from_architecture(architecture):
"""Detect model type from architecture string"""
if not architecture or architecture == "?":
return ModelType.Unknown
arch_lower = architecture.lower()
# Encoder-decoder patterns
if any(pattern in arch_lower for pattern in ['t5', 'bart', 'pegasus', 'mbart', 'blenderbot']):
return ModelType.ENCODER_DECODER
# Decoder patterns (GPT-like)
elif any(pattern in arch_lower for pattern in ['gpt', 'bloom', 'llama', 'mistral', 'qwen', 'causal']):
return ModelType.DECODER
# Encoder patterns (BERT-like)
elif any(pattern in arch_lower for pattern in ['bert', 'roberta', 'camembert', 'distilbert', 'electra', 'deberta', 'albert', 'formaskedlm', 'fortokenclassification', 'forsequenceclassification']):
return ModelType.ENCODER
return ModelType.Unknown
class WeightType(Enum):
Original = ModelDetails("Original")
class Precision(Enum):
float16 = ModelDetails("float16")
bfloat16 = ModelDetails("bfloat16")
Unknown = ModelDetails("?")
@staticmethod
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
# Column selection
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]
|