Spaces:
Sleeping
Sleeping
| import os | |
| import gradio as gr | |
| from crewai import Agent, Task, Crew, Process | |
| print("💀 [FORJA EN LA NUBE]: Levantando el Enjambre Abada V3...") | |
| # --- EL PUENTE DE LA LLAVE --- | |
| # Tomamos tu secreto de Hugging Face y se lo damos a LiteLLM en el idioma que entiende | |
| llave_secreta = os.environ.get("HUGGINGFACEHUB_API_TOKEN") | |
| if llave_secreta: | |
| os.environ["HUGGINGFACE_API_KEY"] = llave_secreta | |
| else: | |
| print("⚠️ ALERTA: No se encontró el HUGGINGFACEHUB_API_TOKEN en los secretos.") | |
| MODELO_NUBE = "huggingface/meta-llama/Llama-3.1-8B-Instruct" | |
| # --- DEFINICIÓN DEL ENJAMBRE --- | |
| def iniciar_mesa_redonda(descripcion_proyecto): | |
| # 1. El Estratega | |
| agente_producto = Agent( | |
| role='Product Manager Senior', | |
| goal='Diseñar la lógica y los pasos de la interfaz de usuario.', | |
| backstory='Eres el visionario de AbadaLabs. Creas experiencias de usuario con cero fricción.', | |
| verbose=True, | |
| allow_delegation=False, | |
| llm=MODELO_NUBE | |
| ) | |
| # 2. El Constructor | |
| agente_frontend = Agent( | |
| role='Frontend Developer Lead', | |
| goal='Escribir el código en React y Tailwind basándose en la lógica del Product Manager.', | |
| backstory='Eres un dios del código. Traduces ideas en componentes de React hermosos.', | |
| verbose=True, | |
| allow_delegation=False, | |
| llm=MODELO_NUBE | |
| ) | |
| tarea_1 = Task( | |
| description=f'Analiza esta idea: "{descripcion_proyecto}". Define una lista de 3 pasos exactos para la interfaz.', | |
| expected_output='Una lista numerada de 3 pasos para la UI.', | |
| agent=agente_producto | |
| ) | |
| tarea_2 = Task( | |
| description='Basándote en la lista de pasos creada, escribe el código de un componente principal en React con Tailwind.', | |
| expected_output='Código limpio en React y Tailwind.', | |
| agent=agente_frontend | |
| ) | |
| enjambre = Crew( | |
| agents=[agente_producto, agente_frontend], | |
| tasks=[tarea_1, tarea_2], | |
| process=Process.sequential | |
| ) | |
| # Ejecutamos la colmena y devolvemos el resultado | |
| resultado = enjambre.kickoff() | |
| return str(resultado) | |
| # --- LA ARMADURA VISUAL (GRADIO) --- | |
| interfaz = gr.Interface( | |
| fn=iniciar_mesa_redonda, | |
| inputs=gr.Textbox( | |
| lines=3, | |
| placeholder='Ejemplo: Requiero un Magic Onboarding para detectar si el usuario es Dev o Creador...', | |
| label='💡 Instrucción para el Enjambre' | |
| ), | |
| outputs=gr.Textbox( | |
| lines=15, | |
| label='⚙️ Resultado de la Mesa Redonda (Código y Estrategia)' | |
| ), | |
| title="👁️ HECTRON PRIME: Enjambre Autónomo", | |
| description="Escribe tu idea. El Product Manager la diseñará y el Frontend Dev escribirá el código de React." | |
| ) | |
| # Encendemos el servidor web | |
| interfaz.launch() | |