Spaces:
Sleeping
Sleeping
| import json | |
| import os | |
| import pandas as pd | |
| from typing import List | |
| from src.display.formatting import has_no_nan_values, make_clickable_model | |
| from src.display.utils import AutoEvalColumn | |
| # Import SAGE-specific modules - avoid transformers dependency | |
| process_sage_results_for_leaderboard = None | |
| try: | |
| # Import SAGE modules without triggering transformers dependency | |
| import sys | |
| import os | |
| import json | |
| from dataclasses import dataclass | |
| from typing import Dict, List, Any | |
| import numpy as np | |
| # Copy SAGEResult class locally to avoid import issues | |
| class SAGEResult: | |
| submission_id: str | |
| organization: str | |
| email: str | |
| tokens: str | |
| accuracy: float | |
| mg_pass_2: float | |
| mg_pass_4: float | |
| submitted_time: str | |
| status: str = "EVALUATED" | |
| def to_dict(self): | |
| """Converts the SAGE Result to a dict compatible with our dataframe display""" | |
| # Extract model name from submission_id or use model_name directly | |
| if hasattr(self, 'model_name'): | |
| model_name = self.model_name | |
| elif self.submission_id.startswith("oss_"): | |
| # Extract model name from submission_id | |
| model_name = self.submission_id.split("_", 2)[-1].replace("_", " ") | |
| else: | |
| model_name = self.submission_id | |
| # Create display name | |
| display_name = f"**{model_name}**" | |
| model_symbol = "🤖" | |
| # Format date to YYYY-MM-DD only | |
| formatted_date = self.submitted_time | |
| if isinstance(self.submitted_time, str): | |
| # Try to parse and reformat date | |
| try: | |
| if 'T' in self.submitted_time: | |
| # ISO format like "2025-09-09T14:37:23.616340" | |
| formatted_date = self.submitted_time.split('T')[0] | |
| else: | |
| # Already in simple format | |
| formatted_date = self.submitted_time.split(' ')[0] | |
| except: | |
| formatted_date = self.submitted_time | |
| data_dict = { | |
| "Model": display_name, | |
| "Organization": self.organization, | |
| "Accuracy (%)": round(self.accuracy, 2), | |
| "mG-Pass@2 (%)": round(self.mg_pass_2, 2), | |
| "mG-Pass@4 (%)": round(self.mg_pass_4, 2), | |
| "Submission Date": formatted_date, | |
| } | |
| return data_dict | |
| def load_initial_sage_results_from_oss() -> List[SAGEResult]: | |
| """Load initial SAGE results from OSS""" | |
| sage_results = [] | |
| try: | |
| # 导入OSS排行榜管理器 | |
| from src.oss.oss_leaderboard_manager import OSSLeaderboardManager | |
| # 从OSS加载排行榜数据 | |
| leaderboard_manager = OSSLeaderboardManager() | |
| initial_data = leaderboard_manager.load_leaderboard_from_oss() | |
| if initial_data: | |
| print(f"✅ 从OSS加载了 {len(initial_data)} 条排行榜记录") | |
| for i, entry in enumerate(initial_data): | |
| sage_result = SAGEResult( | |
| submission_id=f"oss_{i:02d}_{entry['model_name'].replace(' ', '_').replace('-', '_')}", | |
| organization=entry['organization'], | |
| email=entry.get('contact_email', f"contact@{entry['organization'].lower().replace(' ', '')}.com"), | |
| tokens=entry.get('tokens', 'N/A'), | |
| accuracy=entry.get('accuracy', 0.0), | |
| mg_pass_2=entry.get('mg_pass_2', 0.0), | |
| mg_pass_4=entry.get('mg_pass_4', 0.0), | |
| submitted_time=entry["submitted_time"], | |
| status="EVALUATED" | |
| ) | |
| # Add model_name as additional attribute for display | |
| sage_result.model_name = entry['model_name'] | |
| sage_results.append(sage_result) | |
| else: | |
| print("⚠️ OSS中未找到排行榜数据") | |
| except Exception as e: | |
| print(f"❌ 从OSS加载排行榜失败: {e}") | |
| return sage_results | |
| def process_sage_results_for_leaderboard_oss() -> List[SAGEResult]: | |
| """Process all SAGE results from OSS""" | |
| return load_initial_sage_results_from_oss() | |
| # Set the function | |
| process_sage_results_for_leaderboard = process_sage_results_for_leaderboard_oss | |
| except ImportError as e: | |
| print(f"Could not set up SAGE results processing: {e}") | |
| process_sage_results_for_leaderboard = None | |
| def get_sage_leaderboard_df() -> pd.DataFrame: | |
| """Creates a dataframe from SAGE evaluation results""" | |
| if process_sage_results_for_leaderboard is None: | |
| return pd.DataFrame() | |
| # Get SAGE results | |
| sage_results = process_sage_results_for_leaderboard() | |
| all_data_json = [result.to_dict() for result in sage_results] | |
| if not all_data_json: | |
| return pd.DataFrame() | |
| df = pd.DataFrame.from_records(all_data_json) | |
| # Remove duplicates: for same Model+Organization, keep only the latest submission date | |
| if "Model" in df.columns and "Organization" in df.columns and "Submission Date" in df.columns: | |
| # Sort by Submission Date (descending) to get the latest first | |
| df = df.sort_values(by=["Submission Date"], ascending=False) | |
| # Drop duplicates, keeping first (latest) occurrence of each Model+Organization combination | |
| df = df.drop_duplicates(subset=["Model", "Organization"], keep="first") | |
| # Sort by accuracy (descending) | |
| if "Accuracy (%)" in df.columns: | |
| df = df.sort_values(by=["Accuracy (%)"], ascending=False) | |
| # Round numeric columns | |
| numeric_cols = ["Accuracy (%)", "mG-Pass@2 (%)", "mG-Pass@4 (%)"] | |
| for col in numeric_cols: | |
| if col in df.columns: | |
| df[col] = df[col].round(2) | |
| return df |