# ENUNCIADO # app.py # # Este archivo construirá la interfaz web con Gradio. # Función principal ask: # Se debe definir una función ask(query, top_k, umbral) que: # • Reciba: # o query (str): la pregunta del usuario. # o top_k (int): número de documentos a recuperar. # o umbral (float): umbral de similitud. # • Utilice las funciones del módulo rag_engine para obtener los documentos # relevantes y la respuesta generada. # • Formatee los documentos recuperados para mostrarlos de forma legible (por # ejemplo, uniendo los textos con separadores como \n\n---\n\n). # • Retorne (respuesta, docs_formateados). # # Interfaz Gradio # • Utilizar gr.Blocks con un título y descripción. # • Tiene: # o Un gr.Textbox para la pregunta (con placeholder). # o Un gr.Slider para top_k (valores de 1 a 5, valor por defecto 5, paso 1). # o Un gr.Slider para umbral (valores de 0.0 a 1.0, valor por defecto 0.55, # paso 0.05). # o Un gr.Textbox para mostrar la respuesta (de 3 líneas). # o Un gr.Textbox para mostrar los documentos recuperados (de 6 líneas, # máximo 15). # o Un botón Enviar que al hacer clic ejecute la función ask con los valores # de entrada y actualice las salidas. # • Por último, lanzar la interfaz con .launch(). import gradio as gr from rag_engine import recuperar_documentos, generar_respuesta def ask(query, top_k, umbral): docs = recuperar_documentos(query, top_k, umbral) respuesta = generar_respuesta(query, docs) docs_formateados = "\n\n---\n\n".join(docs) return respuesta, docs_formateados with gr.Blocks() as demo: gr.Markdown("# Hospital RAG Chatbot") gr.Markdown("Ask questions about the hospital knowledge base.") query = gr.Textbox( label="Question", placeholder="Ask something about the hospital..." ) top_k = gr.Slider(minimum=1, maximum=5, value=5, step=1, label="Top K Documents") umbral = gr.Slider( minimum=0.0, maximum=1.0, value=0.55, step=0.05, label="Similarity Threshold" ) respuesta = gr.Textbox(label="Answer", lines=3) documentos = gr.Textbox(label="Retrieved Documents", lines=6, max_lines=15) boton = gr.Button("Enviar") boton.click( fn=ask, inputs=[query, top_k, umbral], outputs=[respuesta, documentos], api_name="ask", ) demo.launch()