Skip to content

Commit f8c7644

Browse files
centrumekilayaperumalg
authored andcommitted
GH-4494: Fix Bedrock Converse Proxy auto-configuration
Signed-off-by: Pawel Potaczala <[email protected]>
1 parent 7e563d0 commit f8c7644

File tree

7 files changed

+63
-16
lines changed

7 files changed

+63
-16
lines changed

auto-configurations/models/spring-ai-autoconfigure-model-bedrock-ai/src/main/java/org/springframework/ai/model/bedrock/converse/autoconfigure/BedrockConverseProxyChatAutoConfiguration.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration;
3535
import org.springframework.beans.factory.ObjectProvider;
3636
import org.springframework.boot.autoconfigure.AutoConfiguration;
37-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
3837
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
3938
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
4039
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -50,14 +49,14 @@
5049
*
5150
* @author Christian Tzolov
5251
* @author Wei Jiang
52+
* @author Pawel Potaczala
5353
*/
5454
@AutoConfiguration(after = { ToolCallingAutoConfiguration.class })
5555
@EnableConfigurationProperties({ BedrockConverseProxyChatProperties.class, BedrockAwsConnectionConfiguration.class })
5656
@ConditionalOnClass({ BedrockProxyChatModel.class, BedrockRuntimeClient.class, BedrockRuntimeAsyncClient.class })
5757
@ConditionalOnProperty(name = SpringAIModelProperties.CHAT_MODEL, havingValue = SpringAIModels.BEDROCK_CONVERSE,
5858
matchIfMissing = true)
5959
@Import(BedrockAwsConnectionConfiguration.class)
60-
@ImportAutoConfiguration({ ToolCallingAutoConfiguration.class })
6160
public class BedrockConverseProxyChatAutoConfiguration {
6261

6362
@Bean

auto-configurations/models/spring-ai-autoconfigure-model-bedrock-ai/src/test/java/org/springframework/ai/model/bedrock/converse/autoconfigure/BedrockConverseModelConfigurationTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.junit.jupiter.api.Test;
2020

2121
import org.springframework.ai.bedrock.converse.BedrockProxyChatModel;
22-
import org.springframework.boot.autoconfigure.AutoConfigurations;
2322
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2423

2524
import static org.assertj.core.api.Assertions.assertThat;
@@ -29,11 +28,12 @@
2928
* of models.
3029
*
3130
* @author Ilayaperumal Gopinathan
31+
* @author Pawel Potaczala
3232
*/
3333
public class BedrockConverseModelConfigurationTests {
3434

35-
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
36-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class));
35+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().withConfiguration(
36+
BedrockConverseProxyITUtil.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class));
3737

3838
@Test
3939
void chatModelActivation() {

auto-configurations/models/spring-ai-autoconfigure-model-bedrock-ai/src/test/java/org/springframework/ai/model/bedrock/converse/autoconfigure/BedrockConverseProxyChatAutoConfigurationIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.springframework.ai.chat.prompt.Prompt;
3333
import org.springframework.ai.model.bedrock.autoconfigure.BedrockTestUtils;
3434
import org.springframework.ai.model.bedrock.autoconfigure.RequiresAwsCredentials;
35-
import org.springframework.boot.autoconfigure.AutoConfigurations;
3635
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3736

3837
import static org.assertj.core.api.Assertions.assertThat;
@@ -46,7 +45,8 @@ public class BedrockConverseProxyChatAutoConfigurationIT {
4645
.withPropertyValues(
4746
"spring.ai.bedrock.converse.chat.options.model=" + "anthropic.claude-3-5-sonnet-20240620-v1:0",
4847
"spring.ai.bedrock.converse.chat.options.temperature=0.5")
49-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class));
48+
.withConfiguration(BedrockConverseProxyITUtil
49+
.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class));
5050

5151
@Test
5252
void call() {

auto-configurations/models/spring-ai-autoconfigure-model-bedrock-ai/src/test/java/org/springframework/ai/model/bedrock/converse/autoconfigure/BedrockConverseProxyChatPropertiesTests.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
import org.junit.jupiter.api.Test;
2020

2121
import org.springframework.ai.bedrock.converse.BedrockProxyChatModel;
22-
import org.springframework.boot.autoconfigure.AutoConfigurations;
2322
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2423

2524
import static org.assertj.core.api.Assertions.assertThat;
2625

2726
/**
2827
* @author Christian Tzolov
28+
* @author Pawel Potaczala
2929
*
3030
* Unit Tests for {@link BedrockConverseProxyChatProperties}.
3131
*/
@@ -47,7 +47,8 @@ public void chatOptionsTest() {
4747
"spring.ai.bedrock.converse.chat.options.top-k=100"
4848
)
4949
// @formatter:on
50-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class))
50+
.withConfiguration(BedrockConverseProxyITUtil
51+
.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class))
5152
.run(context -> {
5253
var chatProperties = context.getBean(BedrockConverseProxyChatProperties.class);
5354

@@ -66,20 +67,23 @@ public void chatCompletionDisabled() {
6667

6768
// It is enabled by default
6869
new ApplicationContextRunner()
69-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class))
70+
.withConfiguration(BedrockConverseProxyITUtil
71+
.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class))
7072
.run(context -> assertThat(context.getBeansOfType(BedrockConverseProxyChatProperties.class)).isNotEmpty());
7173

