import json from typing import Dict, List # Constants (kept for backwards compatibility) DEFAULT_ELO = 1200 # Starting ELO for new models K_FACTOR = 32 # Standard chess K-factor # Load static leaderboard data def load_static_leaderboard(): """Load the static leaderboard from JSON file.""" try: with open("data/leaderboard_static.json", "r") as f: return json.load(f) except FileNotFoundError: print("Warning: leaderboard_static.json not found") return {"leaderboard": [], "total_models": 0, "total_votes": 0, "last_updated": "Unknown"} _static_data = load_static_leaderboard() def get_leaderboard(model_data: Dict = None, voting_data: List = None, show_preliminary=True): """Return the static leaderboard data. Note: model_data and voting_data parameters are kept for backwards compatibility but are no longer used. The leaderboard is now loaded from static data. """ leaderboard = _static_data.get("leaderboard", []) # Ensure ELO Score is string format for consistency for entry in leaderboard: if isinstance(entry.get("ELO Score"), (int, float)): entry["ELO Score"] = str(int(entry["ELO Score"])) if not show_preliminary: # Filter out models with less than 300 votes leaderboard = [entry for entry in leaderboard if entry.get("# Votes", 0) >= 300] return leaderboard def get_leaderboard_stats(model_data: Dict = None, voting_data: List = None) -> str: """Get summary statistics for the leaderboard. Note: model_data and voting_data parameters are kept for backwards compatibility but are no longer used. Stats are now loaded from static data. """ total_models = _static_data.get("total_models", 0) total_votes = _static_data.get("total_votes", 0) last_updated = _static_data.get("last_updated", "Unknown") return f""" ### Leaderboard Stats - **Total Models**: {total_models} - **Total Votes**: {total_votes} - **Last Updated**: {last_updated} *Note: Voting has been sunset. This leaderboard reflects the final standings.* """ def get_model_rankings(leaderboard: List[Dict]) -> Dict[str, int]: """Get current rankings of all models from leaderboard data.""" return {entry["Model"]: idx + 1 for idx, entry in enumerate(leaderboard)}