Spaces:
Running
on
Zero
Running
on
Zero
File size: 4,930 Bytes
d40e945 48445ab 1593f23 48445ab 1593f23 d40e945 2539abb 2e21b3e 2539abb d40e945 2539abb 1593f23 2539abb 54bc519 2539abb d40e945 2539abb d40e945 c4f7417 2539abb 7128513 2539abb c16154f 2539abb c16154f 2539abb 48445ab 2e21b3e 2539abb 2e21b3e 48445ab 2539abb 2e21b3e 48445ab 2539abb 1593f23 2539abb 1593f23 2539abb 1593f23 2539abb 1593f23 2539abb 1593f23 2539abb 1593f23 5de65f5 1593f23 2539abb 4eba378 |
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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
from .config import *
from .db import *
from .models import *
import pandas as pd
# for diff
leaderboard_df = {}
def get_leaderboard(reveal_prelim = False):
global leaderboard_df
conn = get_db()
cursor = conn.cursor()
sql = 'SELECT Name, Upvote, Downvote, name AS OrigName FROM model'
prelim_votes = 300
if not reveal_prelim: sql += ' WHERE (Upvote + Downvote) > '+ str(prelim_votes)
cursor.execute(sql)
data = cursor.fetchall()
df = pd.DataFrame(data, columns=['Name', 'Upvote', 'Downvote', 'OrigName'])
# df['License'] = df['Name'].map(model_license)
df['Name'] = df['Name'].replace(model_names)
for i in range(len(df)):
df.loc[i, "Name"] = make_link_to_space(df['Name'][i], True)
# Calculate total votes and win rate
df['Votes'] = df['Upvote'] + df['Downvote']
df['Win Rate'] = (df['Upvote'] / df['Votes'] * 100).round(1)
# convert to string
df['Win Rate'] = df['Win Rate'].astype(str) + '%'
# df['Score'] = round((df['Upvote'] / df['Votes']) * 100, 2) # Percentage score
## ELO SCORE
df['Elo'] = 1200
df['Elo Diff'] = ""
for i in range(len(df)):
for j in range(len(df)):
if i != j:
try:
expected_a = 1 / (1 + 10 ** ((df['Elo'].iloc[j] - df['Elo'].iloc[i]) / 400))
expected_b = 1 / (1 + 10 ** ((df['Elo'].iloc[i] - df['Elo'].iloc[j]) / 400))
actual_a = df['Upvote'].iloc[i] / df['Votes'].iloc[i] if df['Votes'].iloc[i] > 0 else 0.5
actual_b = df['Upvote'].iloc[j] / df['Votes'].iloc[j] if df['Votes'].iloc[j] > 0 else 0.5
df.at[i, 'Elo'] += round(32 * (actual_a - expected_a))
df.at[j, 'Elo'] += round(32 * (actual_b - expected_b))
except Exception as e:
print(f"Error in ELO calculation for rows {i} and {j}: {str(e)}")
continue
# add link to vote dataset
orig_name = df['OrigName'].iloc[i]
if (
DB_DATASET_ID != ''
and '/' in orig_name
):
style = 'text-decoration: underline;text-decoration-style: dotted; color: var(--link-text-color);'
title = 'Rejections'
# win rate dataset
df.at[i, 'Win Rate'] = f'<a target="_blank" style="{style}" title="{title}" href="https://huggingface.co/datasets/{DB_DATASET_ID}/viewer/summary/rejections?f[rejected][value]=%27{orig_name}%27">' + df['Win Rate'].iloc[i] + '</a>'
df['Elo'] = round(df['Elo'])
df['Elo Diff'] = df['Elo']
if (
reveal_prelim == False
and len(leaderboard_df) == 0
):
leaderboard_df = df
# Add ELO diff from startup
try:
if (reveal_prelim == False):
for i in range(len(df)):
elo_diff = (df['Elo'].iloc[i] - leaderboard_df['Elo'].iloc[i])
if (elo_diff == 0):
continue
if (elo_diff > 0):
plus = '<em style="color: green; font-family: monospace">+'
else:
plus = '<em style="color: red; font-family: monospace">'
df.at[i, 'Elo Diff'] = str(df['Elo'].iloc[i]) + plus + str(elo_diff) +'</em>'
except:
# FIXME: crashes when a TTS from premilinary results passes the vote threshold
pass
# Sort by ELO score and then by Vote count
df = df.sort_values(by=['Elo', 'Votes'], ascending=[False, False])
# last in model series from models.py
last_series = []
# medals
def assign_medal(rank, model_series, last_series, assign):
rank = str(rank + 1)
if (
assign
# and last_series != ''
# and model_series != last_series
):
if rank == '1':
rank += '🥇'
elif rank == '2':
rank += '🥈'
elif rank == '3':
rank += '🥉'
if (model_series != last_series):
last_series = model_series
return '#'+ rank
try:
df['Order'] = [
assign_medal(
i,
HF_SPACES[df['OrigName'].iloc[i]]['series'],
last_series,
not reveal_prelim and len(df) > 2
) for i in range(len(df))
]
except:
df['Order'] = [assign_medal(
i,
'',
'',
not reveal_prelim and len(df) > 2) for i in range(len(df))
]
pass
# fetch top_five
for orig_name in df['OrigName']:
if (
reveal_prelim
and len(top_five) < 5
and orig_name not in top_five
and orig_name in AVAILABLE_MODELS.keys()
):
top_five.append(orig_name)
df['Elo'] = df['Elo Diff']
df = df[['Order', 'Name', 'Win Rate', 'Elo', 'Votes']]
return df
|