File size: 9,805 Bytes
67b19a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bd2de82
67b19a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
908be3e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67b19a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
908be3e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67b19a2
 
 
 
 
 
 
 
 
 
 
908be3e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = 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]

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 = [
['¿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)