AlexNijjar commited on
Commit
aed38fa
1 Parent(s): 6b0d74c

Use chain identity

Browse files
Files changed (2) hide show
  1. app.py +27 -24
  2. requirements.txt +1 -0
app.py CHANGED
@@ -5,6 +5,7 @@ from dataclasses import dataclass
5
  from datetime import datetime
6
  from zoneinfo import ZoneInfo
7
 
 
8
  import gradio as gr
9
  import numpy as np
10
  import plotly.graph_objects as go
@@ -12,35 +13,24 @@ import wandb
12
  from substrateinterface import Keypair
13
  from wandb.apis.public import Run
14
 
15
- HOTKEYS_TO_KNOWN_VALIDATORS: dict[str, str] = {
16
- "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1": "Taostats & Corcel",
17
- "5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3": "Openτensor Foundaτion",
18
- "5FFApaS75bv5pJHfAp2FVLBj9ZaXuFDjEypsaBNc1wCfe52v": "RoundTable21",
19
- "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2": "Foundry",
20
- "5HK5tp6t2S59DywmHRWPBVJeJ86T61KjurYqeooqj8sREpeN": "Bittensor Guru",
21
- "5GP7c3fFazW9GXK8Up3qgu2DJBk8inu4aK9TZy3RuoSWVCMi": "Datura",
22
- "5EhvL1FVkQPpMjZX4MAADcW42i3xPSF1KiCpuaxTYVr28sux": "TAO-Validator.com",
23
- "5E4z3h9yVhmQyCFWNbY9BPpwhx4xFiPwq3eeqmBgVF6KULde": "Tensorplex Labs",
24
- "5Hb63SvXBXqZ8zw6mwW1A39fHdqUrJvohXgepyhp2jgWedSB": "Miner's Union Validator",
25
- "5CXRfP2ekFhe62r7q3vppRajJmGhTi7vwvb2yr79jveZ282w": "Rizzo",
26
- "5CVS9d1NcQyWKUyadLevwGxg6LgBcF9Lik6NSnbe5q59jwhE": "Ary van der Touw",
27
- "5Fq5v71D4LX8Db1xsmRSy6udQThcZ8sFDqxQFwnUZ1BuqY5A": "NorthTensor",
28
- "5CsvRJXuR955WojnGMdok1hbhffZyB4N5ocrv82f3p5A2zVp": "Owl Ventures",
29
- "5HNQURvmjjYhTSksi8Wfsw676b4owGwfLR2BFAQzG7H3HhYf": "Neural Internet",
30
- "5DvTpiniW9s3APmHRYn8FroUWyfnLtrsid5Mtn5EwMXHN2ed": "FirstTensor.com",
31
- }
32
-
33
  WANDB_RUN_PATH = os.environ["WANDB_RUN_PATH"]
34
  SOURCE_VALIDATOR_UID = int(os.environ["SOURCE_VALIDATOR_UID"])
35
 
36
  START_DATE = datetime(2024, 9, 17)
 
37
  REFRESH_RATE = 60 * 30 # 30 minutes
38
  GRAPH_HISTORY_DAYS = 30
39
  MAX_GRAPH_ENTRIES = 10
40
 
41
  wandb_api = wandb.Api()
42
  demo = gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}", fill_height=True, fill_width=True)
 
 
 
 
 
43
  runs: dict[int, list[Run]] = {}
 
44
 
45
 
46
  @dataclass
@@ -251,22 +241,36 @@ def fetch_wandb_data():
251
  runs = dict(sorted(runs.items(), key=lambda item: item[0]))
252
 
253
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  def get_choices() -> list[tuple[str, int]]:
255
  choices: list[tuple[str, int]] = []
256
  for uid, run in runs.items():
257
- hotkey = run[0].config["hotkey"]
258
  benchmarks = dict(run[0].summary.get("benchmarks", {}))
259
  finished = any("winner" in value for value in benchmarks.values())
260
  progress_text = "Finished" if finished else "In Progress"
261
- if hotkey in HOTKEYS_TO_KNOWN_VALIDATORS:
262
- choices.append((f"{uid} - {HOTKEYS_TO_KNOWN_VALIDATORS[hotkey]} ({progress_text})", uid))
263
- else:
264
- choices.append((str(f"{uid} - {hotkey}"), uid))
265
  return choices
