Benjov commited on
Commit
54ca012
·
1 Parent(s): fd0747a

Add application file

Browse files
Files changed (3) hide show
  1. .Rhistory +0 -0
  2. app.py +127 -0
  3. 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
+