@@ -26,6 +26,7 @@ logger = logging.getLogger(__name__) class BaseGenerationView(APIView): + authentication_classes = [] permission_classes = (HasAPIKey,) request_serializer = response_serializer = MessageSerializer @@ -52,9 +53,12 @@ class BaseGenerationView(APIView): def post(self, request, model_slug, *args, **kwargs): """Create new content. Type of content depends on model output content type: text, image, audio, video, or code.""" - user = APIKeySelector.get_user_by_key(key_value=request.headers.get('Authorization', '')) + api_key_value = request.headers.get('Authorization') + if (split_api_key := api_key_value.split())[0] == 'Bearer': + api_key_value = split_api_key[-1] + user = APIKeySelector.get_user_by_key(key_value=api_key_value) balance = user.balance - key = APIKey.objects.get(key=request.headers.get('Authorization', '')) + key = APIKey.objects.get(key=api_key_value) if key.token_limit is not None and key.token_limit < 1: return Response({'detail': _('Key limit exceeded')}, HTTP_403_FORBIDDEN) store, created = APIStore.objects.get_or_create(user=user) @@ -60,7 +60,7 @@ class OpenAICompatibleAPIView(BaseGenerationView): return Response({ 'id': str(uuid.uuid4()), 'object': 'chat.completion', - 'created': int(result.data[0]['created_at'].timestamp()), + 'created': int(datetime.fromisoformat(result.data[0]['created_at'].replace("Z", "+00:00")).timestamp()), 'model': version, 'choices': [ { @@ -8,6 +8,8 @@ from tools.public_api.models import APIKey class HasAPIKey(permissions.BasePermission): def has_permission(self, request, view): api_key_value = request.headers.get('Authorization') + if (split_api_key := api_key_value.split())[0] == 'Bearer': + api_key_value = split_api_key[-1] api_key: APIKey = APIKey.objects.get_or_none(key=api_key_value) if not api_key: raise PermissionDenied('No API Key in Authorization header')