|
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/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 = 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() |
|
|
|
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. [Abajo algunos ejemplos]👇 |
|
<br>Un pequeño aporte a un fin de semana determinante en la democracia Colombiana.</br> |
|
|
|
Este espacio hace parte de un proyecto open source que busca ayudar con el conocimiento de la historia Colombiana. |
|
<a href= "https://github.com/jorge-henao/ask_to_democracy">repo con FastAPI</a> |
|
|
|
<p> |
|
Contacto: 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(): |
|
|
|
|
|
gr.Markdown("<h1>Gustavo Petro (•_•) ( •_•) </h1>") |
|
gr.Markdown("<h1> Rodolfo Hernandez</h1>") |
|
|
|
|
|
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í algunas cosas que les puede preguntar a los candidatos: |
|
<ul> |
|
<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á usted una transición energética justa, que balancee nuestras necesidades ambientales con nuestras necesidades sociales y económicas?</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á la reforma agraria que necesita el país?</li> |
|
<li>¿Habrá reforma tributaria en el gobierno de ?</li> |
|
<li>¿Qué acciones concretas tomará para reducir el hacinamiento en las cárceles, penitenciarías y estaciones de Policía?</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> |
|
</ul>""") |
|
|
|
|
|
demo.launch(debug = True) |