serializers.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  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. item_id = serializers.CharField(required=True)
  83. mandatory_attrs = serializers.DictField(
  84. child=serializers.ListField(child=serializers.CharField()),
  85. required=True
  86. )
  87. model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
  88. extract_additional = serializers.BooleanField(required=False, default=True)
  89. process_image = serializers.BooleanField(required=False, default=True)
  90. def validate_model(self, value):
  91. from django.conf import settings
  92. if value not in settings.SUPPORTED_MODELS:
  93. raise serializers.ValidationError(
  94. f"Model must be one of {settings.SUPPORTED_MODELS}"
  95. )
  96. return value
  97. # class BatchProductRequestSerializer(serializers.Serializer):
  98. # """Serializer for batch product extraction request."""
  99. # products = serializers.ListField(
  100. # child=ProductInputSerializer(),
  101. # required=True,
  102. # min_length=1
  103. # )
  104. # mandatory_attrs = serializers.DictField(
  105. # child=serializers.ListField(child=serializers.CharField()),
  106. # required=True
  107. # )
  108. # model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
  109. # extract_additional = serializers.BooleanField(required=False, default=True)
  110. # process_image = serializers.BooleanField(required=False, default=True)
  111. # def validate_model(self, value):
  112. # from django.conf import settings
  113. # if value not in settings.SUPPORTED_MODELS:
  114. # raise serializers.ValidationError(
  115. # f"Model must be one of {settings.SUPPORTED_MODELS}"
  116. # )
  117. # return value
  118. # def validate_products(self, value):
  119. # from django.conf import settings
  120. # max_size = getattr(settings, 'MAX_BATCH_SIZE', 100)
  121. # if len(value) > max_size:
  122. # raise serializers.ValidationError(
  123. # f"Batch size cannot exceed {max_size} products"
  124. # )
  125. # return value
  126. class BatchProductRequestSerializer(serializers.Serializer):
  127. """Serializer for batch product extraction request (by item_id)."""
  128. item_ids = serializers.ListField(
  129. child=serializers.CharField(),
  130. required=True,
  131. min_length=1
  132. )
  133. mandatory_attrs = serializers.DictField(
  134. child=serializers.ListField(child=serializers.CharField()),
  135. required=True
  136. )
  137. model = serializers.CharField(required=False, default="llama-3.1-8b-instant")
  138. extract_additional = serializers.BooleanField(required=False, default=True)
  139. process_image = serializers.BooleanField(required=False, default=True)
  140. def validate_model(self, value):
  141. from django.conf import settings
  142. if value not in settings.SUPPORTED_MODELS:
  143. raise serializers.ValidationError(
  144. f"Model must be one of {settings.SUPPORTED_MODELS}"
  145. )
  146. return value
  147. def validate_item_ids(self, value):
  148. from django.conf import settings
  149. max_size = getattr(settings, 'MAX_BATCH_SIZE', 100)
  150. if len(value) > max_size:
  151. raise serializers.ValidationError(
  152. f"Batch size cannot exceed {max_size} products"
  153. )
  154. return value
  155. class OCRResultSerializer(serializers.Serializer):
  156. """Serializer for OCR results."""
  157. detected_text = serializers.ListField(child=serializers.DictField())
  158. extracted_attributes = serializers.DictField()
  159. class ProductAttributeResultSerializer(serializers.Serializer):
  160. """Serializer for individual product extraction result."""
  161. product_id = serializers.CharField(required=False)
  162. mandatory = serializers.DictField()
  163. additional = serializers.DictField(required=False)
  164. ocr_results = OCRResultSerializer(required=False)
  165. error = serializers.CharField(required=False)
  166. raw_output = serializers.CharField(required=False)
  167. class BatchProductResponseSerializer(serializers.Serializer):
  168. """Serializer for batch extraction response."""
  169. results = serializers.ListField(child=ProductAttributeResultSerializer())
  170. total_products = serializers.IntegerField()
  171. successful = serializers.IntegerField()
  172. failed = serializers.IntegerField()
  173. from rest_framework import serializers
  174. from .models import Product
  175. class ProductSerializer(serializers.ModelSerializer):
  176. class Meta:
  177. model = Product
  178. fields = [
  179. 'id',
  180. 'item_id',
  181. 'product_name',
  182. 'product_long_description',
  183. 'product_short_description',
  184. 'product_type',
  185. 'image_path',
  186. 'image',
  187. ]