JeCabrera commited on
Commit
5596668
·
verified ·
1 Parent(s): fe7469e

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -96
app.py CHANGED
@@ -167,7 +167,7 @@ with st.sidebar:
167
  st.session_state.messages = []
168
  st.session_state.gemini_history = []
169
  st.session_state.chat_title = 'Nuevo Chat'
170
- st.experimental_rerun() # Evitar loops
171
 
172
  # Configuración del modelo
173
  model = genai.GenerativeModel(model_name='gemini-2.0-flash')
@@ -181,110 +181,43 @@ if not st.session_state.gemini_history:
181
  st.session_state.gemini_history = st.session_state.chat.history
182
 
183
  # Mostrar mensajes del historial
184
- # En la sección de mensajes, modificar:
185
  for message in st.session_state.messages:
186
  with st.chat_message(name=message['role'], avatar=message.get('avatar', USER_AVATAR_ICON if message['role'] == 'user' else AI_AVATAR_ICON)):
187
  st.markdown(message['content'])
188
 
189
- # React to user input
190
- # Funciones auxiliares para manejo de mensajes y errores
191
- def add_message(role, content, avatar):
192
- """Función centralizada para añadir mensajes al historial"""
193
- message = {
194
- 'role': role,
195
- 'content': content,
196
- 'avatar': avatar
197
- }
198
- st.session_state.messages.append(message)
199
- return message
200
-
201
- def update_chat_memory():
202
- """Función centralizada para actualizar el chat en memoria"""
203
- st.session_state.chats_in_memory[st.session_state.current_chat_id].update({
204
- 'messages': st.session_state.messages,
205
- 'gemini_history': st.session_state.gemini_history,
206
- 'title': st.session_state.chat_title
207
- })
208
-
209
- def handle_model_error(error, retry_count, max_retries):
210
- """Función centralizada para manejar errores del modelo"""
211
- if retry_count >= max_retries:
212
- error_message = f"Lo siento, estoy experimentando problemas para procesar tu solicitud. Por favor, intenta de nuevo más tarde. Error: {str(error)}"
213
- with st.chat_message(name=MODEL_ROLE, avatar=AI_AVATAR_ICON):
214
- st.error(error_message)
215
- add_message(MODEL_ROLE, error_message, AI_AVATAR_ICON)
216
- update_chat_memory()
217
- return True
218
- return False
219
-
220
- # === Añadir esta función en la sección de helpers ===
221
- def mostrar_con_efecto_escritura(texto, velocidad=0.05):
222
- """Muestra texto con efecto de escritura en Streamlit"""
223
- placeholder = st.empty()
224
- contenido_actual = ""
225
-
226
- for caracter in texto:
227
- contenido_actual += caracter
228
- placeholder.markdown(contenido_actual + "▌")
229
- time.sleep(velocidad)
230
-
231
- placeholder.markdown(contenido_actual)
232
- return contenido_actual
233
-
234
- # === Modificar en process_model_response ===
235
- def process_model_response(prompt, max_retries=3):
236
- """Función centralizada para procesar respuestas del modelo"""
237
- retry_count = 0
238
- while retry_count < max_retries:
239
- try:
240
- response = st.session_state.chat.send_message(prompt, stream=True)
241
- full_text = "".join(chunk.text for chunk in response)
242
-
243
- # Llamada corregida
244
- mensaje_mostrado = mostrar_con_efecto_escritura(full_text, velocidad=0.01) # Reducir de 0.05 a 0.02
245
 
246
- add_message(MODEL_ROLE, mensaje_mostrado, AI_AVATAR_ICON)
247
- st.session_state.gemini_history = st.session_state.chat.history
248
- update_chat_memory()
249
- return True
 
 
250
 
