MsRandom AlexNijjar commited on
Commit
05915c3
1 Parent(s): 25306b9

fix leaderboard updating and order (#1)

Browse files

- implement continuous leaderboard fetching (0eac6a7420fe64d32f7b7b6cf3e0ac53b3b5204b)
- fix duplicate entries and sort order (aa04fbd3d622bfa4bf8628f3d2d18ca8d20d7d5e)


Co-authored-by: Alex Nijjar <[email protected]>

Files changed (3) hide show
  1. .gitignore +1 -0
  2. app.py +39 -18
  3. requirements.txt +1 -0
.gitignore CHANGED
@@ -4,5 +4,6 @@ __pycache__/
4
  .ipynb_checkpoints
5
  *ipynb
6
  .vscode/
 
7
 
8
  logs/
 
4
  .ipynb_checkpoints
5
  *ipynb
6
  .vscode/
7
+ .idea/
8
 
9
  logs/
app.py CHANGED
@@ -1,13 +1,15 @@
1
  import os
 
2
  from dataclasses import dataclass
3
 
4
- from substrateinterface import Keypair
5
- from wandb.apis.public import Runs, Run
6
-
7
- import wandb
8
  import gradio as gr
 
 
 
 
9
 
10
  wandb_api = wandb.Api()
 
11
 
12
  SOURCE_VALIDATOR_UID = int(os.environ["SOURCE_VALIDATOR_UID"])
13
  WANDB_RUN_PATH = os.environ["WANDB_RUN_PATH"]
@@ -42,8 +44,11 @@ def is_valid_run(run: Run):
42
  return False
43
 
44
 
45
- def main():
46
- demo = gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}")
 
 
 
47
  with demo:
48
  with gr.Accordion("Contest #1 Submission Leader: New Dream SDXL on NVIDIA RTX 4090s"):
49
  runs: Runs = wandb_api.runs(
@@ -58,39 +63,55 @@ def main():
58
  if not is_valid_run(run):
59
  continue
60
 
 
61
  for key, value in run.summary.items():
62
  if key.startswith("_"):
63
  continue
64
 
 
 
65
  try:
66
  uid = int(key)
67
 
68
- entries[uid] = LeaderboardEntry(
69
- uid=uid,
70
- rank=value["rank"],
71
- model=value["model"],
72
- score=value["score"],
73
- hotkey=value["hotkey"],
74
- previous_day_winner=value["multiday_winner"],
75
- )
 
76
  except Exception:
77
  continue
78
 
 
 
 
79
  leaderboard: list[tuple] = [
80
- (entry.uid, entry.model, entry.score, entry.hotkey, entry.previous_day_winner)
81
  for entry in sorted(entries.values(), key=lambda entry: entry.rank)
82
  ]
83
 
84
  gr.components.Dataframe(
85
  value=leaderboard,
86
- headers=["Uid", "Model", "Score", "Hotkey", "Previous day winner"],
87
- datatype=["number", "markdown", "number", "markdown", "bool"],
88
  elem_id="leaderboard-table",
89
  interactive=False,
90
  visible=True,
91
  )
92
 
93
- demo.launch()
 
 
 
 
 
 
 
 
 
94
 
95
 
96
  main()
 
1
  import os
2
+ import time
3
  from dataclasses import dataclass
4
 
 
 
 
 
5
  import gradio as gr
6
+ import schedule
7
+ import wandb
8
+ from substrateinterface import Keypair
9
+ from wandb.apis.public import Run, Runs
10
 
11
  wandb_api = wandb.Api()
12
+ demo = gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}")
13
 
14
  SOURCE_VALIDATOR_UID = int(os.environ["SOURCE_VALIDATOR_UID"])
15
  WANDB_RUN_PATH = os.environ["WANDB_RUN_PATH"]
 
44
  return False
45
 
46
 
47
+ def refresh_leaderboard():
48
+ print("Refreshing Leaderboard")
49
+
50
+ demo.clear()
51
+
52
  with demo:
53
  with gr.Accordion("Contest #1 Submission Leader: New Dream SDXL on NVIDIA RTX 4090s"):
54
  runs: Runs = wandb_api.runs(
 
63
  if not is_valid_run(run):
64
  continue
65
 
66
+ has_data = False
67
  for key, value in run.summary.items():
68
  if key.startswith("_"):
69
  continue
70
 
71
+ has_data = True
72
+
73
  try:
74
  uid = int(key)
75
 
76
+ if uid not in entries:
77
+ entries[uid] = LeaderboardEntry(
78
+ uid=uid,
79
+ rank=value["rank"],
80
+ model=value["model"],
81
+ score=value["score"],
82
+ hotkey=value["hotkey"],
83
+ previous_day_winner=value["multiday_winner"],
84
+ )
85
  except Exception:
86
  continue
87
 
88
+ if has_data:
89
+ break
90
+
91
  leaderboard: list[tuple] = [
92
+ (entry.rank + 1, entry.uid, entry.model, entry.score, entry.hotkey, entry.previous_day_winner)
93
  for entry in sorted(entries.values(), key=lambda entry: entry.rank)
94
  ]
95
 
96
  gr.components.Dataframe(
97
  value=leaderboard,
98
+ headers=["Rank", "Uid", "Model", "Score", "Hotkey", "Previous day winner"],
99
+ datatype=["number", "number", "markdown", "number", "markdown", "bool"],
100
  elem_id="leaderboard-table",
101
  interactive=False,
102
  visible=True,
103
  )
104
 
105
+
106
+ def main():
107
+ refresh_leaderboard()
108
+ schedule.every().day.at("09:30:00", "America/New_York").do(refresh_leaderboard)
109
+
110
+ demo.launch(prevent_thread_lock=True)
111
+
112
+ while True:
113
+ schedule.run_pending()
114
+ time.sleep(1)
115
 
116
 
117
  main()
requirements.txt CHANGED
@@ -2,3 +2,4 @@ black
2
  gradio
3
  wandb
4
  substrate-interface
 
 
2
  gradio
3
  wandb
4
  substrate-interface
5
+ schedule