Spaces:
Sleeping
Sleeping
File size: 8,751 Bytes
64b113b bf6e5b1 64b113b bf6e5b1 64b113b bbb926c 64b113b 90557f1 64b113b a0190fc 64b113b 458f2d4 64b113b a0190fc 64b113b a0190fc 64b113b a0190fc 64b113b 9b6b4fd 64b113b c29440d f516220 64b113b 9b6b4fd 90557f1 64b113b bbb926c dded234 bbb926c dded234 b51e2d9 7d29734 dded234 7d29734 f516220 3957f1d a0190fc |
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 178 179 180 181 182 183 184 185 186 |
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 ""
# Tipos de titulares
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."
)
headlines = []
for _ in range(number_of_headlines):
# Seleccionar un tipo de titular aleatorio
headline_type = random.choice(list(headline_types.keys()))
# Seleccionar un ejemplo aleatorio del tipo seleccionado
headline_example = random.choice(headline_types[headline_type])
headlines.append(headline_example)
# Convertir la lista de titulares en un string
headline_string = "\n".join(headlines)
chat_session = model.start_chat(
history=[
{
"role": "user",
"parts": [
f"Tu tarea es crear {number_of_headlines} ganchos o encabezados titulares llamativos diseñados para {target_audience} con el fin de generar interés en {product}. "
f"Usa la siguiente mención: {mention_instruction}. "
"Los ganchos deben ser de este tipo: "
"El enigma detrás de la leyenda: ¿qué misterios se ocultan en las historias que siempre nos han cautivado?"
"¿Te has preguntado alguna vez qué sorprendente dato podría transformar por completo tu forma de ver el mundo?"
"¿El mejor lugar para guardar los medicamentos? El botiquín del baño, ¿verdad? Incorrecto. En realidad, es el peor. ¡Descubre la verdad en la página 10!"
"El tiempo verbal ideal que hace que tus clientes sientan que ya han comprado de ti."
"Un sistema sencillo para redactar textos persuasivos sin tener que convencer a nadie de que compre."
"La verdad que nunca te contaron en la escuela, ni en casa, sobre cómo ganar dinero con la música."
"¿Cuándo es el momento adecuado para confesarle a una chica que te gusta? Si no lo dices en ese instante, despídete de la posibilidad de conocerla de una manera más íntima."
],
},
]
)
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]) # 1: tamaño de la columna izquierda, 2: tamaño de la columna derecha
# 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)
# Mostrar los titulares generados
if st.button("Generar Titulares"):
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.") |