JeCabrera commited on
Commit
2bd6a4d
·
verified ·
1 Parent(s): ae5c352

Upload 13 files

Browse files
Files changed (5) hide show
  1. Readme.md +71 -0
  2. app.py +86 -123
  3. reel_formulas.py +368 -0
  4. session_state.py +1 -10
  5. system_prompts.py +47 -134
Readme.md ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Gemini Chatbot Interface with Streamlit
2
+
3
+ ## Overview
4
+
5
+ This project is a Streamlit-based chat application that interacts with the Gemini AI model, allowing users to engage in conversations with an artificial intelligence assistant. The application stores chat history, allowing users to revisit and continue previous conversations.
6
+
7
+ <div align="center"><img src="docs/gemini-chatbot.gif" width="800"></div>
8
+
9
+ ## Getting Started
10
+
11
+ ### Dependencies
12
+
13
+ This code uses the following libraries:
14
+
15
+ - `streamlit`: for building the user interface.
16
+ - `gemini`: for chat
17
+ - Gemini API key: Get it from [Google AI Studio](https://ai.google.dev/tutorials/setup?hl=tr)
18
+
19
+
20
+ ### Usage
21
+
22
+ Follow these steps to set up and run the project:
23
+
24
+ 1. Create a virtual environment:
25
+ ```
26
+ python3 -m venv my_env
27
+ source my_env/bin/activate
28
+ .\my_env\Scripts\activate
29
+ ```
30
+
31
+ 2. Install dependencies:
32
+ ```
33
+ pip install -r requirements.txt
34
+ ```
35
+
36
+ 3. Run the Streamlit server:
37
+ ```
38
+ streamlit run app_chat.py
39
+ ```
40
+
41
+ 4. Access the application in your browser at http://localhost:8501.
42
+
43
+ 5. Start chatting with the assistant!
44
+
45
+ ## Repository Structure
46
+ ```
47
+ repository/
48
+ ├── app_chat.py # the code and UI integrated together live here
49
+ ├── requirements.txt # the python packages needed to run locally
50
+ ├── .streamlit/
51
+ │ └── config.toml # theme info for the UI
52
+ ├── data/ # folder for saved chat messages
53
+ ├── docs/ # preview for github
54
+
55
+ ```
56
+
57
+ ## How it Works
58
+
59
+ The app as follows:
60
+
61
+ 1. The user enters a question in the input field.
62
+
63
+ 2. User messages are sent to the Gemini model for processing.
64
+
65
+ 3. The user's input, along with the chat history, is used to generate a response.
66
+
67
+ 4. The Gemini model generates a response based on the patterns it learned during training.
68
+
69
+ 5. The application saves chat messages and Gemini AI chat history to files for later retrieval.
70
+
71
+ 6. A new chat is created if the user initiates a conversation that hasn't been stored before, or user can go back to past chats.
app.py CHANGED
@@ -4,41 +4,13 @@ import joblib
4
  import streamlit as st
5
  import google.generativeai as genai
6
  from dotenv import load_dotenv
7
- from reels_formulas import reels_formulas
8
- from system_prompts import get_reels_script_prompt
9
  from session_state import SessionState
10
 
11
- # Configuración de la página - DEBE SER LA PRIMERA LLAMADA A STREAMLIT
12
- st.set_page_config(
13
- page_title="RoboCopy - Reels Creator",
14
- page_icon="🎬",
15
- layout="wide",
16
- initial_sidebar_state="expanded"
17
- )
18
-
19
- # Cargar variables de entorno
20
- load_dotenv()
21
- GOOGLE_API_KEY=os.environ.get('GOOGLE_API_KEY')
22
- genai.configure(api_key=GOOGLE_API_KEY)
23
-
24
- # Configuración de la aplicación
25
- new_chat_id = f'{time.time()}'
26
- MODEL_ROLE = 'model'
27
- USER_AVATAR_ICON = '👤'
28
- AI_AVATAR_ICON = '🤖'
29
-
30
  # Inicializar el estado de la sesión
31
  state = SessionState()
32
 
33
- # Crear directorio de datos si no existe
34
- os.makedirs('data', exist_ok=True)
35
-
36
- # Cargar historial de chats pasados
37
- try:
38
- past_chats = joblib.load('data/past_chats_list')
39
- except:
40
- past_chats = {}
41
-
42
  # Función para detectar saludos y generar respuestas personalizadas
43
  def is_greeting(text):
44
  """Detecta si el texto es un saludo simple"""
@@ -95,34 +67,10 @@ def handle_chat_title(prompt):
95
 
96
  def get_enhanced_prompt(prompt, is_example):
97
  """Genera el prompt mejorado según el tipo de mensaje"""
98
- # Importar las preguntas directamente desde system_prompts.py
99
- from system_prompts import get_discovery_questions
100
-
101
- # Obtener la lista de preguntas
102
- discovery_questions = get_discovery_questions()
103
-
104
  if is_greeting(prompt):
105
- 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]}'"
106
  elif is_example:
107
- return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera breve y directa, y haz ÚNICAMENTE esta pregunta: '{discovery_questions[0]}'"
108
- else:
109
- # Analizar la respuesta del usuario para determinar qué pregunta hacer a continuación
110
- if "audiencia" in prompt.lower() or "dirigido" in prompt.lower() or "público" in prompt.lower():
111
- # Si el usuario respondió sobre la audiencia, hacer la segunda pregunta
112
- return f"Gracias por esa información sobre tu audiencia. Ahora, {discovery_questions[1]}"
113
- elif "producto" in prompt.lower() or "servicio" in prompt.lower() or "promocionar" in prompt.lower() or "ofreces" in prompt.lower():
114
- # Si el usuario respondió sobre el producto/servicio, hacer la tercera pregunta
115
- return f"Entendido. Ahora, {discovery_questions[2]}"
116
- elif "problema" in prompt.lower() or "duda" in prompt.lower() or "gancho" in prompt.lower():
117
- # Si el usuario respondió sobre el problema/duda, hacer la cuarta pregunta
118
- return f"Perfecto. Por último, {discovery_questions[3]}"
119
- 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():
120
- # Si el usuario respondió sobre la acción/CTA, proceder a la creación del guion
121
- system_prompt = get_reels_script_prompt()
122
- return f"Gracias por toda la información proporcionada. Ahora vamos a crear un guion de Reel efectivo basado en tus respuestas. {system_prompt}"
123
- else:
124
- # Si no se puede determinar en qué parte del proceso estamos, hacer la primera pregunta
125
- return f"Para crear un guion de Reel efectivo, necesito hacerte algunas preguntas clave. Empecemos: {discovery_questions[0]}"
126
  return prompt
127
 
128
  def process_model_response(enhanced_prompt):
@@ -203,10 +151,10 @@ def display_initial_header():
203
  """, unsafe_allow_html=True)
204
  st.image("robocopy_logo.png", width=300, use_container_width=True)
205
 
206
- # Título con diseño responsivo
207
  st.markdown("""
