diff --git a/spring-ai-core/src/main/java/org/springframework/ai/image/ImageResponse.java b/spring-ai-core/src/main/java/org/springframework/ai/image/ImageResponse.java index f4029c9f19..70a4b946a8 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/image/ImageResponse.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/image/ImageResponse.java @@ -19,32 +19,72 @@ import java.util.Objects; import org.springframework.ai.model.ModelResponse; +import org.springframework.util.CollectionUtils; +/** + * The image completion (e.g. imageGeneration) response returned by an AI provider. + * + * @author Mark Pollack + * @author Christian Tzolov + * @author Hyunjoon Choi + */ public class ImageResponse implements ModelResponse { private final ImageResponseMetadata imageResponseMetadata; + /** + * List of generate images returned by the AI provider. + */ private final List imageGenerations; + /** + * Construct a new {@link ImageResponse} instance without metadata. + * @param generations the {@link List} of {@link ImageGeneration} returned by the AI + * provider. + */ public ImageResponse(List generations) { this(generations, ImageResponseMetadata.NULL); } + /** + * Construct a new {@link ImageResponse} instance. + * @param generations the {@link List} of {@link ImageGeneration} returned by the AI + * provider. + * @param imageResponseMetadata {@link ImageResponseMetadata} containing information + * about the use of the AI provider's API. + */ public ImageResponse(List generations, ImageResponseMetadata imageResponseMetadata) { this.imageResponseMetadata = imageResponseMetadata; this.imageGenerations = List.copyOf(generations); } + /** + * The {@link List} of {@link ImageGeneration generated outputs}. + *

+ * It is a {@link List} of {@link List lists} because the Prompt could request + * multiple output {@link ImageGeneration generations}. + * @return the {@link List} of {@link ImageGeneration generated outputs}. + */ @Override - public ImageGeneration getResult() { - return imageGenerations.get(0); + public List getResults() { + return imageGenerations; } + /** + * @return Returns the first {@link ImageGeneration} in the generations list. + */ @Override - public List getResults() { - return imageGenerations; + public ImageGeneration getResult() { + if (CollectionUtils.isEmpty(this.imageGenerations)) { + return null; + } + return imageGenerations.get(0); } + /** + * @return Returns {@link ImageResponseMetadata} containing information about the use + * of the AI provider's API. + */ @Override public ImageResponseMetadata getMetadata() { return imageResponseMetadata; @@ -52,8 +92,8 @@ public ImageResponseMetadata getMetadata() { @Override public String toString() { - return "ImageResponse{" + "imageResponseMetadata=" + imageResponseMetadata + ", imageGenerations=" - + imageGenerations + '}'; + return "ImageResponse [" + "imageResponseMetadata=" + imageResponseMetadata + ", imageGenerations=" + + imageGenerations + "]"; } @Override