1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- from typing import Optional
- from core.tool.provider.base import BaseToolProvider
- from core.tool.provider.errors import ToolValidateFailedError
- from core.tool.serpapi_wrapper import OptimizedSerpAPIWrapper
- from models.tool import ToolProviderName
- class SerpAPIToolProvider(BaseToolProvider):
- def get_provider_name(self) -> ToolProviderName:
- """
- Returns the name of the provider.
- :return:
- """
- return ToolProviderName.SERPAPI
- def get_credentials(self, obfuscated: bool = False) -> Optional[dict]:
- """
- Returns the credentials for SerpAPI as a dictionary.
- :param obfuscated: obfuscate credentials if True
- :return:
- """
- tool_provider = self.get_provider(must_enabled=True)
- if not tool_provider:
- return None
- credentials = tool_provider.credentials
- if not credentials:
- return None
- if credentials.get('api_key'):
- credentials['api_key'] = self.decrypt_token(credentials.get('api_key'), obfuscated)
- return credentials
- def credentials_to_func_kwargs(self) -> Optional[dict]:
- """
- Returns the credentials function kwargs as a dictionary.
- :return:
- """
- credentials = self.get_credentials()
- if not credentials:
- return None
- return {
- 'serpapi_api_key': credentials.get('api_key')
- }
- def credentials_validate(self, credentials: dict):
- """
- Validates the given credentials.
- :param credentials:
- :return:
- """
- if 'api_key' not in credentials or not credentials.get('api_key'):
- raise ToolValidateFailedError("SerpAPI api_key is required.")
- api_key = credentials.get('api_key')
- try:
- OptimizedSerpAPIWrapper(serpapi_api_key=api_key).run(query='test')
- except Exception as e:
- raise ToolValidateFailedError("SerpAPI api_key is invalid. {}".format(e))
- def encrypt_credentials(self, credentials: dict) -> Optional[dict]:
- """
- Encrypts the given credentials.
- :param credentials:
- :return:
- """
- credentials['api_key'] = self.encrypt_token(credentials.get('api_key'))
- return credentials
|