DEMO_COFECE / app.py
Benjov's picture
Versi贸n 19 de julio de 2023
1a8e5eb
import pandas as pd
import os
import openai
import json
from json import loads, dumps
import gradio as gr
# API de OpenAI
openai.api_key = os.getenv("OPENAI_API_KEY")
# Cargar el archivo JSON #CNT-002-2007
with open("Concentraciones_NPL.json") as json_file:
global data
data = json.load(json_file)
#
#
#print( dumps( data, indent = 4 ) )
# Main OpenAI Function
def get_completion_from_messages( messages, model = "gpt-3.5-turbo-16k",
temperature = 0, max_tokens = 4000 ): ##Check max_tokens
response = openai.ChatCompletion.create(
model = model,
messages = messages,
temperature = temperature,
max_tokens = max_tokens,
)
return response.choices[0].message["content"]
# Get SECTOR
def get_sector(data, Sector):
#
# Realizar una b煤squeda por valor de clave
clave = "Sector"
valor = Sector#"Servicios financieros y de seguros"
#
if valor == 'Todos':
resultados = data
else:
resultados = [item for item in data.values() if item.get(clave) == valor]
#
#global resultados
#
return resultados
# Funcion que conversa sobre el contexto proporcionado
def chatear(user_message, Sector):
#
resultados = get_sector(data, Sector)
#
delimiter = "####"
#
system_message = f"""
Eres un especialista en derecho y econom铆a de la competencia econ贸mica \
con actividad profesional en M茅xico. Se te formular谩n consultas o \
preguntas que deber谩s responder exclusivamente con la informaci贸n \
delimitada con los caracteres {delimiter}.
La informaci贸n que se te proporcionar谩 estar谩 en formato JSON o en una \
lista que contiene diccionarios en formato JSON. La informaci贸n que \
corresponde con caracter铆sticas de las resoluciones de la Comisi贸n \
Federal de Competencia Econ贸mica de M茅xico en casos de concentraciones \
(fusiones) resueltas por el Pleno de la Comisi贸n durante el a帽o 2023.
La informaci贸n proporcionada esta indexada o tiene como 铆ndice el n煤mero \
de expediente. Las variables de que se incluyen para cada expediente son:
Expediente: Indica el n煤mero de expediente
Empresas: Son los nombres de las empresas involucradas en la concentraci贸n
Fecha_Inicio: Fecha en la que se present贸 la notificaci贸n de concentraci贸n
Fecha_Resolucion: Fecha en la que el Pleno de la Comisi贸n resolvi贸 el expediente
Duration: Diferencia en d铆as entre Fecha_Resolucion y Fecha_Inicio
Decision: La decisi贸n tomada por el Pleno de la Comisi贸n en relaci贸n a la \
cooncentraci贸n
Clausula_No_Competencia: Descripci贸n de s铆 la operaci贸n de concentraci贸n \
incluye una cl谩usula de no competencia
Sector: Corresponde con el sector afectado por la operaci贸n de concentraci贸n
Multa_Total, Agentes_Multados y Detalle_Multa son variables con informaci贸n \
s铆 el Pleno impuso una multa a las empresas.
Aseg煤rate de realizar preguntas de seguimiento.
"""
messages = [
{'role':'system',
'content': system_message},
{'role':'user',
'content': f"""
Usa exclusivamente la informaci贸n de los expedientes de concentraciones: \
{delimiter}{resultados}{delimiter} para \
responder sin l铆mite de palabras lo siguiente. {user_message}
"""},
]
#
final_response = get_completion_from_messages(messages)
#
return final_response
#
with gr.Blocks() as demo:
#
sectores = gr.Dropdown( ["Todos", "Alojamiento temporal y preparaci贸n de alimentos y bebidas",
"Comercio al por mayor", "Construcci贸n",
"Electricidad, agua y suministro de gas",
"Industrias manufactureras", "Informaci贸n en medios masivos",
"Miner铆a", "Servicios de esparcimiento culturales y deportivos",
"Servicios financieros y de seguros",
"Servicios inmobiliarios y alquiler de bienes muebles e intangibles",
"Transportes, correos y almacenamiento"],
label = "Selecciona un Sector." )
busqueda = gr.Textbox(label = "Escribe la pregunta o tarea para iniciar la conversaci贸n.")
greet_btn = gr.Button("Preguntar")
output = gr.Textbox(label = "Respuesta:")
greet_btn.click(fn = chatear, inputs = [ busqueda, sectores ], outputs = output)
#
#demo.launch( share = True )
demo.launch( )
#