44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
|
|
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
|