Spaces:
Running
Running
Commit
·
a0ea5d6
1
Parent(s):
5c033db
add caching
Browse files
app.py
CHANGED
@@ -2,6 +2,11 @@ import bittensor as bt
|
|
2 |
from substrateinterface import Keypair
|
3 |
import gradio as gr
|
4 |
import pandas as pd
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
|
7 |
def get_incentive_percent_for_key(key, sn, incentive, substrate) -> tuple[float, int]:
|
@@ -43,29 +48,34 @@ def fetch_incentive_data() -> pd.DataFrame:
|
|
43 |
address_link = f"[{owner_hk}](https://taostats.io/hotkey/{owner_hk})"
|
44 |
data.append([sn_link, f"{hk_incentive:.2f}%", hk_uid, "Hotkey", address_link])
|
45 |
break
|
46 |
-
|
47 |
-
|
|
|
48 |
return df
|
49 |
|
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
with gr.Blocks(title="Bittensor Subnet Incentives") as demo:
|
52 |
gr.Markdown(
|
53 |
"""
|
54 |
# Bittensor Subnet Burn Dashboard
|
55 |
This dashboard displays the burn percentage set by subnet owners for miners.
|
56 |
-
Click the 'Refresh' button to fetch the latest data.
|
57 |
"""
|
58 |
)
|
59 |
|
60 |
-
refresh_button = gr.Button("Refresh Data")
|
61 |
output_df = gr.DataFrame(
|
62 |
-
|
63 |
-
|
64 |
-
label="Subnet Incentive Data",
|
65 |
interactive=False,
|
66 |
-
row_count=(
|
67 |
-
col_count=(
|
68 |
)
|
69 |
-
|
70 |
-
demo.load(fetch_incentive_data, None, output_df)
|
71 |
demo.launch()
|
|
|
2 |
from substrateinterface import Keypair
|
3 |
import gradio as gr
|
4 |
import pandas as pd
|
5 |
+
import time
|
6 |
+
|
7 |
+
# uga-buga caching
|
8 |
+
g_cached_data: pd.DataFrame | None = None
|
9 |
+
g_last_fetch_time = 0.0
|
10 |
|
11 |
|
12 |
def get_incentive_percent_for_key(key, sn, incentive, substrate) -> tuple[float, int]:
|
|
|
48 |
address_link = f"[{owner_hk}](https://taostats.io/hotkey/{owner_hk})"
|
49 |
data.append([sn_link, f"{hk_incentive:.2f}%", hk_uid, "Hotkey", address_link])
|
50 |
break
|
51 |
+
|
52 |
+
data = [(i+1, *d) for i, d in enumerate(data)]
|
53 |
+
df = pd.DataFrame(data, columns=["#", "Subnet", "Burn", "UID", "Key", "Address"]) # type: ignore
|
54 |
return df
|
55 |
|
56 |
|
57 |
+
def get_cached_data() -> pd.DataFrame:
|
58 |
+
global g_cached_data, g_last_fetch_time
|
59 |
+
if g_cached_data is None or (time.time() - g_last_fetch_time) > 1200: # 20 min
|
60 |
+
g_last_fetch_time = time.time()
|
61 |
+
g_cached_data = fetch_incentive_data()
|
62 |
+
return g_cached_data
|
63 |
+
|
64 |
+
|
65 |
with gr.Blocks(title="Bittensor Subnet Incentives") as demo:
|
66 |
gr.Markdown(
|
67 |
"""
|
68 |
# Bittensor Subnet Burn Dashboard
|
69 |
This dashboard displays the burn percentage set by subnet owners for miners.
|
|
|
70 |
"""
|
71 |
)
|
72 |
|
|
|
73 |
output_df = gr.DataFrame(
|
74 |
+
datatype=["number", "markdown", "str", "number", "str", "markdown"],
|
75 |
+
label="Subnet Burn Data",
|
|
|
76 |
interactive=False,
|
77 |
+
row_count=(12, "dynamic"),
|
78 |
+
col_count=(6, "fixed")
|
79 |
)
|
80 |
+
demo.load(get_cached_data, None, output_df)
|
|
|
81 |
demo.launch()
|