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