from rest_framework.serializers import ModelSerializer, SerializerMethodField from apps.accounts.serializers import RoleSerializer, UserSerializer from apps.knowledge.models import TrainingFile, RoleRagDocument class TrainingFileSerializer(ModelSerializer): uploaded_by = UserSerializer(read_only=True) role = RoleSerializer(read_only=True) file_url = SerializerMethodField() class Meta: model = TrainingFile fields = [ 'id', 'uuid', 'role', 'uploaded_by', 'file', 'file_url', 'file_name', 'file_size', 'file_type', 'description', 'status', 'is_processed', 'created_at', 'updated_at' ] read_only_fields = [ 'id', 'uuid', 'uploaded_by', 'file_size', 'file_type', 'status', 'is_processed', 'created_at', 'updated_at', 'role' ] def get_file_url(self, obj: TrainingFile) -> str: request = self.context.get('request') if obj.file and request: return request.build_absolute_uri(obj.file.url) return obj.file.url if obj.file else None class RoleRagDocumentSerializer(ModelSerializer): training_file_name = SerializerMethodField() class Meta: model = RoleRagDocument fields = [ 'id', 'uuid', 'role', 'training_file', 'training_file_name', 'content', 'content_hash', 'metadata', 'chunk_index', 'is_active', 'created_at' ] read_only_fields = ['id', 'uuid', 'content_hash', 'created_at'] def get_training_file_name(self, obj: RoleRagDocument) -> str: return obj.training_file.file_name if obj.training_file else None