From 399e419c4c968b317d9ed97eccc5c549f931a7b0 Mon Sep 17 00:00:00 2001 From: nirsa Date: Wed, 25 Jun 2025 18:26:56 +0900 Subject: [PATCH 1/2] Refactor: Add null check, optimize string joining, and add JavaDocs Signed-off-by: nirsa Signed-off-by: nirsa --- .../ai/openai/api/OpenAiApi.java | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java index 383065fc209..33f12b4bcc0 100644 --- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java +++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java @@ -21,15 +21,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.function.Predicate; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.annotation.JsonProperty; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; +import java.util.stream.Collectors; import org.springframework.ai.model.ApiKey; import org.springframework.ai.model.ChatModelDescription; @@ -50,6 +42,16 @@ import org.springframework.web.client.RestClient; import org.springframework.web.reactive.function.client.WebClient; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + /** * Single class implementation of the * OpenAI Chat Completion @@ -144,11 +146,20 @@ public OpenAiApi(String baseUrl, ApiKey apiKey, MultiValueMap he .build(); // @formatter:on } + /** + * Returns a string containing all text values from the given media content list. Only + * elements of type "text" are processed and concatenated in order. + * @param content The list of {@link ChatCompletionMessage.MediaContent} + * @return a string containing all text values from "text" type elements + * @throws IllegalArgumentException if content is null + */ public static String getTextContent(List content) { + Assert.notNull(content, "content cannot be null"); + return content.stream() .filter(c -> "text".equals(c.type())) .map(ChatCompletionMessage.MediaContent::text) - .reduce("", (a, b) -> a + b); + .collect(Collectors.joining()); } /** From 08b73ce58d28a7184e729cafeef13c8b0d5fff29 Mon Sep 17 00:00:00 2001 From: nirsa Date: Thu, 26 Jun 2025 03:09:23 +0900 Subject: [PATCH 2/2] Style: restore standard import order Signed-off-by: nirsa --- .../ai/openai/api/OpenAiApi.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java index 33f12b4bcc0..9f2e8a9ebdb 100644 --- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java +++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java @@ -23,6 +23,15 @@ import java.util.function.Predicate; import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + import org.springframework.ai.model.ApiKey; import org.springframework.ai.model.ChatModelDescription; import org.springframework.ai.model.ModelOptionsUtils; @@ -42,16 +51,6 @@ import org.springframework.web.client.RestClient; import org.springframework.web.reactive.function.client.WebClient; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.annotation.JsonProperty; - -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - /** * Single class implementation of the * OpenAI Chat Completion