CoolFace
Apppublic

LabrvUaem/chatbot-uaemex

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
interface.py139 linesDownload Raw Back to root
1### 📁 chatbot_app/interface.py2 3import gradio as gr4from logic.response_engine import respond_letra_por_letra5from logic.response_engine import set_and_respond6from logic.feedback import enviar_y_actualizar, verificar_clave7from logic.chat_manager import chat_manager8from config.settings import ADMIN_PASS9 10 11def create_interface():12    with gr.Blocks(theme=gr.themes.Soft(), title="Asistente UAEMex") as app:13        with gr.Column(visible=True) as vista_chatbot:14            gr.Markdown("# 🏛️ Asistente Virtual UAEMex")15            gr.Markdown("### Control Escolar - Campus Ecatepec")16 17            with gr.Row():18                with gr.Column(scale=3):19                    chatbot = gr.Chatbot(height=400, type="messages")20                    user_input = gr.Textbox(21                        placeholder="Ej: ¿Qué necesito para cambiar de carrera?",22                        label=""23                    )24                    with gr.Row():25                        submit_btn = gr.Button("Enviar", variant="primary")26                        clear_btn = gr.Button("Limpiar")27 28                with gr.Column(scale=1):29                    gr.Markdown("### 📋 Preguntas Frecuentes")30                    with gr.Row():31                        btn_becas = gr.Button("Becas")32                        btn_reins = gr.Button("Reinscripción")33                    with gr.Row():34                        btn_pagos = gr.Button("Pagos")35                        btn_titu = gr.Button("Titulación")36 37                    gr.Markdown("### 🔗 Enlaces Útiles")38                    gr.Markdown("- [SIBECAS](https://sibecas.uaemex.mx/)")39                    gr.Markdown("- [Control Escolar](https://controlescolar.uaemex.mx/)")40                    gr.Markdown("- [Calendario Escolar](http://dep.uaemex.mx/portal/calendario/)")41 42                    boton_ir_a_reporte = gr.Button("⚠️ ¿El chatbot respondió mal? Envía un reporte")43 44            gr.Examples(45                examples=[46                    ["¿Cuál es el horario de control escolar?"],47                    ["¿Cómo solicito la beca de Movilidad?"],48                    ["¿Cómo llego a la Uaemex?"],49                    ["¿Cómo puedo solicitar un prestamo de libros?"]50                ],51                inputs=user_input,52                label="💡 Haz clic para probar"53            )54 55            estado = gr.Label(value="", elem_id="estado")56 57            submit_btn.click(58                respond_letra_por_letra,59                inputs=[user_input, chatbot],60                outputs=[user_input, chatbot, estado]61            )62 63            btn_becas.click(64                respond_letra_por_letra,65                inputs=[gr.State("¿Qué tipos de becas existen y sus requisitos?"), chatbot],66                outputs=[user_input, chatbot, estado]67            )68            btn_reins.click(69                respond_letra_por_letra,70                inputs=[gr.State("¿Qué necesito para mi reinscripción?"), chatbot],71                outputs=[user_input, chatbot, estado]72            )73            btn_pagos.click(74                respond_letra_por_letra,75                inputs=[gr.State("¿Dónde puedo hacer pagos escolares?"), chatbot],76                outputs=[user_input, chatbot, estado]77            )78            btn_titu.click(79                respond_letra_por_letra,80                inputs=[gr.State("¿Cuáles son los requisitos para titulación?"), chatbot],81                outputs=[user_input, chatbot, estado]82            )83 84            clear_btn.click(85                lambda: ([], "", ""),86                None,87                [chatbot, user_input, estado],88                queue=False89            )90 91        with gr.Column(visible=False) as vista_reporte:92            gr.Markdown("## 🛠️ Ayúdanos a mejorar")93            gr.Markdown("Por favor, cuéntanos qué pregunta hiciste y qué respondió mal el chatbot.")94            gr.Markdown("### 📬 Reportar un error en la respuesta")95 96            input_pregunta = gr.Textbox(97                label="¿Qué pregunta hiciste?",98                placeholder= "Ej: ¿Qué es lo necesario para la inscripción?")99            input_respuesta = gr.Textbox(100                label="¿Qué respondió el chatbot?",101                placeholder= "Ej: 🎓 Puedes consultarla en Control Escolar o recibirla por correo una vez estés inscrito. La convocatoria suele publicarse entre julio y septiembre del año siguiente al ingreso.",102                lines=3)103            input_comentario = gr.Textbox(104                label="¿Por qué piensas que estuvo mal la respuesta?",105                placeholder= "Ej: ❌ La respuesta no menciona los documentos ni pasos necesarios para inscribirse.\n🤔 Solo dice que se recibe por correo después de estar inscrito, lo cual no tiene sentido si aún no me inscribo. \n✅ Yo esperaba que dijera algo como: “Debes entregar acta de nacimiento, CURP, comprobante de pago, etc.”",106                lines=3)107            btn_enviar_reporte = gr.Button("Enviar reporte")108            label_confirmacion = gr.Label()109 110            clave_admin = gr.Textbox(label="🔐 Acceder a reportes", type="password")111            btn_verificar_clave = gr.Button("Verificar")112            descarga_csv = gr.File(value="reportes.csv", label="Descargar reportes", interactive=True, visible=False)113            mensaje_clave = gr.Label()114 115            btn_verificar_clave.click(116                verificar_clave,117                inputs=clave_admin,118                outputs=[descarga_csv, mensaje_clave]119            )120 121            btn_volver = gr.Button("⬅️ Volver al chatbot")122 123        def mostrar_reporte():124            return gr.update(visible=False), gr.update(visible=True)125 126        def volver_a_chatbot():127            return gr.update(visible=True), gr.update(visible=False)128 129        boton_ir_a_reporte.click(mostrar_reporte, outputs=[vista_chatbot, vista_reporte])130        btn_volver.click(volver_a_chatbot, outputs=[vista_chatbot, vista_reporte])131 132        btn_enviar_reporte.click(133            enviar_y_actualizar,134            inputs=[input_pregunta, input_respuesta, input_comentario],135            outputs=[label_confirmacion, descarga_csv]136        )137 138    return app139