from .s3_utils import read_from_s3 from config import MODELS import pandas as pd async def generate_leaderboard(criteria : str) -> pd.DataFrame: """ Generate the leaderboard from saved data. Args: criteria (str): The criteria corresponding to the leaderboard. Returns: pd.DataFrame: The leaderboard. """ try: leaderboard = await read_from_s3(f'leaderboard_{criteria}.csv') if leaderboard is None: raise Exception except: leaderboard = pd.DataFrame({ 'Model': pd.Series(dtype='str'), 'Elo': pd.Series(dtype='int'), 'Wins': pd.Series(dtype='int'), 'Matches': pd.Series(dtype='int'), 'Win Rate': pd.Series(dtype='float') }) for model in MODELS: if model not in leaderboard['Model'].values: leaderboard = pd.concat([leaderboard, pd.DataFrame([{'Model': model, 'Elo': 1500, 'Wins': 0, 'Matches': 0, 'Win Rate': 0.0}])], ignore_index=True) leaderboard = leaderboard.sort_values('Elo', ascending=False).reset_index(drop=True) leaderboard['Win Rate'] = leaderboard['Win Rate'].apply(lambda x: round(x, 2)) return leaderboard async def generate_data() -> pd.DataFrame: """ Generate the data for the matches. Returns: pd.DataFrame: The data for the matches. """ try : data = await read_from_s3('data.csv') if data is None: raise Exception except: data = pd.DataFrame(columns=['Criteria', 'Model', 'Opponent', 'Won', 'Elo', 'Win Rate', 'Matches', 'Timestamp', 'UUID']) return data