|
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() |
|
|
|
|
|
df = pd.DataFrame(leaderboard_data) |
|
|
|
|
|
df = df.sort_values('Overall', ascending=False).reset_index(drop=True) |
|
|
|
|
|
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>' |
|
|
|
|
|
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 |
|
|