MsRandom commited on
Commit
371ec07
β€’
1 Parent(s): 22d4e0b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -36
app.py CHANGED
@@ -14,22 +14,23 @@ WANDB_RUN_PATH = os.environ["WANDB_RUN_PATH"]
14
 
15
  REFRESH_RATE = 30
16
  NET_UID = 39
17
- AVERAGE_BENCHMARK_TIME_WARNING_THRESHOLD = 600 # 10 minutes
18
  ETA_WARNING_THRESHOLD = 43200 # 12 hours
 
 
19
 
20
  subtensor = bt.subtensor()
21
  metagraph = bt.metagraph(netuid=NET_UID)
22
 
23
- demo = gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}", fill_height=True, fill_width=True)
24
 
25
-
26
- class Status(Enum):
27
- BENCHMARKING = ("Benchmarking", "orange")
28
- DONE = ("Done", "springgreen")
29
- BROKEN = ("Broken", "red")
30
  STOPPED = ("Stopped", "red")
31
  CRASHED = ("Crashed", "red")
32
- INITIALIZING = ("Initializing", "orange")
33
 
34
  def get_alt_time_text(self) -> str:
35
  return "∞" if self.is_broken() else "N/A"
@@ -41,12 +42,12 @@ class Status(Enum):
41
  return self.value[1]
42
 
43
  def is_broken(self):
44
- return self == Status.BROKEN or self == Status.STOPPED or self == Status.CRASHED or self == Status.INITIALIZING
45
 
46
 
47
  @dataclass
48
  class State:
49
- status: Status
50
  hotkey: str
51
  name: str
52
  version: str
@@ -123,11 +124,7 @@ def fetch_wandb_data():
123
  average_benchmark_time = float(value)
124
 
125
  elif key == "invalid":
126
- try:
127
- invalid = dict(value)
128
- except TypeError:
129
- invalid = {uid: "Unknown" for uid in value}
130
-
131
 
132
  elif key == "submissions":
133
  submissions = {int(uid) for uid in value.keys()}
@@ -135,25 +132,27 @@ def fetch_wandb_data():
135
  elif key == "benchmarks":
136
  benchmarks = {int(uid) for uid in value.keys()}
137
 
138
- benchmarks = set(benchmarks) - set(invalid.keys())
139
 
140
- status = Status.BENCHMARKING
141
  run_state = run.state
142
  if run_state == "finished":
143
- status = Status.STOPPED
144
  elif run_state == "crashed":
145
- status = Status.CRASHED
146
- elif len(submissions) == len(benchmarks) + len(invalid):
147
- status = Status.DONE
148
- elif not submissions or (not average_benchmark_time and benchmarks):
149
- if 12 <= now.hour < 13:
150
- status = Status.INITIALIZING
151
- else:
152
- status = Status.BROKEN
 
 
 
153
 
154
  block = subtensor.get_current_block()
