| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- # from rest_framework import serializers
- # class ProductInputSerializer(serializers.Serializer):
- # """Serializer for individual product input."""
- # product_id = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- # title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- # short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- # long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- # class SingleProductRequestSerializer(serializers.Serializer):
- # """Serializer for single product extraction request."""
- # title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- # short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- # long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- # mandatory_attrs = serializers.DictField(
- # child=serializers.ListField(child=serializers.CharField()),
- # required=True
- # )
- # model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
- # extract_additional = serializers.BooleanField(required=False, default=True)
- # def validate_model(self, value):
- # from django.conf import settings
- # if value not in settings.SUPPORTED_MODELS:
- # raise serializers.ValidationError(
- # f"Model must be one of {settings.SUPPORTED_MODELS}"
- # )
- # return value
- # class BatchProductRequestSerializer(serializers.Serializer):
- # """Serializer for batch product extraction request."""
- # products = serializers.ListField(
- # child=ProductInputSerializer(),
- # required=True,
- # min_length=1
- # )
- # mandatory_attrs = serializers.DictField(
- # child=serializers.ListField(child=serializers.CharField()),
- # required=True
- # )
- # model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
- # extract_additional = serializers.BooleanField(required=False, default=True)
- # def validate_model(self, value):
- # from django.conf import settings
- # if value not in settings.SUPPORTED_MODELS:
- # raise serializers.ValidationError(
- # f"Model must be one of {settings.SUPPORTED_MODELS}"
- # )
- # return value
- # def validate_products(self, value):
- # from django.conf import settings
- # max_size = getattr(settings, 'MAX_BATCH_SIZE', 100)
- # if len(value) > max_size:
- # raise serializers.ValidationError(
- # f"Batch size cannot exceed {max_size} products"
- # )
- # return value
- # class ProductAttributeResultSerializer(serializers.Serializer):
- # """Serializer for individual product extraction result."""
- # product_id = serializers.CharField(required=False)
- # mandatory = serializers.DictField()
- # additional = serializers.DictField(required=False)
- # error = serializers.CharField(required=False)
- # raw_output = serializers.CharField(required=False)
- # class BatchProductResponseSerializer(serializers.Serializer):
- # """Serializer for batch extraction response."""
- # results = serializers.ListField(child=ProductAttributeResultSerializer())
- # total_products = serializers.IntegerField()
- # successful = serializers.IntegerField()
- # failed = serializers.IntegerField()
- # ==================== serializers.py ====================
- from rest_framework import serializers
- class ProductInputSerializer(serializers.Serializer):
- """Serializer for individual product input."""
- product_id = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- image_url = serializers.URLField(required=False, allow_blank=True, allow_null=True)
- class SingleProductRequestSerializer(serializers.Serializer):
- """Serializer for single product extraction request."""
- title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
- image_url = serializers.URLField(required=False, allow_blank=True, allow_null=True)
- mandatory_attrs = serializers.DictField(
- child=serializers.ListField(child=serializers.CharField()),
- required=True
- )
- model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
- extract_additional = serializers.BooleanField(required=False, default=True)
- process_image = serializers.BooleanField(required=False, default=True)
- def validate_model(self, value):
- from django.conf import settings
- if value not in settings.SUPPORTED_MODELS:
- raise serializers.ValidationError(
- f"Model must be one of {settings.SUPPORTED_MODELS}"
- )
- return value
- class BatchProductRequestSerializer(serializers.Serializer):
- """Serializer for batch product extraction request."""
- products = serializers.ListField(
- child=ProductInputSerializer(),
- required=True,
- min_length=1
- )
- mandatory_attrs = serializers.DictField(
- child=serializers.ListField(child=serializers.CharField()),
- required=True
- )
- model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
- extract_additional = serializers.BooleanField(required=False, default=True)
- process_image = serializers.BooleanField(required=False, default=True)
- def validate_model(self, value):
- from django.conf import settings
- if value not in settings.SUPPORTED_MODELS:
- raise serializers.ValidationError(
- f"Model must be one of {settings.SUPPORTED_MODELS}"
- )
- return value
- def validate_products(self, value):
- from django.conf import settings
- max_size = getattr(settings, 'MAX_BATCH_SIZE', 100)
- if len(value) > max_size:
- raise serializers.ValidationError(
- f"Batch size cannot exceed {max_size} products"
- )
- return value
- class OCRResultSerializer(serializers.Serializer):
- """Serializer for OCR results."""
- detected_text = serializers.ListField(child=serializers.DictField())
- extracted_attributes = serializers.DictField()
- class ProductAttributeResultSerializer(serializers.Serializer):
- """Serializer for individual product extraction result."""
- product_id = serializers.CharField(required=False)
- mandatory = serializers.DictField()
- additional = serializers.DictField(required=False)
- ocr_results = OCRResultSerializer(required=False)
- error = serializers.CharField(required=False)
- raw_output = serializers.CharField(required=False)
- class BatchProductResponseSerializer(serializers.Serializer):
- """Serializer for batch extraction response."""
- results = serializers.ListField(child=ProductAttributeResultSerializer())
- total_products = serializers.IntegerField()
- successful = serializers.IntegerField()
- failed = serializers.IntegerField()
- from rest_framework import serializers
- from .models import Product
- class ProductSerializer(serializers.ModelSerializer):
- class Meta:
- model = Product
- fields = [
- 'id',
- 'item_id',
- 'product_name',
- 'product_long_description',
- 'product_short_description',
- 'product_type',
- 'image_path',
- 'image',
- ]
|