from abc import ABC, abstractmethod from typing import Optional from core.extension.extensible import Extensible, ExtensionModule class 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