mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-09 08:08:32 +00:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
"""Tools handler for managing tool execution and caching."""
|
|
|
|
import json
|
|
|
|
from crewai.agents.cache.cache_handler import CacheHandler
|
|
from crewai.tools.cache_tools.cache_tools import CacheTools
|
|
from crewai.tools.tool_calling import InstructorToolCalling, ToolCalling
|
|
|
|
|
|
class ToolsHandler:
|
|
"""Callback handler for tool usage.
|
|
|
|
Attributes:
|
|
last_used_tool: The most recently used tool calling instance.
|
|
cache: Optional cache handler for storing tool outputs.
|
|
"""
|
|
|
|
def __init__(self, cache: CacheHandler | None = None) -> None:
|
|
"""Initialize the callback handler.
|
|
|
|
Args:
|
|
cache: Optional cache handler for storing tool outputs.
|
|
"""
|
|
self.cache: CacheHandler | None = cache
|
|
self.last_used_tool: ToolCalling | InstructorToolCalling | None = None
|
|
|
|
def on_tool_use(
|
|
self,
|
|
calling: ToolCalling | InstructorToolCalling,
|
|
output: str,
|
|
should_cache: bool = True,
|
|
) -> None:
|
|
"""Run when tool ends running.
|
|
|
|
Args:
|
|
calling: The tool calling instance.
|
|
output: The output from the tool execution.
|
|
should_cache: Whether to cache the tool output.
|
|
"""
|
|
self.last_used_tool = calling
|
|
if self.cache and should_cache and calling.tool_name != CacheTools().name:
|
|
# Convert arguments to string for cache
|
|
input_str = ""
|
|
if calling.arguments:
|
|
if isinstance(calling.arguments, dict):
|
|
input_str = json.dumps(calling.arguments)
|
|
else:
|
|
input_str = str(calling.arguments)
|
|
|
|
self.cache.add(
|
|
tool=calling.tool_name,
|
|
input=input_str,
|
|
output=output,
|
|
)
|