openai_moderation.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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(
  10. self: Moderations,
  11. *,
  12. input: Union[str, list[str]],
  13. model: Union[str, Literal["text-moderation-latest", "text-moderation-stable"]] | NotGiven = NOT_GIVEN,
  14. **kwargs: Any,
  15. ) -> ModerationCreateResponse:
  16. if isinstance(input, str):
  17. input = [input]
  18. if not re.match(r"^(https?):\/\/[^\s\/$.?#].[^\s]*$", str(self._client.base_url)):
  19. raise InvokeAuthorizationError("Invalid base url")
  20. if len(self._client.api_key) < 18:
  21. raise InvokeAuthorizationError("Invalid API key")
  22. for text in input:
  23. result = []
  24. if "kill" in text:
  25. moderation_categories = {
  26. "harassment": False,
  27. "harassment/threatening": False,
  28. "hate": False,
  29. "hate/threatening": False,
  30. "self-harm": False,
  31. "self-harm/instructions": False,
  32. "self-harm/intent": False,
  33. "sexual": False,
  34. "sexual/minors": False,
  35. "violence": False,
  36. "violence/graphic": False,
  37. "illicit": False,
  38. "illicit/violent": False,
  39. }
  40. moderation_categories_scores = {
  41. "harassment": 1.0,
  42. "harassment/threatening": 1.0,
  43. "hate": 1.0,
  44. "hate/threatening": 1.0,
  45. "self-harm": 1.0,
  46. "self-harm/instructions": 1.0,
  47. "self-harm/intent": 1.0,
  48. "sexual": 1.0,
  49. "sexual/minors": 1.0,
  50. "violence": 1.0,
  51. "violence/graphic": 1.0,
  52. "illicit": 1.0,
  53. "illicit/violent": 1.0,
  54. }
  55. category_applied_input_types = {
  56. "sexual": ["text", "image"],
  57. "hate": ["text"],
  58. "harassment": ["text"],
  59. "self-harm": ["text", "image"],
  60. "sexual/minors": ["text"],
  61. "hate/threatening": ["text"],
  62. "violence/graphic": ["text", "image"],
  63. "self-harm/intent": ["text", "image"],
  64. "self-harm/instructions": ["text", "image"],
  65. "harassment/threatening": ["text"],
  66. "violence": ["text", "image"],
  67. "illicit": ["text"],
  68. "illicit/violent": ["text"],
  69. }
  70. result.append(
  71. Moderation(
  72. flagged=True,
  73. categories=Categories(**moderation_categories),
  74. category_scores=CategoryScores(**moderation_categories_scores),
  75. category_applied_input_types=category_applied_input_types,
  76. )
  77. )
  78. else:
  79. moderation_categories = {
  80. "harassment": False,
  81. "harassment/threatening": False,
  82. "hate": False,
  83. "hate/threatening": False,
  84. "self-harm": False,
  85. "self-harm/instructions": False,
  86. "self-harm/intent": False,
  87. "sexual": False,
  88. "sexual/minors": False,
  89. "violence": False,
  90. "violence/graphic": False,
  91. "illicit": False,
  92. "illicit/violent": False,
  93. }
  94. moderation_categories_scores = {
  95. "harassment": 0.0,
  96. "harassment/threatening": 0.0,
  97. "hate": 0.0,
  98. "hate/threatening": 0.0,
  99. "self-harm": 0.0,
  100. "self-harm/instructions": 0.0,
  101. "self-harm/intent": 0.0,
  102. "sexual": 0.0,
  103. "sexual/minors": 0.0,
  104. "violence": 0.0,
  105. "violence/graphic": 0.0,
  106. "illicit": 0.0,
  107. "illicit/violent": 0.0,
  108. }
  109. category_applied_input_types = {
  110. "sexual": ["text", "image"],
  111. "hate": ["text"],
  112. "harassment": ["text"],
  113. "self-harm": ["text", "image"],
  114. "sexual/minors": ["text"],
  115. "hate/threatening": ["text"],
  116. "violence/graphic": ["text", "image"],
  117. "self-harm/intent": ["text", "image"],
  118. "self-harm/instructions": ["text", "image"],
  119. "harassment/threatening": ["text"],
  120. "violence": ["text", "image"],
  121. "illicit": ["text"],
  122. "illicit/violent": ["text"],
  123. }
  124. result.append(
  125. Moderation(
  126. flagged=False,
  127. categories=Categories(**moderation_categories),
  128. category_scores=CategoryScores(**moderation_categories_scores),
  129. category_applied_input_types=category_applied_input_types,
  130. )
  131. )
  132. return ModerationCreateResponse(id="shiroii kuloko", model=model, results=result)