daren/apps/rlhf/serializers.py
2025-06-09 16:29:14 +08:00

84 lines
3.4 KiB
Python

from rest_framework import serializers
from .models import (
Conversation, Message, Feedback, FeedbackTag, DetailedFeedback,
ConversationSubmission, ConversationEvaluation, SystemConfig
)
from apps.user.serializers import UserSerializer
class ConversationSerializer(serializers.ModelSerializer):
class Meta:
model = Conversation
fields = ['id', 'user', 'is_submitted', 'created_at']
read_only_fields = ['id', 'created_at', 'user']
class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Message
fields = ['id', 'conversation', 'role', 'content', 'timestamp']
read_only_fields = ['id', 'timestamp']
class FeedbackSerializer(serializers.ModelSerializer):
class Meta:
model = Feedback
fields = ['id', 'message', 'conversation', 'user', 'feedback_value', 'timestamp']
read_only_fields = ['id', 'timestamp']
class FeedbackTagSerializer(serializers.ModelSerializer):
class Meta:
model = FeedbackTag
fields = ['id', 'tag_name', 'tag_type', 'description', 'created_at']
read_only_fields = ['id', 'created_at']
class DetailedFeedbackSerializer(serializers.ModelSerializer):
class Meta:
model = DetailedFeedback
fields = ['id', 'message', 'conversation', 'user', 'feedback_type', 'feedback_tags', 'custom_tags', 'custom_content', 'is_inline', 'created_at', 'updated_at']
read_only_fields = ['id', 'created_at', 'updated_at']
class ConversationSubmissionSerializer(serializers.ModelSerializer):
user_details = UserSerializer(source='user', read_only=True)
reviewer_details = UserSerializer(source='reviewer', read_only=True)
class Meta:
model = ConversationSubmission
fields = ['id', 'conversation', 'user', 'user_details', 'title', 'description', 'status', 'quality_score', 'reviewer', 'reviewer_details', 'reviewer_notes', 'submitted_at', 'reviewed_at', 'created_at', 'updated_at']
read_only_fields = ['id', 'submitted_at', 'reviewed_at', 'created_at', 'updated_at']
class ConversationEvaluationSerializer(serializers.ModelSerializer):
class Meta:
model = ConversationEvaluation
fields = ['id', 'conversation', 'user', 'overall_feeling', 'has_logical_issues', 'needs_satisfied', 'created_at', 'updated_at']
read_only_fields = ['id', 'created_at', 'updated_at']
class SystemConfigSerializer(serializers.ModelSerializer):
class Meta:
model = SystemConfig
fields = ['id', 'config_key', 'config_value', 'config_type', 'description', 'created_at', 'updated_at']
read_only_fields = ['id', 'created_at', 'updated_at']
class ConversationWithMessagesSerializer(serializers.ModelSerializer):
messages = MessageSerializer(many=True, read_only=True)
class Meta:
model = Conversation
fields = ['id', 'user', 'is_submitted', 'created_at', 'messages']
read_only_fields = ['id', 'created_at']
class MessageWithFeedbackSerializer(serializers.ModelSerializer):
feedback = FeedbackSerializer(many=True, read_only=True)
detailed_feedback = DetailedFeedbackSerializer(many=True, read_only=True)
class Meta:
model = Message
fields = ['id', 'conversation', 'role', 'content', 'timestamp', 'feedback', 'detailed_feedback']
read_only_fields = ['id', 'timestamp']