File size: 3,839 Bytes
5bf8054
c310cb4
6e89986
a25ae1b
c310cb4
 
a25ae1b
c310cb4
c0052fc
c310cb4
 
 
 
 
 
a25ae1b
c310cb4
a25ae1b
c0052fc
 
 
 
 
 
 
 
a25ae1b
c310cb4
 
a25ae1b
c310cb4
 
a25ae1b
 
 
 
 
 
 
 
 
 
 
 
 
 
c310cb4
6e89986
 
 
 
 
 
 
 
 
c310cb4
a25ae1b
 
 
 
 
 
6e89986
 
 
 
ed2e1d6
 
 
 
 
 
 
 
6e89986
 
 
 
c310cb4
 
 
5bf8054
 
a25ae1b
c0052fc
a25ae1b
 
 
8143212
ed2e1d6
 
8143212
 
a25ae1b
c310cb4
a25ae1b
 
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
import gradio as gr
import os
import random
from pathlib import Path

####################################
# Constants (static data version)
####################################


SPACE_ID = os.getenv('SPACE_ID')
MAX_SAMPLE_TXT_LENGTH = 300
MIN_SAMPLE_TXT_LENGTH = 10

####################################
# Datos est谩ticos del leaderboard
####################################
leaderboard_data = [
    {'name': 'Matxa-TTS', 'upvote': 150, 'downvote': 30},
    {'name': 'VITS', 'upvote': 200, 'downvote': 50},
    {'name': 'StableTTS', 'upvote': 180, 'downvote': 40},
    {'name': 'StyleTTS 2', 'upvote': 100, 'downvote': 20},
    {'name': 'XPhoneBert-Matcha-TTS', 'upvote': 90, 'downvote': 15},
    {'name': 'Whisper', 'upvote': 170, 'downvote': 25},
    {'name': 'Simul-S2ST', 'upvote': 160, 'downvote': 35},
    {'name': ' SpeechT5', 'upvote': 140, 'downvote': 25},
]

####################################
# Functions (static version)
####################################

def get_leaderboard():
    """
    Retorna el leaderboard en orden descendente por votos positivos.
    """
    return sorted(leaderboard_data, key=lambda x: x['upvote'], reverse=True)

def filter_preliminary(leaderboard, reveal=False):
    """
    Si reveal es True, muestra todos los resultados.
    Si reveal es False, filtra los modelos con menos de 50 votos combinados.
    """
    if reveal:
        return leaderboard
    return [model for model in leaderboard if model['upvote'] + model['downvote'] > 50]

def add_random_scores(model):
    """
    Agrega las columnas 'score', 'utmos', 'PESQ', y 'STOI' con valores aleatorios.
    """
    model['score'] = random.randint(0, 100)  # Puntuaci贸n entre 0 y 100
    model['utmos'] = round(random.uniform(1.0, 5.0), 2)  # Puntuaci贸n entre 1.0 y 5.0
    model['PESQ'] = round(random.uniform(1.0, 4.5), 2)  # Puntuaci贸n entre 1.0 y 4.5
    model['STOI'] = round(random.uniform(0.0, 1.0), 2)  # Puntuaci贸n entre 0.0 y 1.0
    return model

def update_leaderboard(reveal):
    """
    Actualiza la tabla del leaderboard con base en si se deben mostrar
    resultados preliminares o no.
    """
    filtered_leaderboard = filter_preliminary(get_leaderboard(), reveal)
    
    # A帽adir las columnas de puntuaciones aleatorias
    updated_leaderboard = [add_random_scores(model) for model in filtered_leaderboard]
    
    # Ordenar por 'score' y asignar el rank din谩micamente
    sorted_leaderboard = sorted(updated_leaderboard, key=lambda x: x['score'], reverse=True)
    
    # Asignar el rank basado en el orden por score
    for rank, model in enumerate(sorted_leaderboard):
        model['rank'] = rank + 1  # rank es la posici贸n en la lista (1-indexed)
    
    return [[model['rank'], model['name'], model['score'], model['utmos'], model['PESQ'], model['STOI']] for model in sorted_leaderboard]

####################################
# Interfaz con Gradio
####################################

theme = gr.themes.Base(
    font=[gr.themes.GoogleFont('Libre Franklin'), gr.themes.GoogleFont('Public Sans'), 'system-ui', 'sans-serif'],
)

with gr.Blocks(theme=theme) as demo:
    gr.Markdown("# 馃弳 Leaderboard\nVote to help the community determine the best Catalan TTS models.\n")
    
    reveal_checkbox = gr.Checkbox(label="Reveal preliminary results", value=False)
    
    # Inicializa la tabla sin datos, solo con encabezados
    leaderboard_table = gr.DataFrame(headers=["Rank", "Model", "Score", "UTMOS", "PESQ", "STOI"], 
                                     datatype=["str", "str", "str", "str", "str", "str"], value=[])

    # Al cambiar el valor del checkbox, actualizamos la tabla
    reveal_checkbox.change(fn=update_leaderboard, inputs=[reveal_checkbox], outputs=[leaderboard_table])

# Lanzar la aplicaci贸n
demo.queue(api_open=False, default_concurrency_limit=40).launch(show_api=False)