JeCabrera's picture
Update app.py
785b38f verified
raw
history blame
9.78 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
benefits_formulas = {
"plantilla": {
"description": """
Crea bullets de beneficios que respondan 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": [
"Obt茅n tus primeros 100 clientes en 30 d铆as, sin gastar un solo centavo en publicidad.",
"Pierde esos 5 kilos en solo 10 minutos al d铆a, sin dejar de disfrutar tus comidas favoritas.",
"Ahorra para salir de viaje en tres meses, sin sacrificar esas noches de cine."
]
},
"formula_suprema_istvanova": {
"description": """
La estructura de la f贸rmula Suprema de Istvanova es: N煤meros + Adjetivo + Palabra Clave + Raz贸n + Promesa.
Crea bullets points o beneficios con beneficios espec铆ficos y atractivos que conectan emocionalmente con {target_audience} y cumple con estos elementos:
1. **N煤meros**: Se escriben con el fin de declarar que existen cierto n煤meros de articulos.
2. **Adjetivo**: A帽aden emoci贸n y atractivo al mensaje.
3. **Palabra Clave**: Reflejan el beneficio principal o tema clave.
4. **Raz贸n**: Justifican el beneficio o valor del producto.
5. **Promesa**: Muestran el resultado o beneficio que el lector puede esperar.
Cada uno de estos elementos se Integra de manera natural y no forzada cuando se crean los bullets points as铆 como los examples.
""",
"examples": [
"5 m茅todos simples para duplicar tus ventas en menos de 30 d铆as.",
"8 trucos secretos para que tu perro obedezca en una semana.",
"10 t茅cnicas f谩ciles que mejorar谩n tu relaci贸n antes de un mes."
]
},
"formula_aida": {
"description": """
La estructura de la f贸rmula AIDA para crear bullets points con beneficios es: Atenci贸n + Inter茅s + Deseo + Acci贸n.
Crea bullets points o beneficios que sigan estos pasos:
- **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}.
- **Inter茅s**: Detalla c贸mo el beneficio del {product} soluciona un problema espec铆fico o como Facilita la obtencion de un deseo de {target_audience}.
- **Deseo**: Despierta el anhelo por lograr el resultado prometido.
- **Acci贸n**: Inspira al lector a actuar para obtener el beneficio.
Todos estos elementos se integral 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".
""",
"examples": [
"Descubre c贸mo atraer clientes autom谩ticamente, sin experiencia previa.",
"Imagina tener un cuerpo en forma disfrutando lo que te gusta comer.",
"Empieza hoy mismo y experimenta resultados en solo 7 d铆as."
]
}
}
# Funci贸n para generar bullets de beneficios
def generate_benefits(number_of_benefits, 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 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"
)
# Crear un mensaje para el modelo, destacando la audiencia, el producto, la f贸rmula seleccionada y los ejemplos
benefits_instruction = (
f"Tu tarea es crear {number_of_benefits} beneficios irresistibles dise帽ados para {target_audience}. "
f"El objetivo es mostrar c贸mo {product} puede transformar la vida del lector, conectando de forma natural y emocional. "
f"Evita usar menciones literales o repetitivas, y destaca soluciones concretas, mostrando c贸mo el producto elimina obst谩culos o satisface deseos reales. "
f"Usa la f贸rmula seleccionada como gu铆a:\n\n{selected_formula['description']}\n\n"
f"Insp铆rate en estos ejemplos:\n"
f"- {selected_formula['examples'][0]}\n"
f"- {selected_formula['examples'][1]}\n"
f"- {selected_formula['examples'][2]}\n\n"
f"Y no olvides integrar esta instrucci贸n de manera fluida: {mention_instruction}. "
f"Tu objetivo es inspirar deseo y acci贸n, evitando explicaciones o categor铆as en la respuesta."
)
chat_session = model.start_chat(
history=[
{
"role": "user",
"parts": [benefits_instruction],
},
]
)
response = chat_session.send_message("Genera los beneficios") # 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="Bullet Benefits Generator", layout="wide")
# Centrar el t铆tulo y el subt铆tulo
st.markdown("<h1 style='text-align: center;'>Bullet Benefits Generator</h1>", unsafe_allow_html=True)
st.markdown("<h4 style='text-align: center;'>Transforma caracter铆sticas en beneficios irresistibles que conectan emocionalmente con tu audiencia.</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_benefits = st.selectbox("N煤mero de Beneficios", 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 beneficios"):
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 beneficios",
options=list(benefits_formulas.keys())
)
selected_formula = benefits_formulas[selected_formula_key]
# Bot贸n de enviar
submit = st.button("Generar Beneficios")
# Mostrar los beneficios generados
if submit:
if target_audience and product and selected_formula:
try:
# Obtener la respuesta del modelo
generated_benefits = generate_benefits(number_of_benefits, target_audience, product, temperature, selected_formula)
col2.markdown(f"""
<div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
<h4>Explora los beneficios generados:</h4>
<p>{generated_benefits}</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.")