@@ -460,7 +460,8 @@ if (SENTRY_URL := env.str('SENTRY_URL', '')) and RELEASE and ENVIRONMENT: 'PromptLengthExceeded', 'InvalidParameterError', 'UnsupportedSize', - 'OutputSensitiveImageContentError' + 'OutputSensitiveImageContentError', + 'InputImageSensitiveContentError', ], ) @@ -784,7 +784,11 @@ msgstr "Загруженное изображение может содержа msgid "The generated image may contain private or prohibited content" msgstr "Готовое изображение может содержать приватный или запрещённый контент" -#: ml_model/exceptions.py:195 +#: ml_model/exceptions.py:208 +msgid "The input image may contain private or prohibited content" +msgstr "Загруженное изображение может содержать приватный или запрещённый контент" + +#: ml_model/exceptions.py:215 msgid "not specified" msgstr "не указана" @@ -11,9 +11,10 @@ from messages.services.message_service import MessageService from ml_model.exceptions import ( FileExtensionNotSupported, GenerationException, + InputImageSensitiveContentError, + OutputSensitiveImageContentError, RealPersonDetectedError, RequestBlocked, - OutputSensitiveImageContentError, ) from poller.models import Proxy from tools.chats.domain import RawSSEChunk @@ -365,6 +366,8 @@ class BytedanceModelArkAdapter: if error_code := data.get('error', {}).get('code', ''): if error_code == 'OutputImageSensitiveContentDetected': raise OutputSensitiveImageContentError + if error_code == 'InputImageSensitiveContentDetected': + raise InputImageSensitiveContentError if image_data := data.get('data'): urls = [item.get('url') for item in image_data if isinstance(item, dict) and item.get('url')] @@ -409,6 +412,8 @@ class BytedanceModelArkAdapter: return data if error_code := data.get('error', {}).get('code', None): match error_code: + case 'InputImageSensitiveContentDetected': + raise InputImageSensitiveContentError case 'InputImageSensitiveContentDetected.PrivacyInformation': raise RealPersonDetectedError case _: @@ -204,6 +204,11 @@ class OutputSensitiveImageContentError(Exception): return _('The generated image may contain private or prohibited content') +class InputImageSensitiveContentError(Exception): + def __str__(self) -> str: + return _('The input image may contain private or prohibited content') + + class ModelVersionNotAvailable(Exception): def __init__(self, version: str | None, available_versions: Iterable[str]) -> None: self.version = version @@ -28,12 +28,13 @@ from ml_model.exceptions import ( FileUploadUnsupported, ImageAnalysisError, ImageTooLargeError, + InputImageSensitiveContentError, InvalidParameterError, ModelVersionNotAvailable, + OutputSensitiveImageContentError, PaidPlanRequiredError, PromptLengthExceeded, RequestBlocked, - OutputSensitiveImageContentError, TemplateNotFound, TemplateUnknownException, UnrecognizedFileError, @@ -196,6 +197,7 @@ class MessagesAPIView(APIView): UnrecognizedFileError, InvalidParameterError, ModelVersionNotAvailable, + InputImageSensitiveContentError, OutputSensitiveImageContentError, ImageTooLargeError, ) as exc: @@ -23,14 +23,15 @@ from ml_model.exceptions import ( ImageAnalysisError, ImageContentNotFound, ImageTooLargeError, + InputImageSensitiveContentError, InvalidParameterError, InvalidStyleCombinationError, ModelCouldNotInterpretPrompt, ModelVersionNotAvailable, + OutputSensitiveImageContentError, PromptLengthExceeded, RealPersonDetectedError, RequestBlocked, - OutputSensitiveImageContentError, ServiceHighDemandError, UnrecognizedFileError, UnsupportedSize, @@ -219,6 +220,7 @@ class MediaAPIView(APIView): UnrecognizedFileError, FaceNotFoundError, RealPersonDetectedError, + InputImageSensitiveContentError, OutputSensitiveImageContentError, ImageTooLargeError, ) as exc: