File size: 6,645 Bytes
3968f2e
 
 
 
 
 
 
 
 
 
 
 
54799ab
c40d623
 
a793561
 
 
c40d623
 
 
a6e117c
590b09f
 
9635bfe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
590b09f
cad93d9
 
a793561
 
 
c40d623
 
a793561
 
cad93d9
a793561
c079e2f
f802f3d
 
 
 
 
 
 
 
a793561
f802f3d
 
3968f2e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai

# Cargar las variables de entorno
load_dotenv()

# Configurar la API de Google
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))

# Generar el resultado utilizando el modelo con la instrucción de bullets específica
def generate_bullets(number_of_bullets, target_audience, product, call_to_action, temperature):
    # Configuración del modelo
    generation_config = {
        "temperature": temperature,
        "top_p": 0.85,
        "top_k": 128,
        "max_output_tokens": 2048,
        "response_mime_type": "text/plain",
    }

    # Crear la instrucción del sistema
    system_instruction = (
            f"Eres un experto copywriter especializado en escribir mensajes o textos que atraen la atención de {target_audience} para promover {product} que soluciona los problemas de {target_audience}. "
            f"Tu tarea es ayudarme a escribir {number_of_bullets} bullets que destaquen los beneficios de {product}, los cuales utilizare para mi [página web, landing, correo], "
            f"teniendo en cuenta los puntos dolorosos de mi {target_audience} y el {product} y la {call_to_action} a realizar."
            "Recuerda que un buen bullet debe tener:\n\n"
            f"El efecto tiene que ser de atracción, de fascinar, de dejar con la curiosidad. Es más, se dice que los bullets (o balas) tienen que ser como una herida, cuya única cura sea {call_to_action}."
            f"Haz bullets inusuales, creativos y fascinantes que atrapen la atención que conecten el síntoma de la {target_audience} con el beneficio que van a obtener con {call_to_action}. "
            "Los bullets deben de ser conversacionales, basate en estos ejemplos para realizar tu tarea de crear los bullets:\n\n"
            "* Bien y mal: 'Botiquín del baño es el mejor lugar para guardar la medicina, ¿verdad? Incorrecto Es el peor. Los hecho estan en la página 10.'\n "
            "* El mejor/El Peor: 'El mejor tiempo verbal que existe para dar la sensación a tus clientes que ya te han comprado.'\n "
            "* Historias: 'La historia del...", "Los misterios de...", "La leyenda de...'\n "
            "* Truco: 'Un sistema tonto para escribir copy sin tratar de convender de que me compren' [Aquí se refiere al Mecanismo Único a utilizar].'\n "
            "* El de la verdad: 'La verdad que nunca te han dicho en el colegio, la escuela, ni en tu casa de como vivir de la música'\n "
            "* Haciendo una pregunta: '¿Sabías que?'\n "
            "* Cuando: '¿Cuándo es buena idea decirle a una chica que te gusta? Si no lo dices justo en ese momento, despídete de que la conozcas íntimamente.'\n "
            "- 'Descargar la guía para mejorar mi productividad diaria'\n"
            "- 'Suscribirme para recibir actualizaciones y promociones exclusivas'\n"
            "- 'Unirme a la prueba gratis de 14 días y descubrir nuevas funciones'\n"
            "Important: Only answer CTAs, never include explanations or categories, like this: 'Registrarme ahora y descubrir cómo encontrar un poco de paz en medio del caos. (Este CTA apela al deseo de Han Solo de encontrar un momento de tranquilidad en su vida agitada.).'\n"
            "Usa estos lineamientos para generar CTAs de alta conversión en español."
    )

    # Configuración del modelo generativo
    model = genai.GenerativeModel(
        model_name="gemini-1.5-flash",
        generation_config=generation_config,
    )

    # Generar el resultado utilizando el modelo
    try:
        response = model.generate_content([system_instruction])
        
        # Verificar que la respuesta tenga el formato esperado
        if not response.candidates:
            raise ValueError("No se generaron candidatos válidos.")

        if not response.candidates[0].content.parts:
            raise ValueError("No se generaron partes válidas en la respuesta.")
        
        generated_bullets = response.candidates[0].content.parts[0].text.strip()
        return generated_bullets
    except Exception as e:
        st.error(f"Error al generar los bullets: {str(e)}")
        raise

# Configurar la interfaz de usuario con Streamlit
st.set_page_config(page_title="Impact Bullet Generator", 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 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")
    call_to_action = st.text_input("¿Qué acción deseas que tomen?", placeholder="Ejemplo: Inscribirse al curso")
    number_of_bullets = st.selectbox("Número de bullets", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4)
    temperature = st.slider("Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)

    # Botón de enviar
    submit = st.button("Generar Beneficios")

# Mostrar los beneficios generados
if submit:
    if target_audience and product and call_to_action:
        try:
            # Obtener la respuesta del modelo
            generated_bullets = generate_bullets(number_of_bullets, target_audience, product, call_to_action, temperature)
            col2.markdown(f"""
                <div style="border: 1px solid #000000; padding: 5px; border-radius: 8px; background-color: #ffffff;">
                    <h4>Mira los bullets generados:</h4>
                    <p style="font-size: 22px;">{generated_bullets}</p>
                </div>
            """, unsafe_allow_html=True)
        except Exception as e:
            st.error(f"Error al generar los bullets: {str(e)}")
    else:
        st.error("Por favor, completa todos los campos.")