k-mktr commited on
Commit
462b18f
·
verified ·
1 Parent(s): bb06291

Update leaderboard.py

Browse files
Files changed (1) hide show
  1. leaderboard.py +18 -104
leaderboard.py CHANGED
@@ -7,6 +7,7 @@ import config
7
  import math
8
  from nc_py_api import Nextcloud
9
 
 
10
  # Dictionary to store ELO ratings
11
  elo_ratings = {}
12
 
@@ -27,37 +28,6 @@ def load_leaderboard() -> Dict[str, Any]:
27
  print(f"Error loading leaderboard: {str(e)}")
28
  return {}
29
 
30
- def load_archived_models() -> Dict[str, Any]:
31
- try:
32
- nc = Nextcloud(
33
- nextcloud_url=config.NEXTCLOUD_URL,
34
- nc_auth_user=config.NEXTCLOUD_USERNAME,
35
- nc_auth_pass=config.NEXTCLOUD_PASSWORD
36
- )
37
- file_content = nc.files.download(config.ARCHIVED_MODELS_PATH)
38
- if file_content:
39
- return json.loads(file_content.decode('utf-8'))
40
- else:
41
- print(f"Error loading archived models: Received empty content from Nextcloud at {config.ARCHIVED_MODELS_PATH}")
42
- return {}
43
- except Exception as e:
44
- print(f"Error loading archived models: {str(e)}")
45
- return {}
46
-
47
- def save_archived_models(archived_data: Dict[str, Any]) -> bool:
48
- try:
49
- nc = Nextcloud(
50
- nextcloud_url=config.NEXTCLOUD_URL,
51
- nc_auth_user=config.NEXTCLOUD_USERNAME,
52
- nc_auth_pass=config.NEXTCLOUD_PASSWORD
53
- )
54
- json_data = json.dumps(archived_data, indent=2)
55
- nc.files.upload(config.ARCHIVED_MODELS_PATH, json_data.encode('utf-8'))
56
- return True
57
- except Exception as e:
58
- print(f"Error saving archived models: {str(e)}")
59
- return False
60
-
61
  def save_leaderboard(leaderboard_data: Dict[str, Any]) -> bool:
62
  try:
