Anonumous commited on
Commit
b0cab2d
·
1 Parent(s): 9c4c35f

Refactor build_leadearboard_df function to integrate data conversion from Small Shlepa format to DeathMath; enhance error handling and logging for model data processing

Browse files
Files changed (1) hide show
  1. src/leaderboard/build_leaderboard.py +91 -14
src/leaderboard/build_leaderboard.py CHANGED
@@ -140,26 +140,25 @@ def build_leadearboard_df():
140
  with open(os.path.join(external_dir, file), "r", encoding="utf-8") as f:
141
  data = json.load(f)
142
 
143
- # Проверяем наличие необходимых полей
144
- model_name = data.get("model_name", data.get("model", ""))
145
- if not model_name:
146
- logging.error(f"Failed to parse {file}: 'model_name' not found")
147
- continue
148
 
149
- score = data.get("score", None)
150
- if score is None:
151
- logging.error(f"Failed to parse {file}: 'score' not found")
 
152
  continue
153
 
154
  # Стандартизируем данные
155
  model_data = {
156
  "model": model_name,
157
- "score": float(score),
158
- "math_score": float(data.get("math_score", 0.0)),
159
- "physics_score": float(data.get("physics_score", 0.0)),
160
- "total_tokens": int(data.get("total_tokens", 0)),
161
- "evaluation_time": float(data.get("evaluation_time", 0.0)),
162
- "system_prompt": data.get("system_prompt", "Вы - полезный помощник по математике и физике. Ответьте на русском языке.")
 
163
  }
164
 
165
  # Определяем, является ли это лучшим результатом для данной модели
@@ -213,3 +212,81 @@ def build_leadearboard_df():
213
  df[numeric_cols] = df[numeric_cols].round(3)
214
 
215
  return df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  with open(os.path.join(external_dir, file), "r", encoding="utf-8") as f:
141
  data = json.load(f)
142
 
143
+ # Конвертируем данные из любого формата в формат DeathMath
144
+ converted_data = convert_old_format_to_deatmath(data)
 
 
 
145
 
146
+ # Проверяем наличие необходимых полей после конвертации
147
+ model_name = converted_data.get("model_name", converted_data.get("model", ""))
148
+ if not model_name:
149
+ logging.error(f"Failed to parse {file}: 'model_name' not found after conversion")
150
  continue
151
 
152
  # Стандартизируем данные
153
  model_data = {
154
  "model": model_name,
155
+ "score": float(converted_data.get("score", 0.0)),
156
+ "math_score": float(converted_data.get("math_score", 0.0)),
157
+ "physics_score": float(converted_data.get("physics_score", 0.0)),
158
+ "total_tokens": int(converted_data.get("total_tokens", 0)),
159
+ "evaluation_time": float(converted_data.get("evaluation_time", 0.0)),
160
+ "system_prompt": converted_data.get("system_prompt",
161
+ "Вы - полезный помощник по математике и физике. Ответьте на русском языке.")
162
  }
163
 
164
  # Определяем, является ли это лучшим результатом для данной модели
 
212
  df[numeric_cols] = df[numeric_cols].round(3)
213
 
214
  return df
215
+
216
+
217
+ def convert_old_format_to_deatmath(data):
218
+ """
219
+ Конвертирует данные из старого формата Small Shlepa в формат DeathMath
220
+
221
+ Args:
222
+ data (dict): Данные модели в старом формате
223
+
224
+ Returns:
225
+ dict: Конвертированные данные в формате DeathMath
226
+ """
227
+ # Проверяем, возможно это файл уже в формате DeathMath
228
+ if "score" in data:
229
+ return data
230
+
231
+ # Проверяем формат Small Shlepa с полями: musicmc, moviesmc, booksmc, lawmc, mmluproru
232
+ small_shlepa_fields = ["musicmc", "moviesmc", "booksmc", "lawmc", "mmluproru", "model"]
233
+ is_shlepa_format = any(field in data for field in small_shlepa_fields)
234
+
235
+ if is_shlepa_format:
236
+ logging.info(f"Конвертация модели из формата Small Shlepa в формат DeathMath: {data.get('model', 'Unknown')}")
237
+
238
+ # Конвертируем данные с примерным соответствием:
239
+ # math_score = среднее(musicmc, booksmc, mmluproru)
240
+ # physics_score = lawmc или moviesmc
241
+ math_score = 0.0
242
+ math_components = 0
243
+
244
+ if "musicmc" in data and data["musicmc"] is not None:
245
+ math_score += float(data["musicmc"])
246
+ math_components += 1
247
+
248
+ if "booksmc" in data and data["booksmc"] is not None:
249
+ math_score += float(data["booksmc"])
250
+ math_components += 1
251
+
252
+ if "mmluproru" in data and data["mmluproru"] is not None:
253
+ math_score += float(data["mmluproru"])
254
+ math_components += 1
255
+
256
+ if math_components > 0:
257
+ math_score /= math_components
258
+
259
+ # Для physics_score используем значение lawmc или moviesmc (что доступно)
260
+ physics_score = 0.0
261
+ if "lawmc" in data and data["lawmc"] is not None:
262
+ physics_score = float(data["lawmc"])
263
+ elif "moviesmc" in data and data["moviesmc"] is not None:
264
+ physics_score = float(data["moviesmc"])
265
+
266
+ # Общий скор - среднее арифметическое
267
+ avg_score = (math_score + physics_score) / 2 if math_score or physics_score else 0.0
268
+
269
+ converted_data = {
270
+ "model_name": data.get("model", "Unknown"),
271
+ "score": avg_score,
272
+ "math_score": math_score,
273
+ "physics_score": physics_score,
274
+ "total_tokens": int(data.get("total_tokens", 0)),
275
+ "evaluation_time": float(data.get("evaluation_time", 0.0)),
276
+ "system_prompt": data.get("system_prompt",
277
+ "Вы - полезный помощник по математике и физике. Ответьте на русском языке.")
278
+ }
279
+
280
+ return converted_data
281
+
282
+ # Если формат неизвестен, возвращаем стандартный шаблон
283
+ logging.warning(f"Неизвестный формат данных модели, использую шаблон")
284
+ return {
285
+ "model_name": data.get("model_name", data.get("model", "Unknown")),
286
+ "score": 0.0,
287
+ "math_score": 0.0,
288
+ "physics_score": 0.0,
289
+ "total_tokens": 0,
290
+ "evaluation_time": 0.0,
291
+ "system_prompt": "Вы - полезный помощник по математике и физике. Ответьте на русском языке."
292
+ }