ask2democracy / app.py
Jorge Henao
ajuste de typos
38d24c6
raw
history blame
9.56 kB
import gradio as gr
from haystack.nodes import BM25Retriever, FARMReader
from haystack.document_stores import ElasticsearchDocumentStore
from haystack.pipelines import ExtractiveQAPipeline
from abc import ABC, abstractmethod
import certifi
import gradio as gr
ca_certs=certifi.where()
class Config():
es_host = "ask2democracy.es.us-central1.gcp.cloud.es.io"
es_user = "elastic"
es_password = "siKAHmmk2flwEaKNqQVZwp49"
proposals_index = "petrolfo"
#reader_model_name_or_path = "deepset/roberta-base-squad2"
reader_model_name_or_path = "deepset/xlm-roberta-large-squad2"
use_gpu = True
class DocumentQueries(ABC):
@abstractmethod
def search_by_query(self, query : str, retriever_top_k: int, reader_top_k: int, es_index: str):
pass
class ExtractiveProposalQueries(DocumentQueries):
def __init__(self, es_host: str, es_index: str, es_user, es_password, reader_name_or_path: str, use_gpu = False) -> None:
reader = FARMReader(model_name_or_path = reader_name_or_path, use_gpu = use_gpu, num_processes=1)
self._initialize_pipeline(es_host, es_index, es_user, es_password, reader = reader)
def _initialize_pipeline(self, es_host, es_index, es_user, es_password, reader = None):
if reader is not None:
self.reader = reader
self.es_host = es_host
self.es_user = es_user
self.es_password = es_password
self.document_store = ElasticsearchDocumentStore(host = es_host, username=es_user, password=es_password, index = es_index, port = 443, scheme='https', verify_certs=True, ca_certs=ca_certs)
self.retriever = BM25Retriever(document_store = self.document_store)
self.pipe = ExtractiveQAPipeline(self.reader, self.retriever)
def search_by_query(self, query : str, retriever_top_k: int, reader_top_k: int, es_index: str = None) :
if es_index is not None:
self._initialize_pipeline(self.es_host, es_index, self.es_user, self.es_password)
params = {"Retriever": {"top_k": retriever_top_k}, "Reader": {"top_k": reader_top_k}}
prediction = self.pipe.run( query = query, params = params)
return prediction["answers"]
def update(query):
return f"{query}", f"{query}", f"{query}", f"{query}"
def search(question):
p1_result = query.search_by_query(query = question, retriever_top_k = 5, reader_top_k = 1, es_index = "petro")
p2_result = query.search_by_query(query = question, retriever_top_k = 5, reader_top_k = 1, es_index = "rodolfo")
return [p1_result[0].answer,
p1_result[0].context,
p2_result[0].answer,
p2_result[0].context]
demo = gr.Blocks()
query = ExtractiveProposalQueries(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 update(query):
return f"{query}", f"{query}", f"{query}", f"{query}"
def search(question):
p1_result = query.search_by_query(query = question, retriever_top_k = 5, reader_top_k = 3, es_index = "petro")
p2_result = query.search_by_query(query = question, retriever_top_k = 5, reader_top_k = 3, es_index = "rodolfo")
return [p1_result[0].answer,
p1_result[0].context,
p2_result[0].answer,
p2_result[0].context]
demo = gr.Blocks()
with demo:
gr.Markdown(
"""
# Ask2Democracy🇨🇴
El debate ha sido un ausente en la segunda vuelta por la presidencia de Colombia del 2022.
para ayudar con el conocimiento de las propuestas de los candidatos construí este espacio,
puede hacerle preguntas a la propuestas de los candidatos.
Un pequeño aporte a un fin de semana determinante en la democracia Colombiana [Abajo algunos ejemplos]👇
<p>
<br>Este espacio hace parte de un proyecto open source que busca ayudar con el conocimiento de la historia Colombiana.</br>
<a href= "https://github.com/jorge-henao/ask_to_democracy">repo con FastAPI</a>
</p>
<p>
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>
</p>
""")
inp = gr.Textbox(placeholder="¿Que va a hacer con la deuda del ICETEX?")
search_button = gr.Button("Buscar")
with gr.Row():
#response = gr.Label(value="Gustavo Petro")
#context = gr.Label(value="Rodolfo Hernández")
gr.Markdown("<h1>Gustavo Petro (•_•) ( •_•) </h1>")
gr.Markdown("<h1> Rodolfo Hernandez</h1>")
# resp_1 = gr.Markdown("<b>Respuesta</b>")
# context_1 = gr.Markdown("<b>Contexto</b>")
with gr.Row():
gr.Markdown("<img src='https://ichef.bbci.co.uk/news/640/cpsprodpb/394A/production/_124966641_blank2gridscollage.png' alt='Girl in a jacket'>")
with gr.Row():
with gr.Column():
resp_1 = gr.Textbox(lines=1, label="respuesta de Petro")
context_1 = gr.Textbox(lines=5, label="contexto")
with gr.Column():
resp_2 = gr.Textbox(lines=1, label="respuesta de Rodolfo Hernandez")
context_2 = gr.Textbox(lines=5, label="contexto")
search_button.click(search, inputs = inp, outputs=[resp_1, context_1, resp_2, context_2])
gr.Markdown("""
# Aquí algunos asuntos de interés nacional:
<ul>
<li>¿Por qué quiere llegar a la presidencia?</li>
<li>¿Que va a hacer con la deuda del ICETEX?</li>
<li>¿Como impulsará la creación de startus o emprendimientos creados por jóvenes?</li>
<li>¿Propuestas de para garantizar la protección de lideres sociales y ambientales?</li>
<li>¿Cómo promoverá el mercado laboral de los jóvenes?</li>
<li>¿Cuales medidas tomará para mejorar la remuneración de los jóvenes ?</li>
<li>¿Cuales aciones propone para aumentar la capacidad del sistema de salud en materia de prevención y atención de enfermedades?</li>
<li>¿apoyará el proceso de paz con el ELN?</li>
<li>¿regulará las plataformas móviles de transporte?</li>
<li>¿consideraría el cultivo de la hoja de coca para uso farmacéutico y otros usos lícitos?</li>
<li>¿está de acuerdo con la legalización de la marhihuana?</li>
<li>¿apoyaría las Pymes para entrar el mercado de la marihuana legal?</li>
<li>¿implementaría el uso del Canabis para tratar enfermedades no crónicas ni terminales?</li>
<li>¿Por qué implementará el uso del Canabis?</li>
<li>¿Que política implementará para aprovechar plantas como la hoja de coca en usos alternativos como abonos?</li>
<li>¿está de acuerdo con la reforma del SMAD?</li>
<li>¿está de acuerdo con la regulación de la prostitución?</li>
<li>¿eliminará el servicio militar obligatorio?</li>
<li>¿Diversidad de género en los altos cargos del gobierno de ?</li>
<li>sobre diversidad de género en los altos cargos del gobierno </li>
<li>¿ eliminará la figura del porte especial de armas?</li>
<li>¿Que mecanismo implementará para garantizar la paridad de género en la política nacional y territorial?</li>
<li>cuotas de participación igualitaria en cargos públicos para personas de todas las identidades de género</li>
<li>¿Que va hacer para eliminar las barreras de acceso, tenencia y formalización de la tierra para las mujeres?</li>
<li>¿Cómo incentivará la denuncia por parte de hombres victgimas de violencia de genero?</li>
<li>¿tendrá en cuenta la identificación de genero no binario para efectos de registros públios?</li>
<li>¿aceptaría el matrimonio o union marital de hecho entre familias poliamorosas?</li>
<li>¿eliminará el 4 por mil?</li>
<li>¿aprueva acuerdo de ESCASÚ?</li>
<li>¿va a acabar con las EPS?</li>
<li>¿Que propone respecto a la medicina preventiva?</li>
<li>spobre consumo mínimo vital de agua </li>
<li>¿Replanteará las relaciones con Estados Unidos?</li>
<li>¿Renegociará los TLCS?</li>
<li>¿Seguirá importando alimentos o fomentará la producción nacional?</li>
<li>¿Qué políticas sociales implementará para ayudar a las familias vulnerables?</li>
<li>¿Cómo financiaría las pensiones?</li>
<li>¿De dónde va a sacar la plata para financiar las pensiones?</li>
<li>¿Que propone para la transición energética?</li>
<li>¿Cómo fortalecerá las capacidades para producir localmente medicamentos e insumos esenciales para la salud de los colombianos?</li>
<li>¿Cómo hará para preservar la vida de los y las líderes sociales afrodescendientes?</li>
<li>¿Cómo hará una transición energética justa?</li>
<li>¿Cómo revitalizará el proceso de paz?</li>
<li>¿Cómo transformará la actual tragedia educativa en Colombia en una oportunidad para tener el sistema educativo que el país necesita?</li>
<li>¿Cómo va a garantizar el enfoque de género en sus políticas públicas?</li>
<li>¿Ejecutará una reforma agraria?</li>
<li>¿Habrá reforma tributaria en el gobierno?</li>
<li>¿Qué acciones concretas tomará para reducir el hacinamiento en las cárceles?</li>
<li>¿Qué recursos nacionales destinará a la movilidad en Bogotá?</li>
<li>¿Qué va a hacer contra la corrupción?</li>
<li>¿ recomponerá las relaciones diplomáticas con el Gobierno venezolano?</li>
<li>¿Qué propone sobre las pensiones?</li>
</ul>""")
demo.launch(debug = True)