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("
{generated_texts}