import logging import gradio as gr from utils import ( cargar_etiquetas, normalizar_matricula, normalizar_nombre, validar_datos_estudiante, ) from dataset import cargar_datasets from evaluation import ( ORDEN_LEADERBOARD_POR_DEFECTO, evaluate_interface, obtener_tablas_leaderboard, ) logger = logging.getLogger(__name__) 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 = normalizar_matricula(matricula) error_validacion = validar_datos_estudiante(nombre, matricula) if error_validacion: logger.error( "Datos de estudiante inválidos para nombre=%r, matricula=%r: %s", nombre, matricula, validar_datos_estudiante(nombre, matricula, detailed=True), ) 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()