import gradio as gr import pandas as pd import joblib import io def predecir_excel(file): try: # Cargar el modelo cada vez para capturar errores si falta o está dañado model = joblib.load("modelo_noshows.pkl") if file is None: return None, "⚠️ No se recibió ningún archivo." # Obtener la ruta o el nombre temporal del archivo file_path = file.name if hasattr(file, "name") else file # Leer Excel df = pd.read_excel(file_path) # Predecir pred = model.predict(df) df["predicción"] = ["inasistencia" if p == 0 else "asistencia" for p in pred] # Guardar Excel en memoria output = io.BytesIO() with pd.ExcelWriter(output, engine="openpyxl") as writer: df.to_excel(writer, index=False) output.seek(0) return output, "✅ Predicción completada correctamente" except Exception as e: return None, f"❌ Error: {e}" # Crear interfaz Gradio iface = gr.Interface( fn=predecir_excel, inputs=gr.File(label="Sube un archivo Excel (.xlsx)", file_types=[".xlsx"]), outputs=[ gr.File(label="📥 Descargar predicciones"), gr.Textbox(label="Estado de la ejecución") ], title="Predicción de inasistencias", description="Sube un archivo Excel con tus datos y descarga el resultado con la predicción." ) if __name__ == "__main__": iface.launch()