AlexNijjar commited on
Commit
123aac3
1 Parent(s): 114b3d6

Use chain identity

Browse files
Files changed (2) hide show
  1. app.py +33 -23
  2. requirements.txt +1 -0
app.py CHANGED
@@ -5,36 +5,30 @@ from enum import Enum
5
  from time import sleep
6
  from zoneinfo import ZoneInfo
7
 
 
8
  import gradio as gr
9
  from packaging import version
10
  from substrateinterface import Keypair
11
  from wandb.apis.importers import wandb
12
  from wandb.apis.public import Run
13
 
14
- HOTKEYS_TO_KNOWN_VALIDATORS: dict[str, str] = {
15
- "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1": "Taostats & Corcel",
16
- "5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3": "Openτensor Foundaτion",
17
- "5FFApaS75bv5pJHfAp2FVLBj9ZaXuFDjEypsaBNc1wCfe52v": "RoundTable21",
18
- "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2": "Foundry",
19
- "5HK5tp6t2S59DywmHRWPBVJeJ86T61KjurYqeooqj8sREpeN": "Bittensor Guru",
20
- "5GP7c3fFazW9GXK8Up3qgu2DJBk8inu4aK9TZy3RuoSWVCMi": "Datura",
21
- "5EhvL1FVkQPpMjZX4MAADcW42i3xPSF1KiCpuaxTYVr28sux": "TAO-Validator.com",
22
- "5E4z3h9yVhmQyCFWNbY9BPpwhx4xFiPwq3eeqmBgVF6KULde": "Tensorplex Labs",
23
- "5Hb63SvXBXqZ8zw6mwW1A39fHdqUrJvohXgepyhp2jgWedSB": "Miner's Union Validator",
24
- "5CXRfP2ekFhe62r7q3vppRajJmGhTi7vwvb2yr79jveZ282w": "Rizzo",
25
- "5CVS9d1NcQyWKUyadLevwGxg6LgBcF9Lik6NSnbe5q59jwhE": "Ary van der Touw",
26
- "5Fq5v71D4LX8Db1xsmRSy6udQThcZ8sFDqxQFwnUZ1BuqY5A": "NorthTensor",
27
- "5CsvRJXuR955WojnGMdok1hbhffZyB4N5ocrv82f3p5A2zVp": "Owl Ventures",
28
- "5HNQURvmjjYhTSksi8Wfsw676b4owGwfLR2BFAQzG7H3HhYf": "Neural Internet",
29
- "5DvTpiniW9s3APmHRYn8FroUWyfnLtrsid5Mtn5EwMXHN2ed": "FirstTensor.com",
30
- }
31
-
32
  WANDB_RUN_PATH = os.environ["WANDB_RUN_PATH"]
33
 
34
  REFRESH_RATE = 60 * 5 # 5 minutes
 
35
  AVERAGE_BENCHMARK_TIME_WARNING_THRESHOLD = 600 # 10 minutes
36
  ETA_WARNING_THRESHOLD = 43200 # 12 hours
37
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  class Status(Enum):
40
  IN_PROGRESS = ("In Progress", "orange")
@@ -62,8 +56,6 @@ class State:
62
  average_benchmark_time: float
63
 
64
 
65
- wandb_api = wandb.Api()
66
- demo = gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}", fill_height=True, fill_width=True)
67
  data: dict[int, State] = {}
68
 
69
 
@@ -144,6 +136,22 @@ def fetch_wandb_data():
144
  data = dict(sorted(data.items()))
145
 
146
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  def get_latest_version() -> str:
148
  latest_version = version.parse("0.0.0")
149
  for source_validator_uid, state in data.items():
@@ -154,7 +162,9 @@ def get_latest_version() -> str:
154
 
155
 
156
  def refresh():
 
157
  fetch_wandb_data()
 
158
  demo.clear()
159
  now = datetime.now(tz=ZoneInfo("America/New_York"))
160
 
@@ -163,7 +173,7 @@ def refresh():
163
  elements: list[tuple] = []
164
  latest_version = get_latest_version()
165
 
166
- for source_validator_uid, state in data.items():
167
  eta = int(state.average_benchmark_time * (state.submissions - (state.benchmarks + state.invalid)))
168
  time_left = timedelta(seconds=eta)
