File size: 4,723 Bytes
cfe8f38
4579e3f
7c9815f
 
 
 
 
 
 
 
9ca1656
18af915
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9ca1656
18af915
 
9ca1656
18af915
9ca1656
7c9815f
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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