resolve_tools() from praisonai.templates.tool_override delegates name resolution to the canonical ToolResolver. It preserves the registry= override layer and the PRAISONAI_ALLOW_TEMPLATE_TOOLS security gate for template-dir tools.py autoload, then falls back to name-variation matching (lowercase, _/-, _tool, Tool suffix) when the canonical lookup misses.
Tools previously invisible to recipe/template resolution are now reachable:
- Wrapper
ToolRegistry.register_function()registrations - Tools from the
praisonai-toolsexternal package - Core SDK plugin-registered tools
Code Usage
resolve_tools() no longer implicitly loads <template_dir>/tools.py unless PRAISONAI_ALLOW_TEMPLATE_TOOLS=1. See Tools Override → Security for details.
Resolver memoisation
Repeated calls toresolve_tools() over the same registry object share one underlying ToolResolver instead of rebuilding it per call.
resolve_tools() once per agent/step over the same registry, so the memoised resolver preserves its per-instance caches and skips re-executing local tools.py on every agent build.
When the cache is skipped
Passingregistry=None (the default) builds a fresh registry per call, whose id() is never stable across calls, so resolve_tools() skips memoisation — one call, one resolver. Pass an explicit registry= to keep the memoisation benefit across a workflow build.
Cache size
The memo cache is a bounded LRU with capacity8. In a long-running process (multi-tenant gateway, hot-reload dev server, workflow batch runner) that builds many workflows over distinct registries, least-recently-used resolvers are evicted so memory does not grow with the number of builds.
Related
Canonical resolution chain:
resolve_tools() is a thin wrapper around ToolResolver with a registry-override layer on top. See Templates Module → Tool Override for programmatic usage.Alternative Tool Resolution: For YAML-based tool resolution with per-agent isolation, see YAML Tools - Tool Resolver which uses the praisonai.tool_resolver module directly.CLI flag (--tools name1,name2) also goes through praisonai.tool_resolver.ToolResolver (PR #1857). Recipe and template tools: lists share the same five-source chain as of PR #2059.
