From 244cff95d8a222258c12ff79940ccbe2dbc898b5 Mon Sep 17 00:00:00 2001 From: Pawel Potaczala <30981922+centrumek@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:43:02 +0200 Subject: [PATCH] Fix ZhiPuAI auto-configuration Signed-off-by: Pawel Potaczala <30981922+centrumek@users.noreply.github.com> --- .../ZhiPuAiChatAutoConfiguration.java | 3 - .../ZhiPuAiAutoConfigurationIT.java | 51 ++++++++--------- .../zhipuai/autoconfigure/ZhiPuAiITUtil.java | 56 ++++++++++++++++++ .../autoconfigure/ZhiPuAiPropertiesTests.java | 57 ++++++------------- .../tool/FunctionCallbackInPromptIT.java | 7 +-- ...nctionCallbackWithPlainFunctionBeanIT.java | 7 +-- .../tool/ZhipuAiFunctionCallbackIT.java | 7 +-- 7 files changed, 104 insertions(+), 84 deletions(-) create mode 100644 auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiITUtil.java diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/main/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiChatAutoConfiguration.java b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/main/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiChatAutoConfiguration.java index c7914556029..ba9468e5c4f 100644 --- a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/main/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiChatAutoConfiguration.java +++ b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/main/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiChatAutoConfiguration.java @@ -31,7 +31,6 @@ import org.springframework.ai.zhipuai.api.ZhiPuAiApi; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -57,8 +56,6 @@ @ConditionalOnProperty(name = SpringAIModelProperties.CHAT_MODEL, havingValue = SpringAIModels.ZHIPUAI, matchIfMissing = true) @EnableConfigurationProperties({ ZhiPuAiConnectionProperties.class, ZhiPuAiChatProperties.class }) -@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class, - ToolCallingAutoConfiguration.class }) public class ZhiPuAiChatAutoConfiguration { @Bean diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiAutoConfigurationIT.java b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiAutoConfigurationIT.java index badcbf8b6a1..ad65b186bc1 100644 --- a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiAutoConfigurationIT.java +++ b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiAutoConfigurationIT.java @@ -32,12 +32,9 @@ import org.springframework.ai.embedding.EmbeddingResponse; import org.springframework.ai.image.ImagePrompt; import org.springframework.ai.image.ImageResponse; -import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration; import org.springframework.ai.zhipuai.ZhiPuAiChatModel; import org.springframework.ai.zhipuai.ZhiPuAiEmbeddingModel; import org.springframework.ai.zhipuai.ZhiPuAiImageModel; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -51,40 +48,40 @@ public class ZhiPuAiAutoConfigurationIT { private static final Log logger = LogFactory.getLog(ZhiPuAiAutoConfigurationIT.class); private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withPropertyValues("spring.ai.zhipuai.apiKey=" + System.getenv("ZHIPU_AI_API_KEY")) - .withConfiguration( - AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class)); + .withPropertyValues("spring.ai.zhipuai.apiKey=" + System.getenv("ZHIPU_AI_API_KEY")); @Test void generate() { - this.contextRunner.withConfiguration(AutoConfigurations.of(ZhiPuAiChatAutoConfiguration.class)).run(context -> { - ZhiPuAiChatModel chatModel = context.getBean(ZhiPuAiChatModel.class); - ChatResponse response = chatModel.call(new Prompt("Hello", ChatOptions.builder().build())); - assertThat(response.getResult().getOutput().getText()).isNotEmpty(); - logger.info("Response: " + response); - }); + this.contextRunner.withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiChatAutoConfiguration.class)) + .run(context -> { + ZhiPuAiChatModel chatModel = context.getBean(ZhiPuAiChatModel.class); + ChatResponse response = chatModel.call(new Prompt("Hello", ChatOptions.builder().build())); + assertThat(response.getResult().getOutput().getText()).isNotEmpty(); + logger.info("Response: " + response); + }); } @Test void generateStreaming() { - this.contextRunner.withConfiguration(AutoConfigurations.of(ZhiPuAiChatAutoConfiguration.class)).run(context -> { - ZhiPuAiChatModel chatModel = context.getBean(ZhiPuAiChatModel.class); - Flux responseFlux = chatModel - .stream(new Prompt(new UserMessage("Hello"), ChatOptions.builder().build())); - String response = responseFlux.collectList() - .block() - .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) - .collect(Collectors.joining()); - - assertThat(response).isNotEmpty(); - logger.info("Response: " + response); - }); + this.contextRunner.withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiChatAutoConfiguration.class)) + .run(context -> { + ZhiPuAiChatModel chatModel = context.getBean(ZhiPuAiChatModel.class); + Flux responseFlux = chatModel + .stream(new Prompt(new UserMessage("Hello"), ChatOptions.builder().build())); + String response = responseFlux.collectList() + .block() + .stream() + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) + .collect(Collectors.joining()); + + assertThat(response).isNotEmpty(); + logger.info("Response: " + response); + }); } @Test void embedding() { - this.contextRunner.withConfiguration(AutoConfigurations.of(ZhiPuAiEmbeddingAutoConfiguration.class)) + this.contextRunner.withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiEmbeddingAutoConfiguration.class)) .run(context -> { ZhiPuAiEmbeddingModel embeddingModel = context.getBean(ZhiPuAiEmbeddingModel.class); @@ -102,7 +99,7 @@ void embedding() { @Test void generateImage() { - this.contextRunner.withConfiguration(AutoConfigurations.of(ZhiPuAiImageAutoConfiguration.class)) + this.contextRunner.withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiImageAutoConfiguration.class)) .withPropertyValues("spring.ai.zhipuai.image.options.size=1024x1024") .run(context -> { ZhiPuAiImageModel ImageModel = context.getBean(ZhiPuAiImageModel.class); diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiITUtil.java b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiITUtil.java new file mode 100644 index 00000000000..6c4c0833602 --- /dev/null +++ b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiITUtil.java @@ -0,0 +1,56 @@ +/* + * 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. + */ + +package org.springframework.ai.model.zhipuai.autoconfigure; + +import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration; +import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration; + +/** + * Utility class for ZhiPuAI integration tests. + * + * @author Pawel Potaczala + */ +public final class ZhiPuAiITUtil { + + private ZhiPuAiITUtil() { + } + + public static AutoConfigurations zhiPuAiToolAutoConfig(Class... additionalAutoConfigurations) { + Class[] dependencies = new Class[] { RestClientAutoConfiguration.class, SpringAiRetryAutoConfiguration.class, + ToolCallingAutoConfiguration.class }; + Class[] allAutoConfigurations = new Class[dependencies.length + additionalAutoConfigurations.length]; + System.arraycopy(dependencies, 0, allAutoConfigurations, 0, dependencies.length); + System.arraycopy(additionalAutoConfigurations, 0, allAutoConfigurations, dependencies.length, + additionalAutoConfigurations.length); + + return AutoConfigurations.of(allAutoConfigurations); + } + + public static AutoConfigurations zhiPuAiAutoConfig(Class... additionalAutoConfigurations) { + Class[] dependencies = new Class[] { RestClientAutoConfiguration.class, SpringAiRetryAutoConfiguration.class, + ToolCallingAutoConfiguration.class }; + Class[] allAutoConfigurations = new Class[dependencies.length + additionalAutoConfigurations.length]; + System.arraycopy(dependencies, 0, allAutoConfigurations, 0, dependencies.length); + System.arraycopy(additionalAutoConfigurations, 0, allAutoConfigurations, dependencies.length, + additionalAutoConfigurations.length); + + return AutoConfigurations.of(allAutoConfigurations); + } + +} diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiPropertiesTests.java b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiPropertiesTests.java index 7d3becba0d0..57ac64fbde5 100644 --- a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiPropertiesTests.java +++ b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/ZhiPuAiPropertiesTests.java @@ -21,13 +21,10 @@ import org.skyscreamer.jsonassert.JSONCompareMode; import org.springframework.ai.model.ModelOptionsUtils; -import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration; import org.springframework.ai.zhipuai.ZhiPuAiChatModel; import org.springframework.ai.zhipuai.ZhiPuAiEmbeddingModel; import org.springframework.ai.zhipuai.ZhiPuAiImageModel; import org.springframework.ai.zhipuai.api.ZhiPuAiApi; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -51,8 +48,7 @@ public void chatProperties() { "spring.ai.zhipuai.chat.options.model=MODEL_XYZ", "spring.ai.zhipuai.chat.options.temperature=0.55") // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .run(context -> { var chatProperties = context.getBean(ZhiPuAiChatProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -80,8 +76,7 @@ public void chatOverrideConnectionProperties() { "spring.ai.zhipuai.chat.options.model=MODEL_XYZ", "spring.ai.zhipuai.chat.options.temperature=0.55") // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .run(context -> { var chatProperties = context.getBean(ZhiPuAiChatProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -106,8 +101,7 @@ public void embeddingProperties() { "spring.ai.zhipuai.api-key=abc123", "spring.ai.zhipuai.embedding.options.model=MODEL_XYZ") // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiEmbeddingAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiEmbeddingAutoConfiguration.class)) .run(context -> { var embeddingProperties = context.getBean(ZhiPuAiEmbeddingProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -133,8 +127,7 @@ public void embeddingOverrideConnectionProperties() { "spring.ai.zhipuai.embedding.api-key=456", "spring.ai.zhipuai.embedding.options.model=MODEL_XYZ") // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiEmbeddingAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiEmbeddingAutoConfiguration.class)) .run(context -> { var embeddingProperties = context.getBean(ZhiPuAiEmbeddingProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -157,8 +150,7 @@ public void imageProperties() { "spring.ai.zhipuai.api-key=abc123", "spring.ai.zhipuai.image.options.model=MODEL_XYZ") // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiImageAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiImageAutoConfiguration.class)) .run(context -> { var imageProperties = context.getBean(ZhiPuAiImageProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -183,8 +175,7 @@ public void imageOverrideConnectionProperties() { "spring.ai.zhipuai.image.api-key=456", "spring.ai.zhipuai.image.options.model=MODEL_XYZ") // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiImageAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiImageAutoConfiguration.class)) .run(context -> { var imageProperties = context.getBean(ZhiPuAiImageProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -249,8 +240,7 @@ public void chatOptionsTest() { "spring.ai.zhipuai.chat.options.thinking.type=disabled" ) // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .run(context -> { var chatProperties = context.getBean(ZhiPuAiChatProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -296,8 +286,7 @@ public void embeddingOptionsTest() { "spring.ai.zhipuai.embedding.options.user=userXYZ" ) // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiEmbeddingAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiEmbeddingAutoConfiguration.class)) .run(context -> { var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); var embeddingProperties = context.getBean(ZhiPuAiEmbeddingProperties.class); @@ -319,8 +308,7 @@ public void imageOptionsTest() { "spring.ai.zhipuai.image.options.user=userXYZ" ) // @formatter:on - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiImageAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiImageAutoConfiguration.class)) .run(context -> { var imageProperties = context.getBean(ZhiPuAiImageProperties.class); var connectionProperties = context.getBean(ZhiPuAiConnectionProperties.class); @@ -338,8 +326,7 @@ void embeddingActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL", "spring.ai.model.embedding=none") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiEmbeddingAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiEmbeddingAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiEmbeddingProperties.class)).isEmpty(); assertThat(context.getBeansOfType(ZhiPuAiEmbeddingModel.class)).isEmpty(); @@ -347,8 +334,7 @@ void embeddingActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiEmbeddingAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiEmbeddingAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiEmbeddingProperties.class)).isNotEmpty(); assertThat(context.getBeansOfType(ZhiPuAiEmbeddingModel.class)).isNotEmpty(); @@ -357,8 +343,7 @@ void embeddingActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL", "spring.ai.model.embedding=zhipuai") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiEmbeddingAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiEmbeddingAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiEmbeddingProperties.class)).isNotEmpty(); assertThat(context.getBeansOfType(ZhiPuAiEmbeddingModel.class)).isNotEmpty(); @@ -370,8 +355,7 @@ void chatActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL", "spring.ai.model.chat=none") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiChatProperties.class)).isEmpty(); assertThat(context.getBeansOfType(ZhiPuAiChatModel.class)).isEmpty(); @@ -379,8 +363,7 @@ void chatActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiChatProperties.class)).isNotEmpty(); assertThat(context.getBeansOfType(ZhiPuAiChatModel.class)).isNotEmpty(); @@ -389,8 +372,7 @@ void chatActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL", "spring.ai.model.chat=zhipuai") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiChatProperties.class)).isNotEmpty(); assertThat(context.getBeansOfType(ZhiPuAiChatModel.class)).isNotEmpty(); @@ -403,8 +385,7 @@ void imageActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL", "spring.ai.model.image=none") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiImageAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiImageAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiImageProperties.class)).isEmpty(); assertThat(context.getBeansOfType(ZhiPuAiImageModel.class)).isEmpty(); @@ -412,8 +393,7 @@ void imageActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiImageAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiImageAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiImageProperties.class)).isNotEmpty(); assertThat(context.getBeansOfType(ZhiPuAiImageModel.class)).isNotEmpty(); @@ -422,8 +402,7 @@ void imageActivation() { new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.api-key=API_KEY", "spring.ai.zhipuai.base-url=TEST_BASE_URL", "spring.ai.model.image=zhipuai") - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiImageAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiAutoConfig(ZhiPuAiImageAutoConfiguration.class)) .run(context -> { assertThat(context.getBeansOfType(ZhiPuAiImageProperties.class)).isNotEmpty(); assertThat(context.getBeansOfType(ZhiPuAiImageModel.class)).isNotEmpty(); diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackInPromptIT.java b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackInPromptIT.java index 0cf2847ec3a..8470c188f33 100644 --- a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackInPromptIT.java +++ b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackInPromptIT.java @@ -31,12 +31,10 @@ import org.springframework.ai.chat.model.Generation; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiChatAutoConfiguration; -import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration; +import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiITUtil; import org.springframework.ai.tool.function.FunctionToolCallback; import org.springframework.ai.zhipuai.ZhiPuAiChatModel; import org.springframework.ai.zhipuai.ZhiPuAiChatOptions; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -51,8 +49,7 @@ public class FunctionCallbackInPromptIT { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.apiKey=" + System.getenv("ZHIPU_AI_API_KEY")) - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)); + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)); @Test void functionCallTest() { diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackWithPlainFunctionBeanIT.java b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackWithPlainFunctionBeanIT.java index addd2d0961a..8634afd524c 100644 --- a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackWithPlainFunctionBeanIT.java +++ b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackWithPlainFunctionBeanIT.java @@ -33,11 +33,9 @@ import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.model.tool.ToolCallingChatOptions; import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiChatAutoConfiguration; -import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration; +import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiITUtil; import org.springframework.ai.zhipuai.ZhiPuAiChatModel; import org.springframework.ai.zhipuai.ZhiPuAiChatOptions; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -55,8 +53,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.apiKey=" + System.getenv("ZHIPU_AI_API_KEY")) - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .withUserConfiguration(Config.class); @Test diff --git a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/ZhipuAiFunctionCallbackIT.java b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/ZhipuAiFunctionCallbackIT.java index 13088a263c1..bcea38585cf 100644 --- a/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/ZhipuAiFunctionCallbackIT.java +++ b/auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/ZhipuAiFunctionCallbackIT.java @@ -31,13 +31,11 @@ import org.springframework.ai.chat.model.Generation; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiChatAutoConfiguration; -import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration; +import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiITUtil; import org.springframework.ai.tool.ToolCallback; import org.springframework.ai.tool.function.FunctionToolCallback; import org.springframework.ai.zhipuai.ZhiPuAiChatModel; import org.springframework.ai.zhipuai.ZhiPuAiChatOptions; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -54,8 +52,7 @@ public class ZhipuAiFunctionCallbackIT { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withPropertyValues("spring.ai.zhipuai.apiKey=" + System.getenv("ZHIPU_AI_API_KEY")) - .withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, - RestClientAutoConfiguration.class, ZhiPuAiChatAutoConfiguration.class)) + .withConfiguration(ZhiPuAiITUtil.zhiPuAiToolAutoConfig(ZhiPuAiChatAutoConfiguration.class)) .withUserConfiguration(Config.class); @Test