63
  nc = Nextcloud(
@@ -142,27 +112,21 @@ def update_elo_ratings(winner, loser):
142
 
143
  def initialize_elo_ratings():
144
  leaderboard = load_leaderboard()
145
- archived_models = load_archived_models()
146
-
147
- # Initialize ELO for active models
148
  for model, _ in config.get_approved_models():
149
- if model not in archived_models:
150
- size = get_model_size(model)
151
- elo_ratings[model] = 1000 + (size * 100)
152
 
153
- # Replay all battles to update ELO ratings for active models
154
  for model, data in leaderboard.items():
155
- if model not in archived_models: # Only process active models
156
- if model not in elo_ratings:
157
- elo_ratings[model] = 1000 + (get_model_size(model) * 100)
158
- for opponent, results in data['opponents'].items():
159
- if opponent not in archived_models: # Only consider active opponents
160
- if opponent not in elo_ratings:
161
- elo_ratings[opponent] = 1000 + (get_model_size(opponent) * 100)
162
- for _ in range(results['wins']):
163
- update_elo_ratings(model, opponent)
164
- for _ in range(results['losses']):
165
- update_elo_ratings(opponent, model)
166
 
167
  def ensure_elo_ratings_initialized():
168
  if not elo_ratings:
@@ -170,7 +134,6 @@ def ensure_elo_ratings_initialized():
170
 
171
  def update_leaderboard(winner: str, loser: str) -> Dict[str, Any]:
172
  leaderboard = load_leaderboard()
173
- archived_models = load_archived_models()
174
 
175
  if winner not in leaderboard:
176
  leaderboard[winner] = {"wins": 0, "losses": 0, "opponents": {}}
@@ -186,59 +149,16 @@ def update_leaderboard(winner: str, loser: str) -> Dict[str, Any]:
186
  # Update ELO ratings
187
  update_elo_ratings(winner, loser)
188
 
189
- # Check if any model needs to be archived
190
- for model_name in list(leaderboard.keys()):
191
- wins = leaderboard[model_name].get('wins', 0)
192
- losses = leaderboard[model_name].get('losses', 0)
193
- total_battles = wins + losses
194
-
195
- if total_battles >= config.ARCHIVE_BATTLE_THRESHOLD:
196
- print(f"Archiving model: {model_name} with {total_battles} battles")
197
- archived_models[model_name] = leaderboard.pop(model_name)
198
- if model_name in elo_ratings:
199
- del elo_ratings[model_name] # Remove from active ELO ratings
200
-
201
  save_leaderboard(leaderboard)
202
- save_archived_models(archived_models)
203
  return leaderboard
204
 
205
  def get_current_leaderboard() -> Dict[str, Any]:
206
- leaderboard = load_leaderboard()
207
- archived_models = load_archived_models()
208
-
209
- # Filter out archived models
210
- active_leaderboard = {model: data for model, data in leaderboard.items() if model not in archived_models}
211
- return active_leaderboard
212
 
213
  def get_human_readable_name(model_name: str) -> str:
214
  model_dict = dict(config.get_approved_models())
215
  return model_dict.get(model_name, model_name)
216
 
217
- def get_archived_models_list():
218
- archived_data = load_archived_models()
219
- table_data = []
220
- headers = ["Model", "Wins", "Losses", "Total Battles", "Win Rate"]
221
-
222
- for model, results in archived_data.items():
223
- wins = results.get('wins', 0)
224
- losses = results.get('losses', 0)
225
- total_battles = wins + losses
226
- win_rate = wins / total_battles if total_battles > 0 else 0
227
-
228
- human_readable = get_human_readable_name(model)
229
-
230
- row = [
231
- human_readable,
232
- wins,
233
- losses,
234
- total_battles,
235
- f"{win_rate:.1%}"
236
- ]
237
- table_data.append(row)
238
-
239
- table_data.sort(key=lambda x: x[3], reverse=True) # Sort by total battles
240
- return table_data
241
-
242
  def get_leaderboard():
243
  leaderboard = load_leaderboard()
244
 
@@ -311,15 +231,9 @@ def get_elo_leaderboard():
311
  headers = ["#", "Model", "ELO Rating", "Wins", "Losses", "Total Battles", "Win Rate"]
312
 
313
  leaderboard = load_leaderboard()
314
-
315
- # Filter out archived models from the active list
316
- archived_models = load_archived_models()
317
-
318
- # Combine approved models and models from the leaderboard, then filter out archived ones
319
  all_models = set(dict(config.get_approved_models()).keys()) | set(leaderboard.keys())
320
- active_models = [model for model in all_models if model not in archived_models]
321
-
322
- for model in active_models:
323
  # Get ELO rating
324
  rating = elo_ratings.get(model, 1000 + (get_model_size(model) * 100))
325
 
@@ -354,7 +268,7 @@ def get_elo_leaderboard():
354
  return table_data
355
 
356
  def create_backup():
357
- # while True:
358
  try:
359
  leaderboard_data = load_leaderboard()
360
  timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
@@ -370,7 +284,7 @@ def create_backup():
370
  print(f"Backup created on Nextcloud: {backup_path}")
371
  except Exception as e:
372
  print(f"Error creating backup: {e}")
373
- # time.sleep(43200) # Sleep for 12 HOURS
374
 
375
  def start_backup_thread():
376
  backup_thread = threading.Thread(target=create_backup, daemon=True)
 
7
  import math
8
  from nc_py_api import Nextcloud
9
 
10
+
11
  # Dictionary to store ELO ratings
12
  elo_ratings = {}
13
 
 
28
  print(f"Error loading leaderboard: {str(e)}")
29
  return {}
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  def save_leaderboard(leaderboard_data: Dict[str, Any]) -> bool:
32
  try:
33
  nc = Nextcloud(
 
112
 
113
  def initialize_elo_ratings():
114
  leaderboard = load_leaderboard()
 
 
 
115
  for model, _ in config.get_approved_models():
116
+ size = get_model_size(model)
117
+ elo_ratings[model] = 1000 + (size * 100)
 
118
 
119
+ # Replay all battles to update ELO ratings
120
  for model, data in leaderboard.items():
121
+ if model not in elo_ratings:
122
+ elo_ratings[model] = 1000 + (get_model_size(model) * 100)
123
+ for opponent, results in data['opponents'].items():
124
+ if opponent not in elo_ratings:
125
+ elo_ratings[opponent] = 1000 + (get_model_size(opponent) * 100)
126
+ for _ in range(results['wins']):
127
+ update_elo_ratings(model, opponent)
128
+ for _ in range(results['losses']):
129
+ update_elo_ratings(opponent, model)
 
 
130
 
131
  def ensure_elo_ratings_initialized():
132
  if not elo_ratings:
 
134
 
135
  def update_leaderboard(winner: str, loser: str) -> Dict[str, Any]:
136
  leaderboard = load_leaderboard()
 
137
 
138
  if winner not in leaderboard:
139
  leaderboard[winner] = {"wins": 0, "losses": 0, "opponents": {}}
 
149
  # Update ELO ratings
150
  update_elo_ratings(winner, loser)
151
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  save_leaderboard(leaderboard)
 
153
  return leaderboard
154
 
155
  def get_current_leaderboard() -> Dict[str, Any]:
156
+ return load_leaderboard()
 
 
 
 
 
157
 
158
  def get_human_readable_name(model_name: str) -> str:
159
  model_dict = dict(config.get_approved_models())
160
  return model_dict.get(model_name, model_name)
161
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  def get_leaderboard():
163
  leaderboard = load_leaderboard()
164
 
 
231
  headers = ["#", "Model", "ELO Rating", "Wins", "Losses", "Total Battles", "Win Rate"]
232
 
233
  leaderboard = load_leaderboard()
 
 
 
 
 
234
  all_models = set(dict(config.get_approved_models()).keys()) | set(leaderboard.keys())
235
+
236
+ for model in all_models:
 
237
  # Get ELO rating
238
  rating = elo_ratings.get(model, 1000 + (get_model_size(model) * 100))
239
 
 
268
  return table_data
269
 
270
  def create_backup():
271
+ while True:
272
  try:
273
  leaderboard_data = load_leaderboard()
274
  timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
 
284
  print(f"Backup created on Nextcloud: {backup_path}")
285
  except Exception as e:
286
  print(f"Error creating backup: {e}")
287
+ time.sleep(43200) # Sleep for 12 HOURS
288
 
289
  def start_backup_thread():
290
  backup_thread = threading.Thread(target=create_backup, daemon=True)