from .monitoring import HEADERS import streamlit as st from langchain import LLMChain from langchain.chat_models import ChatOpenAI from langchain.prompts.chat import ( ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate, ) CREATIVE_TEMPLATE = """Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos deberás proporcionar ideas innovadoras para la creación de contenido basado en las necesidades del usuario.\n Analiza la descripción proporcionada y propone varias ideas de temas, ángulos o enfoques que podrían ser interesantes y atractivos para la audiencia, manteniendo siempre un enfoque de optimización SEO. """ GENERATIVE_TEMPLATE = """Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos deberás generar contenido basado en las ideas y necesidades del usuario optimizado para SEO.\n 1. Generar un esquema, esbozando la estructura del contenido a generar.\n 2. Escritura del contenido: Desarrolla cada sección de tu esquema en párrafos completos.\n 3. Inclusión de emojies: Los emojis pueden hacer que tu contenido sea más atractivo y amigable.\n 4. Optimización SEO: Asegúrate de que tus palabras clave aparecen en los lugares importantes de tu contenido.\n 5. Análisis: Debes analizar el contenido generado con el fin de identificar palabras claves que puedan optimizarse para SEO, puntos de mejora en la estructura y detalle del contenido. """ def handle_seo_action(template, action, action_text, model, api_key, creativity_level=None): if api_key: if template: with st.spinner(f'{action_text}...'): if creativity_level: return action(None, model, api_key, creativity_level, template) return action(None, model, api_key, template) else: st.warning('Please enter some template to generate.') else: st.warning('Please enter your API Key.') return None def get_prompt_template(mode, include_emojis, tone, user_request): base_template = CREATIVE_TEMPLATE if mode == "Lluvia de Ideas" else GENERATIVE_TEMPLATE if include_emojis: base_template += "\n\nIncluye emojis en tu contenido para hacerlo más atractivo." if tone == 'Formal': base_template += "\n\nEl tono del contenido debe ser formal." if user_request: base_template += f"\n\nSolicitud del usuario: {user_request}" return base_template def display_content_generation(api_key, model): st.title("Generación de Contenido Digital") # Agregamos las opciones personalizables st.markdown("Personaliza tu contenido:") mode = st.radio("Modo", ['Lluvia de Ideas', 'Generador de Contenido']) include_emojis = st.checkbox("Incluir emojis") tone = st.selectbox("Tono del contenido", ['Formal', 'Informal', 'Amigable', 'Profesional']) st.markdown("Selecciona el nivel de creatividad:") creativity_level = st.slider("Nivel de Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1) # Allow the user to modify the template and enter user request st.markdown("Modifica las instrucciones del bot si lo deseas:") user_request = st.text_input("Solicitud del usuario") _ = st.text_area("Previsualización de Solicitud", get_prompt_template(mode, include_emojis, tone, user_request), height=200) if st.button("Generar"): # Combine template and user request template_with_request = get_prompt_template(mode, include_emojis, tone, user_request) # Pass the template to handle_seo_action function generated_content = handle_seo_action(template_with_request, content_generation_with_langchain, 'Creando el contenido optimizado para SEO', model, api_key, creativity_level) if generated_content: st.success('Generación de contenido completada.') st.markdown("**Contenido generado:**") st.markdown(f"> {generated_content}") def content_generation_with_langchain(content, model, openai_key, creativity_level, template): chat = ChatOpenAI( model=model, temperature=creativity_level, openai_api_key=openai_key, headers=HEADERS if HEADERS else None, ) system_message_prompt = SystemMessagePromptTemplate.from_template(template) human_template = "{content}" human_message_prompt = HumanMessagePromptTemplate.from_template(human_template) chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt]) chain = LLMChain(llm=chat, prompt=chat_prompt) optimized_content = chain.run(content=content) return optimized_content