|
@@ -8,6 +8,7 @@ from core.tools.errors import ToolProviderCredentialValidationError
|
|
|
|
|
|
import httpx
|
|
|
import requests
|
|
|
+import json
|
|
|
|
|
|
class ApiTool(Tool):
|
|
|
api_bundle: ApiBasedToolBundle
|
|
@@ -79,11 +80,29 @@ class ApiTool(Tool):
|
|
|
if isinstance(response, httpx.Response):
|
|
|
if response.status_code >= 400:
|
|
|
raise ToolProviderCredentialValidationError(f"Request failed with status code {response.status_code}")
|
|
|
- return response.text
|
|
|
+ if not response.content:
|
|
|
+ return 'Empty response from the tool, please check your parameters and try again.'
|
|
|
+ try:
|
|
|
+ response = response.json()
|
|
|
+ try:
|
|
|
+ return json.dumps(response, ensure_ascii=False)
|
|
|
+ except Exception as e:
|
|
|
+ return json.dumps(response)
|
|
|
+ except Exception as e:
|
|
|
+ return response.text
|
|
|
elif isinstance(response, requests.Response):
|
|
|
if not response.ok:
|
|
|
raise ToolProviderCredentialValidationError(f"Request failed with status code {response.status_code}")
|
|
|
- return response.text
|
|
|
+ if not response.content:
|
|
|
+ return 'Empty response from the tool, please check your parameters and try again.'
|
|
|
+ try:
|
|
|
+ response = response.json()
|
|
|
+ try:
|
|
|
+ return json.dumps(response, ensure_ascii=False)
|
|
|
+ except Exception as e:
|
|
|
+ return json.dumps(response)
|
|
|
+ except Exception as e:
|
|
|
+ return response.text
|
|
|
else:
|
|
|
raise ValueError(f'Invalid response type {type(response)}')
|
|
|
|