import os import sys # ─────────────────────────────────────────────────── # 1) Forzar a Streamlit a usar /tmp/.streamlit (es escribible en HF Spaces) # ─────────────────────────────────────────────────── os.environ["STREAMLIT_CONFIG_DIR"] = "/tmp/.streamlit" # Nos aseguramos de que /tmp/.streamlit exista try: os.makedirs("/tmp/.streamlit", exist_ok=True) except Exception: pass # ─────────────────────────────────────────────────── # 2) Meter src/ en sys.path para hallar agent/ y tools/ # ─────────────────────────────────────────────────── HERE = os.path.dirname(__file__) # apunta a /app/src if HERE not in sys.path: sys.path.insert(0, HERE) # ─────────────────────────────────────────────────── # 3) Ahora sí importamos Streamlit y el resto # ─────────────────────────────────────────────────── import streamlit as st from agent.linkedin_agent import create_agent from tools.web_search_tool import get_web_search_tool from agents import Runner # … resto de tu código de UI/ lógica de Streamlit … st.set_page_config(page_title="Buscador de Perfiles LinkedIn", layout="centered") # Verificamos que la clave esté presente en entorno if not os.getenv("OPENAI_API_KEY"): st.error("❌ Por favor define la variable de entorno OPENAI_API_KEY.") st.stop() # Instanciamos una sola vez el agente al arrancar la app agent = create_agent() st.title("🔍 Agente de Búsqueda de Perfiles LinkedIn") st.write("Ingresa la descripción de la oferta y la cantidad de perfiles que deseas encontrar.") # Contenedor para historial de chat if "history" not in st.session_state: st.session_state.history = [] # Formulario para que el usuario ingrese oferta + número de perfiles with st.form(key="oferta_form", clear_on_submit=False): oferta = st.text_area("📰 Descripción de la oferta de empleo:", height=150) num_perfiles = st.number_input( "🔢 Cantidad de perfiles a buscar:", min_value=1, max_value=20, value=5 ) enviar = st.form_submit_button(label="Enviar al agente") # Cuando el usuario hace clic en “Enviar” if enviar and oferta: # Agregamos el mensaje del usuario al historial st.session_state.history.append(("usuario", oferta)) # Construimos el prompt tal como espera el agente: oferta + N prompt = f"Oferta: {oferta}\nNúmero perfiles: {num_perfiles}" # Ejecutamos el agente de forma síncrona # Runner.run_sync se encarga de bloquear hasta obtener la salida final resultado = Runner.run_sync(agent, prompt) respuesta = resultado.final_output # Agregamos la respuesta del agente al historial st.session_state.history.append(("agente", respuesta)) # Mostramos el “chat” en orden cronológico st.markdown("""---""") st.markdown("### 💬 Historial de Chat") for quien, texto in st.session_state.history: if quien == "usuario": st.markdown(f"**Tú:** {texto}") else: st.markdown(f"**Agente:** {texto}") # Al pie, sugerimos al usuario limpiar el historial si desea volver a empezar if st.button("🔄 Limpiar historial"): st.session_state.history = []