|
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']) |
|
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)}" |
|
|
|
|
|
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]) |
|
|
|
|
|
iface.launch() |