@@ -5,13 +5,6 @@ from decimal import Decimal from io import BytesIO from typing import Any -from ml_model.exceptions import ( - RequestBlocked, - GenerationException, - ExceededContextLengthError, - ImageAnalysisError, -) - import filetype import requests from django.core.files import File @@ -23,8 +16,8 @@ from ml_model.tasks import replicate_run class Reve(SimpleService): PRICE = { - 'create': Decimal('7.5'), - 'edit-fast': Decimal('3') + 'create': Decimal('12.5'), + 'edit-fast': Decimal('5'), } @classmethod @@ -187,10 +187,33 @@ class MediaAPIView(APIView): ) try: output_messages = service(gallery).make(input_message) + except ( + UnsupportedSize, + RequestBlocked, + FileNotProvided, + ImageContentNotFound, + ModelCouldNotInterpretPrompt, + InvalidStyleCombinationError, + InvalidParameterError, + ModelVersionNotAvailable, + PromptLengthExceeded, + ExceededContextLengthError, + FileExtensionNotSupported, + ServiceHighDemandError, + CorruptedFileError, + FileTooLargeError, + ImageAnalysisError, + UnrecognizedFileError, + FaceNotFoundError, + RealPersonDetectedError, + ) as exc: + return Response({'detail': f'{exc}'}, status=HTTP_400_BAD_REQUEST) except Exception as exc: - logger.exception(exc) input_message.is_sent = False input_message.save() + if isinstance(exc, InsufficientBalance): + return Response({'detail': f'{exc}'}, status=HTTP_402_PAYMENT_REQUIRED) + logger.exception(exc) if any(phrase in str(exc) for phrase in ('Insufficient credit', 'Request was throttled')): return Response( { @@ -200,32 +223,6 @@ class MediaAPIView(APIView): }, status=HTTP_402_PAYMENT_REQUIRED, ) - if isinstance(exc, InsufficientBalance): - return Response({'detail': f'{exc}'}, status=HTTP_402_PAYMENT_REQUIRED) - if isinstance( - exc, - ( - UnsupportedSize, - RequestBlocked, - FileNotProvided, - ImageContentNotFound, - ModelCouldNotInterpretPrompt, - InvalidStyleCombinationError, - InvalidParameterError, - ModelVersionNotAvailable, - PromptLengthExceeded, - ExceededContextLengthError, - FileExtensionNotSupported, - ServiceHighDemandError, - CorruptedFileError, - FileTooLargeError, - ImageAnalysisError, - UnrecognizedFileError, - FaceNotFoundError, - RealPersonDetectedError, - ), - ): - return Response({'detail': f'{exc}'}, status=HTTP_400_BAD_REQUEST) return Response( { 'detail': _(