openai_moderation.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. }
  38. moderation_categories_scores = {
  39. "harassment": 1.0,
  40. "harassment/threatening": 1.0,
  41. "hate": 1.0,
  42. "hate/threatening": 1.0,
  43. "self-harm": 1.0,
  44. "self-harm/instructions": 1.0,
  45. "self-harm/intent": 1.0,
  46. "sexual": 1.0,
  47. "sexual/minors": 1.0,
  48. "violence": 1.0,
  49. "violence/graphic": 1.0,
  50. }
  51. result.append(
  52. Moderation(
  53. flagged=True,
  54. categories=Categories(**moderation_categories),
  55. category_scores=CategoryScores(**moderation_categories_scores),
  56. )
  57. )
  58. else:
  59. moderation_categories = {
  60. "harassment": False,
  61. "harassment/threatening": False,
  62. "hate": False,
  63. "hate/threatening": False,
  64. "self-harm": False,
  65. "self-harm/instructions": False,
  66. "self-harm/intent": False,
  67. "sexual": False,
  68. "sexual/minors": False,
  69. "violence": False,
  70. "violence/graphic": False,
  71. }
  72. moderation_categories_scores = {
  73. "harassment": 0.0,
  74. "harassment/threatening": 0.0,
  75. "hate": 0.0,
  76. "hate/threatening": 0.0,
  77. "self-harm": 0.0,
  78. "self-harm/instructions": 0.0,
  79. "self-harm/intent": 0.0,
  80. "sexual": 0.0,
  81. "sexual/minors": 0.0,
  82. "violence": 0.0,
  83. "violence/graphic": 0.0,
  84. }
  85. result.append(
  86. Moderation(
  87. flagged=False,
  88. categories=Categories(**moderation_categories),
  89. category_scores=CategoryScores(**moderation_categories_scores),
  90. )
  91. )
  92. return ModerationCreateResponse(id="shiroii kuloko", model=model, results=result)