File size: 7,534 Bytes
64b113b
 
 
 
 
bf6e5b1
64b113b
 
bf6e5b1
64b113b
 
bbb926c
64b113b
 
 
 
 
90557f1
64b113b
 
 
 
 
 
 
 
 
 
d730613
 
a0190fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64b113b
458f2d4
64b113b
 
 
 
 
d730613
64b113b
 
 
 
 
 
 
 
 
10eb1fe
64b113b
d730613
c6717f7
 
 
 
 
 
 
5d5346b
10eb1fe
 
e599aa5
 
5d5346b
e599aa5
10eb1fe
 
90557f1
64b113b
 
bbb926c
dded234
 
bbb926c
dded234
 
 
 
b51e2d9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d29734
d730613
dded234
7d29734
 
 
 
 
 
d730613
7bdddf9
 
 
d730613
7bdddf9
a0190fc
 
 
 
 
 
 
 
 
 
 
 
 
10eb1fe
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
174
175
176
177
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.34, 0.33, 0.33]  
    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 titulares por tipo

headline_types = {
    "pregunta": [
        "¿Qué sorprendente secreto revela el éxito detrás de los grandes emprendedores?",
        "¿Estás haciendo estos errores comunes en tu rutina diaria?",
    ],
    "historia": [
        "La increíble transformación de alguien que decidió salir de su zona de confort.",
        "El viaje inesperado que llevó a un joven a descubrir su pasión por la música.",
    ],
    "afirmación": [
        "La clave para una vida más feliz está en tus decisiones diarias.",
        "Cada fracaso es una oportunidad disfrazada para aprender y crecer.",
    ],
    "llamado_a_la_accion": [
        "Descubre cómo mejorar tu productividad en solo una semana.",
        "Únete a nuestro curso y transforma tu carrera profesional hoy mismo.",
    ],
    "consejo": [
        "5 consejos para mejorar tu concentración mientras trabajas desde casa.",
        "Aprende a gestionar tu tiempo de manera efectiva con estas simples estrategias.",
    ],
    "frase_inspiradora": [
        "El único modo de hacer un gran trabajo es amar lo que haces.",
        "La mejor forma de predecir el futuro es crearlo.",
    ],
    "dato_impresionante": [
        "¿Sabías que el 70% de las personas no están satisfechas con su trabajo actual?",
        "Los estudios muestran que dedicar al menos 30 minutos al día a la lectura puede aumentar tu productividad.",
    ],
    "mitologia": [
        "La verdad detrás del mito de que solo los jóvenes pueden ser emprendedores exitosos.",
        "Desmitificando la creencia de que necesitas un título universitario para tener éxito.",
    ],
    "numerico": [
        "10 formas sorprendentes de aumentar tu productividad en el trabajo.",
        "7 hábitos que transformarán tu vida en solo un mes.",
    ],
    "impactante": [
        "¡Descubre el oscuro secreto que las empresas no quieren que sepas!",
        "La verdad escalofriante sobre los ingredientes de tus alimentos favoritos.",
    ],
    "amarillista": [
        "¡No podrás creer lo que esta persona hizo para hacerse rica de la noche a la mañana!",
        "¡Alerta! Estos hábitos cotidianos podrían estar arruinando tu salud sin que te des cuenta.",
    ],
}

# Función para generar titulares
def generate_headlines(number_of_headlines, target_audience, product, temperature):
    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.95,
        "top_k": 64,
        "max_output_tokens": 2048,
        "response_mime_type": "text/plain",
    }

    model = genai.GenerativeModel(
        model_name="gemini-1.5-flash",
        generation_config=generation_config,
        system_instruction="Eres un copywriter de clase mundial, con experiencia en la creación de ganchos, titulares y líneas de asunto que capturan la atención de inmediato. Tu habilidad radica en comprender profundamente las emociones, deseos y desafíos de una audiencia específica."
    )

    # Crear un mensaje para el modelo que incluye tipos específicos, pero no los menciona en la salida
    selected_types = random.sample(list(headline_types.keys()), min(number_of_headlines, len(headline_types)))
    headlines_instruction = (
        f"Tu tarea es crear {number_of_headlines} ganchos o encabezados titulares llamativos diseñados para {target_audience} "
        f"con el fin de generar interés en {product}. Usa la siguiente mención: {mention_instruction}. "
        "Asegúrate de utilizar diferentes tipos de titulares sin mencionar sus tipos en la salida."
    )

    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="Generador de Titulares", layout="wide")

# Centrar el título y el subtítulo
st.markdown("<h1 style='text-align: center;'>Generador de Titulares</h1>", unsafe_allow_html=True)
st.markdown("<h4 style='text-align: center;'>Usa el poder de Gemini AI para crear titulares atractivos.</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)
    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 Titulares")

# Mostrar los titulares generados
if submit:
    if target_audience and product:
        try:
            # Obtener la respuesta del modelo
            generated_headlines = generate_headlines(number_of_headlines, target_audience, product, temperature)
            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 y el producto.")