JeCabrera commited on
Commit
3421ae5
·
verified ·
1 Parent(s): 7adccb8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -70
app.py CHANGED
@@ -13,7 +13,7 @@ genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
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.34, 0.33, 0.33]
17
  return random.choices(mentions, probabilities)[0]
18
 
19
  # Crear la instrucción de mención basada en la opción seleccionada
@@ -26,101 +26,76 @@ def get_mention_instruction(product_mention, product):
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 titulares por tipo
30
-
31
- headline_types = {
32
- "pregunta": [
33
- "¿Qué sorprendente secreto revela el éxito detrás de los grandes emprendedores?",
34
- "¿Estás haciendo estos errores comunes en tu rutina diaria?",
35
- ],
36
- "historia": [
37
- "La increíble transformación de alguien que decidió salir de su zona de confort.",
38
- "El viaje inesperado que llevó a un joven a descubrir su pasión por la música.",
39
- ],
40
- "afirmación": [
41
- "La clave para una vida más feliz está en tus decisiones diarias.",
42
- "Cada fracaso es una oportunidad disfrazada para aprender y crecer.",
43
- ],
44
- "llamado_a_la_accion": [
45
- "Descubre cómo mejorar tu productividad en solo una semana.",
46
- "Únete a nuestro curso y transforma tu carrera profesional hoy mismo.",
47
- ],
48
- "consejo": [
49
- "5 consejos para mejorar tu concentración mientras trabajas desde casa.",
50
- "Aprende a gestionar tu tiempo de manera efectiva con estas simples estrategias.",
51
  ],
52
- "frase_inspiradora": [
53
- "El único modo de hacer un gran trabajo es amar lo que haces.",
54
- "La mejor forma de predecir el futuro es crearlo.",
55
  ],
56
- "dato_impresionante": [
57
- "¿Sabías que el 70% de las personas no están satisfechas con su trabajo actual?",
58
- "Los estudios muestran que dedicar al menos 30 minutos al día a la lectura puede aumentar tu productividad.",
59
  ],
60
- "mitologia": [
61
- "La verdad detrás del mito de que solo los jóvenes pueden ser emprendedores exitosos.",
62
- "Desmitificando la creencia de que necesitas un título universitario para tener éxito.",
63
  ],
64
- "numerico": [
65
- "10 formas sorprendentes de aumentar tu productividad en el trabajo.",
66
- "7 hábitos que transformarán tu vida en solo un mes.",
67
- ],
68
- "impactante": [
69
- "¡Descubre el oscuro secreto que las empresas no quieren que sepas!",
70
- "La verdad escalofriante sobre los ingredientes de tus alimentos favoritos.",
71
- ],
72
- "amarillista": [
73
- "¡No podrás creer lo que esta persona hizo para hacerse rica de la noche a la mañana!",
74
- "¡Alerta! Estos hábitos cotidianos podrían estar arruinando tu salud sin que te des cuenta.",
75
  ],
76
  }
77
 
78
- # Función para generar titulares
79
- def generate_headlines(number_of_headlines, target_audience, product, temperature):
80
  product_mention = get_random_product_mention()
81
  mention_instruction = get_mention_instruction(product_mention, product)
82
 
83
- # Crear la configuración del modelo
84
  generation_config = {
85
  "temperature": temperature,
86
- "top_p": 0.85, # Considerar un poco menos de palabras probables
87
- "top_k": 128, # Aumentar las palabras candidatas para más variedad
88
- "max_output_tokens": 2048, # Mantenerlo igual, pero puedes aumentar si deseas más detalle
89
  "response_mime_type": "text/plain",
90
- }
91
 
