File size: 7,649 Bytes
44c25e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from random import randint
import streamlit as st

import streamlit as st
import json
import time
from config import Config
from pinecode_quieries import PinecodeProposalQueries
import logging
logging.basicConfig(format="%(levelname)s - %(name)s -  %(message)s", level=logging.WARNING)
logging.getLogger("haystack").setLevel(logging.INFO)

extractive_query = PinecodeProposalQueries (index_name= Config.index_name,
                                        api_key = Config.es_password,
                                        environment = Config.pinecone_environment,
                                        embedding_dim = Config.embedding_dim,
                                        reader_name_or_path = Config.reader_model_name_or_path,
                                        use_gpu = Config.use_gpu)

def reforma_salud_febrero_2023():
    title = """
    <h1 style='
    text-align: center;
    color: #39AA35'>
    Ask2Democracy 🇨🇴 - Propuesta reforma a la salud 2023
    </h1>
  """
    st.markdown(title, unsafe_allow_html=True)
    st.markdown("""<div align="right">
    Creado por Jorge Henao 🇨🇴 <a href="https://twitter.com/jhenaotw" target='_blank'>Twitter</a> <a     href="https://www.linkedin.com/in/henaojorge" target='_blank'/>LinkedIn</a>    </div>
        """, unsafe_allow_html=True)
    
    question_samples_str = """¿Cuándo se implementará el Sistema de Salud?
¿Cómo se implementará el Sistema de Salud?
¿Qué es principio de interpretación y fundamento de la transición en relación al Sistema de Salud?
¿Qué se garantiza en todo momento con el nuevo Sistema de Salud?
¿Qué son los Centros de Atención Primaria Integrales y Resolutivos en Salud - CAPIRS?
¿Qué se garantiza durante el periodo de transición del nuevo Sistema de Salud?
¿Puede haber personas sin protección de su salud durante el periodo de transición?
¿Cuál es el derecho fundamental que se garantiza en todo momento durante la transición del nuevo Sistema de Salud?
¿En qué país se está implementando este Sistema de Salud?
¿Qué se debe realizar para garantizar la gestión de los recursos en el nivel nacional y desconcentrado?
¿Cómo se regirá el régimen de contratación de los contratos mencionados en el texto?
¿Qué son las cláusulas exorbitantes previstas en el estatuto General de Contratación de la administración pública?
¿Qué principios deben atender los contratos mencionados en el texto?
¿Cuál es el ámbito de aplicación de los contratos mencionados en el texto?
¿Quién tiene la responsabilidad de realizar la auditoría de las cuentas en relación a estos contratos?
¿Cuáles son las características que deben cumplir los contratos mencionados en el texto?
¿Qué se entiende por "coordinación" en el contexto de los contratos mencionados en el texto?
¿Qué objetivo se busca con los contratos mencionados en el texto?
¿Quién será el encargado de contratar los servicios de salud y otros requerimientos para el cumplimiento de su labor en el nivel regional?
¿Qué tipo de instituciones hospitalarias y ambulatorias se integran a la red de servicios del territorio?
¿Qué tarifas deben seguir las instituciones hospitalarias y ambulatorias para la prestación de servicios de salud?
¿Qué busca modular el régimen de tarifas y formas de pago para la prestación de servicios de salud?
¿Qué tipo de registro llevará el Fondo Regional de Salud?
¿Cuáles son algunas de las variables que se incluirán en el registro de cada servicio prestado y pagado?"""

    question_samples = question_samples_str.splitlines()
    
    def clear_submit():
        st.session_state["submit"] = False
        
    def fake_search(question, retriever_top_k, reader_top_k):
        #p1_result = query.search_by_query(query = question, retriever_top_k = retriever_top_k, reader_top_k = reader_top_k, es_index = "informecomisionverdad")
        result = []
        p = """
        La masacre de Bojayá fue perpetrada por el Frente José María Córdoba, de las FARC-EP, al lanzar un cilindro bomba que cayó en una iglesia en la que los pobladores se refugiaban del enfrentamiento de este grupo con el Bloque Élmer Cárdenas de las AUC. Las víctimas fueron 81 personas, 47 de ellas eran niñas, niños y adolescentes
            """
        for i in range(0, reader_top_k):
            result.append([[i+1],"81 personas", p[:250],"Las masacres","Comisión de la verdad - Informe de hallazgos y recomendaciones Junio 2022","5"])
        
        return result

    def search(question, retriever_top_k, reader_top_k):
        filters = {"source_title": "Reforma de la salud 13 Febrero 2023"}
        
        query_result = extractive_query.search_by_query(query = question, 
                                                        retriever_top_k = retriever_top_k, 
                                                        reader_top_k = reader_top_k,
                                                        filters = filters)
        result = []
        for i in range(0, len(query_result)):
            item = query_result[i]
            result.append([[i+1], item.answer, item.context[:200], 
                        item.meta['title'], item.meta['source_title'], int(item.meta['page'])])
            #result.append([[i+1], item.answer, item.context[:200], item.meta['title']])
        return result

    def search_and_show_results():
        # set start time
        stt = time.time()
        # retrieve top 5 documents
        results = search(query, retriever_top_k=5, reader_top_k=3)
        # set endtime
        ent = time.time()
        # measure resulting time
        elapsed_time = round(ent - stt, 2)

        # show which query was entered, and what was searching time
        st.write(f"**Resultados relacionados con:** \"{query}\" ({elapsed_time} sec.)")
        # then we use loop to show results
        for i, answer in enumerate(results):
            # answer starts with header
            st.subheader(f"{answer[1]}")
            # cropped answer
            doc = answer[2][:250] + "..."
            # and url to the full answer
            #url = f"https://www.comisiondelaverdad.co/sites/default/files/descargables/2022-06/Informe%20Final%20capi%CC%81tulo%20Hallazgos%20y%20recomendaciones.pdf#page={answer[5]+1}"
            url = f"https://petro.presidencia.gov.co/Documents/230213-Reforma-salud.pdf"
            # then we display it
            #st.markdown(f'{doc}\n<br>Fuente: {answer[4]}\n<br>Capítulo: {answer[3]}\n<br>Página: {answer[5]}\n[**Lee más aquí**]({url})\n', unsafe_allow_html=True)
            st.markdown(f"{doc}[**Lee más aquí**]({url})")
            st.caption(f"Fuente: {answer[4]} - Capítulo: {answer[3]} - Página: {answer[5]}")
            
        st.markdown("---")

    #results = search("que es el adres", retriever_top_k=5, reader_top_k=3)
    
    st.write(f"""<br><p>Cuanto más contexto le des a la pregunta mejores resultados se obtienen. 
             No es un sistema basado en palabras claves, puedes escribir preguntas elaboradas. 
             Una serie de modelos de lenguaje transformers intervienen en cada consulta para ayudar a entenderlas."""
             ,unsafe_allow_html=True)
    selected_question = st.selectbox("Aquí algunos ejemplos:", question_samples)
    query = st.text_area("Escribe tu pregunta", value = selected_question, on_change=clear_submit)
    button = st.button("Buscar")
    if button or st.session_state.get("submit"):
        if not query:
            st.error("¡escribe una pregunta!")
        else:
            st.session_state["submit"] = True
            search_and_show_results()