Spaces:
Sleeping
Sleeping
File size: 2,385 Bytes
0a227d1 5ac738d 0a227d1 5ac738d 0a227d1 5ac738d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | # 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()
|