251
- except Exception as e:
252
- retry_count += 1
253
- if handle_model_error(e, retry_count, max_retries):
254
- return False
255
- wait_time = (1.5 ** retry_count) # Reducir crecimiento exponencial
256
- time.sleep(wait_time)
257
- return False
258
-
259
-
260
- def handle_example_click(prompt_text):
261
- st.session_state.update({
262
- 'show_examples': False, # ✅ Correcto
263
- 'messages': [],
264
- 'current_chat_id': str(time.time()),
265
- 'gemini_history': [],
266
- 'chat_title': 'Nuevo Chat'
267
- })
268
-
269
- if st.session_state.current_chat_id not in st.session_state.chats_in_memory:
270
- st.session_state.chats_in_memory[st.session_state.current_chat_id] = {
271
- 'messages': [],
272
- 'gemini_history': [],
273
- 'title': 'Nuevo Chat'
274
- }
275
-
276
- try:
277
- title_response = st.session_state.model.generate_content(
278
- f"Título para consulta de ejemplo: '{prompt_text}' (máximo 4 palabras)"
279
- )
280
- st.session_state.chat_title = title_response.text.strip()[:25]
281
- except Exception as e:
282
- st.session_state.chat_title = f"Ejemplo-{time.strftime('%H:%M')}"
283
 
284
- st.session_state.chats_in_memory[st.session_state.current_chat_id]['title'] = st.session_state.chat_title
285
- process_model_response(prompt_text)
286
 
 
287
  if prompt := st.chat_input('¿En qué puedo ayudarte hoy?'):
 
 
 
 
 
288
  is_first_message = len(st.session_state.messages) == 0
289
 
290
  # Añadir inicialización de chat si no existe
 
167
  st.session_state.messages = []
168
  st.session_state.gemini_history = []
169
  st.session_state.chat_title = 'Nuevo Chat'
170
+ st.rerun() # Versión actualizada del comando
171
 
172
  # Configuración del modelo
173
  model = genai.GenerativeModel(model_name='gemini-2.0-flash')
 
181
  st.session_state.gemini_history = st.session_state.chat.history
182
 
183
  # Mostrar mensajes del historial
 
184
  for message in st.session_state.messages:
185
  with st.chat_message(name=message['role'], avatar=message.get('avatar', USER_AVATAR_ICON if message['role'] == 'user' else AI_AVATAR_ICON)):
186
  st.markdown(message['content'])
187
 
188
+ # ===== SECCIÓN DE EJEMPLOS ===== (mover aquí, antes del chat_input)
189
+ if st.session_state.show_examples and not st.session_state.messages:
190
+ main_container = st.container()
191
+ with main_container:
192
+ st.title("💡 RoboCopy - Asistente de PUVs")
193
+ st.markdown("### Tu experto en crear Propuestas Únicas de Valor que convierten")
194
+ st.markdown("### 🎯 Prueba estos ejemplos:")
195
+
196
+ col1, col2 = st.columns([1, 1])
197
+
198
+ with col1:
199
+ if st.button("¿Cuál es la mejor fórmula para mi PUV? 🤔", use_container_width=True):
200
+ handle_example_click("¿Podrías explicarme cuál es la mejor fórmula para crear una PUV efectiva para mi negocio?")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
 
202
+ if st.button("Necesito una PUV para mi tienda online 🛍️", use_container_width=True):
203
+ handle_example_click("Quiero crear una PUV para mi tienda online de ropa sostenible dirigida a mujeres de 25-35 años")
204
+
205
+ with col2:
206
+ if st.button("Ayúdame a mejorar mi PUV actual ✨", use_container_width=True):
207
+ handle_example_click("¿Podrías ayudarme a mejorar mi PUV actual para hacerla más persuasiva?")
208
 
209
+ if st.button("Crear PUV para servicios profesionales 👔", use_container_width=True):
210
+ handle_example_click("Necesito una PUV para mi servicio de consultoría en marketing digital")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
 
212
+ st.markdown("---")
 
213
 
214
+ # Entrada del usuario
215
  if prompt := st.chat_input('¿En qué puedo ayudarte hoy?'):
216
+ # Añadir el mensaje del usuario primero
217
+ with st.chat_message("user", avatar=USER_AVATAR_ICON):
218
+ st.markdown(prompt)
219
+ add_message("user", prompt, USER_AVATAR_ICON)
220
+
221
  is_first_message = len(st.session_state.messages) == 0
222
 
223
  # Añadir inicialización de chat si no existe