Spaces:
Sleeping
Sleeping
import requests | |
from bs4 import BeautifulSoup | |
import pandas as pd | |
import gradio as gr | |
import plotly.express as px | |
BASE_URL = "https://scale.com/leaderboard" | |
LEADERBOARDS = { | |
"Coding": "/coding", | |
"Adversarial Robustness": "/adversarial_robustness", | |
"Instruction Following": "/instruction_following", | |
"Math": "/math" | |
} | |
def scrape_leaderboard(leaderboard): | |
url = BASE_URL + LEADERBOARDS[leaderboard] | |
response = requests.get(url) | |
soup = BeautifulSoup(response.content, 'html.parser') | |
leaderboard_div = soup.find('div', class_='flex flex-col gap-4 sticky top-20') | |
if not leaderboard_div: | |
raise ValueError("Leaderboard div not found. The page structure might have changed.") | |
table = leaderboard_div.find('table', class_='w-full caption-bottom text-sm') | |
if not table: | |
raise ValueError("Leaderboard table not found within the div.") | |
data = [] | |
for row in table.find('tbody').find_all('tr'): | |
cols = row.find_all('td') | |
rank = cols[0].find('div', class_='flex').text.strip().split()[0] | |
model = cols[0].find('a').text.strip() | |
score = cols[1].text.strip() | |
confidence = cols[2].text.strip() | |
data.append([rank, model, score, confidence]) | |
df = pd.DataFrame(data, columns=['Rank', 'Model', 'Score', '95% Confidence']) | |
df['Score'] = pd.to_numeric(df['Score']) # Convert Score to numeric | |
return df | |
def create_chart(df): | |
fig = px.bar(df, x='Model', y='Score', title='Model Scores Comparison', | |
labels={'Score': 'Overall Score', 'Model': 'Model Name'}, | |
color='Score', color_continuous_scale='viridis') | |
fig.update_layout(xaxis_tickangle=-45, xaxis_title=None) | |
return fig | |
def update_leaderboard(leaderboard): | |
try: | |
df = scrape_leaderboard(leaderboard) | |
chart = create_chart(df) | |
return chart, df.to_html(index=False) | |
except Exception as e: | |
return None, f"An error occurred: {str(e)}" | |
# Create Gradio interface | |
with gr.Blocks() as iface: | |
gr.Markdown("# AI Leaderboard Viewer") | |
dropdown = gr.Dropdown(choices=list(LEADERBOARDS.keys()), label="Select Leaderboard", value="Coding") | |
chart_output = gr.Plot() | |
table_output = gr.HTML() | |
def on_load(): | |
chart, html = update_leaderboard("Coding") | |
return chart, html | |
dropdown.change(update_leaderboard, inputs=[dropdown], outputs=[chart_output, table_output]) | |
iface.load(on_load, outputs=[chart_output, table_output]) | |
# Launch the app | |
iface.launch() |