UPDATE
This commit is contained in:
@@ -1,35 +1,54 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import Conversation, Message
|
||||
from .models import Message
|
||||
|
||||
|
||||
class ConversationListSerializer(serializers.ModelSerializer):
|
||||
conversation_id = serializers.UUIDField(source="uuid", read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Conversation
|
||||
fields = [
|
||||
"conversation_id",
|
||||
"title",
|
||||
"updated_at",
|
||||
]
|
||||
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)
|
||||
|
||||
|
||||
class MessageSerializer(serializers.ModelSerializer):
|
||||
message_id = serializers.UUIDField(source="uuid", read_only=True)
|
||||
conversation_id = serializers.UUIDField(source="conversation.uuid", read_only=True)
|
||||
class ConversationSummarySerializer(serializers.Serializer):
|
||||
id = serializers.UUIDField(source="uuid", read_only=True)
|
||||
message_count = serializers.IntegerField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Message
|
||||
fields = [
|
||||
"message_id",
|
||||
"conversation_id",
|
||||
"role",
|
||||
"content",
|
||||
"images",
|
||||
"raw_response",
|
||||
"created_at",
|
||||
]
|
||||
|
||||
class ConversationCreateSerializer(serializers.Serializer):
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
|
||||
|
||||
class ChatPostSerializer(serializers.Serializer):
|
||||
@@ -42,3 +61,10 @@ class ChatPostSerializer(serializers.Serializer):
|
||||
conversation_id = serializers.UUIDField(required=False)
|
||||
title = serializers.CharField(required=False, allow_blank=True, max_length=255)
|
||||
farm_context = serializers.JSONField(required=False)
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user