Spaces:
Sleeping
Sleeping
| # 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() | |