Bladeren bron

fix incorrect exception raised by api tool which leads to incorrect L… (#2886)

Co-authored-by: OSS-MAOLONGDONG\kaihong <maolongdong@kaihong.com>
Lance Mao 1 jaar geleden
bovenliggende
commit
53d428907b
1 gewijzigde bestanden met toevoegingen van 9 en 9 verwijderingen
  1. 9 9
      api/core/tools/tool/api_tool.py

+ 9 - 9
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: