feat: support multi-image image generation
This commit is contained in:
+27
-1
@@ -35,6 +35,7 @@ class GenerateImageRequestSerializer(serializers.Serializer):
|
||||
)
|
||||
image_url = serializers.URLField(required=False, allow_blank=True)
|
||||
image_base64 = serializers.CharField(required=False, allow_blank=True)
|
||||
images = serializers.ListField(required=False, write_only=True)
|
||||
resolution = serializers.CharField(
|
||||
required=False,
|
||||
allow_blank=True,
|
||||
@@ -49,8 +50,29 @@ class GenerateImageRequestSerializer(serializers.Serializer):
|
||||
)
|
||||
parameters = serializers.DictField(required=False, default=dict)
|
||||
|
||||
def validate_images(self, value):
|
||||
if not value:
|
||||
raise serializers.ValidationError("images 至少需要一张图片。")
|
||||
max_images = max(1, int(settings.IMAGE_MAX_INPUT_IMAGES))
|
||||
if len(value) > max_images:
|
||||
raise serializers.ValidationError(f"单次最多上传 {max_images} 张图片。")
|
||||
|
||||
class VisionImageInputSerializer(serializers.Serializer):
|
||||
serializer = ImageInputSerializer(data=value, many=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
return serializer.validated_data
|
||||
|
||||
def validate(self, attrs):
|
||||
has_legacy_image = bool(str(attrs.get("image_url") or "").strip()) or bool(
|
||||
str(attrs.get("image_base64") or "").strip()
|
||||
)
|
||||
if attrs.get("images") is not None and has_legacy_image:
|
||||
raise serializers.ValidationError(
|
||||
"images 不能与 image_url 或 image_base64 同时提供。"
|
||||
)
|
||||
return attrs
|
||||
|
||||
|
||||
class ImageInputSerializer(serializers.Serializer):
|
||||
image_url = serializers.URLField(required=False, allow_blank=True)
|
||||
image_base64 = serializers.CharField(required=False, allow_blank=True)
|
||||
|
||||
@@ -64,6 +86,10 @@ class VisionImageInputSerializer(serializers.Serializer):
|
||||
return attrs
|
||||
|
||||
|
||||
class VisionImageInputSerializer(ImageInputSerializer):
|
||||
pass
|
||||
|
||||
|
||||
class AnalyzeImagesRequestSerializer(serializers.Serializer):
|
||||
prompt = serializers.CharField(trim_whitespace=True, allow_blank=False)
|
||||
model = serializers.CharField(
|
||||
|
||||
Reference in New Issue
Block a user