JeCabrera commited on
Commit
c40d623
verified
1 Parent(s): a6e117c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +119 -103
app.py CHANGED
@@ -10,107 +10,124 @@ load_dotenv()
10
  # Configurar la API de Google
11
  genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
12
 
13
- # Ejemplos de categor铆as de bullets
14
- directos = [
15
- "El armario del ba帽o es el mejor lugar para guardar medicamentos, 驴verdad? Incorrecto. Es el peor. Los hechos est谩n en la p谩gina 10.",
16
- "El mejor tiempo verbal que le da a tus clientes la sensaci贸n de que ya te han comprado.",
17
- "La historia de un joven emprendedor que transform贸 su vida aplicando esta t茅cnica simple pero poderosa."
18
- ]
19
-
20
- misterios = [
21
- "Los misterios de c贸mo algunas personas parecen tener 茅xito sin esfuerzo, mientras otras luchan. La clave est谩 en esta peque帽a diferencia.",
22
- "Los misterios de c贸mo una t茅cnica sencilla te permite reducir el estr茅s al instante, sin necesidad de dejar tu trabajo o cambiar tu estilo de vida."
23
- ]
24
-
25
- leyendas = [
26
- "La leyenda de aquellos que dominaron la productividad con un solo h谩bito. 驴Te atreves a descubrirlo?",
27
- "La verdad que nunca te han contado en la escuela, o en casa, sobre c贸mo ganarte la vida con la m煤sica."
28
- ]
29
-
30
- historias_personales = [
31
- "La historia de un padre ocupado que, con solo 10 minutos al d铆a, logr贸 transformar su salud y bienestar.",
32
- "驴Sab铆as que muchas personas est谩n usando este m茅todo y han mejorado su bienestar en solo 7 d铆as?"
33
- ]
34
-
35
- preguntas_retoricas = [
36
- "驴Cu谩ndo es una buena idea decirle a una chica que te gusta? Si no se lo dices en ese momento, desp铆dete de conocerla 铆ntimamente."
37
- ]
38
-
39
- # Funci贸n para generar bullets combinados o utilizando la API de Google
40
- def generate_bullets(target_audience, product, call_to_action, number_of_bullets):
41
- bullets = []
42
-
43
- # Lista combinada de todas las categor铆as de bullets predefinidos
44
- all_categories = directos + misterios + leyendas + historias_personales + preguntas_retoricas
45
-
46
- # Generar bullets utilizando la API de Google Generative AI
47
- prompt = f"""
48
- Estoy creando bullets para una campa帽a de marketing dirigida a {target_audience}.
49
- El producto es {product} y el objetivo es que los usuarios realicen la siguiente acci贸n: {call_to_action}.
50
-
51
- Por favor, genera {number_of_bullets} bullets persuasivos que resalten beneficios, problemas y curiosidades para la audiencia objetivo.
52
- """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  try:
55
- # Hacer la llamada a la API y generar bullets
56
- response = genai.generate_text(prompt=prompt, max_tokens=150)
57
- generated_bullets = response['candidates'][0]['output'].split('\n')[:number_of_bullets] # Tomar la cantidad de bullets solicitados
58
- bullets.extend(generated_bullets)
 
 
 
59
  except Exception as e:
60
- # Si falla la API, genera bullets aleatorios de las categor铆as predefinidas
61
- for _ in range(number_of_bullets):
62
- bullet = random.choice(all_categories)
63
- bullets.append(bullet)
64
-
65
- return bullets
66
 
67
  # Configurar la interfaz de usuario con Streamlit
68
  st.set_page_config(page_title="QuickPrompt", layout="wide")
69
 
