File size: 5,307 Bytes
54ca012
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import pandas as pd
import os
import openai
import json 
from json import loads, dumps
import gradio as gr

# API de OpenAI
os.environ["OPENAI_API_KEY"] = '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'
openai.api_key = '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'

# Cargar el archivo JSON #CNT-002-2007
with open("Concentraciones_NPL.json") as json_file:
    data = json.load(json_file)
#

#
global data
#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:
    #
    gr.Markdown("App basada en servicios de OpenAI y el web scraping efectuado a \
    https://www.cofece.mx/conocenos/pleno/resoluciones-y-opiniones/.")
    gr.Markdown("La base de informaci贸n son caracter铆sticas de las resoluciones de concentraciones聽\
    de la COFECE en 2023. La muestra s贸lo incluye 40 concentraciones resueltas en 2023.")
    gr.Markdown("Este es un DEMO. Al 6 de julio de 2023, la informaci贸n completa de las resoluciones \
    de la COFECE comprede, entre otros, 4,291 expedientes de Concentraciones, 792 expedientes de \
    Investigaciones, y 1,405 expedientes de Concesiones.")
    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( )
#demo.launch( )
#