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( )
#