diff --git a/src/backend/core/api/serializers.py b/src/backend/core/api/serializers.py index 3ef1ebad..87322969 100644 --- a/src/backend/core/api/serializers.py +++ b/src/backend/core/api/serializers.py @@ -1,6 +1,8 @@ """Client serializers for the impress core app.""" +import json import mimetypes +import re from django.conf import settings from django.db.models import Q @@ -350,3 +352,48 @@ class DocumentVersionSerializer(serializers.Serializer): is_latest = serializers.BooleanField() last_modified = serializers.DateTimeField() version_id = serializers.CharField() + + +class AIRequestSerializer(serializers.Serializer): + """Serializer for AI task requests.""" + + ACTION_CHOICES = [ + "prompt", + "correct", + "rephrase", + "summarize", + "translate_en", + "translate_de", + "translate_fr", + ] + + action = serializers.ChoiceField(choices=ACTION_CHOICES, required=True) + text = serializers.CharField(required=True) + + def validate_text(self, value): + """Ensure the text field is not empty.""" + + if len(value.strip()) == 0: + raise serializers.ValidationError("Text field cannot be empty.") + return value + + def validate_action(self, value): + """Ensure the action field is valid.""" + + if value not in self.ACTION_CHOICES: + raise serializers.ValidationError("Invalid action.") + return value + + def process_ai_reponse(self, response): + """Process the response from the AI service.""" + + content = response.choices[0].message.content + sanitized_content = re.sub(r"(?