Spaces:
Runtime error
Runtime error
| 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 | |