11package com .volcengine .ark .runtime .model .images .generation ;
22
3+ import com .fasterxml .jackson .annotation .JsonIgnoreProperties ;
34import com .fasterxml .jackson .annotation .JsonProperty ;
5+ import com .fasterxml .jackson .core .JsonParser ;
6+ import com .fasterxml .jackson .core .JsonProcessingException ;
7+ import com .fasterxml .jackson .databind .DeserializationContext ;
8+ import com .fasterxml .jackson .databind .JsonDeserializer ;
9+ import com .fasterxml .jackson .databind .annotation .JsonDeserialize ;
10+ import com .fasterxml .jackson .databind .JsonNode ;
11+
12+ import java .io .IOException ;
13+ import java .util .ArrayList ;
14+ import java .util .Collections ;
15+ import java .util .List ;
416
517public class GenerateImagesRequest {
618
@@ -11,7 +23,8 @@ public class GenerateImagesRequest {
1123 private String prompt ;
1224
1325 @ JsonProperty ("image" )
14- private String image ;
26+ @ JsonDeserialize (using = ImageDeserializer .class )
27+ private List <String > image ;
1528
1629 @ JsonProperty ("response_format" )
1730 private String responseFormat ;
@@ -31,10 +44,39 @@ public class GenerateImagesRequest {
3144 @ JsonProperty ("optimize_prompt" )
3245 private Boolean optimizePrompt ;
3346
47+ @ JsonProperty ("sequential_image_generation" )
48+ private String sequentialImageGeneration ;
49+
50+ @ JsonProperty ("sequential_image_generation_options" )
51+ private SequentialImageGenerationOptions sequentialImageGenerationOptions ;
52+
53+ @ JsonProperty ("stream" )
54+ private Boolean stream ;
55+
56+ @ JsonIgnoreProperties (ignoreUnknown = true )
57+ public static class SequentialImageGenerationOptions {
58+ private Integer maxImages ;
59+
60+ public Integer getMaxImages () {
61+ return maxImages ;
62+ }
63+
64+ public void setMaxImages (Integer maxImages ) {
65+ this .maxImages = maxImages ;
66+ }
67+
68+ @ Override
69+ public String toString () {
70+ return "SequentialImageGenerationOptions{" +
71+ "maxImages=" + maxImages +
72+ '}' ;
73+ }
74+ }
75+
3476 public GenerateImagesRequest () {
3577 }
3678
37- public GenerateImagesRequest (String model , String prompt , String image , String responseFormat , Integer seed , Double guidanceScale , String size , Boolean watermark , Boolean optimizePrompt ) {
79+ public GenerateImagesRequest (String model , String prompt , List < String > image , String responseFormat , Integer seed , Double guidanceScale , String size , Boolean watermark , String sequentialImageGeneration , SequentialImageGenerationOptions sequentialImageGenerationOptions , Boolean optimizePrompt , Boolean stream ) {
3880 this .model = model ;
3981 this .prompt = prompt ;
4082 this .image = image ;
@@ -44,6 +86,9 @@ public GenerateImagesRequest(String model, String prompt, String image, String r
4486 this .size = size ;
4587 this .watermark = watermark ;
4688 this .optimizePrompt = optimizePrompt ;
89+ this .sequentialImageGeneration = sequentialImageGeneration ;
90+ this .sequentialImageGenerationOptions = sequentialImageGenerationOptions ;
91+ this .stream = stream ;
4792 }
4893
4994 public String getModel () {
@@ -62,14 +107,18 @@ public void setPrompt(String prompt) {
62107 this .prompt = prompt ;
63108 }
64109
65- public String getImage () {
110+ public List < String > getImage () {
66111 return this .image ;
67112 }
68113
69- public void setImage (String image ) {
114+ public void setImage (List < String > image ) {
70115 this .image = image ;
71116 }
72117
118+ public void setImage (String image ) {
119+ this .image = image == null ? null : Collections .singletonList (image );
120+ }
121+
73122 public String getResponseFormat () {
74123 return this .responseFormat ;
75124 }
@@ -118,6 +167,30 @@ public void setOptimizePrompt(Boolean optimizePrompt) {
118167 this .optimizePrompt = optimizePrompt ;
119168 }
120169
170+ public Boolean getStream () {
171+ return this .stream ;
172+ }
173+
174+ public void setStream (Boolean stream ) {
175+ this .stream = stream ;
176+ }
177+
178+ public SequentialImageGenerationOptions getSequentialImageGenerationOptions () {
179+ return this .sequentialImageGenerationOptions ;
180+ }
181+
182+ public void setSequentialImageGenerationOptions (SequentialImageGenerationOptions sequentialImageGenerationOptions ) {
183+ this .sequentialImageGenerationOptions = sequentialImageGenerationOptions ;
184+ }
185+
186+ public String getSequentialImageGeneration () {
187+ return sequentialImageGeneration ;
188+ }
189+
190+ public void setSequentialImageGeneration (String sequentialImageGeneration ) {
191+ this .sequentialImageGeneration = sequentialImageGeneration ;
192+ }
193+
121194 @ Override
122195 public String toString () {
123196 return "GenerateImagesRequest{" +
@@ -130,6 +203,9 @@ public String toString() {
130203 ", size=" + size +
131204 ", watermark=" + watermark +
132205 ", optimizePrompt=" + optimizePrompt +
206+ ", stream=" + stream +
207+ ", sequentialImageGeneration=" + sequentialImageGeneration +
208+ ", sequentialImageGenerationOptions=" + sequentialImageGenerationOptions +
133209 '}' ;
134210 }
135211
@@ -140,13 +216,19 @@ public static GenerateImagesRequest.Builder builder() {
140216 public static class Builder {
141217 private String model ;
142218 private String prompt ;
143- private String image ;
219+ @ JsonDeserialize (using = ImageDeserializer .class )
220+ private List <String > image ;
144221 private String responseFormat ;
145222 private Integer seed ;
146223 private Double guidanceScale ;
147224 private String size ;
148225 private Boolean watermark ;
149226 private Boolean optimizePrompt ;
227+ private String sequentialImageGeneration ;
228+
229+ private SequentialImageGenerationOptions sequentialImageGenerationOptions ;
230+
231+ private Boolean stream ;
150232
151233 private Builder () {
152234 }
@@ -161,11 +243,16 @@ public GenerateImagesRequest.Builder prompt(String prompt) {
161243 return this ;
162244 }
163245
164- public GenerateImagesRequest .Builder image (String image ) {
246+ public GenerateImagesRequest .Builder image (List < String > image ) {
165247 this .image = image ;
166248 return this ;
167249 }
168250
251+ public GenerateImagesRequest .Builder image (String image ) {
252+ this .image = image == null ? null : Collections .singletonList (image );
253+ return this ;
254+ }
255+
169256 public GenerateImagesRequest .Builder responseFormat (String responseFormat ) {
170257 this .responseFormat = responseFormat ;
171258 return this ;
@@ -196,6 +283,21 @@ public GenerateImagesRequest.Builder optimizePrompt(Boolean optimizePrompt) {
196283 return this ;
197284 }
198285
286+ public GenerateImagesRequest .Builder sequentialImageGeneration (String sequentialImageGeneration ) {
287+ this .sequentialImageGeneration = sequentialImageGeneration ;
288+ return this ;
289+ }
290+
291+ public GenerateImagesRequest .Builder sequentialImageGenerationOptions (SequentialImageGenerationOptions sequentialImageGenerationOptions ) {
292+ this .sequentialImageGenerationOptions = sequentialImageGenerationOptions ;
293+ return this ;
294+ }
295+
296+ public GenerateImagesRequest .Builder stream (Boolean stream ) {
297+ this .stream = stream ;
298+ return this ;
299+ }
300+
199301 public GenerateImagesRequest build () {
200302 GenerateImagesRequest generateImagesRequest = new GenerateImagesRequest ();
201303 generateImagesRequest .setModel (model );
@@ -207,7 +309,36 @@ public GenerateImagesRequest build() {
207309 generateImagesRequest .setSize (size );
208310 generateImagesRequest .setWatermark (watermark );
209311 generateImagesRequest .setOptimizePrompt (optimizePrompt );
312+ generateImagesRequest .setSequentialImageGeneration (sequentialImageGeneration );
313+ generateImagesRequest .setSequentialImageGenerationOptions (sequentialImageGenerationOptions );
314+ generateImagesRequest .setStream (stream );
210315 return generateImagesRequest ;
211316 }
212317 }
213318}
319+
320+ class ImageDeserializer extends JsonDeserializer <List <String >> {
321+ @ Override
322+ public List <String > deserialize (JsonParser p , DeserializationContext ctxt )
323+ throws IOException , JsonProcessingException {
324+
325+ JsonNode node = p .getCodec ().readTree (p );
326+
327+ // 如果是单个 string
328+ if (node .isTextual ()) {
329+ return Collections .singletonList (node .asText ());
330+ }
331+
332+ // 如果是数组
333+ if (node .isArray ()) {
334+ List <String > list = new ArrayList <>();
335+ for (JsonNode element : node ) {
336+ list .add (element .asText ());
337+ }
338+ return list ;
339+ }
340+
341+ // 其他情况(null、对象等)返回空
342+ return Collections .emptyList ();
343+ }
344+ }
0 commit comments