JeCabrera's picture
Update app.py
559e711 verified
raw
history blame
12.3 kB
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
import random
# Cargar las variables de entorno
load_dotenv()
# Configurar la API de Google
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
# Función para obtener una mención del producto de manera probabilística
def get_random_product_mention():
mentions = ["Indirecta", "Metafórica"]
probabilities = [0.50, 0.50]
return random.choices(mentions, probabilities)[0]
# Crear la instrucción de mención basada en la opción seleccionada
def get_mention_instruction(product_mention, product):
if product_mention == "Indirecta":
return f"Referencia sutilmente el producto '{product}' como una posible solución al problema del lector sin nombrarlo explícitamente."
elif product_mention == "Metafórica":
return f"Introduce el producto '{product}' usando una metáfora, conectándolo simbólicamente a la solución que necesita el lector."
return ""
# Fórmulas con ejemplos y explicaciones
headline_formulas = {
"plantilla": {
"description": """
Crean titulares creativos y disruptivos que responden estas tres preguntas clave:
1. ¿Qué es lo que el lector quiere conseguir?
2. ¿En qué periodo de tiempo quiere conseguirlo?
3. ¿Cuál es la objeción principal del lector que le impide lograrlo?
""",
"examples": [
"Sin gastar un solo centavo en publicidad, consigue tus primeros 100 clientes en 30 días.",
"En solo 10 minutos al día, pierde esos 5 kilos sin tener que dejar de comer lo que te gusta.",
"Como ahorrar para salir de viaje, en solo tres meses y sin dejar esas noches de cine."
]
},
"formula_suprema_istvanova": {
"description": """
La fórmula Suprema de Istvanova: Números + Adjetivo + Palabra Clave + Razón + Promesa.
Esta fórmula está diseñada para crear titulares poderosos y atractivos que captan la atención de tu audiencia. Cada elemento de la fórmula cumple una función específica que ayuda a estructurar el mensaje de manera que maximice su efectividad:
1. **Números**: Los números llaman la atención inmediatamente y hacen que el titular se perciba como más concreto y específico. Los números ayudan a establecer una expectativa clara y medible para el lector. Ejemplos: "5", "10", "25".
2. **Adjetivo**: Los adjetivos enriquecen el mensaje, añadiendo emoción y color al titular. Un buen adjetivo puede aumentar el atractivo del mensaje y despertar el interés del lector. Ejemplos: "secreto", "fácil", "mejor", "nuevo".
3. **Palabra Clave**: Esta es la palabra principal o el concepto central alrededor del cual gira el titular. Es el término que refleja el beneficio, la solución o el tema clave del contenido. Ejemplos: "ventas", "productividad", "salud", "éxito".
4. **Razón**: Aquí es donde explicamos el "por qué" detrás de lo que estamos ofreciendo. La razón proporciona una justificación clara y lógica sobre el beneficio o valor del producto o idea. Ejemplos: "para mejorar tu rendimiento", "para transformar tu vida", "para conseguir más clientes".
5. **Promesa**: La promesa es el resultado o beneficio que el lector puede esperar obtener. Esta es la parte que debe motivar al lector a actuar, mostrando lo que pueden lograr si siguen el consejo o utilizan el producto. Ejemplos: "te ayudará a duplicar tus ventas", "te hará más feliz y saludable", "transformará tu negocio".
""",
"examples": [
"5 fórmulas secretas para mejorar tus cartas de venta e incrementar tus ventas",
"25 frases del éxito que llevaron a Abraham Lincoln a la presidencia y que te harán un gran líder",
"8 comandos claves que convierten a tu perro travieso en una adorable mascota",
"10 palabras prohibidas que debes evitar que mejorarán la relación con tu pareja antes de un mes"
]
},
"formula_aida": {
"description": """
La fórmula AIDA: Cuando se crean titualres se ocupa uno o dos de los siguientes elementos: Atención + Interés + Deseo + Acción.
Atención: Es el primer paso y el más importante: debes captar la atención del lector de inmediato. Un buen encabezado debe destacar y despertar el interés, haciendo que el lector quiera seguir leyendo.
Interés: Una vez que tienes su atención, debes mantener su interés proporcionando más detalles relevantes. Aquí es donde el lector empieza a identificarse con el problema o la situación que se le presenta.
Deseo: El siguiente paso es despertar el deseo del lector. Muestra cómo tu solución puede mejorar su vida o resolver su problema de manera atractiva. El lector debe visualizar los beneficios de seguir tu consejo o usar tu producto.
Acción: Finalmente, debes motivar al lector a actuar. Llama a la acción de manera clara y directa para que el lector se sienta impulsado a tomar el siguiente paso.
""",
"examples": [
"¿Cansado de no ver resultados en tu dieta?",
"Descubre cómo perder peso sin dietas extremas ni horas en el gimnasio.",
"Imagina verte en tu mejor forma, sin privarte de lo que te gusta.",
"Comienza ahora con nuestra guía gratis y cambia tu cuerpo de inmediato.",
"Imagina tener un teléfono tan rápido como cuando lo compraste.",
"Te mostramos cómo atraer clientes de manera automática sin tener experiencia previa.",
"¿Cansado de no ver resultados en tu dieta?",
"Imagina tener ventas constantes mientras duermes."
]
}
}
# Función para generar titulares
def generate_headlines(number_of_headlines, target_audience, product, temperature, selected_formula):
product_mention = get_random_product_mention()
mention_instruction = get_mention_instruction(product_mention, product)
# Crear la configuración del modelo
generation_config = {
"temperature": temperature,
"top_p": 0.65, # Considerar un poco menos de palabras probables
"top_k": 360, # Aumentar las palabras candidatas para más variedad
"max_output_tokens": 8196, # Mantenerlo igual, pero puedes aumentar si deseas más detalle
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-1.5-flash",
generation_config=generation_config,
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).'"
)
# Crear un mensaje para el modelo, destacando la audiencia, el producto, la fórmula seleccionada y los ejemplos
headlines_instruction = (
f"Tu tarea es crear {number_of_headlines} ganchos o encabezados atractivos diseñados para {target_audience}. "
f"El objetivo es captar la atención de inmediato y generar un gran interés en {product}. Asegúrate de que cada título sea "
f"llamativo, persuasivo y emocionalmente resonante, siguiendo la estructura de la fórmula seleccionada, que puedes ver a continuación: "
f"\n\n{selected_formula['description']}.\n\n"
f"Para hacer los titulares más efectivos, revisa los siguientes ejemplos de cómo esta fórmula puede ser utilizada con éxito:\n"
f"- {selected_formula['examples'][0]}\n"
f"- {selected_formula['examples'][1]}\n"
f"- {selected_formula['examples'][2]}\n\n"
f"Utiliza estos ejemplos como inspiración, pero asegúrate de crear titulares únicos y relevantes para {target_audience} siguiendo la fórmula {selected_formula} seleccionada. "
f"Además, incluye la siguiente mención en todos los titulares generados: {mention_instruction}. "
f"No expliques las fórmulas ni la estructura en la salida, solo proporciona los titulares. "
f"Recuerda, el objetivo es crear titulares que hagan que los lectores deseen saber más y actuar."
)
chat_session = model.start_chat(
history=[
{
"role": "user",
"parts": [headlines_instruction],
},
]
)
response = chat_session.send_message("Genera los titulares") # Enviar mensaje para obtener la respuesta
return response.text # Regresar la respuesta directamente
# Configurar la interfaz de usuario con Streamlit
st.set_page_config(page_title="Enchanted Hooks", layout="wide")
# Centrar el título y el subtítulo
st.markdown("<h1 style='text-align: center;'>Enchanted Hooks</h1>", unsafe_allow_html=True)
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)
# Añadir CSS personalizado para el botón
st.markdown("""
<style>
div.stButton > button {
background-color: #FFCC00;
color: black;
width: 90%;
height: 60px;
font-weight: bold;
font-size: 22px;
text-transform: uppercase;
border: 1px solid #000000;
border-radius: 8px;
display: block;
margin: 0 auto;
}
div.stButton > button:hover {
background-color: #FFD700;
color: black;
}
</style>
""", unsafe_allow_html=True)
# Crear columnas
col1, col2 = st.columns([1, 2])
# Columnas de entrada
with col1:
target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Estudiantes Universitarios")
product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de Inglés")
number_of_headlines = st.selectbox("Número de Titulares", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4)
# Crear un único acordeón para fórmula y creatividad
with st.expander("Personaliza tus titulares"):
temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
selected_formula_key = st.selectbox(
"Selecciona una fórmula para tus titulares",
options=list(headline_formulas.keys())
)
selected_formula = headline_formulas[selected_formula_key]
# Botón de enviar
submit = st.button("Generar Titulares")
# Mostrar los titulares generados
if submit:
if target_audience and product and selected_formula:
try:
# Obtener la respuesta del modelo
generated_headlines = generate_headlines(number_of_headlines, target_audience, product, temperature, selected_formula)
col2.markdown(f"""
<div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
<h4>Observa la magia en acción:</h4>
<p>{generated_headlines}</p>
</div>
""", unsafe_allow_html=True)
except ValueError as e:
col2.error(f"Error: {str(e)}")
else:
col2.error("Por favor, proporciona el público objetivo, el producto y selecciona una fórmula.")