import gradio as gr import pandas as pd import json def process_df(df): # Set the current date and time df['date'] = pd.Timestamp.now().strftime('%Y-%m-%d %H:%M') # Create clickable links in the "Model" column df['Model'] = df.apply(lambda x: f'{x["Model"]}', axis=1) # Drop the "Link" column df = df.drop(['Link'], axis=1) # Convert columns to float cols = df.columns.drop(['Model', 'date']) df[cols] = df[cols].astype(float) # Highlight the minimum values in the columns styled_df = df.style.highlight_min(color='lightgreen', axis=0, subset=cols) return styled_df def get_eval(jsonfile): global leaderboard_df # Load JSON data data = json.load(open(jsonfile)) # Convert JSON data to DataFrame df = pd.DataFrame.from_dict(data, orient='columns') # Concatenate with the existing leaderboard leaderboard_df = pd.concat([leaderboard_df, df], ignore_index=True) # Process the dataframe df = process_df(leaderboard_df) return df def refresh_leaderboard(): global leaderboard_df if len(leaderboard_df) == 0: return leaderboard_df else: return process_df(leaderboard_df) # Usage markdown usage = """ ## Using the web interface Run your model on the evaluation datasets and create a json file in this format: ``` [ { "Model": "whisperbase", "date": "", "ucfd_eng": 102.27, "ucfd_lug": "nan", "sema_eng" : 42.86, "sema_lug": "nan", "trac_fm_lug": "nan", "Link": "https://colab.research.google.com/drive/1MGGOotrjSXWkR3ljNEVvfEUResEx6OLV#scrollTo=Elwx1K3fEDjf" }, { "Model": "facebookmms", "date": "2024-06-26", "ucfd_eng": 92.91, "ucfd_lug": "nan", "sema_eng" : 63.39, "sema_lug": "nan", "trac_fm_lug": 69.29, "Link": "https://colab.research.google.com/drive/1MGGOotrjSXWkR3ljNEVvfEUResEx6OLV#scrollTo=Elwx1K3fEDjf" } ] ``` >Upload this to the leaderboard and it should be updated with your results. ## Using the API You can use the following code to programmatically upload your results from a colab or python script. ``` from gradio_client import Client, handle_file client = Client("sunbird/SB_ASR_Leaderboard") result = client.predict( jsonfile=handle_file([/path/to/eval_results.json]), api_name="/get_eval" ) ``` >Refresh the leaderboard and your results should be visible. """ # Initialize an empty dataframe for the leaderboard columns = ['Model', 'date', 'ucfd_eng', 'ucfd_lug', 'sema_eng', 'sema_lug', 'trac_fm_lug'] leaderboard_df = pd.DataFrame(columns=columns) # Create Gradio interface block = gr.Blocks() with block: gr.Markdown("## Leaderboard for Sunbird AI ASR") with gr.Row(): input_json = gr.UploadButton("Upload a JSON file", file_count="single", scale=0) with gr.Tabs(): with gr.TabItem("ASR Leaderboard"): with gr.Row(): data = gr.DataFrame(datatype="markdown") with gr.TabItem("Usage"): with gr.Row(): gr.Markdown(usage) input_json.upload(get_eval, inputs=input_json, outputs=data) # Running the function on page load in addition to when the button is clicked block.load(refresh_leaderboard, inputs=None, outputs=data) block.launch(share=True)