Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| from chain_data import WEIGHTS_BY_MINER, get_neurons, sync_chain, Weight | |
| from wandb_data import Key, get_current_runs | |
| def get_color_by_weight(weight: float) -> str: | |
| if weight < 0.001: | |
| return "gray" | |
| elif weight < 0.3: | |
| r = int(255) | |
| g = int((weight / 0.3) * 165) | |
| return f"rgb({r}, {g}, 0)" | |
| elif weight < 0.8: | |
| progress = (weight - 0.3) / 0.5 | |
| r = int(255 - (progress * 255)) | |
| g = int(165 + (progress * 90)) | |
| return f"rgb({r}, {g}, 0)" | |
| else: | |
| progress = (weight - 0.8) / 0.2 | |
| g = int(255 - ((1 - progress) * 50)) | |
| return f"rgb(0, {g}, 0)" | |
| def get_active_weights() -> dict[Key, list[tuple[Key, Weight]]]: | |
| runs = get_current_runs() | |
| weights: dict[Key, list[tuple[Key, Weight]]] = {} | |
| for hotkey, validator_weights in WEIGHTS_BY_MINER.items(): | |
| new_weights: list[tuple[Key, Weight]] = [] | |
| for validator_hotkey, weight in validator_weights: | |
| if validator_hotkey in [run.hotkey for run in runs]: | |
| new_weights.append((validator_hotkey, weight)) | |
| weights[hotkey] = new_weights | |
| return weights | |
| def create_weights(include_inactive: bool) -> gr.Dataframe: | |
| data: list[list] = [] | |
| sync_chain() | |
| headers = ["Miner UID", "Incentive"] | |
| datatype = ["number", "markdown"] | |
| weights = WEIGHTS_BY_MINER if include_inactive else get_active_weights() | |
| neurons = get_neurons() | |
| validator_uids = set() | |
| for _, validator_weights in weights.items(): | |
| for hotkey, _ in validator_weights: | |
| validator_uids.add(neurons[hotkey].uid) | |
| for validator_uid in sorted(validator_uids): | |
| headers.append(str(validator_uid)) | |
| datatype.append("markdown") | |
| for hotkey, validator_weights in weights.items(): | |
| if not hotkey in neurons: | |
| continue | |
| incentive = neurons[hotkey].incentive | |
| row = [neurons[hotkey].uid, f"<span style='color: {get_color_by_weight(incentive)}'>{incentive:.{3}f}</span>"] | |
| for _, weight in validator_weights: | |
| row.append(f"<span style='color: {get_color_by_weight(weight)}'>{weight:.{3}f}</span>") | |
| data.append(row) | |
| data.sort(key=lambda val: float(val[1].split(">")[1].split("<")[0]), reverse=True) | |
| return gr.Dataframe( | |
| pd.DataFrame(data, columns=headers), | |
| datatype=datatype, | |
| interactive=False, | |
| max_height=800, | |
| ) | |