import os import json import requests import datetime import gradio as gr import pandas as pd from huggingface_hub import HfApi, hf_hub_download, snapshot_download from huggingface_hub.repocard import metadata_load from apscheduler.schedulers.background import BackgroundScheduler from tqdm.contrib.concurrent import thread_map from utils import * DATASET_REPO_URL = "https://huggingface.co/datasets/huggingface-projects/drlc-leaderboard-data" DATASET_REPO_ID = "huggingface-projects/drlc-leaderboard-data" HF_TOKEN = os.environ.get("HF_TOKEN") block = gr.Blocks() api = HfApi(token=HF_TOKEN) # Containing the data rl_envs = [ { "rl_env_beautiful": "LunarLander-v2 🚀", "rl_env": "LunarLander-v2", "video_link": "", "global": None }, { "rl_env_beautiful": "CartPole-v1", "rl_env": "CartPole-v1", "video_link": "", "global": None }, { "rl_env_beautiful": "FrozenLake-v1-4x4-no_slippery ❄️", "rl_env": "FrozenLake-v1-4x4-no_slippery", "video_link": "", "global": None }, { "rl_env_beautiful": "FrozenLake-v1-8x8-no_slippery ❄️", "rl_env": "FrozenLake-v1-8x8-no_slippery", "video_link": "", "global": None }, { "rl_env_beautiful": "FrozenLake-v1-4x4 ❄️", "rl_env": "FrozenLake-v1-4x4", "video_link": "", "global": None }, { "rl_env_beautiful": "FrozenLake-v1-8x8 ❄️", "rl_env": "FrozenLake-v1-8x8", "video_link": "", "global": None }, { "rl_env_beautiful": "Taxi-v3 🚖", "rl_env": "Taxi-v3", "video_link": "", "global": None }, { "rl_env_beautiful": "CarRacing-v0 🏎️", "rl_env": "CarRacing-v0", "video_link": "", "global": None }, { "rl_env_beautiful": "CarRacing-v2 🏎️", "rl_env": "CarRacing-v2", "video_link": "", "global": None }, { "rl_env_beautiful": "MountainCar-v0 ⛰️", "rl_env": "MountainCar-v0", "video_link": "", "global": None }, { "rl_env_beautiful": "SpaceInvadersNoFrameskip-v4 👾", "rl_env": "SpaceInvadersNoFrameskip-v4", "video_link": "", "global": None }, { "rl_env_beautiful": "PongNoFrameskip-v4 🎾", "rl_env": "PongNoFrameskip-v4", "video_link": "", "global": None }, { "rl_env_beautiful": "BreakoutNoFrameskip-v4 🧱", "rl_env": "BreakoutNoFrameskip-v4", "video_link": "", "global": None }, { "rl_env_beautiful": "QbertNoFrameskip-v4 🐦", "rl_env": "QbertNoFrameskip-v4", "video_link": "", "global": None }, { "rl_env_beautiful": "BipedalWalker-v3", "rl_env": "BipedalWalker-v3", "video_link": "", "global": None }, { "rl_env_beautiful": "Walker2DBulletEnv-v0", "rl_env": "Walker2DBulletEnv-v0", "video_link": "", "global": None }, { "rl_env_beautiful": "AntBulletEnv-v0", "rl_env": "AntBulletEnv-v0", "video_link": "", "global": None }, { "rl_env_beautiful": "HalfCheetahBulletEnv-v0", "rl_env": "HalfCheetahBulletEnv-v0", "video_link": "", "global": None }, { "rl_env_beautiful": "PandaReachDense-v2", "rl_env": "PandaReachDense-v2", "video_link": "", "global": None }, { "rl_env_beautiful": "PandaReachDense-v3", "rl_env": "PandaReachDense-v3", "video_link": "", "global": None }, { "rl_env_beautiful": "Pixelcopter-PLE-v0", "rl_env": "Pixelcopter-PLE-v0", "video_link": "", "global": None } ] def download_leaderboard_dataset(): # Download the dataset from the Hugging Face Hub path = snapshot_download(repo_id=DATASET_REPO_ID, repo_type="dataset") return path def get_data(rl_env, path) -> pd.DataFrame: """ Get data from rl_env CSV file and return as DataFrame """ csv_path = os.path.join(path, rl_env + ".csv") data = pd.read_csv(csv_path) return data def get_last_refresh_time(path) -> str: """ Get the latest modification time of any CSV file in the dataset path """ # Get list of all CSV files in the dataset path csv_files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.csv')] # Get the latest modification time latest_time = max([os.path.getmtime(f) for f in csv_files]) # Convert to human-readable format return datetime.datetime.fromtimestamp(latest_time).strftime('%Y-%m-%d %H:%M:%S') with block: gr.Markdown(""" # 🏆 Deep Reinforcement Learning Course Leaderboard 🏆 Presenting the latest leaderboard from the Hugging Face Deep RL Course. """) path_ = download_leaderboard_dataset() # Get the last refresh time last_refresh_time = get_last_refresh_time(path_) gr.Markdown(f"**Last Data Refresh:** {last_refresh_time}") for i in range(0, len(rl_envs)): rl_env = rl_envs[i] with gr.TabItem(rl_env["rl_env_beautiful"]): with gr.Row(): markdown = f""" # {rl_env['rl_env_beautiful']} ### Leaderboard for {rl_env['rl_env_beautiful']} """ gr.Markdown(markdown) with gr.Row(): # Display the data for this RL environment data = get_data(rl_env["rl_env"], path_) gr.Dataframe( value=data, headers=["Ranking 🏆", "User 🤗", "Model id 🤖", "Results", "Mean Reward", "Std Reward"], datatype=["number", "markdown", "markdown", "number", "number", "number"], row_count=(100, 'fixed') ) block.launch()