Spaces:
Runtime error
Runtime error
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): | |
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"] | |
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 = 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() | |
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] | |
examples = [ | |
['¿Por qué quiere llegar a la presidencia?'], | |
['¿Que va a hacer con la deuda del ICETEX?'], | |
['¿Como impulsará la creación de startus o emprendimientos creados por jóvenes?'], | |
['¿Propuestas de para garantizar la protección de lideres sociales y ambientales?'], | |
['¿Cómo promoverá el mercado laboral de los jóvenes?'], | |
['¿Cuales medidas tomará para mejorar la remuneración de los jóvenes ?'], | |
['¿Cuales aciones propone para aumentar la capacidad del sistema de salud en materia de prevención y atención de enfermedades?'], | |
['¿apoyará el proceso de paz con el ELN?'], | |
['¿regulará las plataformas móviles de transporte?'], | |
['¿consideraría el cultivo de la hoja de coca para uso farmacéutico y otros usos lícitos?'], | |
['¿está de acuerdo con la legalización de la marhihuana?'], | |
['¿apoyaría las Pymes para entrar el mercado de la marihuana legal?'], | |
['¿implementaría el uso del Canabis para tratar enfermedades no crónicas ni terminales?'], | |
['¿Por qué implementará el uso del Canabis?'], | |
['¿Que política implementará para aprovechar plantas como la hoja de coca en usos alternativos como abonos?'], | |
['¿está de acuerdo con la reforma del SMAD?'], | |
['¿está de acuerdo con la regulación de la prostitución?'], | |
['¿eliminará el servicio militar obligatorio?'], | |
['¿Diversidad de género en los altos cargos del gobierno de ?'], | |
['sobre diversidad de género en los altos cargos del gobierno'], | |
['¿ eliminará la figura del porte especial de armas?'], | |
['¿Que mecanismo implementará para garantizar la paridad de género en la política nacional y territorial?'], | |
['cuotas de participación igualitaria en cargos públicos para personas de todas las identidades de género'], | |
['¿Que va hacer para eliminar las barreras de acceso, tenencia y formalización de la tierra para las mujeres?'], | |
['¿Cómo incentivará la denuncia por parte de hombres victgimas de violencia de genero?'], | |
['¿tendrá en cuenta la identificación de genero no binario para efectos de registros públios?'], | |
['¿aceptaría el matrimonio o union marital de hecho entre familias poliamorosas?'], | |
['¿eliminará el 4 por mil?'], | |
['¿aprueva acuerdo de ESCASÚ?'], | |
['¿va a acabar con las EPS?'], | |
['¿Que propone respecto a la medicina preventiva?'], | |
['spobre consumo mínimo vital de agua'], | |
['¿Replanteará las relaciones con Estados Unidos?'], | |
['¿Renegociará los TLCS?'], | |
['¿Seguirá importando alimentos o fomentará la producción nacional?'], | |
['¿Qué políticas sociales implementará para ayudar a las familias vulnerables?'], | |
['¿Cómo financiaría las pensiones?'], | |
['¿De dónde va a sacar la plata para financiar las pensiones?'], | |
['¿Que propone para la transición energética?'], | |
['¿Cómo fortalecerá las capacidades para producir localmente medicamentos e insumos esenciales para la salud de los colombianos?'], | |
['¿Cómo hará para preservar la vida de los y las líderes sociales afrodescendientes?'], | |
['¿Cómo hará una transición energética justa?'], | |
['¿Cómo revitalizará el proceso de paz?'], | |
['¿Cómo transformará la actual tragedia educativa en Colombia en una oportunidad para tener el sistema educativo que el país necesita?'], | |
['¿Cómo va a garantizar el enfoque de género en sus políticas públicas?'], | |
['¿Ejecutará una reforma agraria?'], | |
['¿Habrá reforma tributaria en el gobierno?'], | |
['¿Qué acciones concretas tomará para reducir el hacinamiento en las cárceles?'], | |
['¿Qué recursos nacionales destinará a la movilidad en Bogotá?'], | |
['¿Qué va a hacer contra la corrupción?'], | |
['¿ recomponerá las relaciones diplomáticas con el Gobierno venezolano?'], | |
['¿Qué propone sobre las pensiones?'] | |
] | |
description = """ | |
Ask2Democracy🇨🇴 - Elecciones precidenciales Colombia 2022 | |
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. <a href= "https://github.com/jorge-henao/ask_to_democracy">repo en github con FastAPI</a></br> | |
</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> | |
""" | |
iface = gr.Interface(fn=search, | |
title= "#Ask2Democracy🇨🇴", | |
description = description, | |
inputs=[ | |
gr.inputs.Textbox(lines=2, placeholder="hazle una pregunta a los candidatos", label='que va a hacer con la deuda del ICETEX?') | |
], | |
outputs=[ | |
gr.outputs.Textbox(label="Respuesta de Petro"), | |
gr.outputs.Textbox(label="Contexto de la propuesta"), | |
gr.outputs.Textbox(label="Respuesta de Rodolfo Hernandez"), | |
gr.outputs.Textbox(label="Contexto de la propuesta"), | |
], | |
examples = examples, | |
theme = 'peach' | |
) | |
iface.launch(enable_queue=True) |