JeCabrera commited on
Commit
00b706b
·
verified ·
1 Parent(s): 3b22c40

Upload 13 files

Browse files
Files changed (1) hide show
  1. app.py +105 -13
app.py CHANGED
@@ -38,8 +38,13 @@ def process_message(prompt, is_example=False):
38
  with st.chat_message('user', avatar=USER_AVATAR_ICON):
39
  st.markdown(prompt)
40
 
 
41
  state.add_message('user', prompt, USER_AVATAR_ICON)
42
 
 
 
 
 
43
  # Obtener el prompt mejorado primero
44
  enhanced_prompt = get_enhanced_prompt(prompt, is_example)
45
 
@@ -55,8 +60,8 @@ def process_message(prompt, is_example=False):
55
 
56
  if full_response:
57
  state.add_message(MODEL_ROLE, full_response, AI_AVATAR_ICON)
58
- state.gemini_history = state.chat.history
59
- state.save_chat_history()
60
 
61
  except Exception as e:
62
  st.error(f"Error en el streaming: {str(e)}")
@@ -81,30 +86,117 @@ def get_enhanced_prompt(prompt, is_example):
81
  # Obtener la lista de preguntas
82
  discovery_questions = get_discovery_questions()
83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  if is_greeting(prompt):
85
  return f"El usuario te ha saludado con '{prompt}'. Preséntate brevemente (máximo 2 líneas), explica qué es un guion de Reel en 1 línea, y haz ÚNICAMENTE esta pregunta: '{discovery_questions[0]}'. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario. NUNCA hables en primera persona como si fueras tú quien crea el Reel."
86
  elif is_example:
87
  return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera breve y directa, y haz ÚNICAMENTE esta pregunta: '{discovery_questions[0]}'. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario. NUNCA hables en primera persona como si fueras tú quien crea el Reel."
88
  else:
89
- # Analizar la respuesta del usuario para determinar qué pregunta hacer a continuación
90
- if "audiencia" in prompt.lower() or "dirigido" in prompt.lower() or "público" in prompt.lower():
91
- # Si el usuario respondió sobre la audiencia, hacer la segunda pregunta
 
92
  return f"Gracias por esa información sobre tu audiencia. Ahora, {discovery_questions[1]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
93
- elif "producto" in prompt.lower() or "servicio" in prompt.lower() or "promocionar" in prompt.lower() or "ofreces" in prompt.lower():
94
- # Si el usuario respondió sobre el producto/servicio, hacer la tercera pregunta
95
  return f"Entendido. Ahora, {discovery_questions[2]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
96
- elif "problema" in prompt.lower() or "duda" in prompt.lower() or "gancho" in prompt.lower():
97
- # Si el usuario respondió sobre el problema/duda, hacer la cuarta pregunta
98
  return f"Perfecto. Por último, {discovery_questions[3]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
99
- elif "acción" in prompt.lower() or "cta" in prompt.lower() or "comprar" in prompt.lower() or "registrarse" in prompt.lower() or "seguir" in prompt.lower():
100
- # Si el usuario respondió sobre la acción/CTA, proceder a la creación del guion
101
  system_prompt = get_reels_script_prompt()
102
- return f"Gracias por toda la información proporcionada. Ahora vamos a crear un guion de Reel efectivo basado en tus respuestas. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario. NUNCA hables en primera persona como si fueras tú quien crea el Reel. {system_prompt}"
 
 
 
 
 
 
 
 
 
 
 
 
103
  else:
104
- # Si no se puede determinar en qué parte del proceso estamos, hacer la primera pregunta
105
  return f"Para crear un guion de Reel efectivo, necesito hacerte algunas preguntas clave. Empecemos: {discovery_questions[0]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
106
  return prompt
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  def process_model_response(enhanced_prompt):
109
  """Procesa la respuesta del modelo"""
110
  with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):
 
38
  with st.chat_message('user', avatar=USER_AVATAR_ICON):
39
  st.markdown(prompt)
40
 
41
+ # Añadir el mensaje del usuario al historial
42
  state.add_message('user', prompt, USER_AVATAR_ICON)
43
 
44
+ # Guardar el historial después de cada mensaje del usuario
45
+ state.gemini_history = state.chat.history if state.chat else []
46
+ save_state()
47
+
48
  # Obtener el prompt mejorado primero
49
  enhanced_prompt = get_enhanced_prompt(prompt, is_example)
50
 
 
60
 
61
  if full_response:
62
  state.add_message(MODEL_ROLE, full_response, AI_AVATAR_ICON)
63
+ state.gemini_history = state.chat.history if state.chat else []
64
+ save_state()
65
 
66
  except Exception as e:
67
  st.error(f"Error en el streaming: {str(e)}")
 
86
  # Obtener la lista de preguntas
87
  discovery_questions = get_discovery_questions()
88
 
