Spaces:
Sleeping
Sleeping
File size: 8,877 Bytes
6cbfd9d 7cdd012 6cbfd9d b5d094d 7cdd012 b5d094d 7cdd012 b5d094d 7cdd012 b5d094d 7cdd012 b5d094d 7531340 7cdd012 b5d094d 6cbfd9d b5d094d 6cbfd9d b5d094d f319c1c 6cbfd9d b5d094d 6cbfd9d b5d094d 6cbfd9d e411757 232fce4 b5d094d 7cdd012 ad8bd78 232fce4 3d42c0e e411757 7cdd012 232fce4 ad8bd78 e411757 346ec34 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
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 = ["Directa", "Indirecta", "Metaf贸rica"]
probabilities = [0.20, 0.30, 0.50] # Mayor probabilidad para Metaf贸rica
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 == "Directa":
return f"""
Presenta el producto '{product}' como la soluci贸n clara al problema que enfrenta el lector. Destaca sus beneficios clave y demuestra c贸mo aborda directamente el problema. La menci贸n debe sentirse natural e integrada en la narrativa.
"""
elif product_mention == "Indirecta":
return f"""
Haz referencia al producto '{product}' como una posible soluci贸n al problema del lector sin nombrarlo expl铆citamente. Integra los beneficios del producto en la descripci贸n de c贸mo el lector puede superar el problema, creando una conexi贸n impl铆cita entre la soluci贸n y el producto.
"""
elif product_mention == "Metaf贸rica":
return f"""
Introduce el producto '{product}' utilizando una met谩fora, conect谩ndolo simb贸licamente a la soluci贸n que necesita el lector. La met谩fora debe relacionarse con el problema discutido y sugerir creativamente c贸mo el producto ofrece una resoluci贸n sin mencionarlo expl铆citamente.
"""
return ""
# Funci贸n para obtener una cantidad de bullets orientados a la acci贸n
def get_action_oriented_bullets(product):
return [
f"驴Sab铆as que el {product} puede transformar tu rutina diaria? Desc煤brelo ahora.",
f"No dejes pasar la oportunidad: el {product} est谩 dise帽ado para facilitarte la vida.",
f"Imagina lo que podr铆as lograr con el {product} en tu arsenal. 隆Act煤a y pru茅balo hoy!"
]
# System Prompt - Instrucci贸n en ingl茅s para el modelo
system_instruction = """
You are a world-class copywriter, expert in creating benefits that connect symptoms with problems. You deeply understand the emotions, desires, and challenges of a specific audience, allowing you to design personalized marketing 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.
Generate unusual, creative, and fascinating bullets that capture readers' attention about the product. Respond in Spanish and use a numbered list format. Important: Only answer bullets, 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 cursioso).'.
"""
# Funci贸n para obtener los bullets
def get_gemini_response_bullets(target_audience, product, num_bullets, creativity):
product_mention = get_random_product_mention()
mention_instruction = get_mention_instruction(product_mention, product) # Define aqu铆
model_choice = "gemini-1.5-flash" # Modelo por defecto
model = genai.GenerativeModel(model_choice)
# System Prompt - Instrucci贸n en ingl茅s para el modelo
system_instruction = """
You are a world-class copywriter, expert in creating benefits that connect symptoms with problems. You deeply understand the emotions, desires, and challenges of a specific audience, allowing you to design personalized marketing 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.
Generate unusual, creative, and fascinating bullets that subtly hint at the product without direct mention, capturing readers' attention. Respond in Spanish and use a numbered list format. Important: 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.'.
"""
# Crear el prompt para generar bullets
full_prompt = f"""
{system_instruction}
Your task is to create {num_bullets} benefits or bullets that connect the symptom with the problem faced by {target_audience}, increasing their desire to acquire the {product}.
Infuse your responses with a creativity level of {creativity}. The bullets should be of the following types:
* 'The bathroom cabinet is the best place to store medicine, right? Incorrect. It's the worst. The facts are on page 10.'
* 'The best verb tense that gives your clients the feeling they've already bought from you.'
* 'The story of...', 'The mysteries of...', 'The legend of...'
* 'A simple system to write copy without trying to convince them to buy.'
* Truth: 'The truth that you've never been told in school, or at home, about how to make a living from music.'
* 'Did you know that...'
* 'When is it a good idea to tell a girl you like her? If you don't say it at that moment, say goodbye to getting to know her intimately.'
Using {mention_instruction} when you want to mention {product}.
Use the following mention instructions to guide your writing: {mention_instruction}
Using the mention type '{product_mention}' to guide how to mention the product in the benefits or bullets. Ensure the mention is adapted based on this type:
- Direct: Clearly highlight the product as the solution.
- Indirect: Subtly suggest the product without naming it.
- Metaphorical: Use a metaphor to connect the product to the solution.
When responding, always include a headline that references the {target_audience} and the product in the following way: 'Aqu铆 tienes 5 bullets para Pap谩s solteros, que aumenten el deseo de adquirir el Aceite multigrado, usando la menci贸n indirecta:'
Please create the bullets now.
"""
response = model.generate_content([full_prompt])
if response and response.parts:
return response.parts[0].text
else:
raise ValueError("Lo sentimos, intenta con una combinaci贸n diferente de entradas.")
# Inicializar la aplicaci贸n Streamlit
st.set_page_config(page_title="Generador de Bullets", layout="wide")
# Centrar el t铆tulo y el subt铆tulo
st.markdown("<h1 style='text-align: center;'>Impact Bullet Generator</h1>", unsafe_allow_html=True)
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)
# 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 dos columnas para el layout (40% y 60%)
col1, col2 = st.columns([2, 3])
with col1:
# Campos de entrada
target_audience = st.text_input("驴Qui茅n es tu p煤blico objetivo?")
product = st.text_input("驴Qu茅 producto tienes en mente?")
# Campos de personalizaci贸n sin acorde贸n
num_bullets = st.slider("N煤mero de Bullets", min_value=1, max_value=15, value=5)
creativity = st.selectbox("Creatividad", ["Alta", "Media", "Baja"])
# Bot贸n de enviar
submit = st.button("Generar Bullets")
# Mostrar los bullets generados
if submit:
if target_audience and product:
try:
# Obtener la respuesta del modelo
generated_bullets = get_gemini_response_bullets(target_audience, product, num_bullets, creativity)
action_bullets = get_action_oriented_bullets(product)
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_bullets}</p>
<h4>Bullets orientados a la acci贸n:</h4>
<p>{'<br>'.join(action_bullets)}</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 y el producto.")
|