@@ -1251,3 +1251,6 @@ msgstr "Необходимо указать параметр 'model'" msgid "Missing required parameter: 'messages'" msgstr "Отсутствует обязательный параметр: 'messages'" + +msgid "The neuron model does not exist" +msgstr "Нейронная модель не существует" @@ -6,6 +6,7 @@ from django.utils.translation import gettext_lazy as _ from authentication.models.choices import InvitationStatus from authentication.models.user import CustomUserModel from authentication.selectors.user_selector import UserSelector +from ml_model.exceptions import NeuronModelNotExist from ml_model.models import ModelParameter, NeuronModel from ml_model.serializers import NeuronModelSerializer, NeuronModelsSerializer @@ -107,12 +108,15 @@ class NeuronModelSelector: return model.first() def get_model_by_slug(self, slug: str, serialize: bool = False, hidden: bool = False): - model = NeuronModel.objects.prefetch_related( - Prefetch( - 'model_modelparameters', - queryset=ModelParameter.objects.filter(hidden=hidden), - ) - ).get(slug=slug) + try: + model = NeuronModel.objects.prefetch_related( + Prefetch( + 'model_modelparameters', + queryset=ModelParameter.objects.filter(hidden=hidden), + ) + ).get(slug=slug) + except NeuronModel.DoesNotExist: + raise NeuronModelNotExist if serialize: return NeuronModelSerializer(instance=model) return model @@ -16,10 +16,12 @@ class DeploymentDisabled(Exception): def __str__(self): return _('The model is currently disabled. Please try again later.') + class RequestBlocked(Exception): def __str__(self): return _('Your request was blocked by our moderation system') + class UnsupportedSize(Exception): def __init__(self, current_size: tuple[int, int], required_size: tuple[int, int]): self.current_size = current_size @@ -35,10 +37,12 @@ class UnsupportedSize(Exception): *self.current_size, *self.required_size ) + class ModelTimeoutError(Exception): def __str__(self): return _('The model is not responding') + class FileExtensionNotSupported(Exception): def __init__(self, extensions: list[str]) -> None: self.extensions = extensions @@ -62,3 +66,8 @@ class TemplateNotFound(Exception): class TemplateUnknownException(Exception): def __str__(self): return _('There was an unknown error while rendering a template') + + +class NeuronModelNotExist(Exception): + def __str__(self): + return _('The neuron model does not exist') @@ -7,6 +7,7 @@ from rest_framework.permissions import AllowAny from rest_framework.response import Response from rest_framework.views import APIView +from ml_model.exceptions import NeuronModelNotExist from ml_model.models import ModelCategory from ml_model.selectors.ml_models_selector import NeuronModelSelector from ml_model.serializers import ( @@ -57,10 +58,13 @@ class NeuronModelAPIView(APIView): ) def get(self, request, slug: str, *args, **kwargs): """Retrieve model by slug""" - selector = NeuronModelSelector(request.user) - model = selector.get_model_by_slug(slug=slug, hidden=False) - if not selector.get_model_accessible_status(model): - return Response({'detail': _('Model data cannot be retrieved')}, status=status.HTTP_403_FORBIDDEN) - return Response( - NeuronModelSerializer(model).data - ) + try: + selector = NeuronModelSelector(request.user) + model = selector.get_model_by_slug(slug=slug, hidden=False) + if not selector.get_model_accessible_status(model): + return Response({'detail': _('Model data cannot be retrieved')}, status=status.HTTP_403_FORBIDDEN) + return Response( + NeuronModelSerializer(model).data + ) + except (NeuronModelNotExist, Exception) as exc: + return Response({'detail': f'{exc}'}, status=status.HTTP_400_BAD_REQUEST)