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