169
  eta_date = now + time_left
@@ -172,8 +182,8 @@ def refresh():
172
  average_time_text = f"{timedelta(seconds=int(state.average_benchmark_time))}" if state.average_benchmark_time else state.status.get_alt_time_text(),
173
 
174
  elements.append((
175
- source_validator_uid,
176
- HOTKEYS_TO_KNOWN_VALIDATORS.get(state.hotkey, state.hotkey),
177
  f"<span style='color: {'springgreen' if state.version == latest_version else 'red'}'>{state.version}</span>",
178
  f"<span style='color: {state.status.color()}'>{state.status.name()}</span>",
179
  state.benchmarks + state.invalid,
 
5
  from time import sleep
6
  from zoneinfo import ZoneInfo
7
 
8
+ import bittensor as bt
9
  import gradio as gr
10
  from packaging import version
11
  from substrateinterface import Keypair
12
  from wandb.apis.importers import wandb
13
  from wandb.apis.public import Run
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  WANDB_RUN_PATH = os.environ["WANDB_RUN_PATH"]
16
 
17
  REFRESH_RATE = 60 * 5 # 5 minutes
18
+ NET_UID = 39
19
  AVERAGE_BENCHMARK_TIME_WARNING_THRESHOLD = 600 # 10 minutes
20
  ETA_WARNING_THRESHOLD = 43200 # 12 hours
21
 
22
+ subtensor = bt.subtensor()
23
+ metagraph = bt.metagraph(netuid=NET_UID)
24
+ bt.logging.disable_logging()
25
+
26
+ runs: dict[int, list[Run]] = {}
27
+ validator_identities: dict[int, str] = {}
28
+
29
+ wandb_api = wandb.Api()
30
+ demo = gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}", fill_height=True, fill_width=True)
31
+
32
 
33
  class Status(Enum):
34
  IN_PROGRESS = ("In Progress", "orange")
 
56
  average_benchmark_time: float
57
 
58
 
 
 
59
  data: dict[int, State] = {}
60
 
61
 
 
136
  data = dict(sorted(data.items()))
137
 
138
 
139
+ def fetch_identities():
140
+ validator_identities.clear()
141
+ for uid in range(metagraph.n.item()):
142
+ if metagraph.validator_trust[uid]:
143
+ identity = subtensor.substrate.query('SubtensorModule', 'Identities', [metagraph.coldkeys[uid]])
144
+ if identity != None:
145
+ validator_identities[uid] = identity.value["name"]
146
+
147
+
148
+ def get_validator_name(validator_uid: int) -> str:
149
+ if validator_uid in validator_identities:
150
+ return validator_identities[validator_uid]
151
+ else:
152
+ return metagraph.hotkeys[validator_uid]
153
+
154
+
155
  def get_latest_version() -> str:
156
  latest_version = version.parse("0.0.0")
157
  for source_validator_uid, state in data.items():
 
162
 
163
 
164
  def refresh():
165
+ metagraph.sync(subtensor=subtensor)
166
  fetch_wandb_data()
167
+ fetch_identities()
168
  demo.clear()
169
  now = datetime.now(tz=ZoneInfo("America/New_York"))
170
 
 
173
  elements: list[tuple] = []
174
  latest_version = get_latest_version()
175
 
176
+ for uid, state in data.items():
177
  eta = int(state.average_benchmark_time * (state.submissions - (state.benchmarks + state.invalid)))
178
  time_left = timedelta(seconds=eta)
179
  eta_date = now + time_left
 
182
  average_time_text = f"{timedelta(seconds=int(state.average_benchmark_time))}" if state.average_benchmark_time else state.status.get_alt_time_text(),
183
 
184
  elements.append((
185
+ uid,
186
+ get_validator_name(uid),
187
  f"<span style='color: {'springgreen' if state.version == latest_version else 'red'}'>{state.version}</span>",
188
  f"<span style='color: {state.status.color()}'>{state.status.name()}</span>",
189
  state.benchmarks + state.invalid,
requirements.txt CHANGED
@@ -1,5 +1,6 @@
1
  gradio
2
  wandb
 
3
  substrate-interface
4
  packaging
5
  polars
 
1
  gradio
2
  wandb
3
+ bittensor
4
  substrate-interface
5
  packaging
6
  polars