diff --git a/api/core/tools/tool/api_tool.py b/api/core/tools/tool/api_tool.py index fa7e7567dd..54e2f41019 100644 --- a/api/core/tools/tool/api_tool.py +++ b/api/core/tools/tool/api_tool.py @@ -9,7 +9,7 @@ import requests import core.helper.ssrf_proxy as ssrf_proxy from core.tools.entities.tool_bundle import ApiBasedToolBundle from core.tools.entities.tool_entities import ToolInvokeMessage -from core.tools.errors import ToolProviderCredentialValidationError +from core.tools.errors import ToolInvokeError, ToolParameterValidationError, ToolProviderCredentialValidationError from core.tools.tool.tool import Tool API_TOOL_DEFAULT_TIMEOUT = (10, 60) @@ -81,7 +81,7 @@ class ApiTool(Tool): needed_parameters = [parameter for parameter in self.api_bundle.parameters if parameter.required] for parameter in needed_parameters: if parameter.required and parameter.name not in parameters: - raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter.name}") + raise ToolParameterValidationError(f"Missing required parameter {parameter.name}") if parameter.default is not None and parameter.name not in parameters: parameters[parameter.name] = parameter.default @@ -94,7 +94,7 @@ class ApiTool(Tool): """ if isinstance(response, httpx.Response): if response.status_code >= 400: - raise ToolProviderCredentialValidationError(f"Request failed with status code {response.status_code}") + raise ToolInvokeError(f"Request failed with status code {response.status_code} and {response.text}") if not response.content: return 'Empty response from the tool, please check your parameters and try again.' try: @@ -107,7 +107,7 @@ class ApiTool(Tool): return response.text elif isinstance(response, requests.Response): if not response.ok: - raise ToolProviderCredentialValidationError(f"Request failed with status code {response.status_code}") + raise ToolInvokeError(f"Request failed with status code {response.status_code} and {response.text}") if not response.content: return 'Empty response from the tool, please check your parameters and try again.' try: @@ -139,7 +139,7 @@ class ApiTool(Tool): if parameter['name'] in parameters: value = parameters[parameter['name']] elif parameter['required']: - raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") + raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}") else: value = (parameter.get('schema', {}) or {}).get('default', '') path_params[parameter['name']] = value @@ -149,7 +149,7 @@ class ApiTool(Tool): if parameter['name'] in parameters: value = parameters[parameter['name']] elif parameter['required']: - raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") + raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}") else: value = (parameter.get('schema', {}) or {}).get('default', '') params[parameter['name']] = value @@ -159,7 +159,7 @@ class ApiTool(Tool): if parameter['name'] in parameters: value = parameters[parameter['name']] elif parameter['required']: - raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") + raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}") else: value = (parameter.get('schema', {}) or {}).get('default', '') cookies[parameter['name']] = value @@ -169,7 +169,7 @@ class ApiTool(Tool): if parameter['name'] in parameters: value = parameters[parameter['name']] elif parameter['required']: - raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") + raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}") else: value = (parameter.get('schema', {}) or {}).get('default', '') headers[parameter['name']] = value @@ -188,7 +188,7 @@ class ApiTool(Tool): # convert type body[name] = self._convert_body_property_type(property, parameters[name]) elif name in required: - raise ToolProviderCredentialValidationError( + raise ToolParameterValidationError( f"Missing required parameter {name} in operation {self.api_bundle.operation_id}" ) elif 'default' in property: