CatsCanWrite commited on
Commit
2d42fc1
·
1 Parent(s): e4a3f50

improve display

Browse files
Files changed (1) hide show
  1. utils.py +125 -18
utils.py CHANGED
@@ -61,20 +61,42 @@ def load_leaderboard() -> pd.DataFrame:
61
  ds = load_dataset(SCORES_REPO, token=HF_TOKEN)
62
  df = ds["train"].to_pandas()
63
 
64
- display_cols = [
65
- "model_id",
66
- "model_name",
67
- "overall_score",
68
- "meter_score",
69
- "verse_score",
70
- "focus_score",
71
- "evaluated_at",
72
- ]
73
- display_cols = [c for c in display_cols if c in df.columns]
74
- df = df[display_cols]
 
75
 
 
76
  if "overall_score" in df.columns:
77
  df = df.sort_values("overall_score", ascending=False).reset_index(drop=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
  return df
80
  except Exception as e:
@@ -82,19 +104,104 @@ def load_leaderboard() -> pd.DataFrame:
82
  return _empty_leaderboard()
83
 
84
 
 
85
  def _empty_leaderboard() -> pd.DataFrame:
86
  return pd.DataFrame(
87
  columns=[
88
- "model_id",
89
- "model_name",
90
- "overall_score",
91
- "meter_score",
92
- "verse_score",
93
- "focus_score",
94
- "evaluated_at",
 
95
  ]
96
  )
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
  def request_model(model_id: str, request: gr.Request) -> str:
100
  """
 
61
  ds = load_dataset(SCORES_REPO, token=HF_TOKEN)
62
  df = ds["train"].to_pandas()
63
 
64
+ # Build column mapping
65
+ col_map = {
66
+ "model_id": "Model ID",
67
+ "model_name": "Model Name",
68
+ "overall_score": "Overall",
69
+ "meter_score": "Meter",
70
+ "verses_score": "Verse",
71
+ "focus_score": "Focus",
72
+ "evaluated_at": "Evaluated At",
73
+ }
74
+ display_cols = [c for c in col_map if c in df.columns]
75
+ df = df[display_cols].copy()
76
 
77
+ # Sort by overall score descending before formatting
78
  if "overall_score" in df.columns:
79
  df = df.sort_values("overall_score", ascending=False).reset_index(drop=True)
80
+ df.insert(0, "Rank", range(1, len(df) + 1))
81
+
82
+ # Format percentages
83
+ for col in ["overall_score", "meter_score", "verses_score", "focus_score"]:
84
+ if col in df.columns:
85
+ df[col] = df[col].apply(
86
+ lambda x: f"{x * 100:.1f}%" if pd.notna(x) else "N/A"
87
+ )
88
+
89
+ # Format dates
90
+ if "evaluated_at" in df.columns:
91
+ df["evaluated_at"] = pd.to_datetime(df["evaluated_at"], errors="coerce")
92
+ df["evaluated_at"] = df["evaluated_at"].dt.strftime("%Y-%m-%d %H:%M")
93
+
94
+ # Rename to human-readable names
95
+ df.rename(columns=col_map, inplace=True)
96
+
97
+ # Ensure column order matches empty leaderboard
98
+ final_cols = [c for c in _empty_leaderboard().columns if c in df.columns]
99
+ df = df[final_cols]
100
 
101
  return df
102
  except Exception as e:
 
104
  return _empty_leaderboard()
105
 
106
 
107
+
108
  def _empty_leaderboard() -> pd.DataFrame:
109
  return pd.DataFrame(
110
  columns=[
111
+ "Rank",
112
+ "Model ID",
113
+ "Model Name",
114
+ "Overall",
115
+ "Meter",
116
+ "Verse",
117
+ "Focus",
118
+ "Evaluated At",
119
  ]
120
  )
121
 
122
+ def load_leaderboard() -> pd.DataFrame:
123
+ """Load the latest scores from the scores dataset, with caching and formatting."""
124
+ global _leaderboard_cache
125
+
126
+ # Return cached result if still fresh
127
+ if _leaderboard_cache is not None:
128
+ df, cached_at = _leaderboard_cache
129
+ if time.time() - cached_at < CACHE_TTL_SECONDS:
130
+ return df
131
+
132
+ if not HF_TOKEN:
133
+ _leaderboard_cache = (_empty_leaderboard(), time.time())
134
+ return _leaderboard_cache[0]
135
+
136
+ try:
137
+ files = list_repo_files(SCORES_REPO, repo_type="dataset", token=HF_TOKEN)
138
+ score_files = [f for f in files if f.startswith("scores/") and f.endswith(".json")]
139
+
140
+ records = []
141
+ for f in score_files:
142
+ try:
143
+ path = hf_hub_download(
144
+ repo_id=SCORES_REPO,
145
+ filename=f,
146
+ repo_type="dataset",
147
+ token=HF_TOKEN,
148
+ )
149
+ with open(path, "r", encoding="utf-8") as file:
150
+ record = json.load(file)
151
+ records.append(record)
152
+ except Exception as e:
153
+ print(f"Could not load score file {f}: {e}")
154
+ continue
155
+
156
+ if not records:
157
+ _leaderboard_cache = (_empty_leaderboard(), time.time())
158
+ return _leaderboard_cache[0]
159
+
160
+ df = pd.DataFrame(records)
161
+
162
+ # Build column mapping
163
+ col_map = {
164
+ "model_id": "Model ID",
165
+ "model_name": "Model Name",
166
+ "overall_score": "Overall Score",
167
+ "metric_a": "Metric A",
168
+ "metric_b": "Metric B",
169
+ "evaluated_at": "Evaluated At",
170
+ }
171
+ display_cols = [c for c in col_map if c in df.columns]
172
+ df = df[display_cols].copy()
173
+
174
+ # Sort by overall score descending before formatting
175
+ if "overall_score" in df.columns:
176
+ df = df.sort_values("overall_score", ascending=False).reset_index(drop=True)
177
+ df.insert(0, "Rank", range(1, len(df) + 1))
178
+
179
+ # Format percentages
180
+ for col in ["overall_score", "metric_a", "metric_b"]:
181
+ if col in df.columns:
182
+ df[col] = df[col].apply(
183
+ lambda x: f"{x * 100:.1f}%" if pd.notna(x) else "N/A"
184
+ )
185
+
186
+ # Format dates
187
+ if "evaluated_at" in df.columns:
188
+ df["evaluated_at"] = pd.to_datetime(df["evaluated_at"], errors="coerce")
189
+ df["evaluated_at"] = df["evaluated_at"].dt.strftime("%Y-%m-%d %H:%M")
190
+
191
+ # Rename to human-readable names
192
+ df.rename(columns=col_map, inplace=True)
193
+
194
+ # Ensure column order matches empty leaderboard
195
+ final_cols = [c for c in _empty_leaderboard().columns if c in df.columns]
196
+ df = df[final_cols]
197
+
198
+ _leaderboard_cache = (df, time.time())
199
+ return df
200
+ except Exception as e:
201
+ print(f"Could not load scores: {e}")
202
+ _leaderboard_cache = (_empty_leaderboard(), time.time())
203
+ return _leaderboard_cache[0]
204
+
205
 
206
  def request_model(model_id: str, request: gr.Request) -> str:
207
  """