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

Co-authored-by: OSS-MAOLONGDONG\kaihong <maolongdong@kaihong.com>
This commit is contained in:
Lance Mao 2024-03-19 18:17:12 +08:00 committed by GitHub
parent 8133ba16b1
commit 53d428907b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -9,7 +9,7 @@ import requests
import core.helper.ssrf_proxy as ssrf_proxy import core.helper.ssrf_proxy as ssrf_proxy
from core.tools.entities.tool_bundle import ApiBasedToolBundle from core.tools.entities.tool_bundle import ApiBasedToolBundle
from core.tools.entities.tool_entities import ToolInvokeMessage 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 from core.tools.tool.tool import Tool
API_TOOL_DEFAULT_TIMEOUT = (10, 60) 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] needed_parameters = [parameter for parameter in self.api_bundle.parameters if parameter.required]
for parameter in needed_parameters: for parameter in needed_parameters:
if parameter.required and parameter.name not in 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: if parameter.default is not None and parameter.name not in parameters:
parameters[parameter.name] = parameter.default parameters[parameter.name] = parameter.default
@ -94,7 +94,7 @@ class ApiTool(Tool):
""" """
if isinstance(response, httpx.Response): if isinstance(response, httpx.Response):
if response.status_code >= 400: 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: if not response.content:
return 'Empty response from the tool, please check your parameters and try again.' return 'Empty response from the tool, please check your parameters and try again.'
try: try:
@ -107,7 +107,7 @@ class ApiTool(Tool):
return response.text return response.text
elif isinstance(response, requests.Response): elif isinstance(response, requests.Response):
if not response.ok: 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: if not response.content:
return 'Empty response from the tool, please check your parameters and try again.' return 'Empty response from the tool, please check your parameters and try again.'
try: try:
@ -139,7 +139,7 @@ class ApiTool(Tool):
if parameter['name'] in parameters: if parameter['name'] in parameters:
value = parameters[parameter['name']] value = parameters[parameter['name']]
elif parameter['required']: elif parameter['required']:
raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}")
else: else:
value = (parameter.get('schema', {}) or {}).get('default', '') value = (parameter.get('schema', {}) or {}).get('default', '')
path_params[parameter['name']] = value path_params[parameter['name']] = value
@ -149,7 +149,7 @@ class ApiTool(Tool):
if parameter['name'] in parameters: if parameter['name'] in parameters:
value = parameters[parameter['name']] value = parameters[parameter['name']]
elif parameter['required']: elif parameter['required']:
raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}")
else: else:
value = (parameter.get('schema', {}) or {}).get('default', '') value = (parameter.get('schema', {}) or {}).get('default', '')
params[parameter['name']] = value params[parameter['name']] = value
@ -159,7 +159,7 @@ class ApiTool(Tool):
if parameter['name'] in parameters: if parameter['name'] in parameters:
value = parameters[parameter['name']] value = parameters[parameter['name']]
elif parameter['required']: elif parameter['required']:
raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}")
else: else:
value = (parameter.get('schema', {}) or {}).get('default', '') value = (parameter.get('schema', {}) or {}).get('default', '')
cookies[parameter['name']] = value cookies[parameter['name']] = value
@ -169,7 +169,7 @@ class ApiTool(Tool):
if parameter['name'] in parameters: if parameter['name'] in parameters:
value = parameters[parameter['name']] value = parameters[parameter['name']]
elif parameter['required']: elif parameter['required']:
raise ToolProviderCredentialValidationError(f"Missing required parameter {parameter['name']}") raise ToolParameterValidationError(f"Missing required parameter {parameter['name']}")
else: else:
value = (parameter.get('schema', {}) or {}).get('default', '') value = (parameter.get('schema', {}) or {}).get('default', '')
headers[parameter['name']] = value headers[parameter['name']] = value
@ -188,7 +188,7 @@ class ApiTool(Tool):
# convert type # convert type
body[name] = self._convert_body_property_type(property, parameters[name]) body[name] = self._convert_body_property_type(property, parameters[name])
elif name in required: elif name in required:
raise ToolProviderCredentialValidationError( raise ToolParameterValidationError(
f"Missing required parameter {name} in operation {self.api_bundle.operation_id}" f"Missing required parameter {name} in operation {self.api_bundle.operation_id}"
) )
elif 'default' in property: elif 'default' in property: