| import logging |
|
|
| from langchain.tools import BaseTool |
|
|
| from src.config import get_app_config |
| from src.reflection import resolve_variable |
| from src.tools.builtins import ask_clarification_tool, present_file_tool, task_tool, view_image_tool |
|
|
| logger = logging.getLogger(__name__) |
|
|
| BUILTIN_TOOLS = [ |
| present_file_tool, |
| ask_clarification_tool, |
| ] |
|
|
| SUBAGENT_TOOLS = [ |
| task_tool, |
| |
| ] |
|
|
|
|
| def get_available_tools( |
| groups: list[str] | None = None, |
| include_mcp: bool = True, |
| model_name: str | None = None, |
| subagent_enabled: bool = False, |
| ) -> list[BaseTool]: |
| """Get all available tools from config. |
| |
| Note: MCP tools should be initialized at application startup using |
| `initialize_mcp_tools()` from src.mcp module. |
| |
| Args: |
| groups: Optional list of tool groups to filter by. |
| include_mcp: Whether to include tools from MCP servers (default: True). |
| model_name: Optional model name to determine if vision tools should be included. |
| subagent_enabled: Whether to include subagent tools (task, task_status). |
| |
| Returns: |
| List of available tools. |
| """ |
| config = get_app_config() |
| loaded_tools = [resolve_variable(tool.use, BaseTool) for tool in config.tools if groups is None or tool.group in groups] |
|
|
| |
| |
| |
| |
| |
| mcp_tools = [] |
| if include_mcp: |
| try: |
| from src.config.extensions_config import ExtensionsConfig |
| from src.mcp.cache import get_cached_mcp_tools |
|
|
| extensions_config = ExtensionsConfig.from_file() |
| if extensions_config.get_enabled_mcp_servers(): |
| mcp_tools = get_cached_mcp_tools() |
| if mcp_tools: |
| logger.info(f"Using {len(mcp_tools)} cached MCP tool(s)") |
| except ImportError: |
| logger.warning("MCP module not available. Install 'langchain-mcp-adapters' package to enable MCP tools.") |
| except Exception as e: |
| logger.error(f"Failed to get cached MCP tools: {e}") |
|
|
| |
| builtin_tools = BUILTIN_TOOLS.copy() |
|
|
| |
| if subagent_enabled: |
| builtin_tools.extend(SUBAGENT_TOOLS) |
| logger.info("Including subagent tools (task)") |
|
|
| |
| if model_name is None and config.models: |
| model_name = config.models[0].name |
|
|
| |
| model_config = config.get_model_config(model_name) if model_name else None |
| if model_config is not None and model_config.supports_vision: |
| builtin_tools.append(view_image_tool) |
| logger.info(f"Including view_image_tool for model '{model_name}' (supports_vision=True)") |
|
|
| return loaded_tools + builtin_tools + mcp_tools |
|
|