92
  model = genai.GenerativeModel(
93
  model_name="gemini-1.5-flash",
94
  generation_config=generation_config,
95
- system_instruction="You are a world-class copywriter, with expertise in crafting hooks, headlines, and subject lines that immediately capture the reader's attention, prompting them to open the email or continue reading. Your skill lies in deeply understanding the emotions, desires, and challenges of a specific audience. You are also an expert in creating benefits that connect symptoms with problems, allowing you to design personalized strategies that resonate and motivate action. You know how to use proven structures to attract your target audience, generating interest and creating a powerful connection. Your task is to generate unusual, creative, and fascinating subject lines or headlines that spark curiosity and encourage the reader to engage further. Respond in Spanish and use a numbered list format. Important: Only answer with subject lines, never include explanations or categories, like this: 'La leyenda del padre soltero: Dice que nunca hay tiempo suficiente. El yoga te enseña a usar mejor el tiempo que tienes, incluso cuando te parece imposible (este bullet es curioso).'"
96
  )
97
 
98
- # Crear un mensaje para el modelo que incluye tipos específicos, pero no los menciona en la salida
99
- selected_types = random.sample(list(headline_types.keys()), min(number_of_headlines, len(headline_types)))
100
- headlines_instruction = (
101
- f"Tu tarea es crear {number_of_headlines} ganchos o encabezados titulares llamativos diseñados para {target_audience} "
102
- f"con el fin de generar interés en {product}. Usa la siguiente mención: {mention_instruction}. "
103
- "Asegúrate de utilizar diferentes tipos de titulares sin mencionar sus tipos en la salida."
104
  )
105
 
106
  chat_session = model.start_chat(
107
  history=[
108
  {
109
  "role": "user",
110
- "parts": [headlines_instruction],
111
  },
112
  ]
113
  )
114
 
115
- response = chat_session.send_message("Genera los titulares") # Enviar mensaje para obtener la respuesta
116
  return response.text # Regresar la respuesta directamente
117
 
118
  # Configurar la interfaz de usuario con Streamlit
119
- st.set_page_config(page_title="Enchanted Hooks", layout="wide")
120
 
121
  # Centrar el título y el subtítulo
122
- st.markdown("<h1 style='text-align: center;'>Enchanted Hooks</h1>", unsafe_allow_html=True)
123
- st.markdown("<h4 style='text-align: center;'>Imagina poder conjurar títulos que no solo informan, sino que encantan. Esta app es tu varita mágica en el mundo del copywriting, transformando cada concepto en un titular cautivador que deja a todos deseando más.</h4>", unsafe_allow_html=True)
124
 
125
  # Añadir CSS personalizado para el botón