266
 
267
 
268
  def refresh():
 
269
  fetch_wandb_data()
 
270
  demo.clear()
271
  now = datetime.now(tz=ZoneInfo("America/New_York"))
272
 
@@ -298,7 +302,6 @@ def refresh():
298
  label="Source Validator"
299
  )
300
 
301
-
302
  leaderboard = gr.components.Dataframe(
303
  create_leaderboard(runs[dropdown.value]),
304
  headers=["Uid", "Winner", "Model", "Score", "Gen Time", "Similarity", "Size", "VRAM Usage", "Power Usage", "Hotkey"],
 
5
  from datetime import datetime
6
  from zoneinfo import ZoneInfo
7
 
8
+ import bittensor as bt
9
  import gradio as gr
10
  import numpy as np
11
  import plotly.graph_objects as go
 
13
  from substrateinterface import Keypair
14
  from wandb.apis.public import Run
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  WANDB_RUN_PATH = os.environ["WANDB_RUN_PATH"]
17
  SOURCE_VALIDATOR_UID = int(os.environ["SOURCE_VALIDATOR_UID"])
18
 
19
  START_DATE = datetime(2024, 9, 17)
20
+ NET_UID = 39
21
  REFRESH_RATE = 60 * 30 # 30 minutes
22
  GRAPH_HISTORY_DAYS = 30
23
  MAX_GRAPH_ENTRIES = 10
24
 
25
  wandb_api = wandb.Api()
26
  demo = gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}", fill_height=True, fill_width=True)
27
+
28
+ subtensor = bt.subtensor()
29
+ metagraph = bt.metagraph(netuid=NET_UID)
30
+ bt.logging.disable_logging()
31
+
32
  runs: dict[int, list[Run]] = {}
33
+ validator_identities: dict[int, str] = {}
34
 
35
 
36
  @dataclass
 
241
  runs = dict(sorted(runs.items(), key=lambda item: item[0]))
242
 
243
 
244
+ def fetch_identities():
245
+ validator_identities.clear()
246
+ for uid in range(metagraph.n.item()):
247
+ if metagraph.validator_trust[uid]:
248
+ identity = subtensor.substrate.query('SubtensorModule', 'Identities', [metagraph.coldkeys[uid]])
249
+ if identity != None:
250
+ validator_identities[uid] = identity.value["name"]
251
+
252
+
253
+ def get_validator_name(validator_uid: int) -> str:
254
+ if validator_uid in validator_identities:
255
+ return validator_identities[validator_uid]
256
+ else:
257
+ return metagraph.hotkeys[validator_uid]
258
+
259
+
260
  def get_choices() -> list[tuple[str, int]]:
261
  choices: list[tuple[str, int]] = []
262
  for uid, run in runs.items():
 
263
  benchmarks = dict(run[0].summary.get("benchmarks", {}))
264
  finished = any("winner" in value for value in benchmarks.values())
265
  progress_text = "Finished" if finished else "In Progress"
266
+ choices.append((f"{uid} - {get_validator_name(uid)} ({progress_text})", uid))
 
 
 
267
  return choices
268
 
269
 
270
  def refresh():
271
+ metagraph.sync(subtensor=subtensor)
272
  fetch_wandb_data()
273
+ fetch_identities()
274
  demo.clear()
275
  now = datetime.now(tz=ZoneInfo("America/New_York"))
276
 
 
302
  label="Source Validator"
303
  )
304
 
 
305
  leaderboard = gr.components.Dataframe(
306
  create_leaderboard(runs[dropdown.value]),
307
  headers=["Uid", "Winner", "Model", "Score", "Gen Time", "Similarity", "Size", "VRAM Usage", "Power Usage", "Hotkey"],
requirements.txt CHANGED
@@ -1,5 +1,6 @@
1
  black
2
  gradio
 
3
  wandb
4
  substrate-interface
5
  plotly
 
1
  black
2
  gradio
3
+ bittensor
4
  wandb
5
  substrate-interface
6
  plotly