import gradio as gr import pandas as pd import matplotlib.pyplot as plt from dataset_util import load_data, get_num_rows import subnet_util import datetime import typing import indexing_util import weights from io import BytesIO FONT = """""" TITLE_FONT = """""" TITLE = """

D3 Subnet Leaderboard

""" DESCRIPTION = """

The D3 Subnet, standing for Decentralized Distributed Data Scraping subnet, plays a crucial role in the advancement of artificial intelligence by ensuring ample training data for all Bittensor AI networks.

""" IMAGE = """D3 Subnet""" last_refresh = None demo = gr.Blocks(css=""" .intersect {font-family: 'Intersect C BRK', sans-serif; font-size:40px} .promova {font-family: 'Promova', sans-serif; font-size:40px} """) twitter_text_dataset = load_data("bittensor-dataset/twitter-text-dataset") twitter_text_num_rows = get_num_rows(twitter_text_dataset) twitter_image_dataset = load_data("bittensor-dataset/twitter-image-dataset") twitter_image_num_rows = get_num_rows(twitter_image_dataset) tao_price = subnet_util.get_tao_price() (subtensor, metagraph) = subnet_util.get_subtensor_and_metagraph() last_refresh = datetime.datetime.now() miners_data = subnet_util.get_subnet_data(subtensor, metagraph) # url = "http://127.0.0.1:8001/" # try: # response = requests.get(url) # response_body = response.json() # twitter_text_num_rows = response_body['twitter_text_rows'] # twitter_image_num_rows = response_body['twitter_image_rows'] # except: # twitter_text_num_rows = 0 # twitter_image_num_rows = 0 # bt.logging.error("Could not connect to the API") daily_indexing_data = indexing_util.get_all(indexing_util.daily_indexing) daily_df = pd.DataFrame(daily_indexing_data, columns=['Date', 'Value']) daily_df['Date'] = pd.to_datetime(daily_df['Date'].str.decode('utf-8')) daily_df['Value'] = daily_df['Value'].astype(int) hotkey_indexing_data = indexing_util.get_all(indexing_util.hotkey_indexing) hotkey_df = pd.DataFrame(hotkey_indexing_data, columns=['Hotkey', 'Value']) hotkey_df['Hotkey'] = hotkey_df['Hotkey'].str.decode('utf-8') hotkey_df['Value'] = hotkey_df['Value'].astype(int) # Filter hotkey_df to only show value is over than 1000 hotkey_df = hotkey_df[hotkey_df['Value'] > 1000] # Sort hotkey_df by Value hotkey_df = hotkey_df.sort_values(by='Value', ascending=False) hotkey_daily_indexing_data = indexing_util.get_all(indexing_util.hotkey_daily_indexing) hotkey_daily_df = pd.DataFrame(hotkey_daily_indexing_data, columns=['Hotkey_Date', 'Value']) hotkey_daily_df_= pd.DataFrame() hotkey_daily_df_['Hotkey'] = hotkey_daily_df['Hotkey_Date'].str.decode('utf-8').str.split(' ').str[0] hotkey_daily_df_['Date'] = hotkey_daily_df['Hotkey_Date'].str.decode('utf-8').str.split(' ').str[1] hotkey_daily_df_['Value'] = hotkey_daily_df['Value'].astype(int) dalily_df_max = daily_df['Value'].max() hotkey_df_max = hotkey_df['Value'].max() hotkey_daily_df_max = hotkey_daily_df_['Value'].max() # print(hotkey_daily_df_) weight_list, miners = weights.validator_info() print(weight_list) def leaderboard_data( # show_stale: bool, # scores: typing.Dict[int, typing.Dict[str, typing.Optional[float | str]]], # competition_id: str, ): value = [ [ c.hotkey[0:8] + "...", c.uid, c.url, c.block, ] for c in miners_data # if c.incentive and c.url[0:8] == "https://" ] return value def validator_data(): value = [ [ c['uid'], "{:,}".format(c['validator_stake']) + " τ", c['vtrust'], ] + [ c ['miners_weight'].get(miner[0], 0) for miner in miners ] for c in weight_list ] return value with demo: gr.HTML(FONT) gr.HTML(TITLE_FONT) gr.HTML(TITLE) gr.HTML(IMAGE) gr.HTML(DESCRIPTION) with gr.Tabs(): with gr.Accordion("Dataset Stats"): with gr.Row(): with gr.Column(scale=1): gr.HTML(f"

