Ideal_Client / app.py
JeCabrera's picture
Update app.py
a272c89 verified
raw
history blame
5.09 kB
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
from style import styles
from prompts import create_instruction
# Cargar las variables de entorno
load_dotenv()
# Configurar la API de Google
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
# Inicializar variables de estado en session_state si no existen
if 'perfil_cliente' not in st.session_state:
st.session_state.perfil_cliente = None
if 'producto' not in st.session_state:
st.session_state.producto = ""
if 'habilidades' not in st.session_state:
st.session_state.habilidades = ""
if 'creatividad' not in st.session_state:
st.session_state.creatividad = 1.0
# Funci贸n para generar el perfil de cliente ideal
@st.cache_resource
def get_model(temperature):
generation_config = {
"temperature": temperature,
}
return genai.GenerativeModel('gemini-2.0-flash', generation_config=generation_config)
def generate_buyer_persona(product, skills, temperature):
if not product or not skills:
return "Por favor, completa los campos de producto y habilidades."
model = get_model(temperature)
instruction = create_instruction(
product_service=product,
skills=skills
)
response = model.generate_content([instruction], generation_config={"temperature": temperature})
return response.parts[0].text if response and response.parts else "Error generando el perfil de cliente ideal."
# Funci贸n para actualizar el perfil del cliente
def update_profile():
st.session_state.perfil_cliente = generate_buyer_persona(
st.session_state.producto,
st.session_state.habilidades,
st.session_state.creatividad
)
# Configurar la interfaz de usuario con Streamlit
st.set_page_config(page_title="Generador de Cliente Ideal", page_icon="馃懁", layout="wide")
# Leer el contenido del archivo manual.md si existe
try:
with open("manual.md", "r", encoding="utf-8") as file:
manual_content = file.read()
# Mostrar el contenido del manual en el sidebar
st.sidebar.markdown(manual_content)
except FileNotFoundError:
st.sidebar.warning("Manual not found. Please create a manual.md file.")
except Exception as e:
st.sidebar.error(f"Error loading manual: {str(e)}")
# Ocultar elementos de la interfaz
st.markdown(styles["main_layout"], unsafe_allow_html=True)
# Centrar el t铆tulo y el subt铆tulo
st.markdown("<h1 style='text-align: center;'>Generador de Perfil de Cliente Ideal</h1>", unsafe_allow_html=True)
st.markdown("<h4 style='text-align: center;'>Crea un perfil detallado de tu cliente ideal basado en tu producto y habilidades.</h4>", unsafe_allow_html=True)
# A帽adir CSS personalizado para el bot贸n
st.markdown(styles["button"], unsafe_allow_html=True)
# Crear columnas
col1, col2 = st.columns([1, 2])
# Columna de entrada
with col1:
producto = st.text_input("驴Qu茅 producto o servicio ofreces?",
value=st.session_state.producto,
placeholder="Ejemplo: Curso de Ingl茅s",
key="producto_input")
st.session_state.producto = producto
habilidades = st.text_input("驴Cu谩les son tus habilidades principales?",
value=st.session_state.habilidades,
placeholder="Ejemplo: Ense帽anza, comunicaci贸n, dise帽o de contenidos",
key="habilidades_input")
st.session_state.habilidades = habilidades
# Nivel de creatividad con slider
creatividad = st.slider("Nivel de creatividad",
min_value=0.0,
max_value=2.0,
value=st.session_state.creatividad,
step=0.1,
key="creatividad_slider")
st.session_state.creatividad = creatividad
# Bot贸n para generar
submit = st.button("GENERAR PERFIL DE CLIENTE IDEAL", on_click=update_profile)
# Columna de resultados
with col2:
# Mostrar resultados si existen en el estado de la sesi贸n
if st.session_state.perfil_cliente:
if not isinstance(st.session_state.perfil_cliente, str):
st.error("Error al generar el perfil de cliente ideal")
else:
st.markdown(f"""
<div style="{styles['results_container']}">
<h3>Tu Cliente Ideal</h3>
{st.session_state.perfil_cliente}
</div>
""", unsafe_allow_html=True)
# Opci贸n para descargar
st.download_button(
label="Descargar Perfil",
data=st.session_state.perfil_cliente,
file_name="cliente_ideal.md",
mime="text/markdown"
)
# Mostrar el mensaje de advertencia solo si se ha presionado el bot贸n pero faltan campos
elif submit and (not producto or not habilidades):
st.warning("Por favor, completa los campos de producto y habilidades antes de generar el perfil.")