JeCabrera commited on
Commit
7dec516
·
verified ·
1 Parent(s): 3b2c339

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -188
app.py CHANGED
@@ -65,178 +65,6 @@ def get_chat_title(messages):
65
  # Inicializar el estado de la sesión
66
  if 'chats_in_memory' not in st.session_state:
67
  st.session_state.chats_in_memory = {}
68
-
69
- if 'current_chat_id' not in st.session_state:
70
- st.session_state.current_chat_id = str(time.time())
71
-
72
- if 'messages' not in st.session_state:
73
- st.session_state.messages = []
74
-
75
- # Importar el diccionario de fórmulas
76
- from puv_formulas import puv_formulas
77
-
78
- # Función para obtener descripciones de fórmulas para el prompt
79
- def get_formulas_for_prompt():
80
- prompt_text = "FÓRMULAS DE PROPUESTAS ÚNICAS DE VALOR (PUVs):\n\n"
81
-
82
- for key, formula in puv_formulas.items():
83
- prompt_text += f"FÓRMULA {key}:\n"
84
- prompt_text += f"- Descripción: {formula['description']}\n"
85
- prompt_text += "- Ejemplos:\n"
86
-
87
- # Añadir algunos ejemplos (limitados para no hacer el prompt demasiado largo)
88
- for i, example in enumerate(formula['examples'][:2]):
89
- prompt_text += f" * Ejemplo {i+1}: {example['uvp']}\n"
90
-
91
- prompt_text += "\n"
92
-
93
- return prompt_text
94
-
95
- # Definición del prompt multipersona para el sistema
96
- SYSTEM_PROMPT = f"""
97
- Eres un equipo colaborativo de expertos de clase mundial trabajando juntos para crear Propuestas Únicas de Valor (PUVs) excepcionales que conviertan a la audiencia en clientes.
98
-
99
- EL EQUIPO DE EXPERTOS:
100
- 1. ESTRATEGA MAESTRO DE MARKETING:
101
- - Experto en marcos de propuestas de valor y estrategias de conversión
102
- - Asegura que las PUVs sigan la estructura de fórmula seleccionada con precisión
103
- - Se enfoca en la colocación estratégica de elementos clave de conversión
104
-
105
- 2. COPYWRITER ELITE DE RESPUESTA DIRECTA:
106
- - Crea ganchos, historias y elementos persuasivos convincentes
107
- - Elabora propuestas de valor irresistibles que impulsan conversiones
108
- - Asegura que el lenguaje resuene con la audiencia objetivo
109
-
110
- 3. ESPECIALISTA EN PSICOLOGÍA DE AUDIENCIA:
111
- - Experto en comprender las motivaciones y objeciones de la audiencia
112
- - Crea contenido que construye conexión genuina y confianza
113
- - Identifica y aborda miedos y deseos ocultos
114
-
115
- 4. MAESTRO DE DIFERENCIACIÓN:
116
- - Crea propuestas únicas que destacan entre la competencia
117
- - Desarrolla ejemplos y casos de estudio relacionables
118
- - Asegura que las PUVs apoyen la transformación que se ofrece
119
-
120
- 5. EXPERTO EN CONVERSIÓN:
121
- - Se especializa en crear PUVs que mantengan la atención y generen acción
122
- - Crea elementos interactivos y ganchos de engagement
123
- - Asegura que las PUVs fluyan naturalmente y mantengan el interés alto
124
-
125
- {get_formulas_for_prompt()}
126
-
127
- INSTRUCCIONES PARA CREAR PUVs:
128
- 1. Si el usuario no ha proporcionado información sobre su producto/servicio y audiencia objetivo, solicítala de manera amable y directa.
129
-
130
- 2. Si el usuario ha proporcionado información sobre su producto/servicio y audiencia objetivo, pero no ha elegido una fórmula específica, pregúntale qué fórmula le gustaría utilizar. Presenta las opciones disponibles:
131
- - Fórmula Tradicional
132
- - Fórmula Anti-tradicional
133
- - Contrato Imposible
134
- - Reto Ridículo
135
-
136
- 3. Una vez que el usuario haya proporcionado toda la información necesaria (producto/servicio, audiencia objetivo y fórmula elegida), procede a:
137
- a. Analizar internamente (sin mostrar este análisis) la información del producto/servicio y la audiencia objetivo
138
- b. Identificar internamente el problema principal y el beneficio clave
139
- c. Crear propuestas de valor utilizando ÚNICAMENTE la fórmula elegida por el usuario
140
- d. Presentar SOLO las PUVs, sin explicaciones adicionales sobre por qué son efectivas
141
-
142
- ANÁLISIS INTERNO DEL PÚBLICO OBJETIVO (NO INCLUIR EN LA RESPUESTA):
143
- Para cada solicitud, realiza un análisis interno de los siguientes puntos:
144
-
145
- 1. ANÁLISIS DEL PÚBLICO OBJETIVO - Punto de Dolor Principal:
146
- - ¿Cuál es la frustración específica más importante de esta audiencia?
147
- - ¿Cuál es su mayor desafío diario?
148
-
149
- 2. ANÁLISIS DEL PRODUCTO/SERVICIO - Beneficio Principal:
150
- - ¿Cuál es el resultado tangible más importante que obtienen los clientes?
151
- - ¿Cuál es la transformación específica más valiosa que ofrece?
152
-
153
- INSTRUCCIONES CRÍTICAS PARA TODAS LAS FÓRMULAS:
154
- - Cada PUV debe enfocarse en UN SOLO problema/dolor principal
155
- - Cada PUV debe ofrecer UNA transformación clara y específica
156
- - Usa lenguaje natural y conversacional
157
- - Evita frases genéricas y palabras de moda
158
- - Sé claro y conciso en cada PUV
159
- - NO incluyas explicaciones sobre por qué la PUV es efectiva
160
- - SOLO presenta la PUV, nada más
161
-
162
- COMPORTAMIENTO COMO AGENTE:
163
- - Al final de CADA respuesta, SIEMPRE pregunta al usuario qué más le gustaría hacer
164
- - Ofrece opciones específicas como: mejorar las PUVs, refinarlas, cambiar de fórmula, o crear nuevas para otro producto/servicio
165
- - Actúa como un agente proactivo que busca satisfacer al usuario
166
- - Muestra entusiasmo por ayudar y ofrece sugerencias concretas para continuar
167
- - Mantén un tono conversacional y amigable en todo momento
168
-
169
- IMPORTANTE: Cuando el usuario pregunte por tus funciones o capacidades, responde siempre en primera persona singular (yo hago, yo creo, yo analizo) de forma breve y concisa. No menciones que eres un equipo de expertos, sino un asistente especializado en crear PUVs.
170
- """
171
-
172
- # Mensaje de bienvenida mejorado
173
- WELCOME_MESSAGE = """
174
- # 🚀 ¡Bienvenido! Soy RoboCopy, tu creador de PUVs 🚀
175
-
176
- Soy un experto en crear **Propuestas Únicas de Valor (PUVs)** que transforman visitantes en clientes.
177
-
178
- ## 💼 ¿Qué puedo hacer por ti?
179
-
180
- Creo PUVs persuasivas que:
181
- - **Capturan la atención** de tu audiencia ideal
182
- - **Comunican claramente** el valor de tu oferta
183
- - **Convierten visitantes** en clientes leales
184
-
185
- ## 📋 Para ayudarte, necesito conocer:
186
-
187
- 1️⃣ **Tu producto o servicio**: ¿Qué ofreces exactamente?
188
- 2️⃣ **Tu audiencia objetivo**: ¿Quiénes son tus clientes ideales?
189
- 3️⃣ **Fórmula de PUV**: ¿Qué tipo de fórmula prefieres?
190
- 4️⃣ **Número de ejemplos**: ¿Cuántos ejemplos te gustaría recibir?
191
-
192
- ### Fórmulas disponibles:
193
-
194
- - **Fórmula Tradicional**: Comienza con "Yo ayudo a..." seguido de avatar y transformación
195
- - **Fórmula Anti-tradicional**: Usa frases como "Yo transformo...", "Me especializo en..."
196
- - **Contrato Imposible**: Usa frases como "¿Te imaginas poder...", "Soy el antídoto para..."
197
- - **Reto Ridículo**: Usa anécdotas personales y humor para conectar con la audiencia
198
-
199
- **¡Comencemos!** Comparte los detalles de tu producto/servicio y audiencia objetivo.
200
- """
201
-
202
- # Función para mostrar texto con efecto de escritura
203
- def mostrar_con_efecto_escritura(mensaje, velocidad=0.05):
204
- # Crear un contenedor principal que ocupe todo el ancho
205
- main_container = st.container()
206
-
207
- with main_container:
208
- with st.chat_message(name=MODEL_ROLE, avatar=AI_AVATAR_ICON):
209
- message_placeholder = st.empty()
210
- typing_indicator = st.empty()
211
- typing_indicator.markdown("*RoboCopy está escribiendo...*")
212
-
213
- full_response = ''
214
- for palabra in mensaje.split(' '):
215
- full_response += palabra + ' '
216
- time.sleep(velocidad)
217
- message_placeholder.markdown(full_response + '▌')
218
-
219
- typing_indicator.empty()
220
- message_placeholder.markdown(mensaje)
221
-
222
- return mensaje
223
-
224
- # Create a data/ folder if it doesn't already exist
225
- try:
226
- os.mkdir('data/')
227
- except:
228
- # data/ folder already exists
229
- pass
230
-
231
- # Load past chats (if available)
232
- try:
233
- past_chats: dict = joblib.load('data/past_chats_list')
234
- except:
235
- past_chats = {}
236
-
237
- # Inicializar el estado de sesión
238
- if 'chats_in_memory' not in st.session_state:
239
- st.session_state.chats_in_memory = {}
240
 
