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("

Quick Prompt

", unsafe_allow_html=True) st.markdown("

Transforma tu mensaje en llamados de acción que inspiren a tu audiencia a tomar decisiones al instante.

", unsafe_allow_html=True) # Añadir CSS personalizado para el botón st.markdown(""" """, 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"""

Mira la magia en acción:

{generated_texts}

""", 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.")