serializers.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. # from rest_framework import serializers
  2. # class ProductInputSerializer(serializers.Serializer):
  3. # """Serializer for individual product input."""
  4. # product_id = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  5. # title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  6. # short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  7. # long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  8. # class SingleProductRequestSerializer(serializers.Serializer):
  9. # """Serializer for single product extraction request."""
  10. # title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  11. # short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  12. # long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  13. # mandatory_attrs = serializers.DictField(
  14. # child=serializers.ListField(child=serializers.CharField()),
  15. # required=True
  16. # )
  17. # model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
  18. # extract_additional = serializers.BooleanField(required=False, default=True)
  19. # def validate_model(self, value):
  20. # from django.conf import settings
  21. # if value not in settings.SUPPORTED_MODELS:
  22. # raise serializers.ValidationError(
  23. # f"Model must be one of {settings.SUPPORTED_MODELS}"
  24. # )
  25. # return value
  26. # class BatchProductRequestSerializer(serializers.Serializer):
  27. # """Serializer for batch product extraction request."""
  28. # products = serializers.ListField(
  29. # child=ProductInputSerializer(),
  30. # required=True,
  31. # min_length=1
  32. # )
  33. # mandatory_attrs = serializers.DictField(
  34. # child=serializers.ListField(child=serializers.CharField()),
  35. # required=True
  36. # )
  37. # model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
  38. # extract_additional = serializers.BooleanField(required=False, default=True)
  39. # def validate_model(self, value):
  40. # from django.conf import settings
  41. # if value not in settings.SUPPORTED_MODELS:
  42. # raise serializers.ValidationError(
  43. # f"Model must be one of {settings.SUPPORTED_MODELS}"
  44. # )
  45. # return value
  46. # def validate_products(self, value):
  47. # from django.conf import settings
  48. # max_size = getattr(settings, 'MAX_BATCH_SIZE', 100)
  49. # if len(value) > max_size:
  50. # raise serializers.ValidationError(
  51. # f"Batch size cannot exceed {max_size} products"
  52. # )
  53. # return value
  54. # class ProductAttributeResultSerializer(serializers.Serializer):
  55. # """Serializer for individual product extraction result."""
  56. # product_id = serializers.CharField(required=False)
  57. # mandatory = serializers.DictField()
  58. # additional = serializers.DictField(required=False)
  59. # error = serializers.CharField(required=False)
  60. # raw_output = serializers.CharField(required=False)
  61. # class BatchProductResponseSerializer(serializers.Serializer):
  62. # """Serializer for batch extraction response."""
  63. # results = serializers.ListField(child=ProductAttributeResultSerializer())
  64. # total_products = serializers.IntegerField()
  65. # successful = serializers.IntegerField()
  66. # failed = serializers.IntegerField()
  67. # ==================== serializers.py ====================
  68. from rest_framework import serializers
  69. class ProductInputSerializer(serializers.Serializer):
  70. """Serializer for individual product input."""
  71. product_id = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  72. title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  73. short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  74. long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  75. image_url = serializers.URLField(required=False, allow_blank=True, allow_null=True)
  76. class SingleProductRequestSerializer(serializers.Serializer):
  77. """Serializer for single product extraction request."""
  78. title = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  79. short_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  80. long_desc = serializers.CharField(required=False, allow_blank=True, allow_null=True)
  81. image_url = serializers.URLField(required=False, allow_blank=True, allow_null=True)
  82. mandatory_attrs = serializers.DictField(
  83. child=serializers.ListField(child=serializers.CharField()),
  84. required=True
  85. )
  86. model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
  87. extract_additional = serializers.BooleanField(required=False, default=True)
  88. process_image = serializers.BooleanField(required=False, default=True)
  89. def validate_model(self, value):
  90. from django.conf import settings
  91. if value not in settings.SUPPORTED_MODELS:
  92. raise serializers.ValidationError(
  93. f"Model must be one of {settings.SUPPORTED_MODELS}"
  94. )
  95. return value
  96. class BatchProductRequestSerializer(serializers.Serializer):
  97. """Serializer for batch product extraction request."""
  98. products = serializers.ListField(
  99. child=ProductInputSerializer(),
  100. required=True,
  101. min_length=1
  102. )
  103. mandatory_attrs = serializers.DictField(
  104. child=serializers.ListField(child=serializers.CharField()),
  105. required=True
  106. )
  107. model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
  108. extract_additional = serializers.BooleanField(required=False, default=True)
  109. process_image = serializers.BooleanField(required=False, default=True)
  110. def validate_model(self, value):
  111. from django.conf import settings
  112. if value not in settings.SUPPORTED_MODELS:
  113. raise serializers.ValidationError(
  114. f"Model must be one of {settings.SUPPORTED_MODELS}"
  115. )
  116. return value
  117. def validate_products(self, value):
  118. from django.conf import settings
  119. max_size = getattr(settings, 'MAX_BATCH_SIZE', 100)
  120. if len(value) > max_size:
  121. raise serializers.ValidationError(
  122. f"Batch size cannot exceed {max_size} products"
  123. )
  124. return value
  125. class OCRResultSerializer(serializers.Serializer):
  126. """Serializer for OCR results."""
  127. detected_text = serializers.ListField(child=serializers.DictField())
  128. extracted_attributes = serializers.DictField()
  129. class ProductAttributeResultSerializer(serializers.Serializer):
  130. """Serializer for individual product extraction result."""
  131. product_id = serializers.CharField(required=False)
  132. mandatory = serializers.DictField()
  133. additional = serializers.DictField(required=False)
  134. ocr_results = OCRResultSerializer(required=False)
  135. error = serializers.CharField(required=False)
  136. raw_output = serializers.CharField(required=False)
  137. class BatchProductResponseSerializer(serializers.Serializer):
  138. """Serializer for batch extraction response."""
  139. results = serializers.ListField(child=ProductAttributeResultSerializer())
  140. total_products = serializers.IntegerField()
  141. successful = serializers.IntegerField()
  142. failed = serializers.IntegerField()
  143. from rest_framework import serializers
  144. from .models import Product
  145. class ProductSerializer(serializers.ModelSerializer):
  146. class Meta:
  147. model = Product
  148. fields = [
  149. 'id',
  150. 'item_id',
  151. 'product_name',
  152. 'product_long_description',
  153. 'product_short_description',
  154. 'product_type',
  155. 'image_path',
  156. 'image',
  157. ]