Spaces:
Configuration error
Configuration error
| """ | |
| tool_forge.py — S-TOOL-SMITHING: Agentic Tool Evolution. | |
| Permette all'agente di creare, testare e registrare nuovi tool permanentemente. | |
| Trasforma l'agente da semplice utente a creatore di strumenti. | |
| """ | |
| import os | |
| import json | |
| import logging | |
| import importlib.util | |
| from typing import Dict, Any, Optional | |
| _logger = logging.getLogger("agente_ai.tool_forge") | |
| class ToolForge: | |
| def __init__(self, evolved_tools_dir: str = "backend/tools/evolved"): | |
| self.evolved_tools_dir = evolved_tools_dir | |
| os.makedirs(self.evolved_tools_dir, exist_ok=True) | |
| # Crea __init__.py se non esiste per rendere la cartella un package | |
| init_file = os.path.join(self.evolved_tools_dir, "__init__.py") | |
| if not os.path.exists(init_file): | |
| with open(init_file, "w") as f: | |
| f.write("# Evolved tools package\n") | |
| async def forge_tool(self, name: str, code: str, description: str) -> bool: | |
| """ | |
| Crea un nuovo tool, lo salva e tenta di caricarlo per verificarne la validità. | |
| """ | |
| file_path = os.path.join(self.evolved_tools_dir, f"{name}.py") | |
| # Struttura standard del tool evolved | |
| tool_template = f'"""\nAuto-generated tool: {name}\nDescription: {description}\n"""\n\n' | |
| tool_template += code | |
| tool_template += f'\n\n# Metadata per il registry\nTOOL_METADATA = {{\n "name": "{name}",\n "description": "{description}",\n "type": "evolved"\n}}\n' | |
| try: | |
| with open(file_path, "w") as f: | |
| f.write(tool_template) | |
| _logger.info(f"[ToolForge] Nuovo tool '{name}' forgiato con successo in {file_path}") | |
| return True | |
| except Exception as e: | |
| _logger.error(f"[ToolForge] Errore durante la creazione del tool {name}: {e}") | |
| return False | |
| def list_evolved_tools(self) -> Dict[str, str]: | |
| """Elenca tutti i tool evoluti creati dall'agente.""" | |
| tools = {} | |
| for f in os.listdir(self.evolved_tools_dir): | |
| if f.endswith(".py") and f != "__init__.py": | |
| name = f[:-3] | |
| tools[name] = os.path.join(self.evolved_tools_dir, f) | |
| return tools | |
| # Singleton per uso globale | |
| tool_forge = ToolForge() | |