factory.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from typing import Optional
  2. from core.extension.extensible import ExtensionModule
  3. from extensions.ext_code_based_extension import code_based_extension
  4. class ExternalDataToolFactory:
  5. def __init__(self, name: str, tenant_id: str, app_id: str, variable: str, config: dict) -> None:
  6. extension_class = code_based_extension.extension_class(ExtensionModule.EXTERNAL_DATA_TOOL, name)
  7. self.__extension_instance = extension_class(
  8. tenant_id=tenant_id,
  9. app_id=app_id,
  10. variable=variable,
  11. config=config
  12. )
  13. @classmethod
  14. def validate_config(cls, name: str, tenant_id: str, config: dict) -> None:
  15. """
  16. Validate the incoming form config data.
  17. :param name: the name of external data tool
  18. :param tenant_id: the id of workspace
  19. :param config: the form config data
  20. :return:
  21. """
  22. code_based_extension.validate_form_schema(ExtensionModule.EXTERNAL_DATA_TOOL, name, config)
  23. extension_class = code_based_extension.extension_class(ExtensionModule.EXTERNAL_DATA_TOOL, name)
  24. extension_class.validate_config(tenant_id, config)
  25. def query(self, inputs: dict, query: Optional[str] = None) -> str:
  26. """
  27. Query the external data tool.
  28. :param inputs: user inputs
  29. :param query: the query of chat app
  30. :return: the tool query result
  31. """
  32. return self.__extension_instance.query(inputs, query)