Files
Backend/farm_ai_assistant/serializers.py
T

97 lines
4.3 KiB
Python
Raw Normal View History

2026-03-25 15:43:00 +03:30
from rest_framework import serializers
2026-03-27 18:18:31 +03:30
from .models import Message
2026-03-25 15:43:00 +03:30
2026-03-27 18:18:31 +03:30
class ChatSectionSerializer(serializers.Serializer):
type = serializers.ChoiceField(choices=["text", "list", "recommendation", "warning"])
title = serializers.CharField(required=False, allow_blank=True)
content = serializers.CharField(required=False, allow_blank=True)
items = serializers.ListField(child=serializers.CharField(), required=False)
icon = serializers.CharField(required=False, allow_blank=True)
frequency = serializers.CharField(required=False, allow_blank=True)
amount = serializers.CharField(required=False, allow_blank=True)
timing = serializers.CharField(required=False, allow_blank=True)
expandableExplanation = serializers.CharField(required=False, allow_blank=True)
2026-03-25 15:43:00 +03:30
2026-03-27 18:18:31 +03:30
class ConversationSummarySerializer(serializers.Serializer):
id = serializers.UUIDField(source="uuid", read_only=True)
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(source="farm.farm_uuid", read_only=True)
2026-03-27 18:18:31 +03:30
message_count = serializers.IntegerField(read_only=True)
2026-03-25 15:43:00 +03:30
2026-03-27 18:18:31 +03:30
class ConversationCreateSerializer(serializers.Serializer):
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(required=True)
2026-03-27 18:18:31 +03:30
title = serializers.CharField(required=False, allow_blank=True, max_length=255)
farm_context = serializers.JSONField(required=False)
class ChatHistoryMessageSerializer(serializers.Serializer):
message_id = serializers.UUIDField(read_only=True)
conversation_id = serializers.UUIDField(read_only=True)
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(read_only=True)
2026-03-27 18:18:31 +03:30
role = serializers.ChoiceField(choices=Message.ROLE_CHOICES, read_only=True)
content = serializers.CharField(read_only=True, allow_blank=True)
sections = ChatSectionSerializer(many=True, read_only=True)
images = serializers.ListField(child=serializers.CharField(), read_only=True)
created_at = serializers.DateTimeField(read_only=True)
class ConversationMessagesSerializer(serializers.Serializer):
conversation_id = serializers.UUIDField(read_only=True)
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(read_only=True)
2026-03-27 18:18:31 +03:30
messages = ChatHistoryMessageSerializer(many=True, read_only=True)
class ChatResponseDataSerializer(serializers.Serializer):
message_id = serializers.UUIDField(read_only=True)
conversation_id = serializers.UUIDField(read_only=True)
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(read_only=True)
2026-03-27 18:18:31 +03:30
content = serializers.CharField(read_only=True, allow_blank=True)
sections = ChatSectionSerializer(many=True, read_only=True)
class ConversationDeleteSerializer(serializers.Serializer):
conversation_id = serializers.UUIDField(read_only=True)
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(read_only=True)
2026-03-25 15:43:00 +03:30
2026-03-27 18:32:49 +03:30
class ChatTaskSubmitDataSerializer(serializers.Serializer):
task_id = serializers.CharField(required=False, allow_blank=True)
status = serializers.CharField(required=False, allow_blank=True)
status_url = serializers.CharField(required=False, allow_blank=True)
conversation_id = serializers.UUIDField(read_only=True)
message_id = serializers.UUIDField(read_only=True)
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(read_only=True)
2026-03-27 18:32:49 +03:30
class ChatTaskStatusDataSerializer(serializers.Serializer):
task_id = serializers.CharField(required=False, allow_blank=True)
status = serializers.CharField(required=False, allow_blank=True)
conversation_id = serializers.UUIDField(read_only=True)
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(read_only=True)
2026-03-27 18:32:49 +03:30
progress = serializers.JSONField(required=False)
result = serializers.JSONField(required=False)
error = serializers.CharField(required=False, allow_blank=True)
2026-03-25 15:43:00 +03:30
class ChatPostSerializer(serializers.Serializer):
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(required=True)
2026-03-25 15:43:00 +03:30
content = serializers.CharField(required=False, allow_blank=True, default="")
images = serializers.ListField(
child=serializers.CharField(),
required=False,
default=list,
)
conversation_id = serializers.UUIDField(required=False)
title = serializers.CharField(required=False, allow_blank=True, max_length=255)
farm_context = serializers.JSONField(required=False)
2026-03-27 18:18:31 +03:30
def validate(self, attrs):
content = attrs.get("content", "").strip()
images = attrs.get("images") or []
if not content and not images:
raise serializers.ValidationError("Either content or images is required.")
return attrs