136 lines
5.3 KiB
Python
136 lines
5.3 KiB
Python
from rest_framework import serializers
|
|
from .models import (
|
|
Feedback, FeedbackTag, DetailedFeedback,
|
|
ConversationSubmission, ConversationEvaluation, SystemConfig,
|
|
RLHFConversation, NegotiationChat, ChatHistory
|
|
)
|
|
from apps.user.serializers import UserSerializer
|
|
|
|
|
|
class ConversationSerializer(serializers.ModelSerializer):
|
|
id = serializers.CharField(source='conversation_id', read_only=True)
|
|
user = serializers.PrimaryKeyRelatedField(source='negotiation.user', read_only=True)
|
|
is_submitted = serializers.SerializerMethodField()
|
|
created_at = serializers.DateTimeField(source='created_at', read_only=True)
|
|
|
|
class Meta:
|
|
model = NegotiationChat
|
|
fields = ['id', 'user', 'is_submitted', 'created_at']
|
|
|
|
def get_is_submitted(self, obj):
|
|
# 尝试获取RLHF扩展
|
|
try:
|
|
return obj.rlhf_extension.is_submitted
|
|
except RLHFConversation.DoesNotExist:
|
|
return False
|
|
|
|
|
|
class MessageSerializer(serializers.ModelSerializer):
|
|
conversation = serializers.CharField(source='conversation_id', read_only=True)
|
|
timestamp = serializers.DateTimeField(source='created_at', read_only=True)
|
|
|
|
class Meta:
|
|
model = ChatHistory
|
|
fields = ['id', 'conversation', 'role', 'content', 'timestamp']
|
|
|
|
|
|
class FeedbackSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Feedback
|
|
fields = ['id', 'message', 'conversation_id', '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_id', '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_id', 'user', '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_id', '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):
|
|
id = serializers.CharField(source='conversation_id', read_only=True)
|
|
user = serializers.PrimaryKeyRelatedField(source='negotiation.user', read_only=True)
|
|
is_submitted = serializers.SerializerMethodField()
|
|
created_at = serializers.DateTimeField(source='created_at', read_only=True)
|
|
messages = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = NegotiationChat
|
|
fields = ['id', 'user', 'is_submitted', 'created_at', 'messages']
|
|
|
|
def get_is_submitted(self, obj):
|
|
try:
|
|
return obj.rlhf_extension.is_submitted
|
|
except RLHFConversation.DoesNotExist:
|
|
return False
|
|
|
|
def get_messages(self, obj):
|
|
messages = ChatHistory.objects.filter(
|
|
conversation_id=obj.conversation_id
|
|
).order_by('created_at')
|
|
return MessageSerializer(messages, many=True).data
|
|
|
|
|
|
class MessageWithFeedbackSerializer(serializers.ModelSerializer):
|
|
conversation = serializers.CharField(source='conversation_id', read_only=True)
|
|
timestamp = serializers.DateTimeField(source='created_at', read_only=True)
|
|
feedback = serializers.SerializerMethodField()
|
|
detailed_feedback = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = ChatHistory
|
|
fields = ['id', 'conversation', 'role', 'content', 'timestamp', 'feedback', 'detailed_feedback']
|
|
|
|
def get_feedback(self, obj):
|
|
feedback = Feedback.objects.filter(message=obj)
|
|
return FeedbackSerializer(feedback, many=True).data
|
|
|
|
def get_detailed_feedback(self, obj):
|
|
detailed_feedback = DetailedFeedback.objects.filter(message=obj)
|
|
return DetailedFeedbackSerializer(detailed_feedback, many=True).data |