evaluador / app.py
yoel
feat: orden configurable para leaderboards
e0f8389
import gradio as gr
from utils import cargar_etiquetas, normalizar_nombre, validar_datos_estudiante
from dataset import cargar_datasets
from evaluation import (
ORDEN_LEADERBOARD_POR_DEFECTO,
evaluate_interface,
obtener_tablas_leaderboard,
)
OPCIONES_ORDEN_LEADERBOARD = [
("Mejores primero", "mejores"),
("Peores primero", "peores"),
("M谩s recientes", "recientes"),
("M谩s antiguos", "antiguos"),
]
# Cargar etiquetas
etiquetas, num_clases, codigo = cargar_etiquetas()
# Cargar dataset
test_dataloader, sr_dataloader = cargar_datasets(codigo)
def interface_wrapper(
nombre,
matricula,
model_file,
model_type,
orden_clasificacion,
orden_sr,
):
nombre = normalizar_nombre(nombre)
matricula = (matricula or "").strip()
error_validacion = validar_datos_estudiante(nombre, matricula)
if error_validacion:
raise gr.Error(error_validacion)
return evaluate_interface(
nombre,
matricula,
model_file,
model_type,
orden_clasificacion,
orden_sr,
num_clases,
test_dataloader,
sr_dataloader,
)
def cargar_tablas_iniciales(orden_clasificacion, orden_sr):
tabla_clasificacion, tabla_sr = obtener_tablas_leaderboard(
orden_clasificacion, orden_sr
)
return "", "", "", tabla_clasificacion, tabla_sr
def actualizar_leaderboards(orden_clasificacion, orden_sr):
return obtener_tablas_leaderboard(orden_clasificacion, orden_sr)
with gr.Blocks(title="Evaluador de modelos") as demo:
gr.Markdown(
"# Evaluador de modelos\nCarga un modelo de clasificaci贸n o super-resoluci贸n. "
)
with gr.Row():
with gr.Column(scale=1):
nombre = gr.Textbox(label="Nombre completo")
matricula = gr.Textbox(label="Matr铆cula")
model_type = gr.Dropdown(
choices=[
("Clasificaci贸n", "clasificacion"),
("Super-resoluci贸n", "sr"),
],
value="clasificacion",
label="Tipo de modelo",
)
model_file = gr.File(label="Archivo del modelo (.safetensor)")
evaluar = gr.Button("Evaluar", variant="primary")
with gr.Column(scale=1):
metric_output = gr.Textbox(label="M茅trica")
sha_output = gr.Textbox(label="SHA256 del modelo")
score_output = gr.Textbox(label="Calificaci贸n")
with gr.Row():
with gr.Column(scale=1):
orden_clasificacion = gr.Dropdown(
choices=OPCIONES_ORDEN_LEADERBOARD,
value=ORDEN_LEADERBOARD_POR_DEFECTO,
label="Orden leaderboard clasificaci贸n",
)
leaderboard_cls = gr.Dataframe(
headers=[
"Nombre",
"Matr铆cula",
"Accuracy",
"Puntaje",
"SHA256",
"Duplicado",
"Fecha y hora (RD, 12h)",
],
datatype=["str", "str", "str", "number", "str", "str", "str"],
row_count=(0, "dynamic"),
label="Leaderboard Clasificaci贸n",
)
with gr.Column(scale=1):
orden_sr = gr.Dropdown(
choices=OPCIONES_ORDEN_LEADERBOARD,
value=ORDEN_LEADERBOARD_POR_DEFECTO,
label="Orden leaderboard super-resoluci贸n",
)
leaderboard_sr = gr.Dataframe(
headers=[
"Nombre",
"Matr铆cula",
"PSNR",
"Puntaje",
"SHA256",
"Duplicado",
"Fecha y hora (RD, 12h)",
],
datatype=["str", "str", "str", "number", "str", "str", "str"],
row_count=(0, "dynamic"),
label="Leaderboard Super-resoluci贸n",
)
demo.load(
fn=cargar_tablas_iniciales,
inputs=[orden_clasificacion, orden_sr],
outputs=[
metric_output,
sha_output,
score_output,
leaderboard_cls,
leaderboard_sr,
],
)
orden_clasificacion.change(
fn=actualizar_leaderboards,
inputs=[orden_clasificacion, orden_sr],
outputs=[leaderboard_cls, leaderboard_sr],
)
orden_sr.change(
fn=actualizar_leaderboards,
inputs=[orden_clasificacion, orden_sr],
outputs=[leaderboard_cls, leaderboard_sr],
)
evaluar.click(
fn=interface_wrapper,
inputs=[
nombre,
matricula,
model_file,
model_type,
orden_clasificacion,
orden_sr,
],
outputs=[
metric_output,
sha_output,
score_output,
leaderboard_cls,
leaderboard_sr,
],
)
if __name__ == "__main__":
demo.launch()