test_app / app.py
rjzevallos's picture
Update app.py
c0052fc verified
raw
history blame
3.84 kB
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)