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

Generador de Perfil de Cliente Ideal

", unsafe_allow_html=True) st.markdown("

Crea un perfil detallado de tu cliente ideal basado en tu producto y habilidades.

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

Tu Cliente Ideal

{st.session_state.perfil_cliente}
""", 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.")