Spaces:
Sleeping
Sleeping
File size: 6,791 Bytes
846e270 9cf8e68 fd9c480 846e270 9cf8e68 df8d05e 9cf8e68 994b773 d2f5f9c 994b773 d2f5f9c fd9c480 9cf8e68 846e270 9cf8e68 fd9c480 9cf8e68 abe3e7a 9cf8e68 c2de6b7 abe3e7a c2de6b7 9cf8e68 0b37f7d 3293bbd fd9c480 e82df87 fd9c480 950ecdd 277522e fd9c480 9cf8e68 df8d05e 9cf8e68 fd9c480 9cf8e68 5f6daba 32e9978 5f6daba 9cf8e68 df8d05e 9cf8e68 5f6daba 7954eab 5f6daba fd9c480 9cf8e68 5f6daba 0b37f7d 9cf8e68 fd9c480 df8d05e 9cf8e68 fd9c480 9cf8e68 4bfb0ed |
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
import os
from dotenv import find_dotenv, load_dotenv
import streamlit as st
from typing import Generator
from groq import Groq
# Cargar variables de entorno
_ = load_dotenv(find_dotenv())
# Configurar la página de Streamlit
st.set_page_config(page_icon="📃", layout="wide", page_title="Groq & LLaMA3.1 Chat Bot...")
# Menú superior con fondo transparente
st.markdown(
"""
<style>
.menu-container {
padding: 20px;
background-color: transparent; /* Fondo transparente */
border-bottom: 1px solid #e1e1e1;
}
.menu-title {
font-size: 24px;
font-weight: bold;
margin-bottom: 10px;
}
.menu-description {
line-height: 1.5;
}
.menu-description a {
color: #1f77b4;
text-decoration: none;
}
.menu-description a:hover {
text-decoration: underline;
}
</style>
<div class="menu-container">
<p class="menu-title">Bot con I.A. para crear MARKETING DE CONTENIDOS de productos.</p>
<p class="menu-description">
Herramienta de apoyo para crear MARKETING DE CONTENIDOS para medios Electrónicos.<br><br>
Si desea usar otro BOT de I.A. escoja:<br>
<a href='https://sentrycom-bot-mc.hf.space'>Marketing de Contenidos |</a>
<a href='https://sentrycom-bot-tit.hf.space'> Creacion de TITULOS |</a>
<a href='https://sentrycom-bot-dp.hf.space'> Descripcion de Productos |</a>
<a href='https://sentrycom-bot-cp.hf.space'> Caracteristicas de Productos |</a>
<a href='https://wa.me/51927929109'> Desarrollado por MAGNET IMPACT - Agencia de Marketing Digital</a>
</p>
</div>
""",
unsafe_allow_html=True
)
# Inicializar cliente Groq
client = Groq(
api_key=os.environ['GROQ_API_KEY'],
)
# Inicializar historial de chat y modelo seleccionado
if "messages" not in st.session_state:
st.session_state.messages = []
if "selected_model" not in st.session_state:
st.session_state.selected_model = "mixtral-8x7b-32768"
# Detalles del modelo
models = {
"mixtral-8x7b-32768": {
"name": "Mixtral-8x7b-Instruct-v0.1",
"tokens": 32768,
"developer": "Mistral",
},
}
# Configurar el modelo y tokens
model_option = "mixtral-8x7b-32768"
max_tokens_range = models[model_option]["tokens"]
# No mostrar la selección del modelo ni la barra de tokens
st.session_state.max_tokens = max_tokens_range
# Detectar cambio de modelo y limpiar historial de chat si el modelo ha cambiado
if st.session_state.selected_model != model_option:
st.session_state.messages = []
st.session_state.selected_model = model_option
# Añadir un botón para "Limpiar Chat"
if st.button("Limpiar Chat"):
st.session_state.messages = []
# Mostrar mensajes de chat del historial en la aplicación
for message in st.session_state.messages:
avatar = "images/assistant_avatar.png" if message["role"] == "assistant" else "images/user_avatar.png"
with st.chat_message(message["role"], avatar=avatar):
st.markdown(message["content"])
def generate_chat_responses(chat_completion) -> Generator[str, None, None]:
"""Generar contenido de respuesta del chat a partir de la respuesta de la API de Groq."""
for chunk in chat_completion:
if chunk.choices[0].delta.content:
yield chunk.choices[0].delta.content
# Instrucción privada que se aplicará a cada mensaje
private_instruction = (
"# Quiero que actúes como consultor de marketing profesional. # Te proporcionaré una persona que te dará el nombre de un producto o servicio para que generes publicaciones de marketing de contenidos en español con atractivos emojis que motiven al lector a conocer más sobre [producto] a través de tips, guías y sugerencias útiles. # Debes utilizar tus conocimientos de Marketing de Contenidos que deben ser inspiradores, completamente enfocados a aportar valor al lector sin publicidad directa o indirecta. # Generar contenido de al menos 5 párrafos cortos pero relevantes. Comprueba que el contenido anterior no se repite. # Generar contenido con párrafos de entre 10 y 20 palabras. # Utiliza emojis atractivos y títulos como: \"Los 5 mejores trucos para [acción]\". \"La guía definitiva para principiantes sobre [tema].\" \"¿Quieres [resultado]? Te muestro cómo lograrlo en 5 pasos.\" # Usa consejos prácticos como: \"Con estos 5 consejos podrás \"Obtendrás [resultado].\" \"Cinco formas innovadoras de utilizar [producto] en tu vida diaria.\" # Contenido educativo: \"Los errores más comunes y cómo evitarlos.\" \"Mitos y verdades sobre [tema].\" \"Las últimas tendencias que necesitas conocer.\" # Testimonios y ejemplos que conectan emocionalmente: \"Esto es lo que aprendí cuando comencé a usar [producto]\" \"Historias de usuarios reales que resuelto [problema]\" # Generar contenido enfocado a resolver dudas y agregar valor, NO venta directa. ¡Sorpréndeme con tus mejores ideas! # Siempre responde en ESPAÑOL AMERICANO. Para después de terminar el primer marketing de contenidos generado."
)
# Manejar la entrada del chat del usuario
if prompt := st.chat_input("Escribe tu mensaje aquí..."):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user", avatar="images/user_avatar.png"):
st.markdown(prompt)
# Preparar los mensajes para la API, incluyendo la instrucción privada
messages_for_api = [
{"role": "system", "content": private_instruction},
] + [
{"role": m["role"], "content": m["content"]}
for m in st.session_state.messages
]
# Obtener respuesta de la API de Groq
try:
chat_completion = client.chat.completions.create(
model=model_option,
messages=messages_for_api,
max_tokens=max_tokens_range,
stream=True,
)
# Usar la función generadora con st.write_stream
with st.chat_message("assistant", avatar="images/assistant_avatar.png"):
chat_responses_generator = generate_chat_responses(chat_completion)
full_response = st.write_stream(chat_responses_generator)
# Añadir la respuesta completa al historial de mensajes
if isinstance(full_response, str):
st.session_state.messages.append(
{"role": "assistant", "content": full_response}
)
else:
combined_response = "\n".join(str(item) for item in full_response)
st.session_state.messages.append(
{"role": "assistant", "content": combined_response}
)
except Exception as e:
st.error(e, icon="❌")
|