70
- # Agregar el manual en el sidebar con mejor dise帽o
71
- st.sidebar.markdown("## **Manual de Usuario para Quick Prompt**")
72
- st.sidebar.write("""
73
- **Bienvenido a Quick Prompt**
74
- Quick Prompt est谩 dise帽ado para ayudarte a crear bullets informativos que resalten los beneficios, dolores y curiosidades relevantes para tu audiencia.
75
-
76
- ### 驴Por qu茅 los bullets son importantes?
77
- Los bullets ayudan a presentar informaci贸n clave de manera clara y concisa. Aqu铆 te mostramos algunos ejemplos de informaci贸n que puedes incluir:
78
- - Beneficios de tu producto o servicio
79
- - Problemas comunes que enfrenta tu audiencia
80
- - Datos curiosos que capturan la atenci贸n
81
-
82
- ### 驴C贸mo utilizar Quick Prompt?
83
- Sigue estos pasos para sacar el m谩ximo provecho de la herramienta:
84
-
85
- 1. **Define tu p煤blico objetivo**
86
- Piensa en qui茅nes son y qu茅 necesitan. Por ejemplo:
87
- - Estudiantes universitarios
88
- - Emprendedores
89
- - Profesionales en busca de desarrollo personal
90
-
91
- 2. **Especifica tu producto o servicio**
92
- Aseg煤rate de que el producto est茅 claro y relacionado con los bullets. Ejemplos:
93
- - Herramientas de productividad
94
- - Cursos de marketing digital
95
- - Recursos de gesti贸n del tiempo
96
-
97
- 3. **Determina la acci贸n deseada**
98
- Define cu谩l es la acci贸n espec铆fica que deseas que realice tu audiencia:
99
- - Inscribirse en un curso
100
- - Descargar un recurso gratuito
101
- - Participar en un evento exclusivo
102
-
103
- ### Consejos adicionales:
104
- - Aseg煤rate de que cada bullet sea claro y directo al punto.
105
- - Utiliza datos y ejemplos concretos para hacer tus bullets m谩s impactantes.
106
- """)
107
-
108
- # Footer del manual
109
- st.sidebar.write("Con Quick Prompt, comunicarte con claridad y eficacia es m谩s f谩cil que nunca.")
110
-
111
  # Centrar el t铆tulo y el subt铆tulo
112
  st.markdown("<h1 style='text-align: center;'>Quick Prompt</h1>", unsafe_allow_html=True)
113
- st.markdown("<h4 style='text-align: center;'>Transforma tu mensaje en bullets informativos que resalten lo esencial para tu audiencia.</h4>", unsafe_allow_html=True)
114
 
115
  # A帽adir CSS personalizado para el bot贸n