89
+ # Analizar el historial completo para determinar en qué etapa estamos
90
+ conversation_history = [msg["content"] for msg in state.messages]
91
+
92
+ # Verificar si ya hemos hecho ciertas preguntas y recibido respuestas
93
+ audiencia_preguntada = any(discovery_questions[0] in msg for msg in conversation_history)
94
+ producto_preguntado = any(discovery_questions[1] in msg for msg in conversation_history)
95
+ problema_preguntado = any(discovery_questions[2] in msg for msg in conversation_history)
96
+ accion_preguntada = any(discovery_questions[3] in msg for msg in conversation_history)
97
+
98
+ # Verificar si el usuario ya ha respondido a las preguntas
99
+ # Buscamos respuestas del usuario después de cada pregunta
100
+ user_messages = [msg["content"] for msg in state.messages if msg["role"] == "user"]
101
+ model_messages = [msg["content"] for msg in state.messages if msg["role"] == "model"]
102
+
103
+ # Determinar qué preguntas ya han sido respondidas
104
+ audiencia_respondida = audiencia_preguntada and len(user_messages) > 1
105
+ producto_respondido = producto_preguntado and len(user_messages) > 2
106
+ problema_respondido = problema_preguntado and len(user_messages) > 3
107
+ accion_respondida = accion_preguntada and len(user_messages) > 4
108
+
109
+ # Imprimir información de depuración
110
+ print(f"Estado de preguntas: Audiencia={audiencia_preguntada}/{audiencia_respondida}, Producto={producto_preguntado}/{producto_respondido}, Problema={problema_preguntado}/{problema_respondido}, Acción={accion_preguntada}/{accion_respondida}")
111
+ print(f"Mensajes de usuario: {len(user_messages)}, Mensajes del modelo: {len(model_messages)}")
112
+
113
  if is_greeting(prompt):
114
  return f"El usuario te ha saludado con '{prompt}'. Preséntate brevemente (máximo 2 líneas), explica qué es un guion de Reel en 1 línea, y haz ÚNICAMENTE esta pregunta: '{discovery_questions[0]}'. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario. NUNCA hables en primera persona como si fueras tú quien crea el Reel."
115
  elif is_example:
116
  return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera breve y directa, y haz ÚNICAMENTE esta pregunta: '{discovery_questions[0]}'. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario. NUNCA hables en primera persona como si fueras tú quien crea el Reel."
117
  else:
118
+ # Determinar la siguiente pregunta basada en el historial completo
119
+ if not audiencia_respondida:
120
+ return f"Para crear un guion de Reel efectivo, necesito hacerte algunas preguntas clave. Empecemos: {discovery_questions[0]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
121
+ elif audiencia_respondida and not producto_respondido:
122
  return f"Gracias por esa información sobre tu audiencia. Ahora, {discovery_questions[1]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
123
+ elif producto_respondido and not problema_respondido:
 
124
  return f"Entendido. Ahora, {discovery_questions[2]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
125
+ elif problema_respondido and not accion_respondida:
 
126
  return f"Perfecto. Por último, {discovery_questions[3]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
127
+ elif accion_respondida:
128
+ # Si ya hemos hecho todas las preguntas, proceder a la creación del guion
129
  system_prompt = get_reels_script_prompt()
130
+
131
+ # Recopilar toda la información proporcionada por el usuario
132
+ user_info = "\n".join([f"- {msg}" for msg in user_messages[1:]])
133
+
134
+ return f"""
135
+ Gracias por toda la información proporcionada. Ahora vamos a crear un guion de Reel efectivo basado en tus respuestas:
136
+
137
+ Información del usuario:
138
+ {user_info}
139
+
140
+ Recuerda hablar siempre en segunda persona, dirigiéndote al usuario. NUNCA hables en primera persona como si fueras tú quien crea el Reel.
141
+ {system_prompt}
142
+ """
143
  else:
144
+ # Si no podemos determinar la etapa, hacer la primera pregunta
145
  return f"Para crear un guion de Reel efectivo, necesito hacerte algunas preguntas clave. Empecemos: {discovery_questions[0]}. Recuerda hablar siempre en segunda persona, dirigiéndote al usuario."
146
  return prompt
147
 
148
+ # Añadir una función para guardar el estado después de cada interacción
149
+ def save_state():
150
+ """Guarda el estado actual de la sesión"""
151
+ try:
152
+ # Guardar el historial de mensajes
153
+ state.save_chat_history()
154
+
155
+ # Guardar la lista de chats pasados
156
+ joblib.dump(past_chats, 'data/past_chats_list')
157
+
158
+ # Imprimir mensaje de depuración
159
+ print(f"Estado guardado. Mensajes: {len(state.messages)}, Chat ID: {state.chat_id}")
160
+ except Exception as e:
161
+ print(f"Error al guardar el estado: {e}")
162
+
163
+ # Modificar la función process_message para guardar el estado después de cada interacción
164
+ def process_message(prompt, is_example=False):
165
+ """Procesa un mensaje del usuario, ya sea directo o de un ejemplo"""
166
+ handle_chat_title(prompt)
167
+
168
+ with st.chat_message('user', avatar=USER_AVATAR_ICON):
169
+ st.markdown(prompt)
170
+
171
+ # Añadir el mensaje del usuario al historial
172
+ state.add_message('user', prompt, USER_AVATAR_ICON)
173
+
174
+ # Guardar el historial después de cada mensaje del usuario
175
+ state.gemini_history = state.chat.history if state.chat else []
176
+ save_state()
177
+
178
+ # Obtener el prompt mejorado primero
179
+ enhanced_prompt = get_enhanced_prompt(prompt, is_example)
180
+
181
+ # Mover la respuesta del modelo después del mensaje del usuario
182
+ with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):
183
+ try:
184
+ message_placeholder = st.empty()
185
+ typing_indicator = st.empty()
186
+ typing_indicator.markdown("*Generando respuesta...*")
187
+
188
+ response = state.send_message(enhanced_prompt)
189
+ full_response = stream_response(response, message_placeholder, typing_indicator)
190
+
191
+ if full_response:
192
+ state.add_message(MODEL_ROLE, full_response, AI_AVATAR_ICON)
193
+ state.gemini_history = state.chat.history if state.chat else []
194
+ save_state()
195
+
196
+ except Exception as e:
197
+ st.error(f"Error en el streaming: {str(e)}")
198
+ return
199
+
200
  def process_model_response(enhanced_prompt):
201
  """Procesa la respuesta del modelo"""
202
  with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):