JeCabrera commited on
Commit
fc62042
verified
1 Parent(s): a849022

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -154
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 = ["Indirecta", "Metaf贸rica"]
16
- probabilities = [0.50, 0.50]
17
  return random.choices(mentions, probabilities)[0]
18
 
19
  # Crear la instrucci贸n de menci贸n basada en la opci贸n seleccionada
@@ -24,14 +24,6 @@ def get_mention_instruction(product_mention, product):
24
  return f"Introduce el producto '{product}' usando una met谩fora, conect谩ndolo simb贸licamente a la soluci贸n que necesita el lector."
25
  return ""
26
 
27
- # 脕ngulos adicionales para generar bullets
28
- angles = {
29
- "Curiosidad": "Crea bullets que despierten el inter茅s del lector dej谩ndolos enganchados y queriendo saber m谩s.",
30
- "Casi Imposible": "Crea bullets que suenen dif铆ciles de creer pero plausibles, asombrando al lector.",
31
- "Autoridad y Credibilidad": "Crea bullets respaldados por datos o referencias que generen confianza.",
32
- "Contraste": "Crea bullets que presenten ideas opuestas o conceptos inesperados, captando atenci贸n con contraste."
33
- }
34
-
35
  # F贸rmulas con ejemplos y explicaciones
36
  benefits_formulas = {
37
  "plantilla": {
@@ -49,211 +41,164 @@ benefits_formulas = {
49
  },
50
  "formula_suprema_istvanova": {
51
  "description": """
52
- La estructura de la f贸rmula Suprema de Istvanova es: N煤meros + Adjetivo + Palabra Clave + Raz贸n + Promesa.
53
- Crea bullets con beneficios espec铆ficos y atractivos que conectan emocionalmente con {target_audience}.
 
 
 
 
 
 
54
  """,
55
  "examples": [
56
  "5 m茅todos simples para duplicar tus ventas en menos de 30 d铆as.",
57
  "8 trucos secretos para que tu perro obedezca en una semana.",
58
  "10 t茅cnicas f谩ciles que mejorar谩n tu relaci贸n antes de un mes."
59
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  }
61
  }
62
- def generate_bullets_with_angles(angle, number_of_bullets, target_audience, product, temperature):
63
- """
64
- Genera bullets utilizando diferentes 谩ngulos espec铆ficos.
65
-
66
- Args:
67
- angle (str): 脕ngulo seleccionado (Curiosidad, Casi Imposible, Autoridad y Credibilidad, Contraste).
68
- number_of_bullets (int): N煤mero de bullets a generar.
69
- target_audience (str): P煤blico objetivo.
70
- product (str): Producto para el cual se generan los bullets.
71
- temperature (float): Temperatura para controlar la creatividad del modelo
72
-
73
- Returns:
74
- str: Texto con los bullets generados.
75
- """
76
- angles_descriptions = {
77
- "Curiosidad": (
78
- "Crea bullets que despierten el inter茅s del lector dej谩ndolos enganchados y queriendo saber m谩s. "
79
- "El objetivo es que piensen '驴Qu茅 ser谩 eso?' o 'Necesito saber m谩s'."
80
- ),
81
- "Casi Imposible": (
82
- "Crea bullets que suenen dif铆ciles de creer o 'casi imposibles', pero que sean plausibles. "
83
- "El lector deber铆a tener una reacci贸n de asombro y querer probar si es posible."
84
- ),
85
- "Autoridad y Credibilidad": (
86
- "Crea bullets que respalden la informaci贸n con autoridad, incluyendo referencias a expertos, datos, o ejemplos relevantes. "
87
- "Construye contexto para generar confianza."
88
- ),
89
- "Contraste": (
90
- "Crea bullets que presenten ideas opuestas o conceptos inesperados, forzando al lector a detenerse y reconsiderar. "
91
- "El objetivo es captar la atenci贸n al confrontar ideas tradicionales."
92
- ),
93
- }
94
-
95
- # Ejemplos inspiradores para cada 谩ngulo
96
- examples = {
97
- "Curiosidad": [
98
- "La bebida que probablemente est谩s tomando todos los d铆as y que podr铆a estar agotando tu energ铆a.",
99
- "El error n煤mero 1 que el 90% de los freelancers comete sin saberlo.",
100
- "Las 3 preguntas que los reclutadores usan para decidir si contratarte o no (sin decirte).",
101
- ],
102
- "Casi Imposible": [
103
- "C贸mo duplicar tus ingresos trabajando menos de 4 horas al d铆a.",
104
- "La forma en que puedes aprender un nuevo idioma en menos de 30 d铆as sin gastar un centavo.",
105
- "C贸mo arreglar tu computadora en casa sin ning煤n conocimiento t茅cnico.",
106
- ],
107
- "Autoridad y Credibilidad": [
108
- "El secreto que Steve Jobs usaba para convencer a millones (y c贸mo puedes aplicarlo hoy).",
109
- "Lo que Einstein recomendaba hacer cada ma帽ana para resolver problemas m谩s r谩pido.",
110
- "La t茅cnica de respiraci贸n usada por los monjes tibetanos para reducir el estr茅s en 5 minutos.",
111
- ],
112
- "Contraste": [
113
- "El h谩bito 'saludable' que podr铆a estar saboteando tu p茅rdida de peso.",
114
- "Por qu茅 un simple cambio en tu rutina puede ahorrarte miles de d贸lares al a帽o.",
115
- "El alimento 'sano' que podr铆a ser peor que el az煤car para tu cuerpo.",
116
- ],
117
- }
118
-
119
- # Validar el 谩ngulo seleccionado
120
- if angle not in angles_descriptions:
121
- raise ValueError(f"脕ngulo no v谩lido. Selecciona entre: {list(angles_descriptions.keys())}")
122
-
123
- product_mention = get_random_product_mention()
124
- mention_instruction = get_mention_instruction(product_mention, product)
125
-
126
- # Crear la instrucci贸n para el modelo
127
- angle_instruction = (
128
- f"脕ngulo seleccionado: {angle}\n\n"
129
- f"Descripci贸n: {angles_descriptions[angle]}\n\n"
130
- f"Insp铆rate en estos ejemplos:\n"
131
- + "\n".join(f"- {example}" for example in examples[angle])
132
- )
133
-
134
- # Crear configuraci贸n de generaci贸n para el modelo
135
- generation_config = {
136
- "temperature": temperature,
137
- "top_p": 0.65,
138
- "top_k": 360,
139
- "max_output_tokens": 8196,
140
- "response_mime_type": "text/plain",
141
- }
142
-
143
- # Crear el prompt para el modelo
144
- prompt = (
145
- f"Genera {number_of_bullets} bullets en espa帽ol dise帽ados para {target_audience} sobre {product}. "
146
- f"Cada bullet debe seguir el 谩ngulo '{angle}' explicado a continuaci贸n:\n\n{angle_instruction}\n\n"
147
- f"Aseg煤rate de que cada bullet sea relevante, convincente, y conecte emocionalmente con la audiencia."
148
- f"Integrando esta instrucci贸n: {mention_instruction}."
149
- )
150
-
151
- # Usar el modelo de generaci贸n
152
- model = genai.GenerativeModel(
153
- model_name="gemini-1.5-flash",
154
- generation_config=generation_config,
155
- system_instruction="You are a world-class copywriter, with expertise in crafting bullets that connect emotionally. Never write with :"
156
- )
157
-
158
- chat_session = model.start_chat(history=[])
159
- response = chat_session.send_message(prompt)
160
-
161
- # Regresar los bullets generados como texto
162
- return response.text
163
-
164
- # Funci贸n para generar bullets
165
- def generate_bullets(number_of_bullets, target_audience, product, temperature, selected_formula, selected_angle):
166
- # Usar la funci贸n generate_bullets_with_angles si se ha seleccionado un 谩ngulo
167
- if selected_angle:
168
- return generate_bullets_with_angles(selected_angle, number_of_bullets, target_audience, product, temperature)
169
 
 
 
170
  product_mention = get_random_product_mention()
171
  mention_instruction = get_mention_instruction(product_mention, product)
172
 
173
  # Crear la configuraci贸n del modelo
174
  generation_config = {
175
  "temperature": temperature,
176
- "top_p": 0.65,
177
- "top_k": 360,
178
- "max_output_tokens": 8196,
179
  "response_mime_type": "text/plain",
180
  }
181
 
182
  model = genai.GenerativeModel(
183
  model_name="gemini-1.5-flash",
184
  generation_config=generation_config,
185
- system_instruction="You are a world-class copywriter, with expertise in crafting bullets that connect emotionally."
186
  )
187
 
188
- # Crear un mensaje para el modelo
189
- bullets_instruction = (
190
- f"Tu tarea es crear {number_of_bullets} bullets dise帽ados para {target_audience}. "
191
  f"El objetivo es mostrar c贸mo {product} puede transformar la vida del lector, conectando de forma natural y emocional. "
192
- f"Usa la f贸rmula seleccionada: \n\n{selected_formula['description']}\n\n"
 
193
  f"Insp铆rate en estos ejemplos:\n"
194
  f"- {selected_formula['examples'][0]}\n"
195
  f"- {selected_formula['examples'][1]}\n"
196
  f"- {selected_formula['examples'][2]}\n\n"
197
- f"Integrando esta instrucci贸n: {mention_instruction}."
 
198
  )
199
 
200
  chat_session = model.start_chat(
201
  history=[
202
- {"role": "user", "parts": [bullets_instruction]},
 
 
 
203
  ]
204
  )
205
 
206
- response = chat_session.send_message("Genera los bullets")
207
- return response.text
208
 
209
  # Configurar la interfaz de usuario con Streamlit
210
  st.set_page_config(page_title="Bullet Benefits Generator", layout="wide")
211
 
212
  # Centrar el t铆tulo y el subt铆tulo
213
  st.markdown("<h1 style='text-align: center;'>Bullet Benefits Generator</h1>", unsafe_allow_html=True)
214
- st.markdown("<h4 style='text-align: center;'>Transforma caracter铆sticas en beneficios irresistibles.</h4>", unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
 
216
  # Crear columnas
217
- col1, col2 = st.columns([1, 2])
218
 
219
  # Columnas de entrada
220
  with col1:
221
  target_audience = st.text_input("驴Qui茅n es tu p煤blico objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
222
  product = st.text_input("驴Qu茅 producto tienes en mente?", placeholder="Ejemplo: Curso de Ingl茅s")
223
- number_of_bullets = st.selectbox("N煤mero de Bullets", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4)
224
 
225
- # Crear acordeones
226
  with st.expander("Personaliza tus beneficios"):
227
  temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
228
- selected_formula_key = st.selectbox("Selecciona una f贸rmula", options=list(benefits_formulas.keys()))
 
 
 
 
229
  selected_formula = benefits_formulas[selected_formula_key]
230
 
231
- with st.expander("Selecciona un 谩ngulo adicional"):
232
- selected_angle = st.selectbox("Selecciona un 谩ngulo", options=["Ninguno"] + list(angles.keys())) # Opci贸n "Ninguno" a帽adida
233
-
234
  # Bot贸n de enviar
235
- submit = st.button("Generar Bullets")
236
 
237
- # Mostrar los bullets generados
238
  if submit:
239
- if target_audience and product:
240
  try:
241
- # Si no se selecciona un 谩ngulo, usar la funci贸n original
242
- if selected_angle == "Ninguno":
243
- generated_bullets = generate_bullets(
244
- number_of_bullets, target_audience, product, temperature, selected_formula, "" # 脕ngulo vac铆o para la funci贸n original
245
- )
246
- else:
247
- generated_bullets = generate_bullets_with_angles(
248
- selected_angle, number_of_bullets, target_audience, product, temperature
249
- )
250
  col2.markdown(f"""
251
  <div style="padding: 10px; border: 1px solid #ddd; border-radius: 8px;">
252
- <h3>Bullets Generados:</h3>
253
- <p>{generated_bullets}</p>
254
  </div>
255
  """, unsafe_allow_html=True)
256
  except Exception as e:
257
- col2.error(f"Error al generar bullets: {e}")
258
  else:
259
- col2.warning("Por favor, completa todos los campos antes de generar bullets.")
 
13
  # Funci贸n para obtener una menci贸n del producto de manera probabil铆stica
14
  def get_random_product_mention():
15
  mentions = ["Indirecta", "Metaf贸rica"]
16
+ probabilities = [0.50, 0.50]
17
  return random.choices(mentions, probabilities)[0]
18
 
19
  # Crear la instrucci贸n de menci贸n basada en la opci贸n seleccionada
 
24
  return f"Introduce el producto '{product}' usando una met谩fora, conect谩ndolo simb贸licamente a la soluci贸n que necesita el lector."
25
  return ""
26
 
 
 
 
 
 
 
 
 
27
  # F贸rmulas con ejemplos y explicaciones
28
  benefits_formulas = {
29
  "plantilla": {
 
41
  },
42
  "formula_suprema_istvanova": {
43
  "description": """
44
+ La estructura de la f贸rmula Suprema de Istvanova es: N煤meros + Adjetivo + Palabra Clave + Raz贸n + Promesa.
45
+ Crea bullets points o beneficios con beneficios espec铆ficos y atractivos que conectan emocionalmente con {target_audience} y cumple con estos elementos:
46
+ 1. **N煤meros**: Se escriben con el fin de declarar que existen cierto n煤meros de art铆culos.
47
+ 2. **Adjetivo**: A帽aden emoci贸n y atractivo al mensaje.
48
+ 3. **Palabra Clave**: Reflejan el beneficio principal o tema clave.
49
+ 4. **Raz贸n**: Justifican el beneficio o valor del producto.
50
+ 5. **Promesa**: Muestran el resultado o beneficio que el lector puede esperar.
51
+ Cada uno de estos elementos se integra de manera natural y no forzada cuando se crean los bullets points as铆 como los examples.
52
  """,
53
  "examples": [
54
  "5 m茅todos simples para duplicar tus ventas en menos de 30 d铆as.",
55
  "8 trucos secretos para que tu perro obedezca en una semana.",
56
  "10 t茅cnicas f谩ciles que mejorar谩n tu relaci贸n antes de un mes."
57
  ]
58
+ },
59
+ "formula_aida": {
60
+ "description": """
61
+ La estructura de la f贸rmula AIDA para crear bullets points con beneficios es: Atenci贸n + Inter茅s + Deseo + Acci贸n.
62
+ Crea bullets points o beneficios que sigan estos pasos:
63
+ - **Atenci贸n**: Captura de inmediato el inter茅s o atenci贸n de {target_audience} por medio de un dato ins贸lito o incre铆ble, le habla de una situaci贸n problem谩tica o un deseo de {target_audience}.
64
+ - **Inter茅s**: Detalla c贸mo el beneficio del {product} soluciona un problema espec铆fico o c贸mo facilita la obtenci贸n de un deseo de {target_audience}.
65
+ - **Deseo**: Despierta el anhelo por lograr el resultado prometido.
66
+ - **Acci贸n**: Inspira al lector a actuar para obtener el beneficio.
67
+ Todos estos elementos se integran de manera natural y no forzada al crear los bullets points o beneficios. Los bullets points est谩n escritos de una manera conversacional y natural como en "examples".
68
+ """,
69
+ "examples": [
70
+ "Descubre c贸mo atraer clientes autom谩ticamente, sin experiencia previa.",
71
+ "Imagina tener un cuerpo en forma disfrutando lo que te gusta comer.",
72
+ "Empieza hoy mismo y experimenta resultados en solo 7 d铆as."
73
+ ]
74
+ },
75
+ "formula_3_en_1": {
76
+ "description": """
77
+ La f贸rmula 3 en 1 para empezar a conectar con las personas combina:
78
+ 1. **Caracter铆stica**: Describe las propiedades tangibles del producto o servicio. Por ejemplo, "Este software tiene una funci贸n de automatizaci贸n 煤nica".
79
+ 2. **Para qu茅**: El beneficio inmediato que resuelve un problema o cumple una necesidad. Por ejemplo, "Para que puedas enfocarte en tareas m谩s importantes sin distracciones".
80
+ 3. **Con lo que**: El impacto emocional o pr谩ctico a largo plazo que obtiene el cliente. Por ejemplo, "Con lo que podr谩s disfrutar de un d铆a m谩s productivo y menos estresante".
81
+ Crea bullets points que integren estos elementos para mostrar beneficios de forma clara, emocional y conectada al producto.
82
+ """,
83
+ "examples": [
84
+ "Una bater铆a de larga duraci贸n para que puedas trabajar todo el d铆a con lo que mantienes tu productividad sin interrupciones.",
85
+ "Un sistema de seguridad avanzado para que duermas tranquilo con lo que proteges lo que m谩s valoras.",
86
+ "Un dise帽o intuitivo para que aprendas r谩pido con lo que ahorras tiempo y esfuerzos innecesarios."
87
+ ]
88
  }
89
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
 
91
+ # Funci贸n para generar bullets de beneficios
92
+ def generate_benefits(number_of_benefits, target_audience, product, temperature, selected_formula):
93
  product_mention = get_random_product_mention()
94
  mention_instruction = get_mention_instruction(product_mention, product)
95
 
96
  # Crear la configuraci贸n del modelo
97
  generation_config = {
98
  "temperature": temperature,
99
+ "top_p": 0.65, # Considerar un poco menos de palabras probables
100
+ "top_k": 360, # Aumentar las palabras candidatas para m谩s variedad
101
+ "max_output_tokens": 8196, # Mantenerlo igual, pero puedes aumentar si deseas m谩s detalle
102
  "response_mime_type": "text/plain",
103
  }
104
 
105
  model = genai.GenerativeModel(
106
  model_name="gemini-1.5-flash",
107
  generation_config=generation_config,
108
+ system_instruction="You are a world-class copywriter, with expertise in crafting benefits that connect emotionally and address the desires, problems, and motivations of {target_audience}. Your task is to generate compelling and specific benefit bullets in Spanish based on a given formula. Always respond with a numbered list format, and ensure each benefit is relevant, concise, action-oriented with a natural language and conversational way. Do not include explanations or categories in your output. Never include these symbols : when you create bullets"
109
  )
110
 
111
+ # Crear un mensaje para el modelo, destacando la audiencia, el producto, la f贸rmula seleccionada y los ejemplos
112
+ benefits_instruction = (
113
+ f"Tu tarea es crear {number_of_benefits} beneficios irresistibles dise帽ados para {target_audience}. "
114
  f"El objetivo es mostrar c贸mo {product} puede transformar la vida del lector, conectando de forma natural y emocional. "
115
+ f"Evita usar menciones literales o repetitivas, y destaca soluciones concretas, mostrando c贸mo el producto elimina obst谩culos o satisface deseos reales. "
116
+ f"Usa la f贸rmula seleccionada como gu铆a:\n\n{selected_formula['description']}\n\n"
117
  f"Insp铆rate en estos ejemplos:\n"
118
  f"- {selected_formula['examples'][0]}\n"
119
  f"- {selected_formula['examples'][1]}\n"
120
  f"- {selected_formula['examples'][2]}\n\n"
121
+ f"Y no olvides integrar esta instrucci贸n de manera fluida: {mention_instruction}. "
122
+ f"Tu objetivo es inspirar deseo y acci贸n, evitando explicaciones o categor铆as en la respuesta."
123
  )
124
 
125
  chat_session = model.start_chat(
126
  history=[
127
+ {
128
+ "role": "user",
129
+ "parts": [benefits_instruction],
130
+ },
131
  ]
132
  )
133
 
134
+ response = chat_session.send_message("Genera los beneficios") # Enviar mensaje para obtener la respuesta
135
+ return response.text # Regresar la respuesta directamente
136
 
137
  # Configurar la interfaz de usuario con Streamlit
138
  st.set_page_config(page_title="Bullet Benefits Generator", layout="wide")
139
 
140
  # Centrar el t铆tulo y el subt铆tulo
141
  st.markdown("<h1 style='text-align: center;'>Bullet Benefits Generator</h1>", unsafe_allow_html=True)
142
+ st.markdown("<h4 style='text-align: center;'>Transforma caracter铆sticas en beneficios irresistibles que conectan emocionalmente con tu audiencia.</h4>", unsafe_allow_html=True)
143
+
144
+ # A帽adir CSS personalizado para el bot贸n
145
+ st.markdown("""
146
+ <style>
147
+ div.stButton > button {
148
+ background-color: #FFCC00;
149
+ color: black;
150
+ width: 90%;
151
+ height: 60px;
152
+ font-weight: bold;
153
+ font-size: 22px;
154
+ text-transform: uppercase;
155
+ border: 1px solid #000000;
156
+ border-radius: 8px;
157
+ display: block;
158
+ margin: 0 auto;
159
+ }
160
+ div.stButton > button:hover {
161
+ background-color: #FFD700;
162
+ color: black;
163
+ }
164
+ </style>
165
+ """, unsafe_allow_html=True)
166
 
167
  # Crear columnas
168
+ col1, col2 = st.columns([1, 2])
169
 
170
  # Columnas de entrada
171
  with col1:
172
  target_audience = st.text_input("驴Qui茅n es tu p煤blico objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
173
  product = st.text_input("驴Qu茅 producto tienes en mente?", placeholder="Ejemplo: Curso de Ingl茅s")
174
+ number_of_benefits = st.selectbox("N煤mero de Beneficios", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4)
175
 
176
+ # Crear un 煤nico acorde贸n para f贸rmula y creatividad
177
  with st.expander("Personaliza tus beneficios"):
178
  temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
179
+
180
+ selected_formula_key = st.selectbox(
181
+ "Selecciona una f贸rmula para tus beneficios",
182
+ options=list(benefits_formulas.keys())
183
+ )
184
  selected_formula = benefits_formulas[selected_formula_key]
185
 
 
 
 
186
  # Bot贸n de enviar
187
+ submit = st.button("Generar Beneficios")
188
 
189
+ # Mostrar los beneficios generados
190
  if submit:
191
+ if target_audience and product and selected_formula:
192
  try:
193
+ # Obtener la respuesta del modelo
194
+ generated_benefits = generate_benefits(number_of_benefits, target_audience, product, temperature, selected_formula)
 
 
 
 
 
 
 
195
  col2.markdown(f"""
196
  <div style="padding: 10px; border: 1px solid #ddd; border-radius: 8px;">
197
+ <h3>Beneficios Generados:</h3>
198
+ <p>{generated_benefits}</p>
199
  </div>
200
  """, unsafe_allow_html=True)
201
  except Exception as e:
202
+ col2.error(f"Error al generar beneficios: {e}")
203
  else:
204
+ col2.warning("Por favor, completa todos los campos antes de generar beneficios.")