| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | from abc import ABC, abstractmethodfrom typing import Optionalfrom core.extension.extensible import Extensible, ExtensionModuleclass ExternalDataTool(Extensible, ABC):    """    The base class of external data tool.    """    module: ExtensionModule = ExtensionModule.EXTERNAL_DATA_TOOL    app_id: str    """the id of app"""    variable: str    """the tool variable name of app tool"""    def __init__(self, tenant_id: str, app_id: str, variable: str, config: Optional[dict] = None) -> None:        super().__init__(tenant_id, config)        self.app_id = app_id        self.variable = variable    @classmethod    @abstractmethod    def validate_config(cls, tenant_id: str, config: dict) -> None:        """        Validate the incoming form config data.        :param tenant_id: the id of workspace        :param config: the form config data        :return:        """        raise NotImplementedError    @abstractmethod    def query(self, inputs: dict, query: Optional[str] = None) -> str:        """        Query the external data tool.        :param inputs: user inputs        :param query: the query of chat app        :return: the tool query result        """        raise NotImplementedError
 |