88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
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)
|