factory.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from core.extension.extensible import ExtensionModule
  2. from core.moderation.base import Moderation, ModerationInputsResult, ModerationOutputsResult
  3. from extensions.ext_code_based_extension import code_based_extension
  4. class ModerationFactory:
  5. __extension_instance: Moderation
  6. def __init__(self, name: str, app_id: str, tenant_id: str, config: dict) -> None:
  7. extension_class = code_based_extension.extension_class(ExtensionModule.MODERATION, name)
  8. self.__extension_instance = extension_class(app_id, tenant_id, config)
  9. @classmethod
  10. def validate_config(cls, name: str, tenant_id: str, config: dict) -> None:
  11. """
  12. Validate the incoming form config data.
  13. :param name: the name of extension
  14. :param tenant_id: the id of workspace
  15. :param config: the form config data
  16. :return:
  17. """
  18. code_based_extension.validate_form_schema(ExtensionModule.MODERATION, name, config)
  19. extension_class = code_based_extension.extension_class(ExtensionModule.MODERATION, name)
  20. extension_class.validate_config(tenant_id, config)
  21. def moderation_for_inputs(self, inputs: dict, query: str = "") -> ModerationInputsResult:
  22. """
  23. Moderation for inputs.
  24. After the user inputs, this method will be called to perform sensitive content review
  25. on the user inputs and return the processed results.
  26. :param inputs: user inputs
  27. :param query: query string (required in chat app)
  28. :return:
  29. """
  30. return self.__extension_instance.moderation_for_inputs(inputs, query)
  31. def moderation_for_outputs(self, text: str) -> ModerationOutputsResult:
  32. """
  33. Moderation for outputs.
  34. When LLM outputs content, the front end will pass the output content (may be segmented)
  35. to this method for sensitive content review, and the output content will be shielded if the review fails.
  36. :param text: LLM output content
  37. :return:
  38. """
  39. return self.__extension_instance.moderation_for_outputs(text)