from injector import inject from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from .serializers import AiConfigSerializer, AiInstanceSerializer from .services.AiService import AiService class AiApiView(APIView): # add permission to check if user is authenticated # permission_classes = [permissions.IsAuthenticated] ai_service: AiService = None @inject def setup(self, request, ai_service: AiService, **kwargs): super().setup(request) self.ai_service = ai_service def get(self, request, *args, **kwargs): instances = self.ai_service.get_instances() serializer = AiInstanceSerializer(instances, many=True) return Response(serializer.data, status=status.HTTP_200_OK) class AiConfigApiView(APIView): # add permission to check if user is authenticated # permission_classes = [permissions.IsAuthenticated] ai_service: AiService = None @inject def setup(self, request, ai_service: AiService, **kwargs): super().setup(request) self.ai_service = ai_service def get(self, request, *args, **kwargs): configurations = self.ai_service.get_configurations() serializer = AiConfigSerializer(configurations, many=True) return Response(serializer.data, status=status.HTTP_200_OK) class AiChatTextApiView(APIView): # add permission to check if user is authenticated # permission_classes = [permissions.IsAuthenticated] ai_service: AiService = None @inject def setup(self, request, ai_service: AiService, **kwargs): super().setup(request) self.ai_service = ai_service def post(self, request, *args, **kwargs): name = self.kwargs.get('name') print("name", name) ai_instance = self.ai_service.get_instance(name) if ai_instance is None: return Response(status=status.HTTP_404_NOT_FOUND) print(request.data) response = ai_instance.chat_text(request.data['name'], request.data['content']) return Response(response, status=status.HTTP_200_OK) class AiDiscordApiView(APIView): # add permission to check if user is authenticated # permission_classes = [permissions.IsAuthenticated] ai_service: AiService = None @inject def setup(self, request, ai_service: AiService, **kwargs): super().setup(request) self.ai_service = ai_service def patch(self, request, *args, **kwargs): name = self.kwargs.get('name') ai_instance = self.ai_service.get_instance(name) if ai_instance is None: return Response(status=status.HTTP_404_NOT_FOUND) if 'online' in request.data: ai_instance.discord.set_online(request.data['online']) if 'react_to_chat' in request.data: ai_instance.discord.set_react_to_chat(request.data['react_to_chat']) return Response(status=status.HTTP_200_OK)