diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/transformer/MetadataTransformerIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/transformer/MetadataTransformerIT.java index 5fa3e0a1d..15f588fa5 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/transformer/MetadataTransformerIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/transformer/MetadataTransformerIT.java @@ -24,8 +24,8 @@ import java.util.Map; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; -import org.springframework.ai.chat.transformer.KeywordMetadataEnricher; -import org.springframework.ai.chat.transformer.SummaryMetadataEnricher; +import org.springframework.ai.model.transformer.KeywordMetadataEnricher; +import org.springframework.ai.model.transformer.SummaryMetadataEnricher; import org.springframework.ai.document.DefaultContentFormatter; import org.springframework.ai.document.Document; import org.springframework.ai.openai.OpenAiChatModel; diff --git a/spring-ai-client-chat/pom.xml b/spring-ai-client-chat/pom.xml index ed6faabf6..b339ba716 100644 --- a/spring-ai-client-chat/pom.xml +++ b/spring-ai-client-chat/pom.xml @@ -73,12 +73,6 @@ spring-context - - - org.springframework - spring-messaging - - com.knuddels jtokkit @@ -91,22 +85,6 @@ ${jsonschema.version} - - com.github.victools - jsonschema-module-jackson - ${jsonschema.version} - - - - com.fasterxml.jackson.core - jackson-databind - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - org.jetbrains.kotlin kotlin-stdlib diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/FactCheckingEvaluator.java b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/evaluation/FactCheckingEvaluator.java similarity index 96% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/FactCheckingEvaluator.java rename to spring-ai-client-chat/src/main/java/org/springframework/ai/chat/evaluation/FactCheckingEvaluator.java index 7da77ff15..870b87663 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/FactCheckingEvaluator.java +++ b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/evaluation/FactCheckingEvaluator.java @@ -14,11 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.evaluation; +package org.springframework.ai.chat.evaluation; import java.util.Collections; import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.evaluation.EvaluationRequest; +import org.springframework.ai.evaluation.EvaluationResponse; +import org.springframework.ai.evaluation.Evaluator; /** * Implementation of {@link Evaluator} used to evaluate the factual accuracy of Large diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/evaluation/RelevancyEvaluator.java similarity index 90% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java rename to spring-ai-client-chat/src/main/java/org/springframework/ai/chat/evaluation/RelevancyEvaluator.java index b85591333..5ae2c4393 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java +++ b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/evaluation/RelevancyEvaluator.java @@ -14,11 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.evaluation; +package org.springframework.ai.chat.evaluation; import java.util.Collections; import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.evaluation.EvaluationRequest; +import org.springframework.ai.evaluation.EvaluationResponse; +import org.springframework.ai.evaluation.Evaluator; public class RelevancyEvaluator implements Evaluator { diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java b/spring-ai-commons/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java rename to spring-ai-commons/src/main/java/org/springframework/ai/evaluation/EvaluationRequest.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/EvaluationResponse.java b/spring-ai-commons/src/main/java/org/springframework/ai/evaluation/EvaluationResponse.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/EvaluationResponse.java rename to spring-ai-commons/src/main/java/org/springframework/ai/evaluation/EvaluationResponse.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/Evaluator.java b/spring-ai-commons/src/main/java/org/springframework/ai/evaluation/Evaluator.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/evaluation/Evaluator.java rename to spring-ai-commons/src/main/java/org/springframework/ai/evaluation/Evaluator.java diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/upgrade-notes.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/upgrade-notes.adoc index cf40ce4b9..c1a075d23 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/upgrade-notes.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/upgrade-notes.adoc @@ -200,6 +200,23 @@ QuestionAnswerAdvisor newAdvisor = QuestionAnswerAdvisor.builder(vectorStore) * The `PromptTemplate` API has been redesigned to support a more flexible and extensible way of templating prompts, relying on a new `TemplateRenderer` API. As part of this change, the `getInputVariables()` and `validate()` methods have been deprecated and will throw an `UnsupportedOperationException` if called. Any logic specific to a template engine should be available through the `TemplateRenderer` API. +=== Class Package Refactoring + +Several classes have been moved to different modules and packages for better organization: + +* Evaluation classes moved: +** `org.springframework.ai.evaluation.FactCheckingEvaluator` moved to `org.springframework.ai.chat.evaluation` package within `spring-ai-client-chat`. +** `org.springframework.ai.evaluation.RelevancyEvaluator` moved to `org.springframework.ai.chat.evaluation` package within `spring-ai-client-chat`. +** `org.springframework.ai.evaluation.EvaluationRequest`, `EvaluationResponse`, and `Evaluator` moved from `spring-ai-client-chat` to `spring-ai-commons` under the `org.springframework.ai.evaluation` package. +* Output converter classes moved: +** Classes within `org.springframework.ai.converter` (e.g., `BeanOutputConverter`, `ListOutputConverter`, `MapOutputConverter`, `StructuredOutputConverter`, etc.) moved from `spring-ai-client-chat` to `spring-ai-model`. +* Transformer classes moved: +** `org.springframework.ai.chat.transformer.KeywordMetadataEnricher` moved to `org.springframework.ai.model.transformer.KeywordMetadataEnricher` in `spring-ai-model`. +** `org.springframework.ai.chat.transformer.SummaryMetadataEnricher` moved to `org.springframework.ai.model.transformer.SummaryMetadataEnricher` in `spring-ai-model`. +* Utility classes moved: +** `org.springframework.ai.util.PromptAssert` moved from `spring-ai-client-chat` to `org.springframework.ai.rag.util.PromptAssert` in `spring-ai-rag`. + +Please update your imports accordingly. === Observability diff --git a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/QuestionAnswerAdvisorIT.java b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/QuestionAnswerAdvisorIT.java index 8f7530b44..05893ebd1 100644 --- a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/QuestionAnswerAdvisorIT.java +++ b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/QuestionAnswerAdvisorIT.java @@ -28,7 +28,7 @@ import org.springframework.ai.document.Document; import org.springframework.ai.document.DocumentReader; import org.springframework.ai.evaluation.EvaluationRequest; import org.springframework.ai.evaluation.EvaluationResponse; -import org.springframework.ai.evaluation.RelevancyEvaluator; +import org.springframework.ai.chat.evaluation.RelevancyEvaluator; import org.springframework.ai.integration.tests.TestApplication; import org.springframework.ai.openai.OpenAiChatModel; import org.springframework.ai.reader.markdown.MarkdownDocumentReader; diff --git a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java index a901b772a..b72c77eff 100644 --- a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java +++ b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java @@ -32,7 +32,7 @@ import org.springframework.ai.document.Document; import org.springframework.ai.document.DocumentReader; import org.springframework.ai.evaluation.EvaluationRequest; import org.springframework.ai.evaluation.EvaluationResponse; -import org.springframework.ai.evaluation.RelevancyEvaluator; +import org.springframework.ai.chat.evaluation.RelevancyEvaluator; import org.springframework.ai.integration.tests.TestApplication; import org.springframework.ai.openai.OpenAiChatModel; import org.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor; diff --git a/spring-ai-model/pom.xml b/spring-ai-model/pom.xml index fa2ef330e..167d12735 100644 --- a/spring-ai-model/pom.xml +++ b/spring-ai-model/pom.xml @@ -64,6 +64,12 @@ true + + + org.springframework + spring-messaging + + io.projectreactor reactor-core @@ -88,6 +94,17 @@ ${jsonschema.version} + + com.fasterxml.jackson.core + jackson-databind + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + com.github.victools jsonschema-module-swagger-2 diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/AbstractConversionServiceOutputConverter.java b/spring-ai-model/src/main/java/org/springframework/ai/converter/AbstractConversionServiceOutputConverter.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/AbstractConversionServiceOutputConverter.java rename to spring-ai-model/src/main/java/org/springframework/ai/converter/AbstractConversionServiceOutputConverter.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/AbstractMessageOutputConverter.java b/spring-ai-model/src/main/java/org/springframework/ai/converter/AbstractMessageOutputConverter.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/AbstractMessageOutputConverter.java rename to spring-ai-model/src/main/java/org/springframework/ai/converter/AbstractMessageOutputConverter.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java b/spring-ai-model/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java rename to spring-ai-model/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/FormatProvider.java b/spring-ai-model/src/main/java/org/springframework/ai/converter/FormatProvider.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/FormatProvider.java rename to spring-ai-model/src/main/java/org/springframework/ai/converter/FormatProvider.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/ListOutputConverter.java b/spring-ai-model/src/main/java/org/springframework/ai/converter/ListOutputConverter.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/ListOutputConverter.java rename to spring-ai-model/src/main/java/org/springframework/ai/converter/ListOutputConverter.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/MapOutputConverter.java b/spring-ai-model/src/main/java/org/springframework/ai/converter/MapOutputConverter.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/MapOutputConverter.java rename to spring-ai-model/src/main/java/org/springframework/ai/converter/MapOutputConverter.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/README.md b/spring-ai-model/src/main/java/org/springframework/ai/converter/README.md similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/README.md rename to spring-ai-model/src/main/java/org/springframework/ai/converter/README.md diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java b/spring-ai-model/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java similarity index 100% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java rename to spring-ai-model/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/transformer/KeywordMetadataEnricher.java b/spring-ai-model/src/main/java/org/springframework/ai/model/transformer/KeywordMetadataEnricher.java similarity index 97% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/chat/transformer/KeywordMetadataEnricher.java rename to spring-ai-model/src/main/java/org/springframework/ai/model/transformer/KeywordMetadataEnricher.java index 104c3db37..838fc9fe5 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/transformer/KeywordMetadataEnricher.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/transformer/KeywordMetadataEnricher.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.chat.transformer; +package org.springframework.ai.model.transformer; import java.util.List; import java.util.Map; diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/transformer/SummaryMetadataEnricher.java b/spring-ai-model/src/main/java/org/springframework/ai/model/transformer/SummaryMetadataEnricher.java similarity index 98% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/chat/transformer/SummaryMetadataEnricher.java rename to spring-ai-model/src/main/java/org/springframework/ai/model/transformer/SummaryMetadataEnricher.java index 736a56c63..5f9410517 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/transformer/SummaryMetadataEnricher.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/model/transformer/SummaryMetadataEnricher.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.chat.transformer; +package org.springframework.ai.model.transformer; import java.util.ArrayList; import java.util.HashMap; diff --git a/spring-ai-client-chat/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java b/spring-ai-model/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java similarity index 100% rename from spring-ai-client-chat/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java rename to spring-ai-model/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java diff --git a/spring-ai-client-chat/src/test/java/org/springframework/ai/converter/ListOutputConverterTest.java b/spring-ai-model/src/test/java/org/springframework/ai/converter/ListOutputConverterTest.java similarity index 100% rename from spring-ai-client-chat/src/test/java/org/springframework/ai/converter/ListOutputConverterTest.java rename to spring-ai-model/src/test/java/org/springframework/ai/converter/ListOutputConverterTest.java diff --git a/spring-ai-rag/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java b/spring-ai-rag/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java index de56d5b9e..e49183895 100644 --- a/spring-ai-rag/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java +++ b/spring-ai-rag/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java @@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory; import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.ai.document.Document; import org.springframework.ai.rag.Query; -import org.springframework.ai.util.PromptAssert; +import org.springframework.ai.rag.util.PromptAssert; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/expansion/MultiQueryExpander.java b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/expansion/MultiQueryExpander.java index aa64f46cf..314a455ba 100644 --- a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/expansion/MultiQueryExpander.java +++ b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/expansion/MultiQueryExpander.java @@ -26,7 +26,7 @@ import org.slf4j.LoggerFactory; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.ai.rag.Query; -import org.springframework.ai.util.PromptAssert; +import org.springframework.ai.rag.util.PromptAssert; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; diff --git a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/CompressionQueryTransformer.java b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/CompressionQueryTransformer.java index 7795dcf90..dc0dff576 100644 --- a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/CompressionQueryTransformer.java +++ b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/CompressionQueryTransformer.java @@ -28,7 +28,7 @@ import org.springframework.ai.chat.messages.MessageType; import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.ai.rag.Query; -import org.springframework.ai.util.PromptAssert; +import org.springframework.ai.rag.util.PromptAssert; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/RewriteQueryTransformer.java b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/RewriteQueryTransformer.java index 861df1a8e..e292f120a 100644 --- a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/RewriteQueryTransformer.java +++ b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/RewriteQueryTransformer.java @@ -23,7 +23,7 @@ import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.ai.rag.Query; -import org.springframework.ai.util.PromptAssert; +import org.springframework.ai.rag.util.PromptAssert; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/TranslationQueryTransformer.java b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/TranslationQueryTransformer.java index 6c77cffdd..a9d77365f 100644 --- a/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/TranslationQueryTransformer.java +++ b/spring-ai-rag/src/main/java/org/springframework/ai/rag/preretrieval/query/transformation/TranslationQueryTransformer.java @@ -23,7 +23,7 @@ import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.ai.rag.Query; -import org.springframework.ai.util.PromptAssert; +import org.springframework.ai.rag.util.PromptAssert; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/util/PromptAssert.java b/spring-ai-rag/src/main/java/org/springframework/ai/rag/util/PromptAssert.java similarity index 97% rename from spring-ai-client-chat/src/main/java/org/springframework/ai/util/PromptAssert.java rename to spring-ai-rag/src/main/java/org/springframework/ai/rag/util/PromptAssert.java index 6ebe362c1..adc7e3bdf 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/util/PromptAssert.java +++ b/spring-ai-rag/src/main/java/org/springframework/ai/rag/util/PromptAssert.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.util; +package org.springframework.ai.rag.util; import java.util.ArrayList; import java.util.List; diff --git a/spring-ai-client-chat/src/test/java/org/springframework/ai/util/PromptAssertTests.java b/spring-ai-rag/src/test/java/org/springframework/ai/rag/util/PromptAssertTests.java similarity index 98% rename from spring-ai-client-chat/src/test/java/org/springframework/ai/util/PromptAssertTests.java rename to spring-ai-rag/src/test/java/org/springframework/ai/rag/util/PromptAssertTests.java index 28a50cf29..c182a8f49 100644 --- a/spring-ai-client-chat/src/test/java/org/springframework/ai/util/PromptAssertTests.java +++ b/spring-ai-rag/src/test/java/org/springframework/ai/rag/util/PromptAssertTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.util; +package org.springframework.ai.rag.util; import org.junit.jupiter.api.Test;