241
  if 'current_chat_id' not in st.session_state:
242
  st.session_state.current_chat_id = new_chat_id
@@ -244,29 +72,32 @@ if 'current_chat_id' not in st.session_state:
244
  if 'chat_title' not in st.session_state:
245
  st.session_state.chat_title = 'Nuevo Chat'
246
 
 
 
 
 
 
 
247
  # Sidebar allows a list of past chats
248
  with st.sidebar:
249
- # Centrar el logo y eliminar el título de RoboCopy
250
  col1, col2, col3 = st.columns([1, 2, 1])
251
  with col2:
252
  st.image("assets/robocopy_logo.png", width=300)
253
 
254
  st.write('# Chats Anteriores')
255
- if st.session_state.get('current_chat_id') is None:
256
- st.session_state.current_chat_id = st.selectbox(
257
- label='Selecciona un chat anterior',
258
- options=[new_chat_id] + list(st.session_state.chats_in_memory.keys()),
259
- format_func=lambda x: st.session_state.chats_in_memory.get(x, {}).get('title', 'Nuevo Chat') if isinstance(x, str) else 'Nuevo Chat',
260
- placeholder='_',
261
- )
262
- else:
263
- st.session_state.current_chat_id = st.selectbox(
264
- label='Selecciona un chat anterior',
265
- options=[new_chat_id, st.session_state.current_chat_id] + list(st.session_state.chats_in_memory.keys()),
266
- index=1,
267
- format_func=lambda x: st.session_state.chats_in_memory.get(x, {}).get('title', 'Nuevo Chat') if isinstance(x, str) else 'Nuevo Chat',
268
- placeholder='_',
269
- )
270
 
