From 1473cd8910544f364f9d6b6415f551fff5c7d74c Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Wed, 2 Jul 2025 03:02:22 +0700 Subject: [PATCH 1/5] Correct NonNull annotation package Signed-off-by: Tran Ngoc Nhan --- .../org/springframework/ai/model/AbstractResponseMetadata.java | 2 +- .../org/springframework/ai/model/MutableResponseMetadata.java | 2 +- .../java/org/springframework/ai/model/ResponseMetadata.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java index 627b74d29b4..c9a83f38c40 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java @@ -21,7 +21,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import io.micrometer.common.lang.NonNull; +import org.springframework.lang.NonNull; import io.micrometer.common.lang.Nullable; public class AbstractResponseMetadata { diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java index 106a90e6867..4ec26054c42 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java @@ -22,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -import io.micrometer.common.lang.NonNull; +import org.springframework.lang.NonNull; import io.micrometer.common.lang.Nullable; public class MutableResponseMetadata implements ResponseMetadata { diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java index 7b63e91a481..e3986dc241c 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java @@ -20,7 +20,7 @@ import java.util.Set; import java.util.function.Supplier; -import io.micrometer.common.lang.NonNull; +import org.springframework.lang.NonNull; import io.micrometer.common.lang.Nullable; /** From aee145910810c5f0c8199c56d3385c572c11c93c Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Wed, 2 Jul 2025 03:03:04 +0700 Subject: [PATCH 2/5] Correct Nullable annotation package Signed-off-by: Tran Ngoc Nhan --- .../org/springframework/ai/model/AbstractResponseMetadata.java | 2 +- .../org/springframework/ai/model/MutableResponseMetadata.java | 2 +- .../java/org/springframework/ai/model/ResponseMetadata.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java index c9a83f38c40..687cb7a6e18 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java @@ -22,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.springframework.lang.NonNull; -import io.micrometer.common.lang.Nullable; +import org.springframework.lang.Nullable; public class AbstractResponseMetadata { diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java index 4ec26054c42..d74d6c0bf24 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java @@ -23,7 +23,7 @@ import java.util.function.Function; import org.springframework.lang.NonNull; -import io.micrometer.common.lang.Nullable; +import org.springframework.lang.Nullable; public class MutableResponseMetadata implements ResponseMetadata { diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java index e3986dc241c..89c4fa284d7 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java @@ -21,7 +21,7 @@ import java.util.function.Supplier; import org.springframework.lang.NonNull; -import io.micrometer.common.lang.Nullable; +import org.springframework.lang.Nullable; /** * Interface representing metadata associated with an AI model's response. From e0f041e50faa0d025f2c1843845ec1df25d27e02 Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Wed, 2 Jul 2025 03:07:38 +0700 Subject: [PATCH 3/5] Replace jetbrains NotNull Signed-off-by: Tran Ngoc Nhan --- .../autoconfigure/OpenAIAutoConfigurationUtil.java | 5 ++--- .../vertexai/gemini/VertexAiGeminiChatModelIT.java | 6 +++--- .../PgVectorStoreWithChatMemoryAdvisorIT.java | 14 +++++++------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAIAutoConfigurationUtil.java b/auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAIAutoConfigurationUtil.java index 60fbb75cbcc..7eff1898fa4 100644 --- a/auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAIAutoConfigurationUtil.java +++ b/auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAIAutoConfigurationUtil.java @@ -20,8 +20,7 @@ import java.util.List; import java.util.Map; -import org.jetbrains.annotations.NotNull; - +import org.springframework.lang.NonNull; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.MultiValueMap; @@ -33,7 +32,7 @@ private OpenAIAutoConfigurationUtil() { // Avoids instantiation } - public static @NotNull ResolvedConnectionProperties resolveConnectionProperties( + public static @NonNull ResolvedConnectionProperties resolveConnectionProperties( OpenAiParentProperties commonProperties, OpenAiParentProperties modelProperties, String modelType) { String baseUrl = StringUtils.hasText(modelProperties.getBaseUrl()) ? modelProperties.getBaseUrl() diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java index 2c37f0608a6..9bacdde2066 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ import com.google.cloud.vertexai.Transport; import com.google.cloud.vertexai.VertexAI; import io.micrometer.observation.ObservationRegistry; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; @@ -56,6 +55,7 @@ import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import org.springframework.lang.NonNull; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -130,7 +130,7 @@ void testSafetySettings() { assertThat(response.getResult().getMetadata().getFinishReason()).isEqualTo("SAFETY"); } - @NotNull + @NonNull private Prompt createPrompt(VertexAiGeminiChatOptions chatOptions) { String request = "Tell me about 3 famous pirates from the Golden Age of Piracy and why they did."; String name = "Bob"; diff --git a/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/pgvector/PgVectorStoreWithChatMemoryAdvisorIT.java b/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/pgvector/PgVectorStoreWithChatMemoryAdvisorIT.java index 9d180365805..089d722e3a7 100644 --- a/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/pgvector/PgVectorStoreWithChatMemoryAdvisorIT.java +++ b/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/pgvector/PgVectorStoreWithChatMemoryAdvisorIT.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,6 @@ import java.util.Map; import java.util.UUID; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -45,6 +44,7 @@ import org.springframework.ai.embedding.EmbeddingModel; import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.lang.NonNull; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -68,7 +68,7 @@ class PgVectorStoreWithChatMemoryAdvisorIT { float[] embed = { 0.003961659F, -0.0073295482F, 0.02663665F }; - private static @NotNull ChatModel chatModelAlwaysReturnsTheSameReply() { + private static @NonNull ChatModel chatModelAlwaysReturnsTheSameReply() { ChatModel chatModel = mock(ChatModel.class); ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Prompt.class); ChatResponse chatResponse = new ChatResponse(List.of(new Generation(new AssistantMessage(""" @@ -95,7 +95,7 @@ private static PgVectorStore createPgVectorStoreUsingTestcontainer(EmbeddingMode .build(); } - private static @NotNull JdbcTemplate createJdbcTemplateWithConnectionToTestcontainer() { + private static @NonNull JdbcTemplate createJdbcTemplateWithConnectionToTestcontainer() { PGSimpleDataSource ds = new PGSimpleDataSource(); ds.setUrl("jdbc:postgresql://localhost:" + postgresContainer.getMappedPort(5432) + "/postgres"); ds.setUser(postgresContainer.getUsername()); @@ -123,7 +123,7 @@ private static void verifyRequestHasBeenAdvisedWithMessagesFromVectorStore(ChatM * Create a mock ChatModel that supports streaming responses for testing. * @return A mock ChatModel that returns a predefined streaming response */ - private static @NotNull ChatModel chatModelWithStreamingSupport() { + private static @NonNull ChatModel chatModelWithStreamingSupport() { ChatModel chatModel = mock(ChatModel.class); // Mock the regular call method @@ -158,7 +158,7 @@ private static void verifyRequestHasBeenAdvisedWithMessagesFromVectorStore(ChatM * VectorStoreChatMemoryAdvisor. * @return A mock ChatModel that returns a problematic streaming response */ - private static @NotNull ChatModel chatModelWithProblematicStreamingBehavior() { + private static @NonNull ChatModel chatModelWithProblematicStreamingBehavior() { ChatModel chatModel = mock(ChatModel.class); // Mock the regular call method @@ -390,7 +390,7 @@ private Throwable getRootCause(Throwable throwable) { } @SuppressWarnings("unchecked") - private @NotNull EmbeddingModel embeddingNModelShouldAlwaysReturnFakedEmbed() { + private @NonNull EmbeddingModel embeddingNModelShouldAlwaysReturnFakedEmbed() { EmbeddingModel embeddingModel = mock(EmbeddingModel.class); Mockito.doAnswer(invocationOnMock -> List.of(this.embed, this.embed)) From c20b7b3c145253845f4f8c6ecf6df6dd067d29ac Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Wed, 2 Jul 2025 03:10:19 +0700 Subject: [PATCH 4/5] Update copyright headers Signed-off-by: Tran Ngoc Nhan --- .../org/springframework/ai/model/AbstractResponseMetadata.java | 2 +- .../org/springframework/ai/model/MutableResponseMetadata.java | 2 +- .../java/org/springframework/ai/model/ResponseMetadata.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java index 687cb7a6e18..33ece56b416 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/AbstractResponseMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java index d74d6c0bf24..e84d6c746e1 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/MutableResponseMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java b/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java index 89c4fa284d7..cda2723d61e 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/ResponseMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 8bede16d7c06ac25f5726d8d16eede7a1863b26e Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Thu, 3 Jul 2025 00:07:00 +0700 Subject: [PATCH 5/5] Add package-info Signed-off-by: Tran Ngoc Nhan --- .../openai/autoconfigure/package-info.java | 22 +++++++++++++++++++ .../ai/model/package-info.java | 7 +++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/package-info.java diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/package-info.java b/auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/package-info.java new file mode 100644 index 00000000000..23908ee5389 --- /dev/null +++ b/auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/package-info.java @@ -0,0 +1,22 @@ +/* + * Copyright 2025-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NonNullApi +@NonNullFields +package org.springframework.ai.model.openai.autoconfigure; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; \ No newline at end of file diff --git a/spring-ai-model/src/main/java/org/springframework/ai/model/package-info.java b/spring-ai-model/src/main/java/org/springframework/ai/model/package-info.java index 207af410e2f..f1edcb4e8f6 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/model/package-info.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,4 +25,9 @@ * */ +@NonNullApi +@NonNullFields package org.springframework.ai.model; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; \ No newline at end of file