208
  <div style='text-align: center; margin-top: -35px; width: 100%;'>
209
- <h1 class='robocopy-title' style='width: 100%; text-align: center; color: white !important; font-size: clamp(2.5em, 5vw, 4em); line-height: 1.2;'>Reels Creator</h1>
210
  </div>
211
  """, unsafe_allow_html=True)
212
 
@@ -221,7 +169,7 @@ def display_initial_header():
221
  st.markdown("""
222
  <div style='text-align: center; width: 100%;'>
223
  <p style='font-size: 16px; background-color: transparent; padding: 12px; border-radius: 8px; margin-top: -20px; color: white; width: 100%; text-align: center;'>
224
- 🎬 Experto en crear guiones de Reels virales para Instagram y Facebook
225
  </p>
226
  </div>
227
  """, unsafe_allow_html=True)
@@ -229,10 +177,10 @@ def display_initial_header():
229
  # Función para mostrar ejemplos de preguntas
230
  def display_examples():
231
  ejemplos = [
232
- {"texto": "¿Qué es un Reel efectivo? 🎬", "prompt": "Explícame qué es un Reel efectivo y por qué es importante para mi estrategia de redes sociales"},
233
- {"texto": "¿Cómo puedo crear mi guion de Reel? 📝", "prompt": "Guíame paso a paso en el proceso de crear un guion de Reel efectivo"},
234
- {"texto": "¿Qué elementos debe tener mi Reel? ✨", "prompt": "¿Cuáles son los elementos esenciales que debe incluir un Reel exitoso?"},
235
- {"texto": "¿Cuál es la mejor fórmula para mi caso? 🤔", "prompt": "Ayúdame a elegir la fórmula más adecuada para mi guion de Reel según mi nicho"}
236
  ]
237
 
238
  # Crear los botones de ejemplo
@@ -243,74 +191,89 @@ def display_examples():
243
  state.prompt = ejemplo["prompt"]
244
  st.rerun()
245
 
246
- # Inicializar el sistema de prompt
247
- system_prompt = get_reels_script_prompt()
 
 
248
 
249
- # Inicializar el modelo si no está inicializado
250
- if state.model is None:
251
- state.initialize_model('gemini-2.0-flash') # Especificar la versión del modelo
252
- state.initialize_chat()
 
253
 
254
- # Sidebar para navegación y opciones
255
- with st.sidebar:
256
- st.markdown("## 🎬 RoboCopy - Reels Creator")
257
- st.markdown("---")
258
-
259
- # Botón para nueva conversación
260
- if st.button("🆕 Nueva Conversación", use_container_width=True):
261
- state.chat_id = new_chat_id
262
- state.messages = []
263
- state.gemini_history = []
264
- state.initialize_chat()
265
- st.rerun()
266
-
267
- # Selector de chats pasados
268
- st.markdown("### 💬 Conversaciones Pasadas")
269
-
270
- # Mostrar chats pasados en orden inverso (más recientes primero)
271
- past_chat_ids = list(past_chats.keys())
272
- past_chat_ids.sort(reverse=True)
273
-
274
- for chat_id in past_chat_ids:
275
- chat_title = past_chats[chat_id]
276
- if st.button(f"📝 {chat_title}", key=f"chat_{chat_id}", use_container_width=True):
277
- state.chat_id = chat_id
278
- state.load_chat_history(chat_id)
279
- state.initialize_chat(state.gemini_history)
280
- st.rerun()
281
-
282
- # Información adicional
283
- st.markdown("---")
284
- st.markdown("### ℹ️ Información")
285
- st.markdown("""
286
- **RoboCopy - Reels Creator** te ayuda a crear guiones efectivos para tus Reels de Instagram y Facebook.
287
-
288
- Simplemente describe tu nicho, audiencia y objetivo, y te ayudaremos a crear un guion optimizado para generar engagement.
289
- """)
290
 
291
- # Contenido principal
292
- if state.chat_id is None:
293
- state.chat_id = new_chat_id
 
 
294
 
295
- # Mostrar la carátula inicial
296
- display_initial_header()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
 
298
- # Mostrar ejemplos de preguntas
299
- st.markdown("### 💡 Ejemplos de preguntas para comenzar:")
300
- display_examples()
301
 
302
- # Mostrar historial de mensajes
303
  for message in state.messages:
304
- with st.chat_message(message["role"], avatar=message.get("avatar")):
305
- st.markdown(message["content"])
 
 
 
306
 
307
- # Procesar el prompt si existe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
308
  if state.has_prompt():
309
  prompt = state.prompt
310
- state.clear_prompt()
311
  process_message(prompt, is_example=True)
312
-
313
- # Input para nuevo mensaje
314
- user_input = st.chat_input("Escribe tu mensaje aquí...")
315
- if user_input:
316
- process_message(user_input)
 
4
  import streamlit as st
5
  import google.generativeai as genai
6
  from dotenv import load_dotenv
7
+ from reel_formulas import puv_formulas
8
+ from system_prompts import get_unified_puv_prompt
9
  from session_state import SessionState
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  # Inicializar el estado de la sesión
12
  state = SessionState()
13
 
 
 
 
 
 
 
 
 
 
14
  # Función para detectar saludos y generar respuestas personalizadas
15
  def is_greeting(text):
16
  """Detecta si el texto es un saludo simple"""
 
67
 
68
  def get_enhanced_prompt(prompt, is_example):
69
  """Genera el prompt mejorado según el tipo de mensaje"""
 
 
 
 
 
 
70
  if is_greeting(prompt):
71
+ return f"El usuario te ha saludado con '{prompt}'. Preséntate brevemente, explica qué es un Reel y por qué es importante, y haz las 3 preguntas iniciales para comenzar a crear el guion del Reel (audiencia ideal, producto/servicio, y llamado a la acción). Sé amigable, breve y toma la iniciativa como el experto que eres."
72
  elif is_example:
73
+ return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera conversacional y sencilla, como si estuvieras hablando con un amigo. Evita tecnicismos innecesarios. Enfócate en dar información práctica que ayude al usuario a crear su Reel. Usa ejemplos concretos cuando sea posible. Termina tu respuesta con una pregunta que invite al usuario a compartir información sobre su negocio para poder ayudarle a crear su Reel personalizado."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  return prompt
75
 
76
  def process_model_response(enhanced_prompt):
 
151
  """, unsafe_allow_html=True)
152
  st.image("robocopy_logo.png", width=300, use_container_width=True)
153
 
154
+ # Título con diseño responsivo (eliminado el símbolo ∞)
155
  st.markdown("""
156
  <div style='text-align: center; margin-top: -35px; width: 100%;'>
157
+ <h1 class='robocopy-title' style='width: 100%; text-align: center; color: white !important; font-size: clamp(2.5em, 5vw, 4em); line-height: 1.2;'>Reel Creator</h1>
158
  </div>
159
  """, unsafe_allow_html=True)