271
  # Botón para borrar el historial
272
  if st.button('🗑️ Borrar Historial de Chat Actual'):
 
65
  # Inicializar el estado de la sesión
66
  if 'chats_in_memory' not in st.session_state:
67
  st.session_state.chats_in_memory = {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
  if 'current_chat_id' not in st.session_state:
70
  st.session_state.current_chat_id = new_chat_id
 
72
  if 'chat_title' not in st.session_state:
73
  st.session_state.chat_title = 'Nuevo Chat'
74
 
75
+ if 'messages' not in st.session_state:
76
+ st.session_state.messages = []
77
+
78
+ if 'show_examples' not in st.session_state:
79
+ st.session_state.show_examples = True
80
+
81
  # Sidebar allows a list of past chats
82
  with st.sidebar:
83
+ # Centrar el logo
84
  col1, col2, col3 = st.columns([1, 2, 1])
85
  with col2:
86
  st.image("assets/robocopy_logo.png", width=300)
87
 
88
  st.write('# Chats Anteriores')
89
+
90
+ # Simplificar la lógica del selector de chat
91
+ chat_options = [new_chat_id] + list(st.session_state.chats_in_memory.keys())
92
+ current_index = chat_options.index(st.session_state.current_chat_id) if st.session_state.current_chat_id in chat_options else 0
93
+
94
+ st.session_state.current_chat_id = st.selectbox(
95
+ label='Selecciona un chat anterior',
96
+ options=chat_options,
97
+ index=current_index,
98
+ format_func=lambda x: st.session_state.chats_in_memory.get(x, {}).get('title', 'Nuevo Chat') if x != new_chat_id else 'Nuevo Chat',
99
+ key='chat_selector'
100
+ )
 
 
 
101
 
102
  # Botón para borrar el historial
103
  if st.button('🗑️ Borrar Historial de Chat Actual'):