126
  st.markdown("""
@@ -152,25 +127,26 @@ col1, col2 = st.columns([1, 2])
152
  with col1:
153
  target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
154
  product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de Inglés")
155
- number_of_headlines = st.selectbox("Número de Titulares", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4)
 
156
  temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
157
 
158
  # Botón de enviar
159
- submit = st.button("Generar Titulares")
160
 
161
- # Mostrar los titulares generados
162
  if submit:
163
- if target_audience and product:
164
  try:
165
  # Obtener la respuesta del modelo
166
- generated_headlines = generate_headlines(number_of_headlines, target_audience, product, temperature)
167
  col2.markdown(f"""
168
  <div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
169
- <h4>Observa la magia en acción:</h4>
170
- <p>{generated_headlines}</p>
171
  </div>
172
  """, unsafe_allow_html=True)
173
  except ValueError as e:
174
  col2.error(f"Error: {str(e)}")
175
  else:
176
- col2.error("Por favor, proporciona el público objetivo y el producto.")
 
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.34, 0.33, 0.33]
17
  return random.choices(mentions, probabilities)[0]
18
 
19
  # Crear la instrucción de mención basada en la opción seleccionada
 
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
+ "urgencia": [
32
+ "Inscríbete ahora y asegúrate tu lugar antes de que se agoten las plazas.",
33
+ "No pierdas más tiempo, comienza tu transformación hoy.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  ],
35
+ "descuento": [
36
+ "Aprovecha el 50% de descuento por tiempo limitado.",
37
+ "Haz tu pedido ahora y obtén un 30% de descuento adicional.",
38
  ],
39
+ "exclusividad": [
40
+ "Accede de inmediato a nuestro contenido exclusivo solo para miembros.",
41
+ " parte de este grupo selecto y disfruta de beneficios únicos.",
42
  ],
43
+ "beneficio_claro": [
44
+ "Mejora tu productividad en solo una semana.",
45
+ "Transforma tu carrera profesional con nuestras herramientas avanzadas.",
46
  ],
47
+ "personalización": [
48
+ "Descubre cómo podemos personalizar esta oferta para ti.",
49
+ "Hazlo tuyo: elige las opciones que mejor se adapten a tus necesidades.",
 
 
 
 
 
 
 
 
50
  ],
51
  }
52
 
53
+ # Función para generar llamados a la acción
54
+ def generate_ctas(number_of_ctas, target_audience, product, call_to_action, temperature):
55
  product_mention = get_random_product_mention()
56
  mention_instruction = get_mention_instruction(product_mention, product)
57
 
58
+ # Configuración del modelo
59
  generation_config = {
60
  "temperature": temperature,
61
+ "top_p": 0.85,
62
+ "top_k": 128,
63
+ "max_output_tokens": 2048,
64
  "response_mime_type": "text/plain",
65
+ }
66
 
67
  model = genai.GenerativeModel(
68
  model_name="gemini-1.5-flash",
69
  generation_config=generation_config,
70
+ system_instruction="You are a world-class copywriter with expertise in crafting action-driven CTAs that convert. Your task is to create action-oriented, high-conversion CTAs tailored for specific audiences. Focus on urgency, clear benefits, and strong motivations to encourage immediate action. Use Spanish and provide results in a numbered list format."
71
  )
72
 
73
+ # Crear un mensaje para el modelo que incluye tipos específicos de CTA
74
+ selected_types = random.sample(list(cta_types.keys()), min(number_of_ctas, len(cta_types)))
75
+ ctas_instruction = (
76
+ f"Tu tarea es crear {number_of_ctas} llamados a la acción efectivos dirigidos a {target_audience}, "
77
+ f"para promover {call_to_action}. Usa la siguiente mención: {mention_instruction}. "
78
+ "Asegúrate de utilizar diferentes estilos de CTA en la salida."
79
  )
80
 
81
  chat_session = model.start_chat(
82
  history=[
83
  {
84
  "role": "user",
85
+ "parts": [ctas_instruction],
86
  },
87
  ]
88
  )
89
 
90
+ response = chat_session.send_message("Genera los llamados a la acción") # Enviar mensaje para obtener la respuesta
91
  return response.text # Regresar la respuesta directamente
92
 
93
  # Configurar la interfaz de usuario con Streamlit
94
+ st.set_page_config(page_title="Enchanted CTAs", layout="wide")
95
 
96
  # Centrar el título y el subtítulo
97
+ st.markdown("<h1 style='text-align: center;'>Enchanted CTAs</h1>", unsafe_allow_html=True)
98
+ st.markdown("<h4 style='text-align: center;'>Genera llamados a la acción que conviertan de forma mágica, encantando a tus clientes a actuar de inmediato.</h4>", unsafe_allow_html=True)
99
 
100
  # Añadir CSS personalizado para el botón
101
  st.markdown("""
 
127
  with col1:
128
  target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
129
  product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de Inglés")
130
+ call_to_action = st.text_input("¿Qué acción deseas que tomen?", placeholder="Ejemplo: Inscribirse al curso")
131
+ number_of_ctas = st.selectbox("Número de llamados a la acción", options=[1, 2, 3, 4, 5], index=2)
132
  temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
133
 
134
  # Botón de enviar
135
+ submit = st.button("Generar Llamados a la Acción")
136
 
137
+ # Mostrar los llamados a la acción generados
138
  if submit:
139
+ if target_audience and product and call_to_action:
140
  try:
141
  # Obtener la respuesta del modelo
142
+ generated_ctas = generate_ctas(number_of_ctas, target_audience, product, call_to_action, temperature)
143
  col2.markdown(f"""
144
  <div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
145
+ <h4>¡Acción mágica en marcha!</h4>
146
+ <p>{generated_ctas}</p>
147
  </div>
148
  """, unsafe_allow_html=True)
149
  except ValueError as e:
150
  col2.error(f"Error: {str(e)}")
151
  else:
152
+ col2.error("Por favor, proporciona el público objetivo, el producto y la acción.")