@@ -460,6 +460,7 @@ if (SENTRY_URL := env.str('SENTRY_URL', '')) and RELEASE and ENVIRONMENT: 'PromptLengthExceeded', 'InvalidParameterError', 'UnsupportedSize', + 'OutputSensitiveImageContentError' ], ) @@ -779,11 +779,15 @@ msgstr "Не найдено лицо на картинке. Попробуйте msgid "The input image may contain real person." msgstr "Загруженное изображение может содержать реального человека." -#: ml_model/exceptions.py:190 +#: ml_model/exceptions.py:186 +msgid "The generated image may contain private or prohibited content" +msgstr "Готовое изображение может содержать приватный или запрещённый контент" + +#: ml_model/exceptions.py:195 msgid "not specified" msgstr "не указана" -#: ml_model/exceptions.py:192 +#: ml_model/exceptions.py:197 #, python-format msgid "" "Version \"%(version)s\" is not available. Available versions: " @@ -11,9 +11,9 @@ from messages.services.message_service import MessageService from ml_model.exceptions import ( FileExtensionNotSupported, GenerationException, - NSFWDetectedException, RealPersonDetectedError, RequestBlocked, + OutputSensitiveImageContentError, ) from poller.models import Proxy from tools.chats.domain import RawSSEChunk @@ -364,7 +364,7 @@ class BytedanceModelArkAdapter: raise GenerationException from exc if error_code := data.get('error', {}).get('code', ''): if error_code == 'OutputImageSensitiveContentDetected': - raise NSFWDetectedException + raise OutputSensitiveImageContentError if image_data := data.get('data'): urls = [item.get('url') for item in image_data if isinstance(item, dict) and item.get('url')] @@ -181,6 +181,11 @@ class RealPersonDetectedError(Exception): return _('The input image may contain real person.') +class OutputSensitiveImageContentError(Exception): + def __str__(self) -> str: + return _('The generated image may contain private or prohibited content') + + class ModelVersionNotAvailable(Exception): def __init__(self, version: str | None, available_versions: Iterable[str]) -> None: self.version = version @@ -31,6 +31,7 @@ from ml_model.exceptions import ( PaidPlanRequiredError, PromptLengthExceeded, RequestBlocked, + OutputSensitiveImageContentError, TemplateNotFound, TemplateUnknownException, UnrecognizedFileError, @@ -182,6 +183,7 @@ class MessagesAPIView(APIView): UnrecognizedFileError, InvalidParameterError, ModelVersionNotAvailable, + OutputSensitiveImageContentError, ) as exc: return Response({'detail': f'{exc}'}, status=HTTP_400_BAD_REQUEST) except TemplateNotFound as exc: @@ -29,6 +29,7 @@ from ml_model.exceptions import ( PromptLengthExceeded, RealPersonDetectedError, RequestBlocked, + OutputSensitiveImageContentError, ServiceHighDemandError, UnrecognizedFileError, UnsupportedSize, @@ -206,6 +207,7 @@ class MediaAPIView(APIView): UnrecognizedFileError, FaceNotFoundError, RealPersonDetectedError, + OutputSensitiveImageContentError, ) as exc: return Response({'detail': f'{exc}'}, status=HTTP_400_BAD_REQUEST) except Exception as exc: