moderation.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import logging
  2. from typing import Tuple
  3. from core.entities.application_entities import AppOrchestrationConfigEntity
  4. from core.moderation.base import ModerationAction, ModerationException
  5. from core.moderation.factory import ModerationFactory
  6. logger = logging.getLogger(__name__)
  7. class ModerationFeature:
  8. def check(self, app_id: str,
  9. tenant_id: str,
  10. app_orchestration_config_entity: AppOrchestrationConfigEntity,
  11. inputs: dict,
  12. query: str) -> Tuple[bool, dict, str]:
  13. """
  14. Process sensitive_word_avoidance.
  15. :param app_id: app id
  16. :param tenant_id: tenant id
  17. :param app_orchestration_config_entity: app orchestration config entity
  18. :param inputs: inputs
  19. :param query: query
  20. :return:
  21. """
  22. if not app_orchestration_config_entity.sensitive_word_avoidance:
  23. return False, inputs, query
  24. sensitive_word_avoidance_config = app_orchestration_config_entity.sensitive_word_avoidance
  25. moderation_type = sensitive_word_avoidance_config.type
  26. moderation_factory = ModerationFactory(
  27. name=moderation_type,
  28. app_id=app_id,
  29. tenant_id=tenant_id,
  30. config=sensitive_word_avoidance_config.config
  31. )
  32. moderation_result = moderation_factory.moderation_for_inputs(inputs, query)
  33. if not moderation_result.flagged:
  34. return False, inputs, query
  35. if moderation_result.action == ModerationAction.DIRECT_OUTPUT:
  36. raise ModerationException(moderation_result.preset_response)
  37. elif moderation_result.action == ModerationAction.OVERRIDED:
  38. inputs = moderation_result.inputs
  39. query = moderation_result.query
  40. return True, inputs, query