JeCabrera commited on
Commit
9bac898
·
verified ·
1 Parent(s): 4f4abc2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +90 -147
app.py CHANGED
@@ -10,161 +10,104 @@ load_dotenv()
10
  # Configurar la API de Google
11
  genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
12
 
13
- # Ejemplos de bullets por tipo
14
- bullets_types = {
15
- "directos": [
16
- "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.",
17
- "El mejor tiempo verbal que le da a tus clientes la sensación de que ya te han comprado.",
18
- "La historia de un joven emprendedor que transformó su vida aplicando esta técnica simple pero poderosa."
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
- "leyendas": [
25
- "La leyenda de aquellos que dominaron la productividad con un solo hábito. ¿Te atreves a descubrirlo?",
26
- "La verdad que nunca te han contado en la escuela, o en casa, sobre cómo ganarte la vida con la música."
27
- ],
28
- "historias_personales": [
29
- "La historia de un padre ocupado que, con solo 10 minutos al día, logró transformar su salud y bienestar.",
30
- "¿Sabías que muchas personas están usando este método y han mejorado su bienestar en solo 7 días?"
31
- ],
32
- "preguntas_retoricas": [
33
- "¿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."
34
- ]
35
- }
36
-
37
- # Función para seleccionar bullets aleatorios
38
- def get_random_bullets(num_bullets):
39
- selected_bullets = []
40
- # Selección aleatoria de tipos de bullet, manteniendo variedad en la salida
41
- selected_types = random.sample(list(bullets_types.keys()), min(num_bullets, len(bullets_types)))
42
-
43
- for bullet_type in selected_types:
44
- bullet = random.choice(bullets_types[bullet_type])
45
- selected_bullets.append(bullet)
46
-
47
- return selected_bullets
48
-
49
- # Función para obtener una cantidad de bullets
50
- def get_gemini_response_bullets(target_audience, product, num_bullets, temperature):
51
- try:
52
- # Seleccionar bullets aleatorios usando la nueva función
53
- selected_bullets = get_random_bullets(num_bullets)
54
-
55
- # Configuración del modelo
56
- generation_config = {
57
- "temperature": temperature,
58
- "top_p": 0.90,
59
- "top_k": 128,
60
- "max_output_tokens": 2048,
61
- "response_mime_type": "text/plain",
62
- }
63
-
64
- # Configuración del modelo generativo y las instrucciones del sistema
65
- model = genai.GenerativeModel(
66
- model_name="gemini-1.5-flash", # Nombre del modelo que estamos utilizando
67
- generation_config=generation_config, # Configuración de generación
68
- system_instruction=(
69
- f"You are a world-class copywriter, expert in creating bullets. "
70
- f"You deeply understand the emotions, desires, and challenges of {target_audience}, allowing you to design personalized bullets that resonate and motivate action. "
71
- "Generate unusual, creative, and fascinating bullets with a format conversational that capture {target_audience}'s attention like these:"
72
- "directos:"
73
- "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."
74
- "El mejor tiempo verbal que le da a tus clientes la sensación de que ya te han comprado."
75
- "La historia de un joven emprendedor que transformó su vida aplicando esta técnica simple pero poderosa."
76
- "misterios:"
77
- "Los misterios de cómo algunas personas parecen tener éxito sin esfuerzo, mientras otras luchan. La clave está en esta pequeña diferencia."
78
- "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."
79
- "leyendas:"
80
- "La leyenda de aquellos que dominaron la productividad con un solo hábito. ¿Te atreves a descubrirlo?"
81
- "La verdad que nunca te han contado en la escuela, o en casa, sobre cómo ganarte la vida con la música."
82
- "historias personales:"
83
- "La historia de un padre ocupado que, con solo 10 minutos al día, logró transformar su salud y bienestar."
84
- "¿Sabías que muchas personas están usando este método y han mejorado su bienestar en solo 7 días?"
85
- "preguntas_retoricas:"
86
- "¿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."
87
- "Respond in Spanish and use a numbered list format. "
88
- "Never respond like this: 'Crea momentos inolvidables: Comparte la experiencia de cocinar con tus hijos, fomentando la unión familiar y creando recuerdos especiales.'"
89
- f"When responding, always include a heading referencing {target_audience} as follows: 'Aquí hay {num_bullets} bullets para convencer a {target_audience}.'"
90
- )
91
- )
92
-
93
- # Crear un mensaje para el modelo que incluye los CTAs generados según los tipos seleccionados
94
- bullets_instruction = (
95
- f"Tu tarea es escribir {num_bullets} bullets que denoten los beneficios al hablar de {product} que resolverán los problemas de {target_audience}. "
96
- "Por favor, crea los bullets ahora."
97
- )
98
-
99
- # Crear un mensaje para el modelo que incluye los bullets generados
100
- response = model.generate_content([bullets_instruction])
101
-
102
- # Extraer el texto de la respuesta
103
- generated_bullets = response.candidates[0].content.parts[0].text.strip() # Modificado aquí
104
-
105
- # Retornar el resultado
106
- return generated_bullets
107
- except Exception as e:
108
- raise ValueError(f"Error al generar los bullets: {str(e)}")
109
 
110
- # Inicializar la aplicación Streamlit
111
- st.set_page_config(page_title="Generador de Bullets", layout="wide")
 
 
 
 
 
 
 
 
 
 
112
 
113
  # Centrar el título y el subtítulo
114
- st.markdown("<h1 style='text-align: center;'>Impact Bullet Generator</h1>", unsafe_allow_html=True)
115
- st.markdown("<h4 style='text-align: center;'>Transforma los pensamientos de tu audiencia en balas persuasivas que inspiren a la acción.</h4>", unsafe_allow_html=True)
116
-
117
- # Añadir CSS personalizado para el botón
118
- st.markdown("""
119
- <style>
120
- div.stButton > button {
121
- background-color: #FFCC00;
122
- color: black;
123
- width: 90%;
124
- height: 60px;
125
- font-weight: bold;
126
- font-size: 22px;
127
- text-transform: uppercase;
128
- border: 1px solid #000000;
129
- border-radius: 8px;
130
- display: block;
131
- margin: 0 auto;
132
- }
133
- div.stButton > button:hover {
134
- background-color: #FFD700;
135
- color: black;
136
- }
137
- </style>
138
- """, unsafe_allow_html=True)
139
-
140
- # Crear dos columnas para el layout (40% y 60%)
141
- col1, col2 = st.columns([2, 3])
142
 
 
143
  with col1:
144
- # Campos de entrada
145
- target_audience = st.text_input("¿Quién es tu público objetivo?")
146
- product = st.text_input("¿Qué producto tienes en mente?")
147
 
148
- # Campos de personalización sin acordeón
149
- num_bullets = st.slider("Número de Bullets", min_value=1, max_value=10, value=5)
150
- temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
151
-
152
  # Botón de enviar
153
  submit = st.button("Generar Bullets")
154
 
155
  # Mostrar los bullets generados
156
  if submit:
157
- if target_audience and product:
158
- try:
159
- # Obtener la respuesta del modelo
160
- generated_bullets = get_gemini_response_bullets(target_audience, product, num_bullets, temperature)
161
- col2.markdown(f"""
162
- <div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
163
- <h4>🧙🏻‍♂️ Mira la magia en acción:</h4>
164
- <pre style="white-space: pre-wrap;">{generated_bullets}</pre>
165
- </div>
166
- """, unsafe_allow_html=True)
167
- except ValueError as e:
168
- st.error(str(e))
169
- else:
170
- st.error("Por favor, completa todos los campos.")
 
10
  # Configurar la API de Google
11
  genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
12
 
13
+ # Ejemplos de beneficios, dolores y datos curiosos
14
+ benefits = [
15
+ "Mejora tu productividad diaria con técnicas efectivas.",
16
+ "Descubre cómo simplificar tus tareas y ganar tiempo.",
17
+ "Transforma tu carrera profesional con habilidades clave.",
18
+ "Accede a recursos exclusivos que te ayudarán a destacar.",
19
+ "Aprende a manejar tu tiempo para reducir el estrés."
20
+ ]
21
+
22
+ pain_points = [
23
+ "¿Te sientes abrumado por la falta de organización?",
24
+ "¿Tus días se sienten interminables y sin propósito?",
25
+ "¿Te gustaría aumentar tu enfoque y evitar distracciones?",
26
+ "¿Te cuesta encontrar tiempo para lo que realmente importa?",
27
+ "¿Sientes que tu carrera no avanza como esperabas?"
28
+ ]
29
+
30
+ curiosities = [
31
+ "¿Sabías que el 70% de las personas no logran sus objetivos anuales?",
32
+ "Estudios muestran que la gestión del tiempo mejora la salud mental.",
33
+ "El 80% de la productividad se logra en el 20% del tiempo.",
34
+ "Las personas que establecen metas tienen un 10 veces más de probabilidad de tener éxito.",
35
+ "Aprender a priorizar tareas puede aumentar tu eficacia en un 300%."
36
+ ]
37
+
38
+ # Función para generar bullets informativos
39
+ def generate_bullets(number_of_bullets):
40
+ bullets = []
41
+
42
+ for _ in range(number_of_bullets):
43
+ category = random.choice(['benefit', 'pain_point', 'curiosity'])
44
+ if category == 'benefit':
45
+ bullet = random.choice(benefits)
46
+ elif category == 'pain_point':
47
+ bullet = random.choice(pain_points)
48
+ else:
49
+ bullet = random.choice(curiosities)
50
+ bullets.append(bullet)
51
+
52
+ return bullets
53
+
54
+ # Configurar la interfaz de usuario con Streamlit
55
+ st.set_page_config(page_title="QuickPrompt", layout="wide")
56
+
57
+ # Agregar el manual en el sidebar con mejor diseño
58
+ st.sidebar.markdown("## **Manual de Usuario para Quick Prompt**")
59
+ st.sidebar.write("""
60
+ **Bienvenido a Quick Prompt**
61
+ Quick Prompt está diseñado para ayudarte a crear bullets informativos que resalten los beneficios, dolores y curiosidades para atraer a tu audiencia.
62
+
63
+ ### ¿Por qué son importantes estos bullets?
64
+ Estos bullets son elementos clave para captar la atención de tu audiencia y motivarles a tomar acción. Aquí te mostramos ejemplos de cada categoría:
65
+ - **Beneficios**: Mejora tu productividad diaria con técnicas efectivas.
66
+ - **Puntos de Dolor**: ¿Te sientes abrumado por la falta de organización?
67
+ - **Datos Curiosos**: ¿Sabías que el 70% de las personas no logran sus objetivos anuales?
68
+
69
+ ### ¿Cómo utilizar Quick Prompt?
70
+ Sigue estos pasos para obtener resultados efectivos:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
+ 1. **Define tu público objetivo**
73
+ Reflexiona sobre quiénes son y qué necesitan.
74
+
75
+ 2. **Especifica el número de bullets que deseas generar**
76
+ Determina cuántos bullets necesitas para tu mensaje.
77
+
78
+ 3. **Generar los bullets**
79
+ Haz clic en el botón para obtener los bullets informativos.
80
+ """)
81
+
82
+ # Footer del manual
83
+ st.sidebar.write("Transforma tu mensaje con bullets que conectan con tu audiencia.")
84
 
85
  # Centrar el título y el subtítulo
86
+ st.markdown("<h1 style='text-align: center;'>Quick Prompt</h1>", unsafe_allow_html=True)
87
+ st.markdown("<h4 style='text-align: center;'>Genera bullets que cautiven y motiven a tu audiencia.</h4>", unsafe_allow_html=True)
88
+
89
+ # Crear columnas
90
+ col1, col2 = st.columns([1, 2])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
+ # Columnas de entrada
93
  with col1:
94
+ number_of_bullets = st.selectbox("Número de bullets informativos", options=[1, 2, 3, 4, 5], index=2)
 
 
95
 
 
 
 
 
96
  # Botón de enviar
97
  submit = st.button("Generar Bullets")
98
 
99
  # Mostrar los bullets generados
100
  if submit:
101
+ try:
102
+ # Obtener la respuesta del modelo
103
+ generated_bullets = generate_bullets(number_of_bullets)
104
+ col2.markdown(f"""
105
+ <div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
106
+ <h4>Bullets Generados:</h4>
107
+ <ul>
108
+ {''.join(f'<li>{bullet}</li>' for bullet in generated_bullets)}
109
+ </ul>
110
+ </div>
111
+ """, unsafe_allow_html=True)
112
+ except Exception as e:
113
+ col2.error(f"Error inesperado: {str(e)}")