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()