Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions lib/crewai/src/crewai/tools/tool_usage.py
Original file line number Diff line number Diff line change
Expand Up @@ -849,9 +849,10 @@ def _original_tool_calling(
return ToolUsageError(f"{I18N_DEFAULT.errors('tool_arguments_error')}")

if not isinstance(arguments, dict):
error = ToolUsageError(f"{I18N_DEFAULT.errors('tool_arguments_error')}")
if raise_error:
raise
return ToolUsageError(f"{I18N_DEFAULT.errors('tool_arguments_error')}")
raise error
return error

return ToolCalling(
tool_name=sanitize_tool_name(tool.name),
Expand Down
26 changes: 25 additions & 1 deletion lib/crewai/tests/tools/test_tool_usage.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
)
from crewai.tools import BaseTool
from crewai.tools.tool_calling import ToolCalling
from crewai.tools.tool_usage import ToolUsage
from crewai.tools.tool_usage import ToolUsage, ToolUsageError
from crewai.utilities.tool_utils import execute_tool_and_check_finality
from pydantic import BaseModel, Field
import pytest
Expand Down Expand Up @@ -467,6 +467,30 @@ def test_validate_tool_input_invalid_input():
assert arguments == {}


def test_original_tool_calling_raises_tool_usage_error_for_non_dict_arguments():
class TestTool(BaseTool):
name: str = "Test Tool"
description: str = "A test tool"

def _run(self) -> str:
return "test result"

tool_usage = ToolUsage(
tools_handler=MagicMock(),
tools=[TestTool()],
task=MagicMock(),
function_calling_llm=None,
agent=MagicMock(),
action=MagicMock(tool="test_tool", tool_input="[]"),
)
tool_usage._validate_tool_input = MagicMock(return_value=[])

with pytest.raises(ToolUsageError) as exc_info:
tool_usage._original_tool_calling("Action: test_tool", raise_error=True)

assert "not a valid key, value dictionary" in str(exc_info.value)


def test_validate_tool_input_complex_structure():
tool_usage = ToolUsage(
tools_handler=MagicMock(),
Expand Down