Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import os | |
| from knowledge_base.build_kb import crear_knowledge_base | |
| from knowledge_base.chat_initializer import inicializar_chat | |
| import time | |
| def interfaz_chat(session_id_state): | |
| with gr.Column(): | |
| gr.Markdown("## 🧠 Chat con IA sobre la Knowledge Base") | |
| mensaje_estado_chat = gr.Markdown("Consulta los datos a la base de datos y crea la base de conocimiento antes de inicializar el chat.") | |
| with gr.Row(): | |
| boton_crear_kb = gr.Button("📦 Crear y Descargar Knowledge Base") | |
| boton_inicializar = gr.Button("💬 Inicializar Chat") | |
| archivo_kb = gr.File(label="📁 Descarga la Knowledge Base aquí", visible=False) | |
| # Contenedor del chat (inicialmente oculto) | |
| with gr.Column(visible=False) as contenedor_chat: | |
| interfaz_chat = gr.ChatInterface(fn=lambda msg, hist: "⚠️ Inicializa el chat primero para comenzar.", type="messages") | |
| # ------------------------- | |
| # LÓGICA: CREAR KB | |
| # ------------------------- | |
| def crear_kb_wrapper(session_id): | |
| for archivo, mensaje in crear_knowledge_base(session_id): | |
| yield archivo, mensaje | |
| boton_crear_kb.click( | |
| fn=crear_kb_wrapper, | |
| inputs=[session_id_state], | |
| outputs=[archivo_kb, mensaje_estado_chat] | |
| ) | |
| # ------------------------- | |
| # LÓGICA: INICIALIZAR CHAT | |
| # ------------------------- | |
| def mostrar_mensaje_cargando(): | |
| time.sleep(0.3) | |
| return "⏳ Cargando documentos y generando embeddings... Esto puede tardar unos minutos." | |
| def cargar_chat(session_id): | |
| chain, mensaje = inicializar_chat(session_id) | |
| if chain: | |
| def responder(msg, hist): | |
| result = chain.invoke({"question": msg}) | |
| return {"role": "assistant", "content": result["answer"]} | |
| interfaz_chat.fn = responder | |
| return mensaje, gr.update(visible=True) | |
| else: | |
| return mensaje, gr.update(visible=False) | |
| boton_inicializar.click( | |
| fn=mostrar_mensaje_cargando, | |
| inputs=[], | |
| outputs=[mensaje_estado_chat] | |
| ).then( | |
| fn=cargar_chat, | |
| inputs=[session_id_state], | |
| outputs=[mensaje_estado_chat, contenedor_chat] | |
| ) | |
| return mensaje_estado_chat, contenedor_chat | |