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