160
 
 
169
  st.markdown("""
170
  <div style='text-align: center; width: 100%;'>
171
  <p style='font-size: 16px; background-color: transparent; padding: 12px; border-radius: 8px; margin-top: -20px; color: white; width: 100%; text-align: center;'>
172
+ 🎥 Experto en crear Reels virales que convierten visualizaciones en clientes
173
  </p>
174
  </div>
175
  """, unsafe_allow_html=True)
 
177
  # Función para mostrar ejemplos de preguntas
178
  def display_examples():
179
  ejemplos = [
180
+ {"texto": "¿Cómo crear un Reel efectivo? 🎥", "prompt": "Explícame cómo puedo crear un Reel efectivo que enganche a mi audiencia desde el primer segundo"},
181
+ {"texto": "Ideas para Reels de mi negocio 💡", "prompt": "Necesito ideas creativas para crear Reels que promocionen mi negocio y productos"},
182
+ {"texto": "Estructura de un buen Reel ✨", "prompt": "¿Cuál es la mejor estructura para crear un Reel que mantenga la atención y genere conversiones?"},
183
+ {"texto": "¿Qué fórmula de Reel usar? 🤔", "prompt": "Ayúdame a elegir la fórmula más adecuada para mi Reel según mi tipo de negocio y objetivo"}
184
  ]
185
 
186
  # Crear los botones de ejemplo
 
191
  state.prompt = ejemplo["prompt"]
192
  st.rerun()
193
 
194
+ # Cargar variables de entorno
195
+ load_dotenv()
196
+ GOOGLE_API_KEY=os.environ.get('GOOGLE_API_KEY')
197
+ genai.configure(api_key=GOOGLE_API_KEY)
198
 
199
+ # Configuración de la aplicación
200
+ new_chat_id = f'{time.time()}'
201
+ MODEL_ROLE = 'ai'
202
+ AI_AVATAR_ICON = '🤖' # Cambia el emoji por uno de robot para coincidir con tu logo
203
+ USER_AVATAR_ICON = '👤' # Añade un avatar para el usuario
204
 
205
+ # Crear carpeta de datos si no existe
206
+ try:
207
+ os.mkdir('data/')
208
+ except:
209
+ # data/ folder already exists
210
+ pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
 
212
+ # Cargar chats anteriores
213
+ try:
214
+ past_chats: dict = joblib.load('data/past_chats_list')
215
+ except:
216
+ past_chats = {}
217
 
218
+ # Sidebar para seleccionar chats anteriores
219
+ with st.sidebar:
220
+ st.write('# Chats Anteriores')
221
+ if state.chat_id is None:
222
+ state.chat_id = st.selectbox(
223
+ label='Selecciona un chat anterior',
224
+ options=[new_chat_id] + list(past_chats.keys()),
225
+ format_func=lambda x: past_chats.get(x, 'Nuevo Chat'),
226
+ placeholder='_',
227
+ )
228
+ else:
229
+ # This will happen the first time AI response comes in
230
+ state.chat_id = st.selectbox(
231
+ label='Selecciona un chat anterior',
232
+ options=[new_chat_id, state.chat_id] + list(past_chats.keys()),
233
+ index=1,
234
+ format_func=lambda x: past_chats.get(x, 'Nuevo Chat' if x != state.chat_id else state.chat_title),
235
+ placeholder='_',
236
+ )
237
+ # Save new chats after a message has been sent to AI
238
+ state.chat_title = f'SesiónChat-{state.chat_id}'
239
+
240
+ # Cargar historial del chat
241
+ state.load_chat_history()
242
 
243
+ # Inicializar el modelo y el chat
244
+ state.initialize_model('gemini-2.0-flash')
245
+ state.initialize_chat() # Siempre inicializar el chat después del modelo
246
 
247
+ # Mostrar mensajes del historial
248
  for message in state.messages:
249
+ with st.chat_message(
250
+ name=message['role'],
251
+ avatar=message.get('avatar'),
252
+ ):
253
+ st.markdown(message['content'])
254
 
255
+ # Mensaje inicial del sistema si es un chat nuevo
256
+ if not state.has_messages():
257
+ # Mostrar la carátula inicial con el logo centrado
258
+ display_initial_header()
259
+
260
+ # Mostrar los ejemplos
261
+ display_examples()
262
+
263
+ # Inicializar el chat con el prompt unificado
264
+ system_prompt = get_unified_puv_prompt()
265
+ if state.chat is not None: # Verificación adicional de seguridad
266
+ state.chat.send_message(system_prompt)
267
+ else:
268
+ st.error("Error: No se pudo inicializar el chat correctamente.")
269
+
270
+ # Procesar entrada del usuario
271
+ if prompt := st.chat_input('Describe tu audiencia y el objetivo de tu Reel...'):
272
+ process_message(prompt, is_example=False)
273
+
274
+ # Procesar ejemplos seleccionados
275
  if state.has_prompt():
276
  prompt = state.prompt
 
277
  process_message(prompt, is_example=True)
278
+ # Limpiar el prompt
279
+ state.clear_prompt()
 
 
 
