File size: 10,590 Bytes
7d54e39
 
 
 
6c1e509
7d54e39
9735086
 
 
 
 
 
 
 
7a7cae5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c1e509
7a7cae5
 
 
7d54e39
7a7cae5
 
 
7d54e39
 
 
 
 
 
 
 
 
 
 
 
c27d381
7d54e39
fcc4f87
7d54e39
cb52b15
 
7d54e39
 
 
7a7cae5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d54e39
7a7cae5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3af52d7
7a7cae5
 
 
 
3ffd36a
7a7cae5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
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)

logging.info("This is a test log ..")

samples_salud = """
¿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?
"""

samples_hallazgos = """
¿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?
"""
  
extractive_query = PinecodeProposalQueries (es_host = Config.es_host, es_index = Config.proposals_index,
                                   es_user = Config.es_user, es_password = Config.es_password,
                                   reader_name_or_path = Config.reader_model_name_or_path,
                                   use_gpu = Config.use_gpu)

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):
  query_result = extractive_query.search_by_query(query = question, retriever_top_k = retriever_top_k, reader_top_k = reader_top_k)
  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'], int(item.meta['page'])])
    #result.append([[i+1], item.answer, item.context[:200], item.meta['title']])
  
  return result

def search_and_show_results(st):
  # 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)

# if __name__ == "__main__":
    # streamlit part starts here with title
title = """
  <h1 style='
  text-align: center;
  color: #39AA35'>
  Ask2Democracy 🇨🇴 
  </h1>
  <p>
Muchas de las discusiones que ocurren en Colombia terminan siendo artículos o pdfs que salvo excpciones, nadie lee.
Este sistema de búsquedas usa inteligencia artificial para apoyar el entendimiendo de textos relevantes que suelen estar dispersos y poco accesibles.
Como las propuestas presidenciales del 22, los hallazgos de la comisión de la verdad, los textos de las reformas, etc.
"""
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)
st.write(f"Cuanto más contexto le des a la pregunta mejor funciona el sistema.")

# Sidebar
index = None
doc = None
selected_index = None

with st.sidebar:
  st.write("Ask2Democracy 🇨🇴")
  selected_index = st.selectbox("Seleccion la colección sobre el que deseas buscar", 
                                ["Propuesta Reforma de la salud 2023", 
                                 "Hallazgos de la comisión de la verdad 2022"])
          
tab1, tab2 = st.tabs(["Buscar", "About"])
with tab1:
  query = st.text_area("Escribe tu pregunta", 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(st)
          
with tab2:
  st.markdown("### Beta disclaimer")
  desc = """Sistema experimental en beta. Las respuestas que arroja el sistema no han sido pregrabadas ni basadas en opiniones. 
  Los documentos indexados han sido tomados de fuentes oficiales. Como el informe final de la CEV y la página oficial de la presidencia de la república de Colombia.
  Este explorador usa modelos de inteligencia artificial que ayudan a entender el lenguaje español, sin embargo, 
  necesita de un mayor entrenamiento por lo que, en ocasiones, puede ser confuso y no tan preciso. 
  Si quieres apoyar escríbeme a jorge.henao@diezonce.co
  """
  st.write(desc)
  st.write("### Here's how it works:")
  st.write("""Usa sentence transformers nombremodelo
  nombre modelo reader
  pinecode dtabase
  Por: Jorge Henao 🇨🇴 Twitter LinkedIn
  repo en github con FastAPI / HayStack""")
  st.markdown("""---""")
  st.write('Author: <a href="https://www.linkedin.com/in/daniel-avila-arias/">Daniel Avila</a>', unsafe_allow_html=True)
  st.write('Repo: <a href="https://github.com/davila7/semantic-search">Github</a>', unsafe_allow_html=True)