File size: 4,597 Bytes
d35349d df9d294 d35349d fecbd6d d35349d 0dea485 d35349d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
import json
import pandas as pd
from pathlib import Path
def load_leaderboard_from_json(json_path="leaderboard_data.json"):
"""Load leaderboard data from JSON file"""
try:
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
return data['leaderboard']
except FileNotFoundError:
print(f"JSON file {json_path} not found")
return []
except json.JSONDecodeError:
print(f"Error decoding JSON file {json_path}")
return []
def create_leaderboard_df(json_path="leaderboard_data.json"):
"""Create a pandas DataFrame from JSON leaderboard data"""
leaderboard_data = load_leaderboard_from_json(json_path)
if not leaderboard_data:
return pd.DataFrame()
# Convert to DataFrame
df = pd.DataFrame(leaderboard_data)
# Sort by ACC score (descending)
df = df.sort_values('Overall', ascending=False).reset_index(drop=True)
# Add ranking icons and make model names clickable links to papers
def add_ranking_icon_and_link(index, model_name, paper_link):
if index == 0:
return f'π₯ <a href="{paper_link}" target="_blank">{model_name}</a>'
elif index == 1:
return f'π₯ <a href="{paper_link}" target="_blank">{model_name}</a>'
elif index == 2:
return f'π₯ <a href="{paper_link}" target="_blank">{model_name}</a>'
else:
return f'<a href="{paper_link}" target="_blank">{model_name}</a>'
# Format the DataFrame for display
display_df = pd.DataFrame({
'Model Name (clickable)': [add_ranking_icon_and_link(i, model, link) for i, (model, link) in enumerate(zip(df['model'], df['link']))],
'Release Date': df['release_date'],
'HF Model': df['hf'].apply(lambda x: f'<a href="{x}" target="_blank">π€</a>' if x != "-" else "-"),
'Open Source': df['open_source'].apply(lambda x: 'β' if x else 'β'),
'Overall': df['Overall'].apply(lambda x: f"{x:.2f}"),
'Style': df['Style'].apply(lambda x: f"{x:.2f}"),
'World Knowledge': df['World Knowledge'].apply(lambda x: f"{x:.2f}"),
'Logical Reasoning': df['Logical Reasoning'].apply(lambda x: f"{x:.2f}"),
'Text': df['Text'].apply(lambda x: f"{x:.2f}"),
'Attribute-Overall': df['Attribute-Overall'].apply(lambda x: f"{x:.2f}"),
'Quantity': df['Quantity'].apply(lambda x: f"{x:.2f}"),
'Expression': df['Expression'].apply(lambda x: f"{x:.2f}"),
'Material': df['Material'].apply(lambda x: f"{x:.2f}"),
'Size': df['Size'].apply(lambda x: f"{x:.2f}"),
'Shape': df['Shape'].apply(lambda x: f"{x:.2f}"),
'Color': df['Color'].apply(lambda x: f"{x:.2f}"),
'Action-Overall': df['Action-Overall'].apply(lambda x: f"{x:.2f}"),
'Hand': df['Hand'].apply(lambda x: f"{x:.2f}"),
'Full body': df['Full body'].apply(lambda x: f"{x:.2f}"),
'Animal': df['Animal'].apply(lambda x: f"{x:.2f}"),
'Non Contact': df['Non Contact'].apply(lambda x: f"{x:.2f}"),
'Contact': df['Contact'].apply(lambda x: f"{x:.2f}"),
'State': df['State'].apply(lambda x: f"{x:.2f}"),
'Relationship-Overall': df['Relationship-Overall'].apply(lambda x: f"{x:.2f}"),
'Composition': df['Composition'].apply(lambda x: f"{x:.2f}"),
'Similarity': df['Similarity'].apply(lambda x: f"{x:.2f}"),
'Inclusion': df['Inclusion'].apply(lambda x: f"{x:.2f}"),
'Comparison': df['Comparison'].apply(lambda x: f"{x:.2f}"),
'Compound-Overall': df['Compound-Overall'].apply(lambda x: f"{x:.2f}"),
'Imagination': df['Imagination'].apply(lambda x: f"{x:.2f}"),
'Feature matching': df['Feature matching'].apply(lambda x: f"{x:.2f}"),
'Grammar-Overall': df['Grammar-Overall'].apply(lambda x: f"{x:.2f}"),
'Pronoun Reference': df['Pronoun Reference'].apply(lambda x: f"{x:.2f}"),
'Consistency': df['Consistency'].apply(lambda x: f"{x:.2f}"),
'Negation': df['Negation'].apply(lambda x: f"{x:.2f}"),
'Layout-Overall': df['Layout-Overall'].apply(lambda x: f"{x:.2f}"),
'Two-dimensional': df['2D'].apply(lambda x: f"{x:.2f}"),
'Three-dimensional': df['3D'].apply(lambda x: f"{x:.2f}"),
})
return display_df
def get_leaderboard_stats(json_path="leaderboard_data.json"):
"""Get statistics about the leaderboard"""
leaderboard_data = load_leaderboard_from_json(json_path)
if not leaderboard_data:
return {}
df = pd.DataFrame(leaderboard_data)
stats = {
'total_models': len(df),
'open_source_models': df['open_source'].sum(),
}
return stats
|