reel_formulas.py ADDED
@@ -0,0 +1,368 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ reel_formulas = {
2
+ "Fórmula Explica y Convence": {
3
+ "description": """
4
+ La Fórmula Explica y Convence está diseñada para educar a tu audiencia sobre un tema específico mientras los persuades de forma efectiva, siguiendo un proceso estructurado de 5 pasos:
5
+ - Captar la atención con una pregunta intrigante
6
+ - Proporcionar una explicación inicial clara y concisa
7
+ - Profundizar con explicaciones adicionales
8
+ - Reforzar con datos y evidencias
9
+ - Cerrar con un resumen convincente y llamado a la acción
10
+
11
+ Estructura:
12
+ 1. REALIZA un gancho en forma de pregunta inicial
13
+ - Formula una pregunta que despierte curiosidad
14
+ - Plantea un problema común que tu audiencia enfrenta
15
+ - Cuestiona una creencia establecida
16
+ - Usa un tono conversacional y directo
17
+
18
+ 2. RESUELVE con una explicación inicial
19
+ - Proporciona una respuesta clara y directa a la pregunta inicial
20
+ - Usa lenguaje sencillo y accesible
21
+ - Establece tu credibilidad sobre el tema
22
+ - Conecta emocionalmente con la audiencia
23
+
24
+ 3. RESUELVE con una segunda explicación
25
+ - Profundiza en el tema con más detalles
26
+ - Añade contexto o información de fondo
27
+ - Anticipa posibles objeciones
28
+ - Usa analogías o ejemplos cotidianos
29
+
30
+ 4. RESUELVE con una tercera explicación
31
+ - Proporciona datos, estadísticas o evidencias
32
+ - Incluye testimonios o casos de estudio
33
+ - Demuestra resultados tangibles
34
+ - Refuerza tu punto con hechos concretos
35
+
36
+ 5. RESUELVE haciendo un resumen de todas las explicaciones y agrega tu llamado a la acción
37
+ - Sintetiza los puntos clave de forma concisa
38
+ - Refuerza el beneficio principal
39
+ - Proporciona un siguiente paso claro
40
+ - Motiva a la acción inmediata
41
+
42
+ Elementos clave:
43
+ - Progresión lógica de ideas simples a complejas
44
+ - Lenguaje claro y accesible para todos los niveles
45
+ - Uso de evidencias y datos para respaldar afirmaciones
46
+ - Estructura que mantiene el interés creciente
47
+ - Cierre persuasivo que impulsa a la acción
48
+ """,
49
+ "examples": [
50
+ {
51
+ "tema": "café de especialidad",
52
+ "nicho": "cafetería artesanal",
53
+ "script": """
54
+ ¿Por qué el café no sabe igual en casa que en el café?
55
+
56
+ Porque el agua cuando café recién molido... y el sabor se pierde rápido cuando no está fresco.
57
+
58
+ Imagina que el café es como una rosa: el aroma de inmediato se evapora y el exceso de minerales en el agua puede arruinar su sabor.
59
+
60
+ Incluso la técnica importa. Nosotros tomamos cada grano, lo molemos a la proporción ideal y temperatura correcta.
61
+
62
+ En nuestra cafetería, usamos granos tostados hace menos de 15 días, agua mineral filtrada, equipos calibrados y baristas entrenados, ven a descubrir el verdadero sabor del café.
63
+ """
64
+ },
65
+ {
66
+ "tema": "inversiones a largo plazo",
67
+ "nicho": "educación financiera para principiantes",
68
+ "script": """
69
+ ¿Por qué la mayoría de personas no logra generar riqueza a pesar de tener buenos ingresos?
70
+
71
+ Porque confunden ahorro con inversión, y el dinero guardado pierde valor constantemente debido a la inflación.
72
+
73
+ Imagina que tienes $10,000 en una cuenta de ahorros con 1% de interés, mientras la inflación es del 3% anual. En realidad, estás perdiendo 2% de tu poder adquisitivo cada año sin darte cuenta.
74
+
75
+ Los estudios muestran que el 90% de la riqueza generada en los últimos 30 años proviene de inversiones compuestas a largo plazo, no de ahorros. Una inversión de $300 mensuales en un fondo indexado con retorno promedio del 8% se convierte en más de $500,000 en 30 años.
76
+
77
+ En nuestro taller gratuito de este sábado, te enseñaremos cómo crear un plan de inversión automático adaptado a tu perfil de riesgo, con tan solo 30 minutos de configuración inicial. Reserva tu lugar ahora, los cupos son limitados.
78
+ """
79
+ },
80
+ {
81
+ "tema": "cuidado dental preventivo",
82
+ "nicho": "clínica dental familiar",
83
+ "script": """
84
+ ¿Por qué esperar a sentir dolor dental puede costarte miles de euros en tratamientos?
85
+
86
+ Porque cuando sientes dolor, el problema ya ha avanzado significativamente y requiere intervenciones más complejas y costosas.
87
+
88
+ Imagina tu boca como un jardín: las bacterias son como malas hierbas que, si no se controlan regularmente, crecen hasta dañar las estructuras más profundas. Una simple limpieza profesional elimina estas bacterias antes de que causen daño.
89
+
90
+ Los estudios clínicos demuestran que por cada euro invertido en prevención dental, ahorras entre 8 y 10 euros en tratamientos restaurativos. Una caries pequeña detectada a tiempo cuesta 60€ tratar, mientras que esa misma caries ignorada puede derivar en un tratamiento de conducto y corona por más de 800€.
91
+
92
+ En nuestra clínica, nuestro Plan Familiar Preventivo incluye dos revisiones anuales, radiografías y limpieza profesional por solo 25€ mensuales por persona. Agenda tu revisión esta semana y recibe un análisis completo gratuito de tu salud bucal.
93
+ """
94
+ },
95
+ {
96
+ "tema": "entrenamiento funcional",
97
+ "nicho": "gimnasio especializado",
98
+ "script": """
99
+ ¿Por qué pasas horas en el gimnasio sin ver cambios reales en tu cuerpo y energía?
100
+
101
+ Porque la mayoría de rutinas tradicionales se enfocan en músculos aislados, ignorando cómo funciona realmente tu cuerpo en movimientos cotidianos.
102
+
103
+ Imagina tu cuerpo como una orquesta: no importa cuánto practique cada músico por separado, si nunca ensayan juntos, el concierto será un desastre. El entrenamiento funcional trabaja cadenas musculares completas en movimientos tridimensionales, imitando actividades de la vida real.
104
+
105
+ Un estudio de la Universidad de Michigan demostró que personas siguiendo un programa de entrenamiento funcional durante 8 semanas mejoraron su fuerza aplicable a la vida diaria un 58% más que quienes siguieron rutinas tradicionales de gimnasio, además de reducir el riesgo de lesiones en un 42%.
106
+
107
+ En nuestro centro, diseñamos programas personalizados de 45 minutos, 3 veces por semana, que transforman tu cuerpo y energía en solo 30 días o te devolvemos tu dinero. Agenda tu evaluación gratuita esta semana y descubre tu plan personalizado.
108
+ """
109
+ }
110
+ ]
111
+ },
112
+
113
+ "Fórmula para Guiones de Reels": {
114
+ "description": """
115
+ La Fórmula para Guiones de Reels crea contenido atractivo y efectivo para videos cortos en redes sociales, enfocándose en cinco elementos clave:
116
+ - Captar la atención inmediatamente con un gancho poderoso
117
+ - Establecer autoridad y credibilidad rápidamente
118
+ - Presentar un problema común y su solución
119
+ - Ofrecer valor práctico y accionable
120
+ - Cerrar con un llamado a la acción claro
121
+
122
+ Estructura:
123
+ 1. REALIZA un gancho en forma de pregunta inicial
124
+ - Usa una pregunta directa relacionada con un dolor/problema
125
+ - Menciona una estadística sorprendente
126
+ - Comparte un dato contraintuitivo
127
+ - Utiliza una afirmación provocativa
128
+
129
+ 2. MENCIONA la importancia del contenido
130
+ - Establece tu autoridad/experiencia
131
+ - Explica por qué este tema es relevante ahora
132
+ - Conecta con una necesidad urgente
133
+
134
+ 3. REALIZA el tutorial paso a paso
135
+ - Divide la solución en pasos claros y numerados
136
+ - Mantén cada paso conciso y directo
137
+ - Usa lenguaje simple y evita jerga innecesaria
138
+ - Incluye ejemplos prácticos
139
+
140
+ 4. RECOMIENDA algo que complemente esta información
141
+ - Sugiere una herramienta, recurso o consejo adicional
142
+ - Ofrece un hack o atajo valioso
143
+ - Comparte un consejo poco conocido
144
+
145
+ 5. REALIZA la fórmula o la acción
146
+ - Concluye con un resumen de los beneficios
147
+ - Incluye un llamado a la acción claro
148
+ - Añade un elemento de urgencia o exclusividad
149
+ - Invita a la interacción (comentarios, guardado, compartir)
150
+
151
+ Elementos clave:
152
+ - Duración total: 30-60 segundos
153
+ - Ritmo rápido y energético
154
+ - Transiciones claras entre secciones
155
+ - Lenguaje conversacional y auténtico
156
+ - Enfoque en UN solo tema/problema/solución
157
+ """,
158
+ "examples": [
159
+ {
160
+ "tema": "mejorar el rendimiento del celular",
161
+ "nicho": "tecnología para principiantes",
162
+ "guion": """
163
+ ¿Sabías que puedes mejorar el rendimiento de tu celular en 3 minutos?
164
+
165
+ Este es el celular de mi madre, y estaba tan lento que apenas podía usarlo.
166
+
167
+ Paso 1: Cierra todas las apps en segundo plano.
168
+ Paso 2: Limpia la memoria caché desde configuración.
169
+ Paso 3: Desinstala las apps que no uses.
170
+ Paso 4: Activa el modo de ahorro de batería.
171
+
172
+ ¿Lo sabías? Hay extensiones en USB que ayudan a mantener tu celular limpio mientras lo cargas.
173
+
174
+ Si quieres que la tecnología trabaje a tu ritmo, entra a nuestro link en bio. Tenemos todo para que tus dispositivos rindan al máximo.
175
+ """
176
+ },
177
+ {
178
+ "tema": "conseguir más clientes en Instagram",
179
+ "nicho": "marketing digital para pequeños negocios",
180
+ "guion": """
181
+ ¿Tu Instagram tiene muchos seguidores pero pocas ventas reales?
182
+
183
+ Después de gestionar cuentas para más de 50 pequeños negocios, descubrí el patrón que convierte seguidores en clientes.
184
+
185
+ Paso 1: Identifica los 3 problemas principales que resuelve tu producto.
186
+ Paso 2: Crea contenido educativo sobre cada problema.
187
+ Paso 3: Incluye testimonios reales en formato carrusel.
188
+ Paso 4: Añade un CTA claro en cada post relacionado con la venta.
189
+
190
+ Pro tip: Las historias destacadas organizadas por categorías de productos aumentan las conversiones un 27%.
191
+
192
+ Aplica esta fórmula durante 21 días y verás cómo tus seguidores comienzan a convertirse en clientes reales. Comenta "INFO" si quieres mi guía completa gratuita.
193
+ """
194
+ },
195
+ {
196
+ "tema": "rutina facial express",
197
+ "nicho": "skincare para mujeres ocupadas",
198
+ "guion": """
199
+ ¿Te levantas con solo 5 minutos para arreglarte y quieres lucir radiante?
200
+
201
+ Como dermatóloga especializada en pieles latinas, he creado la rutina facial más rápida y efectiva del mercado.
202
+
203
+ Paso 1: Limpiador en gel, 30 segundos, movimientos circulares.
204
+ Paso 2: Sérum de vitamina C, 3 gotas, presiona no frotes.
205
+ Paso 3: Crema hidratante con SPF, cantidad de una almendra.
206
+ Paso 4: Toque final con bruma facial para fijar.
207
+
208
+ El secreto: Guarda estos productos en la nevera para un efecto desinflamante instantáneo.
209
+
210
+ Esta rutina de 3 minutos reemplaza 10 productos y ahorra 15 minutos cada mañana. Desliza para ver mi masterclass gratuita sobre rutinas express para cada tipo de piel.
211
+ """
212
+ },
213
+ {
214
+ "tema": "organización de finanzas personales",
215
+ "nicho": "educación financiera para jóvenes profesionales",
216
+ "guion": """
217
+ ¿Llegas a fin de mes preguntándote dónde se fue tu dinero?
218
+
219
+ He asesorado a más de 200 jóvenes profesionales a transformar su relación con el dinero sin complicaciones.
220
+
221
+ Paso 1: Divide tu sueldo en 4 cuentas digitales diferentes.
222
+ Paso 2: Asigna porcentajes fijos: 50% necesidades, 30% deseos, 10% ahorro, 10% inversión.
223
+ Paso 3: Configura transferencias automáticas el día de pago.
224
+ Paso 4: Revisa semanalmente con la regla 24/7: 24 minutos cada 7 días.
225
+
226
+ Consejo clave: La app "Money Tracker Pro" sincroniza todas tus cuentas y te envía alertas personalizadas.
227
+
228
+ Implementa este sistema este mes y recupera el control de tus finanzas sin estrés. Guarda este reel para cuando recibas tu próximo sueldo y etiqueta a un amigo que necesita organizar sus finanzas.
229
+ """
230
+ }
231
+ ]
232
+ },
233
+
234
+ "Fórmula De la Duda a la Acción": {
235
+ "description": """
236
+ La Fórmula De la Duda a la Acción está diseñada para transformar las objeciones y dudas de los clientes en decisiones de compra, siguiendo un proceso estructurado de 7 pasos:
237
+ - Identificar la duda principal que frena la compra
238
+ - Validar la preocupación del cliente
239
+ - Reformular la duda como una oportunidad
240
+ - Resolver la objeción con argumentos sólidos
241
+ - Conectar con un problema más profundo
242
+ - Ofrecer una solución completa y personalizada
243
+ - Facilitar el siguiente paso hacia la compra
244
+
245
+ Estructura:
246
+ 1. REALIZA un gancho en forma de pregunta inicial
247
+ - Formula una pregunta que aborde directamente la duda más común
248
+ - Usa un tono empático y comprensivo
249
+ - Muestra que entiendes la preocupación
250
+
251
+ 2. REVELA la pregunta inicial afirmativa
252
+ - Reformula la duda como una afirmación positiva
253
+ - Valida que la preocupación es legítima
254
+ - Muestra comprensión genuina
255
+
256
+ 3. PROFUNDIZA la pregunta inicial de forma más compleja
257
+ - Expande la duda inicial a un nivel más profundo
258
+ - Conecta con las verdaderas motivaciones detrás de la duda
259
+ - Muestra las consecuencias de no resolver el problema
260
+
261
+ 4. RESUELVE la pregunta inicial de forma más completa
262
+ - Ofrece argumentos claros y convincentes
263
+ - Proporciona datos, testimonios o garantías
264
+ - Desmonta las objeciones una por una
265
+
266
+ 5. MENCIONA otro problema relacionado con la pregunta inicial
267
+ - Conecta la duda inicial con un problema más profundo
268
+ - Muestra cómo están interrelacionados
269
+ - Explica por qué resolver ambos es importante
270
+
271
+ 6. RESOLUCIÓN FINAL: presenta las respuestas con explicación
272
+ - Ofrece una solución integral que aborde todos los puntos
273
+ - Personaliza la respuesta según el perfil del cliente
274
+ - Destaca los beneficios específicos y tangibles
275
+
276
+ 7. FINALIZA con un llamado a la acción
277
+ - Proporciona un siguiente paso claro y sencillo
278
+ - Reduce la fricción para tomar acción
279
+ - Añade un elemento de urgencia o exclusividad
280
+ - Refuerza la confianza en la decisión
281
+
282
+ Elementos clave:
283
+ - Empatía genuina con las preocupaciones del cliente
284
+ - Argumentos basados en beneficios, no solo características
285
+ - Personalización según el perfil específico del cliente
286
+ - Reducción de la fricción para tomar la siguiente acción
287
+ - Refuerzo de la confianza en la decisión de compra
288
+ """,
289
+ "examples": [
290
+ {
291
+ "duda_principal": "precio del maquillaje",
292
+ "nicho": "productos de belleza premium",
293
+ "script": """
294
+ ¿Por qué el maquillaje no dura todo el día aunque uses primer?
295
+
296
+ Porque el uso de productos adecuados para tu tipo de piel es fundamental para la duración.
297
+
298
+ Tu maquillaje no dura porque tu rutina no está pensada para tu tipo de piel específico.
299
+
300
+ Cada piel necesita diferentes fijadores. Si tienes piel grasa necesitas un primer matificante y si tienes piel seca, uno hidratante. Y al, esto afecta el tipo de base y fijador que usas.
301
+
302
+ Además, muchas veces ignoramos que los productos que usamos no son compatibles entre sí, lo que provoca que se absorban mal... y esto sabotea toda tu rutina.
303
+
304
+ Usando los productos graduados, enfocados en tu tipo específico de piel y compatibles entre sí, lograrás que tu maquillaje dure y luzca mejor.
305
+
306
+ Ven a nuestra tienda, te ayudamos a armar tu rutina personalizada y encontrarás todos los productos que hacen que tu maquillaje dure.
307
+ """
308
+ },
309
+ {
310
+ "duda_principal": "efectividad de un programa de fitness",
311
+ "nicho": "entrenamiento personal online",
312
+ "script": """
313
+ ¿Por qué los programas de ejercicio que has probado no te dan resultados visibles?
314
+
315
+ Porque la mayoría de los programas genéricos no consideran tu metabolismo único ni tu historial físico.
316
+
317
+ Tu cuerpo no responde porque estás siguiendo rutinas diseñadas para el promedio, no para tu composición corporal específica y tus objetivos reales.
318
+
319
+ Cada cuerpo necesita diferentes estímulos. Si tienes un metabolismo lento necesitas más entrenamiento HIIT, mientras que si tienes articulaciones sensibles, necesitas ejercicios de bajo impacto con mayor resistencia. Además, tu alimentación debe sincronizarse con tus horarios de entrenamiento.
320
+
321
+ Muchas personas también ignoran que el estrés y la falta de sueño bloquean los resultados, haciendo que incluso el mejor programa falle si estos factores no se abordan.
322
+
323
+ Con un programa personalizado que considere tu metabolismo, historial físico, horarios y factores de estilo de vida, verás resultados desde las primeras 3 semanas, garantizado.
324
+
325
+ Agenda ahora tu evaluación gratuita en el link de mi bio y diseñaremos juntos tu plan personalizado con garantía de resultados o te devolvemos tu inversión.
326
+ """
327
+ },
328
+ {
329
+ "duda_principal": "aprender un nuevo idioma",
330
+ "nicho": "cursos de idiomas para profesionales",
331
+ "script": """
332
+ ¿Por qué no has podido aprender inglés a pesar de intentarlo varias veces?
333
+
334
+ Porque los métodos tradicionales no se adaptan a cómo tu cerebro adulto procesa realmente un nuevo idioma.
335
+
336
+ Tu cerebro no retiene el idioma porque estás utilizando técnicas diseñadas para niños o estudiantes con tiempo ilimitado, no para profesionales ocupados con objetivos específicos.
337
+
338
+ Cada persona tiene un estilo de aprendizaje único. Si eres visual, necesitas mapas mentales y videos; si eres auditivo, podcasts y conversaciones. Además, tu cerebro adulto necesita contextos relevantes a tu profesión para crear conexiones duraderas.
339
+
340
+ Muchos estudiantes también ignoran que la consistencia en sesiones cortas (20 minutos diarios) supera ampliamente a las maratones de estudio semanales, y que la falta de práctica conversacional real bloquea la fluidez.
341
+
342
+ Con nuestro método de Inmersión Contextual Profesional, adaptado a tu estilo de aprendizaje y área profesional, lograrás mantener conversaciones de trabajo en solo 90 días, o extendemos tu acceso sin costo.
343
+
344
+ Reserva tu evaluación de nivel y estilo de aprendizaje gratuita esta semana y recibe un plan personalizado con nuestra garantía de fluidez profesional.
345
+ """
346
+ },
347
+ {
348
+ "duda_principal": "inversión en marketing digital",
349
+ "nicho": "agencia de marketing para pequeñas empresas",
350
+ "script": """
351
+ ¿Por qué tu inversión en publicidad digital no está generando ventas reales para tu negocio?
352
+
353
+ Porque la mayoría de las campañas se enfocan en métricas vanidosas como impresiones o clics, no en conversiones que generan ingresos.
354
+
355
+ Tu publicidad no convierte porque probablemente está dirigida a una audiencia demasiado amplia, con mensajes genéricos que no resuenan con los dolores específicos de tus clientes ideales.
356
+
357
+ Cada negocio necesita una estrategia única. Si vendes productos de alto valor, necesitas campañas educativas de nutrición de leads; si ofreces soluciones inmediatas, necesitas campañas de conversión rápida con testimonios. Además, tu embudo de ventas debe estar optimizado antes de aumentar el tráfico.
358
+
359
+ Muchos negocios también ignoran que el 98% de los visitantes no compran en la primera visita, pero no implementan sistemas de remarketing efectivos ni nutrición por email, desperdiciando su inversión inicial.
360
+
361
+ Con nuestra metodología ROI-First, primero optimizamos tu embudo de conversión y luego escalamos el tráfico, garantizando un retorno mínimo de 3x sobre tu inversión en los primeros 60 días.
362
+
363
+ Agenda tu diagnóstico gratuito de marketing esta semana y recibe un análisis de tu embudo actual con recomendaciones accionables, sin compromiso.
364
+ """
365
+ }
366
+ ]
367
+ }
368
+ }
session_state.py CHANGED
@@ -118,16 +118,7 @@ class SessionState:
118
  if self.model is None:
