Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from langchain import LLMChain | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.prompts.chat import ( | |
| ChatPromptTemplate, | |
| SystemMessagePromptTemplate, | |
| HumanMessagePromptTemplate, | |
| ) | |
| from .monitoring import HEADERS | |
| OPTIMIZE_TEMPLATE = """Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos deberás ayudar al usuario a determinar cómo mejorar el SEO del artículo en el cual este este trabajando.\n | |
| Basado en esto deberás: | |
| 1. Proporcionar puntos de mejora respecto al contenido del artículo. | |
| 2. Proporcionar alternativas para el título con el fin de generar más tracción y que los usuarios realicen clic. | |
| 3. Proporcionar una lista de palabras clave que puedan incluirse en el contenido del artículo y que NO se encuentren en el contenido proporcionado por el usuario. | |
| """ | |
| def handle_seo_action(content, action, action_text, model, api_key, creativity_level=None, template=None): | |
| if content: | |
| with st.spinner(f'{action_text}...'): | |
| if creativity_level: | |
| return action(content, model, api_key, creativity_level, template) | |
| return action(content, model, api_key, template) | |
| return None | |
| def display_content_optimization(api_key, model): | |
| st.title("Optimización de Contenido") | |
| st.markdown("Por favor, copia y pega tu artículo a continuación:") | |
| # Agregar un estado para almacenar el contenido del artículo ingresado por el usuario | |
| article_content = st.text_area("Contenido del Artículo", height=200, key="article_content") | |
| 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) | |
| # Mostrar el prompt template en un textarea para que el usuario pueda verlo y editarlo | |
| st.markdown("**Instrucciones del bot:**") | |
| template = st.text_area("Prompt Template", value=OPTIMIZE_TEMPLATE, height=200) | |
| if st.button("Enviar"): | |
| # Concatenar el contenido ingresado por el usuario con el prompt template | |
| prompt_template = template + f"\n\n{article_content}" | |
| optimized_content = handle_seo_action(article_content, optimize_content_with_langchain, 'Optimizando el contenido para SEO', model, api_key, creativity_level, prompt_template) | |
| if optimized_content: | |
| st.success('Optimización de contenido completada.') | |
| st.markdown(optimized_content) | |
| def optimize_content_with_langchain(content, model, api_key, creativity_level=None, template=None): | |
| chat = ChatOpenAI( | |
| model=model, | |
| temperature=creativity_level, | |
| openai_api_key=api_key, | |
| headers=HEADERS | |
| ) | |
| system_message_prompt = SystemMessagePromptTemplate.from_template(template) | |
| # Actualizar el contenido del usuario en el template de mensaje humano | |
| human_template = "{content}" | |
| human_message_prompt = HumanMessagePromptTemplate.from_template(human_template, content=content) | |
| 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 | |