Spaces:
Runtime error
Runtime error
File size: 9,854 Bytes
9129bee 416f2ae 8acfe8a 416f2ae 9129bee 67b19a2 9129bee 67b19a2 e0cffe2 775977a f517ce5 775977a e0cffe2 38d24c6 67b19a2 |
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 179 180 181 182 183 184 185 186 187 188 |
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 = 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) |