Spaces:
Runtime error
Runtime error
File size: 9,792 Bytes
416f2ae 996185e 416f2ae d363b77 416f2ae d363b77 416f2ae 8acfe8a 416f2ae 67b19a2 d363b77 90261a5 e0cffe2 7d67aa9 915b8f9 90261a5 7d67aa9 38d24c6 d363b77 6ee5a22 d5dd0e0 6ee5a22 105521b 6ee5a22 d363b77 915b8f9 d363b77 915b8f9 d363b77 |
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 |
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
import examples
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 = True) -> 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]
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]
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]
description = """
<p>
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 oficiales de los candidatos (Junio de 2022).
Un pequeño aporte a un fin de semana determinante en la democracia Colombiana.
</p>
<br>Este espacio hace parte de un proyecto open source que busca ayudar con el entendimiento de tenas relevantes para el país, como estas elecciones y la historia Colombiana. <a href= "https://github.com/jorge-henao/ask_to_democracy">repo en github con FastAPI</a></br>
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>
"""
examples = [
['¿Que va a hacer con la deuda del ICETEX?'],
['¿Como impulsará la creación de startus o emprendimientos creados por jóvenes?'],
['¿Cómo 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Ú?'],
['qué va a hacer 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?']
]
iface = gr.Interface(fn=search,
title= "Ask2Democracy 🇨🇴 - Elecciones precidenciales Colombia 2022",
description = description,
inputs=[
gr.inputs.Textbox(lines=2, label="hazle una pregunta a los candidatos [Abajo algunos ejemplos]👇", placeholder='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) |