119
  self.initialize_model()
120
 
121
- # Inicializar el chat con instrucciones específicas para hablar en segunda persona
122
- system_instruction = """
123
- IMPORTANTE: Siempre habla en segunda persona, dirigiéndote al usuario.
124
- NUNCA hables en primera persona como si fueras tú quien crea el Reel.
125
- Recuerda que estás ayudando al usuario a crear SU guion, no estás creando un guion para ti mismo.
126
- NUNCA uses frases como "Mi audiencia objetivo", "Mi producto", "Mi servicio", etc.
127
- En su lugar, usa "Tu audiencia objetivo", "Tu producto", "Tu servicio", etc.
128
- """
129
-
130
- # Inicializar el chat con las instrucciones
131
  self.chat = self.model.start_chat(history=history)
132
 
133
  # Verificar que el chat se inicializó correctamente
 
118
  if self.model is None:
119
  self.initialize_model()
120
 
121
+ # Inicializar el chat sin generation_config
 
 
 
 
 
 
 
 
 
122
  self.chat = self.model.start_chat(history=history)
123
 
124
  # Verificar que el chat se inicializó correctamente
system_prompts.py CHANGED
@@ -1,162 +1,75 @@
1
- # Prompt unificado para RoboCopy
2
- from reels_formulas import reels_formulas
3
-
4
- def get_discovery_questions():
5
- """
6
- Devuelve la lista de preguntas para la fase de descubrimiento del Reel.
7
- """
8
- return [
9
- "¿A quién va dirigido específicamente tu Reel? (Define tu audiencia objetivo con detalles como edad, intereses, ocupación, etc.)",
10
- "¿Qué producto o servicio quieres promocionar? (Describe brevemente qué ofreces)",
11
- "¿Cuál es la duda o problema principal que tu audiencia tiene sobre este producto/servicio? (Esto será la base para el gancho inicial)",
12
- "¿Qué acción específica quieres que realicen los espectadores después de ver tu Reel? (Comprar, registrarse, seguirte, etc.)"
13
- ]
14
-
15
- def get_formulas_options_and_examples(discovery_questions=None):
16
- """
17
- Procesa las fórmulas disponibles y genera opciones y ejemplos formatados.
18
- """
19
- # Si no se proporcionan preguntas, obtenerlas
20
- if discovery_questions is None:
21
- discovery_questions = get_discovery_questions()
22
-
23
- formulas_disponibles = list(reels_formulas.keys())
24
-
25
- # Crear la lista de opciones para el usuario
26
- opciones_formulas = ""
27
- for i, formula_nombre in enumerate(formulas_disponibles, 1):
28
- formula_data = reels_formulas[formula_nombre]
29
- descripcion_completa = formula_data.get("description", "Descripción no disponible.")
30
- descripcion_breve = descripcion_completa.split('\n')[0].strip()
31
- if not descripcion_breve and len(descripcion_completa.split('\n')) > 1:
32
- descripcion_breve = descripcion_completa.split('\n')[1].strip()
33
- opciones_formulas += f"{i}. {formula_nombre}: {descripcion_breve}\n"
34
-
35
- # Añadir ejemplos específicos para cada fórmula de Reel
36
- ejemplos_formulas = ""
37
- for formula_nombre, datos_formula in reels_formulas.items():
38
- if "examples" in datos_formula and len(datos_formula["examples"]) > 0:
39
- ejemplo = datos_formula["examples"][0]
40
- ejemplos_formulas += f"\n**Ejemplo de Guion con {formula_nombre}:**\n"
41
- ejemplos_formulas += f"- Nicho: {ejemplo.get('nicho', 'No especificado')}\n"
42
- ejemplos_formulas += f"- Problema/Tema: {ejemplo.get('problema', 'No especificado')}\n"
43
- ejemplos_formulas += f"- Guion Ejemplo:\n```\n{ejemplo.get('script', 'No disponible')}\n```\n"
44
-
45
- # Construir el prompt para RoboCopy
46
- return f"""Eres RoboCopy, un asistente estratégico especializado en crear guiones virales para Reels de Instagram y Facebook. Tu misión es ayudar al usuario a crear guiones efectivos que generen engagement.
47
-
48
- IMPORTANTE: Todas tus respuestas deben ser en español. Siempre comunícate con el usuario en español y genera los guiones para Reels en español.
49
 
50
- ---
51
-
52
- ### 🎬 PROCESO DE CREACIÓN DE GUIONES PARA REELS
53
-
54
- Tu objetivo es guiar al usuario a través de un proceso estructurado para crear guiones de Reels efectivos. Sigue estos pasos en orden:
55
-
56
- 1. Cuando el usuario te pida ayuda con un Reel, haz ÚNICAMENTE la primera pregunta de la lista y espera su respuesta:
57
- "{discovery_questions[0]}"
58
 
59
- 2. Después de recibir la respuesta a la primera pregunta, haz ÚNICAMENTE la segunda pregunta:
60
- "{discovery_questions[1]}"
61
 
62
- 3. Después de recibir la respuesta a la segunda pregunta, haz ÚNICAMENTE la tercera pregunta:
63
- "{discovery_questions[2]}"
64
 
65
- 4. Después de recibir la respuesta a la tercera pregunta, haz ÚNICAMENTE la cuarta pregunta:
66
- "{discovery_questions[3]}"
67
 
68
- 5. Una vez que tengas todas las respuestas, sugiere 3-5 ideas de Reels específicas para el público objetivo definido por el usuario. Pregunta al usuario cuál de estas ideas le gusta más.
69
 
70
- 6. Después de que el usuario elija una idea, pregúntale qué fórmula de guion prefiere usar de las siguientes opciones:
71
- {opciones_formulas}
72
 
73
- 7. Finalmente, crea un guion de Reel basado en la idea elegida y la fórmula seleccionada.
 
 
74
 
75
- REGLAS IMPORTANTES:
76
- - Haz SOLO UNA pregunta a la vez y espera la respuesta del usuario.
77
- - No avances a la siguiente pregunta hasta que el usuario haya respondido la anterior.
78
- - No expliques el proceso completo al usuario, simplemente guíalo paso a paso.
79
- - Mantén tus respuestas breves y directas.
80
- - Nunca muestres tu análisis interno al usuario.
81
- - SIEMPRE habla en segunda persona, dirigiéndote al usuario. NUNCA hables en primera persona como si fueras tú quien crea el Reel.
82
- - NUNCA uses frases como "Mi audiencia objetivo", "Mi producto", "Mi servicio", etc. En su lugar, usa "Tu audiencia objetivo", "Tu producto", "Tu servicio", etc.
83
- - Recuerda que estás ayudando al usuario a crear SU guion, no estás creando un guion para ti mismo.
84
- - Cuando hagas preguntas, hazlas directamente al usuario. Por ejemplo: "¿A quién va dirigido específicamente tu Reel?" en lugar de "Necesito saber a quién va dirigido este Reel".
85
 
86
  ---
87
 
88
- ### 🧠 ANÁLISIS INTERNO (SOLO PARA TI, NUNCA MOSTRAR AL USUARIO)
 
 
89
 
90
- Después de recopilar las respuestas a las cuatro preguntas, analiza internamente:
91
 
92
- 1. ANÁLISIS DE LA AUDIENCIA DEL REEL:
93
- - ¿Qué frustraciones específicas tiene esta audiencia?
94
- - ¿Cuáles son sus aspiraciones o resultados deseados?
95
- - ¿Qué emociones serían efectivas para evocar?
96
- - ¿Qué tipo de contenido resonaría más con ellos?
97
 
98
- 2. ANÁLISIS DEL CONTENIDO DEL REEL:
99
- - ¿Cuál es el mensaje clave que debe transmitirse?
100
- - ¿Qué gancho (hook) capturaría mejor la atención?
101
- - ¿Qué elementos visuales potenciarían el mensaje?
102
- - ¿Cuál es la llamada a la acción más efectiva?
103
 
104
  ---
105
 
106
- ### ✍️ CREACIÓN DEL GUIÓN DEL REEL
107
 
108
- Basado en tu análisis interno (que nunca mostrarás al usuario), crea un guion de Reel que:
109
 
110
- - Tenga un gancho potente en los primeros 3 segundos
111
- - Aborde el problema o necesidad específica de la audiencia
112
- - Entregue valor o entretenimiento de forma concisa
113
- - Incluya una llamada a la acción clara
114
- - Sea visualmente imaginable y adecuado para Reels
115
 
116
- Si el usuario no indica cuántos guiones quiere, crea 3.
117
 
118
- IMPORTANTE: Presenta los guiones SOLO con numeración (1., 2., 3.), sin explicaciones ni etiquetas.
 
 
 
 
119
 
120
- Ejemplo de formato:
 
 
121
 
122
- 1. [Texto completo del Reel aquí.]
123
 
124
- 2. [Texto completo del Reel aquí.]
125
 
126
- 3. [Texto completo del Reel aquí.]
127
 
128
- Ejemplos de guiones para inspirarte:
129
- {ejemplos_formulas}
130
 
131
- ---
 
 
 
 
 
132
 
133
- ### VALIDACIÓN FINAL
134
-
135
- Antes de entregar, asegúrate de que el guión:
136
- - Tiene un gancho claro al inicio.
137
- - Muestra una transformación.
138
- - Conecta con un dolor o deseo emocional.
139
- - Termina con una acción específica o frase memorable.
140
-
141
- NO uses emojis, signos innecesarios ni adornos. Mantén el guión humano, natural y directo.
142
- """
143
-
144
- def get_reels_prompt():
145
- """
146
- Devuelve el prompt completo para la creación de guiones de Reels.
147
- """
148
- discovery_questions = get_discovery_questions()
149
- return get_formulas_options_and_examples(discovery_questions)
150
-
151
- # Mantener compatibilidad con código existente
152
- def get_unified_reels_prompt():
153
- """
154
- Función de compatibilidad que devuelve el prompt de Reels.
155
- """
156
- return get_reels_prompt()
157
-
158
- def get_reels_script_prompt():
159
- """
160
- Función de compatibilidad que devuelve el prompt de Reels.
161
- """
162
- return get_reels_prompt()
 