155
  data[uid] = State(
156
- status=status,
157
  hotkey=run.config["hotkey"],
158
  name=get_identity(uid) or run.config["hotkey"],
159
  version=run.tags[1][8:],
@@ -196,26 +195,26 @@ def get_data() -> gr.Dataframe:
196
  now = datetime.now(tz=ZoneInfo("US/Pacific"))
197
 
198
  for uid, state in data.items():
199
- eta = int(state.average_benchmark_time * (state.submissions - (state.benchmarks + state.invalid)))
200
  time_left = timedelta(seconds=eta)
201
  eta_date = now + time_left
202
- eta_time = eta_date.strftime("%Y-%m-%d %I:%M:%S %p") if eta > 0 and state.status == Status.BENCHMARKING else state.status.get_alt_time_text()
203
 
204
- average_time_text = f"{timedelta(seconds=int(state.average_benchmark_time))}" if state.average_benchmark_time else state.status.get_alt_time_text(),
205
 
206
  elements.append((
207
  uid,
208
  state.name,
209
  f"<span style='color: {'springgreen' if state.version == latest_version else 'red'}'>{state.version}</span>",
210
- f"<span style='color: {state.status.color()}'>{state.status.name()}</span>",
211
- state.benchmarks + state.invalid,
212
  state.submissions,
213
  state.invalid,
214
  f"<span style='color: {'orange' if state.average_benchmark_time > AVERAGE_BENCHMARK_TIME_WARNING_THRESHOLD else 'springgreen'}'>{average_time_text[0]}</span>",
215
  f"<span style='color: {'orange' if eta > ETA_WARNING_THRESHOLD else 'springgreen'}'>{eta_time}</span>",
216
- f"<span style='color: {'orange' if eta > ETA_WARNING_THRESHOLD else 'springgreen'}'>{time_left if eta > 0 and state.status == Status.BENCHMARKING else state.status.get_alt_time_text()}</span>",
217
- f"<span style='color: {'springgreen' if state.vtrust > 0.75 else 'red'}'>{state.vtrust:.4f}</span>",
218
- f"<span style='color: {'springgreen' if state.updated < 1000 else 'red'}'>{state.updated}</span>",
219
  ))
220
 
221
  return gr.Dataframe(
@@ -228,7 +227,7 @@ def get_data() -> gr.Dataframe:
228
 
229
 
230
  def main():
231
- with demo:
232
  table = gr.Dataframe()
233
  table.attach_load_event(lambda: get_data(), None)
234
  demo.launch()
 
14
 
15
  REFRESH_RATE = 30
16
  NET_UID = 39
17
+ AVERAGE_BENCHMARK_TIME_WARNING_THRESHOLD = 300 # 5 minutes
18
  ETA_WARNING_THRESHOLD = 43200 # 12 hours
19
+ UPDATED_WARNING_THRESHOLD = 1000
20
+ VTRUST_WARNING_THRESHOLD = 0.75
21
 
22
  subtensor = bt.subtensor()
23
  metagraph = bt.metagraph(netuid=NET_UID)
24
 
 
25
 
26
+ class BenchmarkState(Enum):
27
+ NOT_STARTED = ("Not Started", "orange")
28
+ IN_PROGRESS = ("In Progress", "orange")
29
+ FINISHED = ("Finished", "springgreen")
30
+ OUT_OF_DATE = ("Out of Date", "red")
31
  STOPPED = ("Stopped", "red")
32
  CRASHED = ("Crashed", "red")
33
+ FAILED = ("Failed", "red")
34
 
35
  def get_alt_time_text(self) -> str:
36
  return "∞" if self.is_broken() else "N/A"
 
42
  return self.value[1]
43
 
44
  def is_broken(self):
45
+ return self == BenchmarkState.NOT_STARTED or self == BenchmarkState.STOPPED or self == BenchmarkState.CRASHED or self == BenchmarkState.FAILED
46
 
47
 
48
  @dataclass
49
  class State:
50
+ benchmarking_state: BenchmarkState
51
  hotkey: str
52
  name: str
53
  version: str
 
124
  average_benchmark_time = float(value)
125
 
126
  elif key == "invalid":
127
+ invalid = dict(value)
 
 
 
 
128
 
129
  elif key == "submissions":
130
  submissions = {int(uid) for uid in value.keys()}
 
132
  elif key == "benchmarks":
133
  benchmarks = {int(uid) for uid in value.keys()}
134
 
 
135
 
136
+ benchmarking_state: BenchmarkState
137
  run_state = run.state
138
  if run_state == "finished":
139
+ benchmarking_state = BenchmarkState.STOPPED
140
  elif run_state == "crashed":
141
+ benchmarking_state = BenchmarkState.CRASHED
142
+ elif run_state == "failed":
143
+ benchmarking_state = BenchmarkState.FAILED
144
+ elif "benchmarking_state" in run.summary:
145
+ benchmarking_state = BenchmarkState[run.summary.get("benchmarking_state")]
146
+ else:
147
+ benchmarking_state = BenchmarkState.OUT_OF_DATE
148
+
149
+ for invalid_uid, reason in invalid.items():
150
+ if not reason.startswith("Duplicate of UID"):
151
+ benchmarks.add(invalid_uid)
152
 
153
  block = subtensor.get_current_block()
154
  data[uid] = State(
155
+ benchmarking_state=benchmarking_state,
156
  hotkey=run.config["hotkey"],
157
  name=get_identity(uid) or run.config["hotkey"],
158
  version=run.tags[1][8:],
 
195
  now = datetime.now(tz=ZoneInfo("US/Pacific"))
196
 
197
  for uid, state in data.items():
198
+ eta = int(state.average_benchmark_time * (state.submissions - state.benchmarks))
199
  time_left = timedelta(seconds=eta)
200
  eta_date = now + time_left
201
+ eta_time = eta_date.strftime("%Y-%m-%d %I:%M:%S %p") if eta > 0 and state.benchmarking_state == BenchmarkState.IN_PROGRESS else state.benchmarking_state.get_alt_time_text()
202
 
203
+ average_time_text = f"{timedelta(seconds=int(state.average_benchmark_time))}" if state.average_benchmark_time else state.benchmarking_state.get_alt_time_text(),
204
 
205
  elements.append((
206
  uid,
207
  state.name,
208
  f"<span style='color: {'springgreen' if state.version == latest_version else 'red'}'>{state.version}</span>",
209
+ f"<span style='color: {state.benchmarking_state.color()}'>{state.benchmarking_state.name()}</span>",
210
+ state.benchmarks,
211
  state.submissions,
212
  state.invalid,
213
  f"<span style='color: {'orange' if state.average_benchmark_time > AVERAGE_BENCHMARK_TIME_WARNING_THRESHOLD else 'springgreen'}'>{average_time_text[0]}</span>",
214
  f"<span style='color: {'orange' if eta > ETA_WARNING_THRESHOLD else 'springgreen'}'>{eta_time}</span>",
215
+ f"<span style='color: {'orange' if eta > ETA_WARNING_THRESHOLD else 'springgreen'}'>{time_left if eta > 0 and state.benchmarking_state == BenchmarkState.IN_PROGRESS else state.benchmarking_state.get_alt_time_text()}</span>",
216
+ f"<span style='color: {'springgreen' if state.vtrust > VTRUST_WARNING_THRESHOLD else 'red'}'>{state.vtrust:.4f}</span>",
217
+ f"<span style='color: {'springgreen' if state.updated < UPDATED_WARNING_THRESHOLD else 'red'}'>{state.updated}</span>",
218
  ))
219
 
220
  return gr.Dataframe(
 
227
 
228
 
229
  def main():
230
+ with gr.Blocks(css=".typewriter {font-family: 'JMH Typewriter', sans-serif;}", fill_height=True, fill_width=True) as demo:
231
  table = gr.Dataframe()
232
  table.attach_load_event(lambda: get_data(), None)
233
  demo.launch()