openai_moderation.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import re
  2. from typing import Any, Literal, Union
  3. from openai._types import NOT_GIVEN, NotGiven
  4. from openai.resources.moderations import Moderations
  5. from openai.types import ModerationCreateResponse
  6. from openai.types.moderation import Categories, CategoryScores, Moderation
  7. from core.model_runtime.errors.invoke import InvokeAuthorizationError
  8. class MockModerationClass:
  9. def moderation_create(self: Moderations,*,
  10. input: Union[str, list[str]],
  11. model: Union[str, Literal["text-moderation-latest", "text-moderation-stable"]] | NotGiven = NOT_GIVEN,
  12. **kwargs: Any
  13. ) -> ModerationCreateResponse:
  14. if isinstance(input, str):
  15. input = [input]
  16. if not re.match(r'^(https?):\/\/[^\s\/$.?#].[^\s]*$', self._client.base_url.__str__()):
  17. raise InvokeAuthorizationError('Invalid base url')
  18. if len(self._client.api_key) < 18:
  19. raise InvokeAuthorizationError('Invalid API key')
  20. for text in input:
  21. result = []
  22. if 'kill' in text:
  23. moderation_categories = {
  24. 'harassment': False, 'harassment/threatening': False, 'hate': False, 'hate/threatening': False,
  25. 'self-harm': False, 'self-harm/instructions': False, 'self-harm/intent': False, 'sexual': False,
  26. 'sexual/minors': False, 'violence': False, 'violence/graphic': False
  27. }
  28. moderation_categories_scores = {
  29. 'harassment': 1.0, 'harassment/threatening': 1.0, 'hate': 1.0, 'hate/threatening': 1.0,
  30. 'self-harm': 1.0, 'self-harm/instructions': 1.0, 'self-harm/intent': 1.0, 'sexual': 1.0,
  31. 'sexual/minors': 1.0, 'violence': 1.0, 'violence/graphic': 1.0
  32. }
  33. result.append(Moderation(
  34. flagged=True,
  35. categories=Categories(**moderation_categories),
  36. category_scores=CategoryScores(**moderation_categories_scores)
  37. ))
  38. else:
  39. moderation_categories = {
  40. 'harassment': False, 'harassment/threatening': False, 'hate': False, 'hate/threatening': False,
  41. 'self-harm': False, 'self-harm/instructions': False, 'self-harm/intent': False, 'sexual': False,
  42. 'sexual/minors': False, 'violence': False, 'violence/graphic': False
  43. }
  44. moderation_categories_scores = {
  45. 'harassment': 0.0, 'harassment/threatening': 0.0, 'hate': 0.0, 'hate/threatening': 0.0,
  46. 'self-harm': 0.0, 'self-harm/instructions': 0.0, 'self-harm/intent': 0.0, 'sexual': 0.0,
  47. 'sexual/minors': 0.0, 'violence': 0.0, 'violence/graphic': 0.0
  48. }
  49. result.append(Moderation(
  50. flagged=False,
  51. categories=Categories(**moderation_categories),
  52. category_scores=CategoryScores(**moderation_categories_scores)
  53. ))
  54. return ModerationCreateResponse(
  55. id='shiroii kuloko',
  56. model=model,
  57. results=result
  58. )