diff --git a/lib/crewai/src/crewai/tools/structured_tool.py b/lib/crewai/src/crewai/tools/structured_tool.py index 8ecba85496..f9ed0dbd15 100644 --- a/lib/crewai/src/crewai/tools/structured_tool.py +++ b/lib/crewai/src/crewai/tools/structured_tool.py @@ -58,6 +58,8 @@ def _format_tool_output_for_agent(tool: Any, raw_result: Any) -> str: result_schema = getattr(tool, "result_schema", None) if not (isinstance(result_schema, type) and issubclass(result_schema, BaseModel)): + if isinstance(raw_result, (dict, list)): + return json.dumps(raw_result, default=str) return str(raw_result) try: @@ -75,11 +77,13 @@ def _format_tool_output_for_agent(tool: Any, raw_result: Any) -> str: f"Failed to validate or serialize output from tool " f"'{getattr(tool, 'name', '')}' using result_schema " f"'{result_schema.__name__}': {exc.__class__.__name__}. " - "Falling back to str(raw_result)." + "Falling back to JSON for dict/list, otherwise str(raw_result)." ), RuntimeWarning, stacklevel=2, ) + if isinstance(raw_result, (dict, list)): + return json.dumps(raw_result, default=str) return str(raw_result)