116
  st.markdown("""
@@ -143,26 +160,25 @@ with col1:
143
  target_audience = st.text_input("驴Qui茅n es tu p煤blico objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
144
  product = st.text_input("驴Qu茅 producto tienes en mente?", placeholder="Ejemplo: Curso de Ingl茅s")
145
  call_to_action = st.text_input("驴Qu茅 acci贸n deseas que tomen?", placeholder="Ejemplo: Inscribirse al curso")
146
- number_of_bullets = st.selectbox("N煤mero de bullets informativos", options=[1, 2, 3, 4, 5], index=2)
 
147
 
148
  # Bot贸n de enviar
149
- submit = st.button("Generar Bullets")
150
 
151
- # Mostrar los bullets generados
152
  if submit:
153
  if target_audience and product and call_to_action:
154
  try:
155
- # Generar los bullets usando la API y la lista predefinida
156
- generated_bullets = generate_bullets(target_audience, product, call_to_action, number_of_bullets)
157
  col2.markdown(f"""
158
  <div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
159
- <h4>Bullets Generados:</h4>
160
- <ul>
161
- {''.join(f'<li>{bullet}</li>' for bullet in generated_bullets)}
162
- </ul>
163
  </div>
164
  """, unsafe_allow_html=True)
165
  except Exception as e:
166
- col2.error(f"Error inesperado: {str(e)}")
167
  else:
168
- col2.warning("Por favor, completa todos los campos.")
 
10
  # Configurar la API de Google
11
  genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
12
 
13
+ # Funci贸n para obtener una menci贸n del producto de manera probabil铆stica
14
+ def get_random_product_mention():
15
+ mentions = ["Directa", "Indirecta", "Metaf贸rica"]
16
+ probabilities = [0.35, 0.25, 0.40]
17
+ return random.choices(mentions, probabilities)[0]
18
+
19
+ # Crear la instrucci贸n de menci贸n basada en la opci贸n seleccionada
20
+ def get_mention_instruction(product_mention, product):
21
+ if product_mention == "Directa":
22
+ return f"Introduce directamente el producto '{product}' como la soluci贸n clara al problema que enfrenta el lector."
23
+ elif product_mention == "Indirecta":
24
+ return f"Referencia sutilmente el producto '{product}' como una posible soluci贸n al problema del lector sin nombrarlo expl铆citamente."
25
+ elif product_mention == "Metaf贸rica":
26
+ return f"Introduce el producto '{product}' usando una met谩fora, conect谩ndolo simb贸licamente a la soluci贸n que necesita el lector."
27
+ return ""
28
+
29
+ # Ejemplos de llamados a la acci贸n por tipo
30
+ cta_types = {
31
+ "directos": [
32
+ "Descargar la gu铆a para mejorar mi productividad diaria.",
33
+ "Suscribirme para recibir actualizaciones y promociones exclusivas.",
34
+ "Unirme a la prueba gratis de 14 d铆as y descubrir nuevas funciones.",
35
+ "Registrarme para acceder a contenido premium y estrategias efectivas.",
36
+ "Comprar ahora y obtener un regalo especial con mi pedido."
37
+ ],
38
+ "urgencia": [
39
+ "Inscribirme ahora para asegurar mi lugar antes de que se agoten las plazas.",
40
+ "Comenzar mi transformaci贸n hoy y no perder m谩s tiempo."
41
+ ],
42
+ "descuento": [
43
+ "Aprovechar el 50% de descuento y comprar por tiempo limitado.",
44
+ "Hacer mi pedido ahora y obtener un 30% de descuento adicional."
45
+ ],
46
+ "exclusividad": [
47
+ "Acceder a contenido exclusivo solo para miembros.",
48
+ "Ser parte de un grupo selecto y disfrutar de beneficios 煤nicos."
49
+ ],
50
+ "beneficio_claro": [
51
+ "Mejorar mi productividad en solo una semana.",
52
+ "Transformar mi carrera profesional con herramientas avanzadas."
53
+ ],
54
+ "personalizaci贸n": [
55
+ "Descubrir c贸mo personalizar esta oferta para mis necesidades.",
56
+ "Elegir las opciones que mejor se adapten a mis necesidades."
57
+ ]
58
+ }
59
+
60
+ # Funci贸n para que el modelo elija autom谩ticamente el tipo de CTA y el CTA espec铆fico
61
+ def get_random_cta():
62
+ cta_type = random.choice(list(cta_types.keys())) # Selecci贸n aleatoria del tipo de CTA
63
+ cta = random.choice(cta_types[cta_type]) # Selecci贸n aleatoria del CTA dentro del tipo
64
+ return cta
65
+
66
+ # Funci贸n para generar llamados a la acci贸n
67
+ def generate_ctas(number_of_ctas, target_audience, product, call_to_action, temperature):
68
+ product_mention = get_random_product_mention()
69
+ mention_instruction = get_mention_instruction(product_mention, product)
70
+
71
+ # Configuraci贸n del modelo
72
+ generation_config = {
73
+ "temperature": temperature,
74
+ "top_p": 0.85,
75
+ "top_k": 128,
76
+ "max_output_tokens": 2048,
77
+ "response_mime_type": "text/plain",
78
+ }
79
 
80
+ # Configuraci贸n del modelo generativo y las instrucciones del sistema
81
+ model = genai.GenerativeModel(
82
+ model_name="gemini-1.5-flash", # Nombre del modelo que estamos utilizando
83
+ generation_config=generation_config, # Configuraci贸n de generaci贸n
84
+ system_instruction=(
85
+ f"Eres un experto copywriter especializado en escribir mensajes o textos que atraen la atenci贸n de {target_audience} para promover {product} que soluciona los problemas de {target_audience}. "
86
+ "Tu tarea es ayudarme a escribir llamados a la acci贸n (CTA) para mi [p谩gina web, landing, correo],"
87
+ f"teniendo en cuenta los puntos dolorosos de mi {target_audience} y el {product} y la {call_to_action} a realizar."
88
+ "Recuerda que un buen CTA debe tener:\n\n"
89
+ "1. **Acci贸n**: Palabras que invitan a realizar un movimiento (e.g., 'Descargar', 'Suscribirse').\n"
90
+ "2. **Valor**: Explicar el beneficio que el usuario obtendr谩 al realizar la acci贸n.\n\n"
91
+ "Aseg煤rate de que cada llamado a la acci贸n siga la estructura de 'Acci贸n + conector + Valor', y evita incluir explicaciones como 'Acci贸n: Descubrir' o 'Valor: Un oasis de paz en medio del caos'.\n"
92
+ "Important: Only answer CTAs, never include explanations or categories, like this: 'Registrarme ahora y descubrir c贸mo encontrar un poco de paz en medio del caos. (Este CTA apela al deseo de Han Solo de encontrar un momento de tranquilidad en su vida agitada.).'\n"
93
+ "Los llamados de acci贸n deben de ser cortos y concisos, basate en estos ejemplos para realizar tu tarea de crear los CTA's:\n\n"
94
+ "**Ejemplos de CTAs en Voz Activa en Primera Persona:**\n"
95
+ "- 'Descargar la gu铆a para mejorar mi productividad diaria'\n"
96
+ "- 'Suscribirme para recibir actualizaciones y promociones exclusivas'\n"
97
+ "- 'Unirme a la prueba gratis de 14 d铆as y descubrir nuevas funciones'\n"
98
+ "Usa estos lineamientos para generar CTAs de alta conversi贸n en espa帽ol."
99
+ )
100
+ )
101
+
102
+ # Selecci贸n aleatoria de tipos de CTA, manteniendo variedad en la salida
103
+ selected_types = random.sample(list(cta_types.keys()), min(number_of_ctas, len(cta_types)))
104
+
105
+ # Crear un mensaje para el modelo que incluye los CTAs generados seg煤n los tipos seleccionados
106
+ ctas_instruction = (
107
+ f"Tu tarea es crear {number_of_ctas} llamados a la acci贸n efectivos dirigidos a {target_audience}, "
108
+ f"para promover {call_to_action} usa la siguiente menci贸n: {mention_instruction}. "
109
+ "Aseg煤rate de que cada llamado a la acci贸n siga la estructura de 'Acci贸n + conector + Valor', "
110
+ "como los ejemplos proporcionados anteriormente."
111
+ )
112
+
113
+ # Generar el resultado utilizando el modelo con la instrucci贸n de CTA espec铆fica
114
  try:
115
+ response = model.generate_content([ctas_instruction])
116
+
117
+ # Extraer el texto de la respuesta
118
+ generated_ctas = response.candidates[0].content.parts[0].text.strip() # Modificado aqu铆
119
+
120
+ # Retornar el resultado
121
+ return generated_ctas
122
  except Exception as e:
123
+ raise ValueError(f"Error al generar los CTA: {str(e)}")
 
 
 
 
 
124
 
125
  # Configurar la interfaz de usuario con Streamlit
126
  st.set_page_config(page_title="QuickPrompt", layout="wide")
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  # Centrar el t铆tulo y el subt铆tulo
129
  st.markdown("<h1 style='text-align: center;'>Quick Prompt</h1>", unsafe_allow_html=True)
130
+ st.markdown("<h4 style='text-align: center;'>Transforma tu mensaje en llamados de acci贸n que inspiren a tu audiencia a tomar decisiones al instante.</h4>", unsafe_allow_html=True)
131
 
132
  # A帽adir CSS personalizado para el bot贸n
133
  st.markdown("""
 
160
  target_audience = st.text_input("驴Qui茅n es tu p煤blico objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
161
  product = st.text_input("驴Qu茅 producto tienes en mente?", placeholder="Ejemplo: Curso de Ingl茅s")
162
  call_to_action = st.text_input("驴Qu茅 acci贸n deseas que tomen?", placeholder="Ejemplo: Inscribirse al curso")
163
+ number_of_ctas = st.selectbox("N煤mero de llamados a la acci贸n", options=[1, 2, 3, 4, 5], index=2)
164
+ temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
165
 
166
  # Bot贸n de enviar
167
+ submit = st.button("Generar Llamados a la Acci贸n")
168
 
169
+ # Mostrar los llamados a la acci贸n generados
170
  if submit:
171
  if target_audience and product and call_to_action:
172
  try:
173
+ # Obtener la respuesta del modelo
174
+ generated_ctas = generate_ctas(number_of_ctas, target_audience, product, call_to_action, temperature)
175
  col2.markdown(f"""
176
  <div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
177
+ <h4>Mira los llamados a la acci贸n generados:</h4>
178
+ <p style="font-size: 22px;">{generated_ctas}</p>
 
 
179
  </div>
180
  """, unsafe_allow_html=True)
181
  except Exception as e:
182
+ st.error(f"Error al generar los llamados a la acci贸n: {str(e)}")
183
  else:
184
+ st.error("Por favor, completa todos los campos.")