1
+ from reel_formulas import reel_formulas
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
+ def get_unified_reel_prompt():
4
+ return """Eres ReelBot, un asistente estratégico y creativo cuya única misión es ayudar al usuario a crear Guiones de Reel claros, específicos y que enganchen a su audiencia ideal. Representas a un equipo de expertos en storytelling, video marketing, psicología del espectador y creación de contenido viral.
 
 
 
 
 
 
5
 
6
+ Tu estilo es conversacional, dinámico y directo. No saturas con preguntas. Solo preguntas lo esencial para escribir un Guion de Reel que impacte.
 
7
 
8
+ ---
 
9
 
10
+ ### 🔍 1. FASE DE DESCUBRIMIENTO (versión simplificada)
 
11
 
12
+ **Objetivo:** Obtener solo lo necesario para comenzar.
13
 
14
+ Hazle estas 3 preguntas, una por una:
 
15
 
16
+ 1. ¿Quién es tu audiencia ideal?
17
+ 2. ¿A que te dedicas y cual es producto o servicio que quieres promocionar?
18
+ 3. ¿Qué llamado de acción quieres que las personas hagan cuando vean el reel?
19
 
20
+ Una vez respondidas, no hagas más preguntas a menos que falte claridad puntual. Si todo está claro, pasa al análisis.
 
 
 
 
 
 
 
 
 
21
 
22
  ---
23
 
24
+ ### 🧠 2. ANÁLISIS INTERNO RÁPIDO
25
+
26
+ IMPORTANTE: Este análisis es EXCLUSIVAMENTE INTERNO. NUNCA compartas estos puntos con el usuario ni menciones que estás realizando este análisis.
27
 
28
+ Sin decirlo al usuario, haz esto internamente:
29
 
30
+ - **Audiencia:** Detecta su interés principal, deseo más urgente y posibles objeciones.
31
+ - **Contenido:** Encuentra el ángulo más atractivo, el valor más deseable y el gancho más potente.
32
+ - **Storyteller:** Identifica elementos narrativos y visuales potentes.
33
+ - **Disruptivo:** Busca cómo hacer que el Reel destaque y sea memorable.
 
34
 
35
+ Haz **una sola pregunta adicional** solo si falta un dato crítico.
 
 
 
 
36
 
37
  ---
38
 
39
+ ### 🧩 3. CREACIÓN DEL GUION DE REEL
40
 
41
+ Primero, pregunta al usuario: "¿Con qué fórmula de Reel te gustaría trabajar? Tenemos disponibles:
42
 
43
+ 1. Fórmula Explica y Convence: Ideal para educar y persuadir sobre un tema específico.
44
+ 2. Fórmula para Guiones de Reels: Estructura versátil para contenido atractivo y efectivo.
45
+ 3. Fórmula De la Duda a la Acción: Perfecta para transformar dudas en decisiones.
 
 
46
 
47
+ ¿Cuál prefieres usar para tu Reel?"
48
 
49
+ Una vez que el usuario elija una fórmula:
50
+ 1. Obtén la fórmula seleccionada usando reel_formulas[formula_elegida]
51
+ 2. Lee y aplica la estructura definida en la fórmula["description"]
52
+ 3. Utiliza los ejemplos en fórmula["examples"] como referencia
53
+ 4. Crea el guion siguiendo exactamente los pasos y elementos de la fórmula seleccionada
54
 
55
+ Por ejemplo, si el usuario elige "Fórmula Explica y Convence":
56
+ - Estructura = ${reel_formulas()}["Fórmula Explica y Convence"]["description"]
57
+ - Ejemplos = ${reel_formulas()}["Fórmula Explica y Convence"]["examples"]
58
 
59
+ Sigue la estructura exacta de la fórmula elegida y adapta el contenido del usuario a ese formato.
60
 
61
+ ---
62
 
63
+ ### 📏 4. VALIDACIÓN FINAL
64
 
65
+ Antes de entregarlo, asegúrate de que el Guion de Reel:
 
66
 
67
+ - Tiene un gancho potente en los primeros segundos
68
+ - Ofrece valor claro y específico
69
+ - Es adecuado para la duración de un Reel (15-60 segundos)
70
+ - Tiene un llamado a la acción claro
71
+ - Es visualmente descriptivo y fácil de entender
72
+ - Sigue fielmente la estructura de la fórmula elegida
73
 
74
+ NO uses emojis excesivos ni adornos innecesarios. Mantenlo dinámico y directo.
75
+ """