| import gradio as gr |
| from rag_engine import recuperar_documentos, generar_respuesta |
|
|
|
|
| def ask(query, top_k, umbral): |
| """ |
| Función principal que procesa la consulta del usuario y retorna la respuesta y documentos. |
| |
| Args: |
| query (str): La pregunta del usuario |
| top_k (int): Número de documentos a recuperar |
| umbral (float): Umbral de similitud |
| |
| Returns: |
| tuple: (respuesta, docs_formateados) |
| """ |
| if not query or query.strip() == "": |
| return "Por favor, ingresa una pregunta.", "" |
| |
| try: |
| |
| documentos_recuperados = recuperar_documentos(query, top_k=int(top_k), umbral=float(umbral)) |
| |
| |
| respuesta = generar_respuesta(query, documentos_recuperados) |
| |
| |
| if documentos_recuperados: |
| docs_formateados = "\n\n---\n\n".join(documentos_recuperados) |
| else: |
| docs_formateados = "No se encontraron documentos relevantes con el umbral especificado." |
| |
| return respuesta, docs_formateados |
| |
| except Exception as e: |
| return f"Error al procesar la consulta: {str(e)}", "" |
|
|
|
|
| |
| with gr.Blocks(title="Chat RAG") as demo: |
| |
| gr.Markdown( |
| """ |
| # Chat RAG |
| |
| Este sistema utiliza RAG para responder preguntas sobre información hospitalaria. |
| |
| El sistema recupera documentos relevantes y genera respuestas basadas únicamente en el contexto proporcionado. |
| |
| **Instrucciones:** Escribe tu pregunta en inglés, ajusta los parámetros si lo deseas, y haz clic en "Enviar". |
| """ |
| ) |
| |
| with gr.Row(): |
| with gr.Column(): |
| |
| query_input = gr.Textbox( |
| label="Pregunta", |
| placeholder="Ejemplo: What is the hospital email?", |
| lines=2 |
| ) |
| |
| |
| top_k_slider = gr.Slider( |
| minimum=1, |
| maximum=5, |
| value=1, |
| step=1, |
| label="Top K - documentos" |
| ) |
| |
| |
| umbral_slider = gr.Slider( |
| minimum=0.0, |
| maximum=1.0, |
| value=0.55, |
| step=0.05, |
| label="Umbral de similitud" |
| ) |
| |
| |
| submit_btn = gr.Button("Enviar", variant="primary") |
| |
| with gr.Column(): |
| |
| respuesta_output = gr.Textbox( |
| label="Respuesta", |
| lines=3, |
| interactive=False |
| ) |
| |
| |
| docs_output = gr.Textbox( |
| label="Documentos recuperados", |
| lines=6, |
| max_lines=15, |
| interactive=False |
| ) |
| |
| |
| submit_btn.click( |
| fn=ask, |
| inputs=[query_input, top_k_slider, umbral_slider], |
| outputs=[respuesta_output, docs_output] |
| ) |
|
|
| |
| if __name__ == "__main__": |
| demo.launch() |
|
|