Spaces:
Sleeping
Sleeping
| 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 | |