Current Size of Text Dataset: {twitter_text_num_rows}

") with gr.Column(scale=1): gr.HTML(f"

Current Size of Image Dataset: {twitter_image_num_rows}

") gr.HTML("
") with gr.Accordion("Subnet Stats"): gr.HTML(f"""

Miner Stats

""") gr.LinePlot( daily_df, x="Date", y="Value", title="Daliy scraped data amount", # color="Date", # tooltip=["Date", "Value"], y_lim=[0, dalily_df_max * 1.5], x_title="Date", y_title="Amount of data scraped", height=500, width=1000, scale=5, # color="Value", color_legend_position="top", # elem_classes="daily_scraped_data", ) gr.BarPlot( hotkey_df, x="Hotkey", y="Value", title="Scraped data amount of each Miner", # color="Date", # tooltip=["Hotkey", "Value"], y_lim=[0, hotkey_df_max * 1.5], x_title="Date", y_title="Amount of data scraped", height=500, width=1000, scale=5, # color="Value", x_label_angle=-30, color_legend_position="top", # elem_classes="daily_scraped_data", ) gr.ScatterPlot( hotkey_daily_df_, x="Date", y="Value", title="Daily scraped data amount of each Miner", # color="Date", # tooltip=["Hotkey"], y_lim=[0, hotkey_daily_df_max * 1.5], x_title="Date", y_title="Amount of data scraped", height=500, width=1000, scale=5, # color="Hotkey", x_label_angle=-30, color_legend_position="top", # elem_classes="daily_scraped_data", ) gr.HTML("
") with gr.Tab(label="Miners Data"): class_denominator = sum( miners_data[i].incentive #TODO: emssion to incentive for i in range(0, min(10, len(miners_data))) if miners_data[i].incentive ) if class_denominator == 0: class_values = { f"(uid={miners_data[i].uid}, hotkey={miners_data[i].hotkey[0:8]}) - {miners_data[i].url} · ${round(miners_data[i].emission * tao_price, 2):,} (τ{round(miners_data[i].emission, 2):,})": miners_data[i].incentive + 1 / (class_denominator + 1) for i in range(0, min(10, len(miners_data))) } else: class_values = { f"(uid={miners_data[i].uid}, hotkey={miners_data[i].hotkey[0:8]}) - {miners_data[i].url} · ${round(miners_data[i].emission * tao_price, 2):,} (τ{round(miners_data[i].emission, 2):,})": miners_data[i].incentive / class_denominator for i in range(0, min(10, len(miners_data))) # if miners_data[i].incentive } gr.Label( label="Top 10 Miners", value=class_values, num_top_classes=10, ) # miner_table = gr.components.Dataframe( # value=miners_data # ) gr.HTML("
") with gr.Accordion("Miner stats"): gr.HTML( f"""

{last_refresh.strftime("refreshed at %H:%M on %Y-%m-%d")}

""" ) # with gr.Tabs(): # for entry in miners_data: # name = f"uid={entry.uid} : commit={entry.commit[0:8]} : url={entry.url}" # with gr.Tab(name): # gr.Chatbot() leaderboard_table = gr.components.Dataframe( value=leaderboard_data(), headers = [ "Hotkey", "UID", "Url", "Block", ], datatype=[ "markdown", "number", "markdown", "number", ], elem_id="leaderboard_table", interactive=False, visible=True, ) gr.HTML("
") with gr.Accordion("Validator stats"): gr.HTML( f"""

{last_refresh.strftime("refreshed at %H:%M on %Y-%m-%d")}

""" ) # with gr.Tabs(): # for entry in miners_data: # name = f"uid={entry.uid} : commit={entry.commit[0:8]} : url={entry.url}" # with gr.Tab(name): # gr.Chatbot() leaderboard_table = gr.components.Dataframe( value=validator_data(), headers = [ "UID", "Stake", "V-Trust" ] + [ f"Miner-{miner[0]} (Incentive: {miner[1]})" for miner in miners ], datatype=[ "number", "number", "number" ] + [ "number" for miner in miners ], elem_id="leaderboard_table", interactive=False, visible=True, ) demo.launch()