diff --git a/lib/crewai/pyproject.toml b/lib/crewai/pyproject.toml index f0fc0ba176..42f172c652 100644 --- a/lib/crewai/pyproject.toml +++ b/lib/crewai/pyproject.toml @@ -8,8 +8,8 @@ authors = [ ] requires-python = ">=3.10, <3.14" dependencies = [ - "crewai-core==1.15.3", - "crewai-cli==1.15.3", + "crewai-core==1.15.10", + "crewai-cli==1.15.10", # Core Dependencies "pydantic>=2.11.9,<2.13", "openai>=2.30.0,<3", @@ -38,7 +38,7 @@ dependencies = [ "tomli~=2.0.2", "json5~=0.10.0", "portalocker~=2.7.0", - "pydantic-settings>=2.10.1,<3", + "pydantic-settings>=2.14.2,<3", "httpx~=0.28.1", "mcp>=1.28.1,<2", "aiosqlite~=0.21.0", @@ -55,7 +55,7 @@ Repository = "https://github.com/crewAIInc/crewAI" [project.optional-dependencies] tools = [ - "crewai-tools==1.15.3", + "crewai-tools==1.15.10", ] embeddings = [ "tiktoken>=0.8.0,<0.13" @@ -78,8 +78,8 @@ qdrant = [ "qdrant-client[fastembed]~=1.14.3", ] aws = [ - "boto3~=1.42.90", - "aiobotocore~=3.5.0", + "boto3~=1.43.46", + "aiobotocore~=3.8.0", ] watson = [ "ibm-watsonx-ai~=1.3.39", @@ -91,8 +91,8 @@ litellm = [ "litellm>=1.84.0,<2", ] bedrock = [ - "boto3~=1.42.90", - "aiobotocore~=3.5.0", + "boto3~=1.43.46", + "aiobotocore~=3.8.0", ] google-genai = [ "google-genai~=1.65.0", diff --git a/lib/crewai/src/crewai/tools/tool_usage.py b/lib/crewai/src/crewai/tools/tool_usage.py index 764f82bd92..b0d983ff04 100644 --- a/lib/crewai/src/crewai/tools/tool_usage.py +++ b/lib/crewai/src/crewai/tools/tool_usage.py @@ -23,6 +23,13 @@ from crewai.events.types.tool_usage_events import ( ) from crewai.telemetry.telemetry import Telemetry from crewai.tools.structured_tool import CrewStructuredTool +from crewai.tools.tool_failure import ( + ToolFailure, + ToolFailureReason, + detect_tool_failure, + failure_from_exception, + reportable_failure, +) from crewai.tools.tool_calling import InstructorToolCalling, ToolCalling from crewai.utilities.agent_utils import ( get_tool_names, @@ -36,6 +43,7 @@ from crewai.utilities.string_utils import sanitize_tool_name if TYPE_CHECKING: from crewai.agents.agent_builder.base_agent import BaseAgent from crewai.agents.tools_handler import ToolsHandler + from crewai.crew import Crew from crewai.lite_agent import LiteAgent from crewai.llm import LLM from crewai.task import Task @@ -95,6 +103,7 @@ class ToolUsage: agent: BaseAgent | LiteAgent | None = None, action: Any = None, fingerprint_context: dict[str, str] | None = None, + crew: Crew | None = None, ) -> None: self._telemetry: Telemetry = Telemetry() self._run_attempts: int = 1 @@ -109,7 +118,14 @@ class ToolUsage: self.action = action self.function_calling_llm = function_calling_llm self.fingerprint_context = fingerprint_context or {} + self.crew = crew self.last_raw_result: Any = _RAW_RESULT_UNSET + self.last_failure: ToolFailure | None = None + """Failure reported by the most recent call, if any. + + Covers both tool-returned failures and framework-generated ones (a + stringified exception, a spent usage limit). + """ if ( self.function_calling_llm