File size: 8,029 Bytes
64b113b
 
 
 
 
bf6e5b1
64b113b
 
bf6e5b1
64b113b
 
bbb926c
64b113b
 
 
c37dff8
64b113b
90557f1
64b113b
 
 
 
 
 
 
 
 
 
3421ae5
 
b94ad49
ddb3488
 
 
 
 
b94ad49
3421ae5
ddb3488
 
a0190fc
3421ae5
ddb3488
 
a0190fc
3421ae5
ddb3488
 
a0190fc
3421ae5
ddb3488
 
a0190fc
3421ae5
ddb3488
 
b94ad49
a0190fc
 
b94ad49
 
 
 
 
 
ddb3488
 
64b113b
 
 
3421ae5
64b113b
d730613
3421ae5
 
 
64b113b
3421ae5
64b113b
b94ad49
64b113b
b94ad49
 
 
4f6a5a2
ddb3488
 
 
b94ad49
64b113b
d730613
b94ad49
ddb3488
 
 
 
10eb1fe
90557f1
b94ad49
a6f26c9
ddb3488
a6f26c9
76ac96c
ddb3488
a6f26c9
 
ddb3488
a6f26c9
ddb3488
bbb926c
dded234
ef0fcd4
bbb926c
dded234
ef0fcd4
 
dded234
b51e2d9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
009ace4
 
dded234
009ace4
7d29734
009ace4
 
 
ddb3488
898f300
d730613
7bdddf9
ddb3488
7bdddf9
ddb3488
7bdddf9
2be4127
a0190fc
 
ddb3488
a0190fc
 
ddb3488
 
a0190fc
 
 
 
a6f26c9
 
a0190fc
5cf7266
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
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.35, 0.25, 0.40]
    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"Introduce directamente el producto '{product}' como la solución clara al problema que enfrenta el lector."
    elif 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 ""

# Ejemplos de llamados a la acción por tipo
cta_types = {
    "directos": [
        "Descarga la guía para mejorar mi productividad diaria.",
        "Suscribite a la página para recibir actualizaciones y promociones exclusivas.",
        "Únete a la prueba gratis de 14 días y descubrir nuevas funciones.",
        "Registrate a la página para acceder a contenido premium y estrategias efectivas.",
        "Compra ahora y obtén un regalo especial con tu pedido."
    ],
    "urgencia": [
        "Inscribete ahora para asegurar tu lugar, antes de que se agoten las plazas.",
        "Únete ahora para comenzar tu transformación hoy y no pierdas más tiempo."
    ],
    "descuento": [
        "Compra ahora y aprovecha el 50% de descuento.",
        "Haz tu pedido ahora y obten un 30% de descuento adicional."
    ],
    "exclusividad": [
        "Accede al contenido exclusivo solo para miembros.",
        "Se parte de un grupo selecto y disfruta de beneficios únicos."
    ],
    "beneficio_claro": [
        "Mejora tu productividad en solo una semana.",
        "Transforma tu carrera profesional con herramientas avanzadas."
    ],
    "personalización": [
        "Descubre cómo personalizar esta oferta.",
        "Elige las opciones que mejor se adapten a tus necesidades."
    ]
}

# Función para que el modelo elija automáticamente el tipo de CTA y el CTA específico
def get_random_cta():
    cta_type = random.choice(list(cta_types.keys()))  # Selección aleatoria del tipo de CTA
    cta = random.choice(cta_types[cta_type])  # Selección aleatoria del CTA dentro del tipo
    return cta

# Función para generar los textos, incluyendo el texto introductorio y el CTA
def generate_texts(number_of_texts, target_audience, product, call_to_action, temperature):
    product_mention = get_random_product_mention()
    mention_instruction = get_mention_instruction(product_mention, product)

    # Configuración del modelo
    generation_config = {
        "temperature": temperature,  
        "top_p": 0.85,       
        "top_k": 128,        
        "max_output_tokens": 2048,
        "response_mime_type": "text/plain",
    }

    # Configuración del modelo generativo y las instrucciones del sistema
    model = genai.GenerativeModel(
        model_name="gemini-1.5-flash",  # Nombre del modelo que estamos utilizando
        generation_config=generation_config,  # Configuración de generación
        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}. "
            "Tu tarea es crear textos que incluyan un mensaje introductorio seguido de un llamado a la acción (CTA) efectivo para promover {product}, tomando en cuenta los puntos dolorosos de {target_audience} y el {call_to_action} a realizar."
            "El texto introductorio debe inspirar y conectar emocionalmente con el lector. Después de eso, el CTA debe ser claro, directo y persuasivo, siguiendo la estructura 'Acción + conector + Valor'."
            "Asegúrate de que el texto sea creativo, fluido, y adaptado al tono que genera confianza y deseo de actuar."
        )
    )

    # Crear un mensaje para el modelo que incluye los CTAs generados según los tipos seleccionados
    texts_instruction = (
        f"Tu tarea es generar {number_of_texts} combinaciones de textos. Cada texto debe comenzar con un mensaje introductorio atractivo, seguido de un CTA relacionado con {call_to_action}. "
        f"Puedes usar una frase introductoria como 'Y si a ti te gustaría aprender todo esto...' o similares, pero dale libertad creativa para generar otras introducciones. "
        f"Recuerda que el CTA debe tener la estructura 'Acción + conector + Valor', como los ejemplos proporcionados."
    )

    # Generar el resultado utilizando el modelo con la instrucción de CTA específica
    try:
        response = model.generate_content([texts_instruction])
        
        # Extraer el texto de la respuesta
        generated_texts = response.candidates[0].content.parts[0].text.strip()  # Modificado aquí
        
        # Retornar el resultado
        return generated_texts
    except Exception as e:
        raise ValueError(f"Error al generar los textos: {str(e)}")

# Configurar la interfaz de usuario con Streamlit
st.set_page_config(page_title="QuickPrompt", layout="wide")

# Centrar el título y el subtítulo
st.markdown("<h1 style='text-align: center;'>Quick Prompt</h1>", unsafe_allow_html=True)
st.markdown("<h4 style='text-align: center;'>Transforma tu mensaje en llamados de acción que inspiren a tu audiencia a tomar decisiones al instante.</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_texts = st.selectbox("Número de textos", options=[1, 2, 3, 4, 5], index=2)
    temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=0.8, step=0.1)

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

# Mostrar los textos generados
if submit:
    if target_audience and product and call_to_action:
        try:
            # Obtener la respuesta del modelo
            generated_texts = generate_texts(number_of_texts, 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 la magia en acción:</h4>
                    <p>{generated_texts}</p>
                </div>
            """, unsafe_allow_html=True)
        except ValueError as e:
            col2.error(f"Error: {str(e)}")
        except Exception as e:
            col2.error(f"Error inesperado: {str(e)}")
    else:
        col2.error("Por favor, proporciona el público objetivo, el producto y la acción.")