7274
// Explicitly enable the chat auto-configuration.
7375
new ApplicationContextRunner().withPropertyValues("spring.ai.model.chat=bedrock-converse")
74-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class))
76+
.withConfiguration(BedrockConverseProxyITUtil
77+
.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class))
7578
.run(context -> {
7679
assertThat(context.getBeansOfType(BedrockConverseProxyChatProperties.class)).isNotEmpty();
7780
assertThat(context.getBeansOfType(BedrockProxyChatModel.class)).isNotEmpty();
7881
});
7982

8083
// Explicitly disable the chat auto-configuration.
8184
new ApplicationContextRunner().withPropertyValues("spring.ai.model.chat=none")
82-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class))
85+
.withConfiguration(BedrockConverseProxyITUtil
86+
.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class))
8387
.run(context -> {
8488
assertThat(context.getBeansOfType(BedrockConverseProxyChatProperties.class)).isEmpty();
8589
assertThat(context.getBeansOfType(BedrockProxyChatModel.class)).isEmpty();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright 2025-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.ai.model.bedrock.converse.autoconfigure;
18+
19+
import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration;
20+
import org.springframework.boot.autoconfigure.AutoConfigurations;
21+
22+
/**
23+
* Utility class for Bedrock Converse Proxy integration tests.
24+
*
25+
* @author Pawel Potaczala
26+
*/
27+
public final class BedrockConverseProxyITUtil {
28+
29+
private BedrockConverseProxyITUtil() {
30+
}
31+
32+
public static AutoConfigurations bedrockConverseProxyAutoConfig(Class<?>... additionalAutoConfigurations) {
33+
Class<?>[] dependencies = new Class[] { ToolCallingAutoConfiguration.class };
34+
Class<?>[] allAutoConfigurations = new Class[dependencies.length + additionalAutoConfigurations.length];
35+
System.arraycopy(dependencies, 0, allAutoConfigurations, 0, dependencies.length);
36+
System.arraycopy(additionalAutoConfigurations, 0, allAutoConfigurations, dependencies.length,
37+
additionalAutoConfigurations.length);
38+
39+
return AutoConfigurations.of(allAutoConfigurations);
40+
}
41+
42+
}

auto-configurations/models/spring-ai-autoconfigure-model-bedrock-ai/src/test/java/org/springframework/ai/model/bedrock/converse/autoconfigure/tool/FunctionCallWithFunctionBeanIT.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import org.springframework.ai.model.bedrock.autoconfigure.BedrockTestUtils;
3434
import org.springframework.ai.model.bedrock.autoconfigure.RequiresAwsCredentials;
3535
import org.springframework.ai.model.bedrock.converse.autoconfigure.BedrockConverseProxyChatAutoConfiguration;
36-
import org.springframework.boot.autoconfigure.AutoConfigurations;
36+
import org.springframework.ai.model.bedrock.converse.autoconfigure.BedrockConverseProxyITUtil;
3737
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3838
import org.springframework.context.annotation.Bean;
3939
import org.springframework.context.annotation.Configuration;
@@ -47,7 +47,8 @@ class FunctionCallWithFunctionBeanIT {
4747
private final Logger logger = LoggerFactory.getLogger(FunctionCallWithFunctionBeanIT.class);
4848

4949
private final ApplicationContextRunner contextRunner = BedrockTestUtils.getContextRunner()
50-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class))
50+
.withConfiguration(BedrockConverseProxyITUtil
51+
.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class))
5152
.withUserConfiguration(Config.class);
5253

5354
@Test

auto-configurations/models/spring-ai-autoconfigure-model-bedrock-ai/src/test/java/org/springframework/ai/model/bedrock/converse/autoconfigure/tool/FunctionCallWithPromptFunctionIT.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
import org.springframework.ai.model.bedrock.autoconfigure.BedrockTestUtils;
3131
import org.springframework.ai.model.bedrock.autoconfigure.RequiresAwsCredentials;
3232
import org.springframework.ai.model.bedrock.converse.autoconfigure.BedrockConverseProxyChatAutoConfiguration;
33+
import org.springframework.ai.model.bedrock.converse.autoconfigure.BedrockConverseProxyITUtil;
3334
import org.springframework.ai.tool.function.FunctionToolCallback;
34-
import org.springframework.boot.autoconfigure.AutoConfigurations;
3535
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3636

3737
import static org.assertj.core.api.Assertions.assertThat;
@@ -42,7 +42,8 @@ public class FunctionCallWithPromptFunctionIT {
4242
private final Logger logger = LoggerFactory.getLogger(FunctionCallWithPromptFunctionIT.class);
4343

4444
private final ApplicationContextRunner contextRunner = BedrockTestUtils.getContextRunner()
45-
.withConfiguration(AutoConfigurations.of(BedrockConverseProxyChatAutoConfiguration.class));
45+
.withConfiguration(BedrockConverseProxyITUtil
46+
.bedrockConverseProxyAutoConfig(BedrockConverseProxyChatAutoConfiguration.class));
4647

4748
@Test
4849
void functionCallTest() {

0 commit comments

Comments
 (0)