ask2democracycol / app_pinecode.py
Jorge Henao
interface connected to search
ae5fd49
raw
history blame
No virus
9.42 kB
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():
# 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
st.set_page_config(layout="wide", page_title="Buscar")
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
selected_index = None
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()
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"])