--- title: Galita emoji: đŹ colorFrom: yellow colorTo: purple sdk: gradio sdk_version: 5.0.1 app_file: app.py pinned: false license: mit short_description: GALITA is a self-evolving generalist AI agent --- Made by: Mohammed Dahbani Anas Ezzakri Adam Lagssaibi Mouhcine Zahdi Mahmoud Mokrane # Gradio-hackathon : Generalist self-evolving ai agent inspired by Alita This is my team project for the gradio hackathon 2025 This Project is inspired by research paper : `https://arxiv.org/abs/2505.20286` # đ Structure du projet ```bash alita_agent/ â âââ main.py # Point d'entrĂ©e principal : exĂ©cute un TaskPrompt via le ManagerAgent âââ manager_agent.py # Logique de coordination centrale, il orchestre tous les composants âââ task_prompt.py # DĂ©finit la classe TaskPrompt, contenant la requĂȘte utilisateur initiale â âââ components/ # Contient tous les composants fonctionnels modulaires â âââ __init__.py # Rends le dossier importable comme un package â âââ script_generator.py # GĂ©nĂšre dynamiquement du code Python Ă partir d'un MCPToolSpec â âââ code_runner.py # ExĂ©cute un script dans un environnement isolĂ© et capture le rĂ©sultat â âââ mcp_registry.py # GĂšre l'enregistrement, la recherche et la rĂ©utilisation des outils MCP â âââ web_agent.py # Effectue des recherches web ou GitHub pour aider Ă la gĂ©nĂ©ration de code â âââ mcp_brainstormer.py # GĂ©nĂšre des MCPToolSpec en analysant la tĂąche utilisateur â âââ models/ # Contient les classes de donnĂ©es (dataclasses) utilisĂ©es dans tout le systĂšme â âââ __init__.py # Rends le dossier importable comme un package â âââ mcp_tool_spec.py # DĂ©finition de MCPToolSpec (dataclass) : nom, schĂ©mas I/O, description, pseudo-code, etc. â âââ mcp_execution_result.py # DĂ©finition de MCPExecutionResult (dataclass) : succĂšs, sortie, logs, erreur â âââ tests/ # Contient les tests unitaires pour chaque module â âââ __init__.py # Rends le dossier importable comme un package â âââ test_script_generator.py # Tests pour vĂ©rifier la gĂ©nĂ©ration correcte de code et d'environnements â âââ test_code_runner.py # Tests pour s'assurer de la bonne exĂ©cution des scripts et gestion d'erreurs â âââ test_mcp_registry.py # Tests de l'enregistrement, recherche et appel d'outils dans le registre MCP â âââ test_manager_agent.py # Tests d'intĂ©gration sur le comportement global du ManagerAgent â âââ README.md # Documentation du projet, instructions, pipeline, inspirations et lien vers le papier ``` # Project Pipeline #### đ Le flux complet avec vĂ©rification de l'existence 1. L'utilisateur envoie un TaskPrompt 2. Le Manager Agent demande au MCPBrainstormer : "Quels outils faudrait-il pour rĂ©soudre cette tĂąche ?" 3. Le Brainstormer propose une ou plusieurs specs (MCPToolSpec) 4. Le Manager Agent consulte le MCPRegistry : "Ai-je dĂ©jĂ un outil enregistrĂ© dont le nom + I/O matchent cette spec ?" - Oui ? â rĂ©utilise l'outil existant - Non ? â il appel le web agent pour une recherche d'outils open-source pour implementer. Puis, le Manager prend la recherche et la donne a Brainstormer pour commencer la construction. #### đ Comment dĂ©tecter que l'outil existe dĂ©jĂ ? Par matching sur la spec MCPToolSpec : - Nom exact (ou identifiant unique comme un hash) - Ou plus intelligemment : - mĂȘme structure input_schema - mĂȘme output_schema - mĂȘmes rĂŽles ou description proche (avec embedding / vector search) ```python def check_existing_tool(spec: MCPToolSpec, registry: MCPRegistry) -> Optional[str]: for registered_spec in registry.list_tools(): if registered_spec.input_schema == spec.input_schema and \ registered_spec.output_schema == spec.output_schema: return registry.get_tool_endpoint(registered_spec.name) return None ``` #### đŹ Que fait l'agent s'il le trouve ? Il ne rĂ©gĂ©nĂšre rien : - Il ajoute l'appel de l'outil MCP existant dans son plan - Il formate l'entrĂ©e JSON - Il appelle POST /predict directement - Il utilise la rĂ©ponse dans la suite de son raisonnement #### đĄ Cas pratiques Differents cas et RĂ©action attendue de l'agent | Situation rĂ©elle | RĂ©action de l'agent | | ----------------------------------------- | ------------------------------------------------------------------------ | | L'outil `"SubtitleExtractor"` existe dĂ©jĂ | L'agent appelle directement l'endpoint | | Le spec est proche mais pas identique | L'agent peut quand mĂȘme le rĂ©utiliser (avec adaptation) | | L'outil existe mais a Ă©chouĂ© | L'agent peut **fallback** vers gĂ©nĂ©ration d'un nouvel outil MCP | | L'outil existe mais est obsolĂšte | Le Registry peut signaler une mise Ă jour ou dĂ©clencher une rĂ©gĂ©nĂ©ration | #### Fonctions attendues | Classe | MĂ©thode attendue | PrĂ©sente ? | Commentaire | | -------------------- | ------------------------------------------ | ---------- | ----------- | | `ManagerAgent` | `run_task(prompt)` | â | OK | | `MCPBrainstormer` | `brainstorm(prompt)` | â | OK | | `WebAgent` | `search_github`, `retrieve_readme` | â | OK | | `ScriptGenerator` | `generate_code`, `generate_env_script` | â | OK | | `CodeRunner` | `execute`, `setup_environment` | â | OK | | `MCPRegistry` | `register_tool`, `list_tools`, `call_tool` | â | OK | | `MCPExecutionResult` | attributs `success`, `output`, `logs` | â | OK | | `MCPToolSpec` | `name`, `input_schema`, etc. | â | OK | Ici Le ManagerAgent coordonne tout. Il dĂ©lĂšgue Ă : - MCPBrainstormer â pour gĂ©nĂ©rer des specs d'outils. - ScriptGenerator â pour gĂ©nĂ©rer du code. - CodeRunner â pour tester le code. - WebAgent â pour rĂ©cupĂ©rer du contexte externe. - MCPRegistry â pour enregistrer et rĂ©utiliser les outils.  ```sh plantuml -tsvg README.md ```