Spaces:
Sleeping
Sleeping
Add application file
Browse files- .Rhistory +0 -0
- app.py +127 -0
- requirements.txt +4 -0
.Rhistory
ADDED
|
File without changes
|
app.py
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pandas as pd
|
| 2 |
+
import os
|
| 3 |
+
import openai
|
| 4 |
+
import json
|
| 5 |
+
from json import loads, dumps
|
| 6 |
+
import gradio as gr
|
| 7 |
+
|
| 8 |
+
# API de OpenAI
|
| 9 |
+
os.environ["OPENAI_API_KEY"] = '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'
|
| 10 |
+
openai.api_key = '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'
|
| 11 |
+
|
| 12 |
+
# Cargar el archivo JSON #CNT-002-2007
|
| 13 |
+
with open("Concentraciones_NPL.json") as json_file:
|
| 14 |
+
data = json.load(json_file)
|
| 15 |
+
#
|
| 16 |
+
|
| 17 |
+
#
|
| 18 |
+
global data
|
| 19 |
+
#print( dumps( data, indent = 4 ) )
|
| 20 |
+
|
| 21 |
+
# Main OpenAI Function
|
| 22 |
+
def get_completion_from_messages( messages, model = "gpt-3.5-turbo-16k",
|
| 23 |
+
temperature = 0, max_tokens = 4000 ): ##Check max_tokens
|
| 24 |
+
response = openai.ChatCompletion.create(
|
| 25 |
+
model = model,
|
| 26 |
+
messages = messages,
|
| 27 |
+
temperature = temperature,
|
| 28 |
+
max_tokens = max_tokens,
|
| 29 |
+
)
|
| 30 |
+
return response.choices[0].message["content"]
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
# Get SECTOR
|
| 34 |
+
def get_sector(data, Sector):
|
| 35 |
+
#
|
| 36 |
+
# Realizar una búsqueda por valor de clave
|
| 37 |
+
clave = "Sector"
|
| 38 |
+
valor = Sector#"Servicios financieros y de seguros"
|
| 39 |
+
#
|
| 40 |
+
if valor == 'Todos':
|
| 41 |
+
resultados = data
|
| 42 |
+
else:
|
| 43 |
+
resultados = [item for item in data.values() if item.get(clave) == valor]
|
| 44 |
+
#
|
| 45 |
+
#global resultados
|
| 46 |
+
#
|
| 47 |
+
return resultados
|
| 48 |
+
|
| 49 |
+
# Funcion que conversa sobre el contexto proporcionado
|
| 50 |
+
def chatear(user_message, Sector):
|
| 51 |
+
#
|
| 52 |
+
resultados = get_sector(data, Sector)
|
| 53 |
+
#
|
| 54 |
+
delimiter = "####"
|
| 55 |
+
#
|
| 56 |
+
system_message = f"""
|
| 57 |
+
Eres un especialista en derecho y economía de la competencia económica \
|
| 58 |
+
con actividad profesional en México. Se te formularán consultas o \
|
| 59 |
+
preguntas que deberás responder exclusivamente con la información \
|
| 60 |
+
delimitada con los caracteres {delimiter}.
|
| 61 |
+
|
| 62 |
+
La información que se te proporcionará estará en formato JSON o en una \
|
| 63 |
+
lista que contiene diccionarios en formato JSON. La información que \
|
| 64 |
+
corresponde con características de las resoluciones de la Comisión \
|
| 65 |
+
Federal de Competencia Económica de México en casos de concentraciones \
|
| 66 |
+
(fusiones) resueltas por el Pleno de la Comisión durante el año 2023.
|
| 67 |
+
|
| 68 |
+
La información proporcionada esta indexada o tiene como índice el número \
|
| 69 |
+
de expediente. Las variables de que se incluyen para cada expediente son:
|
| 70 |
+
Expediente: Indica el número de expediente
|
| 71 |
+
Empresas: Son los nombres de las empresas involucradas en la concentración
|
| 72 |
+
Fecha_Inicio: Fecha en la que se presentó la notificación de concentración
|
| 73 |
+
Fecha_Resolucion: Fecha en la que el Pleno de la Comisión resolvió el expediente
|
| 74 |
+
Duration: Diferencia en días entre Fecha_Resolucion y Fecha_Inicio
|
| 75 |
+
Decision: La decisión tomada por el Pleno de la Comisión en relación a la \
|
| 76 |
+
cooncentración
|
| 77 |
+
Clausula_No_Competencia: Descripción de sí la operación de concentración \
|
| 78 |
+
incluye una cláusula de no competencia
|
| 79 |
+
Sector: Corresponde con el sector afectado por la operación de concentración
|
| 80 |
+
Multa_Total, Agentes_Multados y Detalle_Multa son variables con información \
|
| 81 |
+
sí el Pleno impuso una multa a las empresas.
|
| 82 |
+
|
| 83 |
+
Asegúrate de realizar preguntas de seguimiento.
|
| 84 |
+
"""
|
| 85 |
+
|
| 86 |
+
messages = [
|
| 87 |
+
{'role':'system',
|
| 88 |
+
'content': system_message},
|
| 89 |
+
{'role':'user',
|
| 90 |
+
'content': f"""
|
| 91 |
+
Usa exclusivamente la información de los expedientes de concentraciones: \
|
| 92 |
+
{delimiter}{resultados}{delimiter} para \
|
| 93 |
+
responder sin límite de palabras lo siguiente. {user_message}
|
| 94 |
+
"""},
|
| 95 |
+
]
|
| 96 |
+
#
|
| 97 |
+
final_response = get_completion_from_messages(messages)
|
| 98 |
+
#
|
| 99 |
+
return final_response
|
| 100 |
+
|
| 101 |
+
#
|
| 102 |
+
with gr.Blocks() as demo:
|
| 103 |
+
#
|
| 104 |
+
gr.Markdown("App basada en servicios de OpenAI y el web scraping efectuado a \
|
| 105 |
+
https://www.cofece.mx/conocenos/pleno/resoluciones-y-opiniones/.")
|
| 106 |
+
gr.Markdown("La base de información son características de las resoluciones de concentraciones \
|
| 107 |
+
de la COFECE en 2023. La muestra sólo incluye 40 concentraciones resueltas en 2023.")
|
| 108 |
+
gr.Markdown("Este es un DEMO. Al 6 de julio de 2023, la información completa de las resoluciones \
|
| 109 |
+
de la COFECE comprede, entre otros, 4,291 expedientes de Concentraciones, 792 expedientes de \
|
| 110 |
+
Investigaciones, y 1,405 expedientes de Concesiones.")
|
| 111 |
+
sectores = gr.Dropdown( ["Todos", "Alojamiento temporal y preparación de alimentos y bebidas",
|
| 112 |
+
"Comercio al por mayor", "Construcción",
|
| 113 |
+
"Electricidad, agua y suministro de gas"
|
| 114 |
+
"Industrias manufactureras", "Información en medios masivos",
|
| 115 |
+
"Minería", "Servicios de esparcimiento culturales y deportivos",
|
| 116 |
+
"Servicios financieros y de seguros",
|
| 117 |
+
"Servicios inmobiliarios y alquiler de bienes muebles e intangibles",
|
| 118 |
+
"Transportes, correos y almacenamiento"],
|
| 119 |
+
label = "Selecciona un Sector." )
|
| 120 |
+
busqueda = gr.Textbox(label = "Escribe la pregunta o tarea para iniciar la conversación.")
|
| 121 |
+
greet_btn = gr.Button("Preguntar")
|
| 122 |
+
output = gr.Textbox(label = "Respuesta:")
|
| 123 |
+
greet_btn.click(fn = chatear, inputs = [ busqueda, sectores ], outputs = output)
|
| 124 |
+
#
|
| 125 |
+
demo.launch( )
|
| 126 |
+
#demo.launch( )
|
| 127 |
+
#
|
requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio==3.27.0
|
| 2 |
+
openai==0.27.4
|
| 3 |
+
pandas==1.4.3
|
| 4 |
+
|