|
|
| import json |
| import pandas as pd |
|
|
| 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 (dynamic columns).""" |
| leaderboard_data = load_leaderboard_from_json(json_path) |
| if not leaderboard_data: |
| return pd.DataFrame() |
|
|
| df = pd.DataFrame(leaderboard_data) |
|
|
| |
| if 'Overall' in df.columns: |
| df = df.sort_values('Overall', ascending=False).reset_index(drop=True) |
| else: |
| df = df.reset_index(drop=True) |
|
|
| meta_cols = ['model', 'link', 'hf', 'open_source', 'release_date'] |
| score_cols = [c for c in df.columns if c not in meta_cols] |
|
|
| |
| ordered_score_cols = [] |
| if 'Overall' in score_cols: |
| ordered_score_cols.append('Overall') |
| ordered_score_cols += [c for c in score_cols if c != 'Overall'] |
|
|
| def add_ranking_icon_and_link(idx, row): |
| model_name = row.get('model', 'N/A') |
| paper_link = row.get('link', '-') or '-' |
| anchor = f'<a href="{paper_link}" target="_blank">{model_name}</a>' if paper_link and paper_link != '-' else model_name |
| if idx == 0: |
| return f'π₯ {anchor}' |
| elif idx == 1: |
| return f'π₯ {anchor}' |
| elif idx == 2: |
| return f'π₯ {anchor}' |
| else: |
| return anchor |
|
|
| |
| display_df = pd.DataFrame({ |
| 'Model Name (clickable)': [add_ranking_icon_and_link(i, r) for i, r in df.iterrows()], |
| 'Release Date': df.get('release_date', '-'), |
| 'HF Model': df.get('hf', '-').apply(lambda x: f'<a href="{x}" target="_blank">π€</a>' if isinstance(x, str) and x != "-" else "-"), |
| 'Open Source': df.get('open_source', False).apply(lambda x: 'β' if bool(x) else 'β'), |
| }) |
|
|
| |
| for col in ordered_score_cols: |
| col_vals = pd.to_numeric(df[col], errors='coerce') |
| display_df[col] = col_vals.map(lambda x: f"{x:.2f}" if pd.notnull(x) else "-") |
|
|
| 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': int(df['open_source'].sum()) if 'open_source' in df.columns else 0, |
| } |
| return stats |
|
|