Skip to content

Commit 0ae56f7

Browse files
ielatifilayaperumalg
authored andcommitted
Fix openai auto-configuration
Signed-off-by: Issam El-atif <[email protected]>
1 parent 5ab9365 commit 0ae56f7

16 files changed

+127
-79
lines changed

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAiAudioSpeechAutoConfiguration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2626
import org.springframework.beans.factory.ObjectProvider;
2727
import org.springframework.boot.autoconfigure.AutoConfiguration;
28-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
2928
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3029
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3130
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -47,15 +46,14 @@
4746
* @author Stefan Vassilev
4847
* @author Thomas Vitale
4948
* @author Ilayaperumal Gopinathan
49+
* @author Issam El-atif
5050
*/
5151
@AutoConfiguration(after = { RestClientAutoConfiguration.class, WebClientAutoConfiguration.class,
5252
SpringAiRetryAutoConfiguration.class })
5353
@ConditionalOnClass(OpenAiApi.class)
5454
@ConditionalOnProperty(name = SpringAIModelProperties.AUDIO_SPEECH_MODEL, havingValue = SpringAIModels.OPENAI,
5555
matchIfMissing = true)
5656
@EnableConfigurationProperties({ OpenAiConnectionProperties.class, OpenAiAudioSpeechProperties.class })
57-
@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
58-
WebClientAutoConfiguration.class })
5957
public class OpenAiAudioSpeechAutoConfiguration {
6058

6159
@Bean

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAiAudioTranscriptionAutoConfiguration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2626
import org.springframework.beans.factory.ObjectProvider;
2727
import org.springframework.boot.autoconfigure.AutoConfiguration;
28-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
2928
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3029
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3130
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -47,15 +46,14 @@
4746
* @author Stefan Vassilev
4847
* @author Thomas Vitale
4948
* @author Ilayaperumal Gopinathan
49+
* @author Issam El-atif
5050
*/
5151
@AutoConfiguration(after = { RestClientAutoConfiguration.class, WebClientAutoConfiguration.class,
5252
SpringAiRetryAutoConfiguration.class })
5353
@ConditionalOnClass(OpenAiApi.class)
5454
@ConditionalOnProperty(name = SpringAIModelProperties.AUDIO_TRANSCRIPTION_MODEL, havingValue = SpringAIModels.OPENAI,
5555
matchIfMissing = true)
5656
@EnableConfigurationProperties({ OpenAiConnectionProperties.class, OpenAiAudioTranscriptionProperties.class })
57-
@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
58-
WebClientAutoConfiguration.class })
5957
public class OpenAiAudioTranscriptionAutoConfiguration {
6058

6159
@Bean

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAiChatAutoConfiguration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
3232
import org.springframework.beans.factory.ObjectProvider;
3333
import org.springframework.boot.autoconfigure.AutoConfiguration;
34-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
3534
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3635
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3736
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -53,15 +52,14 @@
5352
* @author Stefan Vassilev
5453
* @author Thomas Vitale
5554
* @author Ilayaperumal Gopinathan
55+
* @author Issam El-atif
5656
*/
5757
@AutoConfiguration(after = { RestClientAutoConfiguration.class, WebClientAutoConfiguration.class,
5858
SpringAiRetryAutoConfiguration.class, ToolCallingAutoConfiguration.class })
5959
@ConditionalOnClass(OpenAiApi.class)
6060
@EnableConfigurationProperties({ OpenAiConnectionProperties.class, OpenAiChatProperties.class })
6161
@ConditionalOnProperty(name = SpringAIModelProperties.CHAT_MODEL, havingValue = SpringAIModels.OPENAI,
6262
matchIfMissing = true)
63-
@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
64-
WebClientAutoConfiguration.class, ToolCallingAutoConfiguration.class })
6563
public class OpenAiChatAutoConfiguration {
6664

6765
@Bean

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAiEmbeddingAutoConfiguration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2828
import org.springframework.beans.factory.ObjectProvider;
2929
import org.springframework.boot.autoconfigure.AutoConfiguration;
30-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
3130
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3231
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3332
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -49,15 +48,14 @@
4948
* @author Stefan Vassilev
5049
* @author Thomas Vitale
5150
* @author Ilayaperumal Gopinathan
51+
* @author Issam El-atif
5252
*/
5353
@AutoConfiguration(after = { RestClientAutoConfiguration.class, WebClientAutoConfiguration.class,
5454
SpringAiRetryAutoConfiguration.class })
5555
@ConditionalOnClass(OpenAiApi.class)
5656
@ConditionalOnProperty(name = SpringAIModelProperties.EMBEDDING_MODEL, havingValue = SpringAIModels.OPENAI,
5757
matchIfMissing = true)
5858
@EnableConfigurationProperties({ OpenAiConnectionProperties.class, OpenAiEmbeddingProperties.class })
59-
@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
60-
WebClientAutoConfiguration.class })
6159
public class OpenAiEmbeddingAutoConfiguration {
6260

6361
@Bean

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAiImageAutoConfiguration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2929
import org.springframework.beans.factory.ObjectProvider;
3030
import org.springframework.boot.autoconfigure.AutoConfiguration;
31-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
3231
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3332
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3433
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -50,15 +49,14 @@
5049
* @author Thomas Vitale
5150
* @author Ilayaperumal Gopinathan
5251
* @author lambochen
52+
* @author Issam El-atif
5353
*/
5454
@AutoConfiguration(after = { RestClientAutoConfiguration.class, WebClientAutoConfiguration.class,
5555
SpringAiRetryAutoConfiguration.class })
5656
@ConditionalOnClass(OpenAiApi.class)
5757
@ConditionalOnProperty(name = SpringAIModelProperties.IMAGE_MODEL, havingValue = SpringAIModels.OPENAI,
5858
matchIfMissing = true)
5959
@EnableConfigurationProperties({ OpenAiConnectionProperties.class, OpenAiImageProperties.class })
60-
@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
61-
WebClientAutoConfiguration.class })
6260
public class OpenAiImageAutoConfiguration {
6361

6462
@Bean

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAiModerationAutoConfiguration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2626
import org.springframework.beans.factory.ObjectProvider;
2727
import org.springframework.boot.autoconfigure.AutoConfiguration;
28-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
2928
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3029
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3130
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -46,15 +45,14 @@
4645
* @author Stefan Vassilev
4746
* @author Thomas Vitale
4847
* @author Ilayaperumal Gopinathan
48+
* @author Issam El-atif
4949
*/
5050
@AutoConfiguration(after = { RestClientAutoConfiguration.class, WebClientAutoConfiguration.class,
5151
SpringAiRetryAutoConfiguration.class })
5252
@ConditionalOnClass(OpenAiApi.class)
5353
@ConditionalOnProperty(name = SpringAIModelProperties.MODERATION_MODEL, havingValue = SpringAIModels.OPENAI,
5454
matchIfMissing = true)
5555
@EnableConfigurationProperties({ OpenAiConnectionProperties.class, OpenAiModerationProperties.class })
56-
@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
57-
WebClientAutoConfiguration.class })
5856
public class OpenAiModerationAutoConfiguration {
5957

6058
@Bean

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/test/java/org/springframework/ai/model/openai/autoconfigure/ChatClientAutoConfigurationIT.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.ai.chat.client.ChatClient;
2727
import org.springframework.ai.chat.client.ChatClientCustomizer;
2828
import org.springframework.ai.model.chat.client.autoconfigure.ChatClientAutoConfiguration;
29+
import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration;
2930
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
3031
import org.springframework.boot.autoconfigure.AutoConfigurations;
3132
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
@@ -37,6 +38,7 @@
3738

3839
/**
3940
* @author Christian Tzolov
41+
* @author Issam El-atif
4042
*/
4143
@EnabledIfEnvironmentVariable(named = "OPENAI_API_KEY", matches = ".*")
4244
public class ChatClientAutoConfigurationIT {
@@ -46,9 +48,9 @@ public class ChatClientAutoConfigurationIT {
4648
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
4749
.withPropertyValues("spring.ai.openai.apiKey=" + System.getenv("OPENAI_API_KEY"),
4850
"spring.ai.openai.chat.options.model=gpt-4o")
49-
.withConfiguration(
50-
AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
51-
OpenAiChatAutoConfiguration.class, ChatClientAutoConfiguration.class));
51+
.withConfiguration(AutoConfigurations.of(SpringAiRetryAutoConfiguration.class,
52+
RestClientAutoConfiguration.class, ToolCallingAutoConfiguration.class,
53+
OpenAiChatAutoConfiguration.class, ChatClientAutoConfiguration.class));
5254

5355
@Test
5456
void implicitlyEnabled() {

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/test/java/org/springframework/ai/model/openai/autoconfigure/OpenAiAutoConfigurationIT.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,17 @@
3333
import org.springframework.ai.embedding.EmbeddingResponse;
3434
import org.springframework.ai.image.ImagePrompt;
3535
import org.springframework.ai.image.ImageResponse;
36+
import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration;
3637
import org.springframework.ai.openai.OpenAiAudioSpeechModel;
3738
import org.springframework.ai.openai.OpenAiAudioTranscriptionModel;
3839
import org.springframework.ai.openai.OpenAiChatModel;
3940
import org.springframework.ai.openai.OpenAiEmbeddingModel;
4041
import org.springframework.ai.openai.OpenAiImageModel;
4142
import org.springframework.ai.openai.api.OpenAiApi;
43+
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
4244
import org.springframework.boot.autoconfigure.AutoConfigurations;
45+
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
46+
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
4347
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
4448
import org.springframework.core.io.ClassPathResource;
4549
import org.springframework.core.io.Resource;
@@ -52,7 +56,10 @@ public class OpenAiAutoConfigurationIT {
5256
private static final Log logger = LogFactory.getLog(OpenAiAutoConfigurationIT.class);
5357

5458
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
55-
.withPropertyValues("spring.ai.openai.apiKey=" + System.getenv("OPENAI_API_KEY"));
59+
.withPropertyValues("spring.ai.openai.apiKey=" + System.getenv("OPENAI_API_KEY"))
60+
.withConfiguration(
61+
AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
62+
WebClientAutoConfiguration.class, ToolCallingAutoConfiguration.class));
5663

5764
@Test
5865
void chatCall() {

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/test/java/org/springframework/ai/model/openai/autoconfigure/OpenAiModelConfigurationTests.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,18 @@
1818

1919
import org.junit.jupiter.api.Test;
2020

21+
import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration;
2122
import org.springframework.ai.openai.OpenAiAudioSpeechModel;
2223
import org.springframework.ai.openai.OpenAiAudioTranscriptionModel;
2324
import org.springframework.ai.openai.OpenAiChatModel;
2425
import org.springframework.ai.openai.OpenAiEmbeddingModel;
2526
import org.springframework.ai.openai.OpenAiImageModel;
2627
import org.springframework.ai.openai.OpenAiModerationModel;
2728
import org.springframework.ai.openai.api.OpenAiApi;
29+
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2830
import org.springframework.boot.autoconfigure.AutoConfigurations;
31+
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
32+
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
2933
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3034

3135
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,11 +38,15 @@
3438
* Unit Tests for OpenAI auto configurations' conditional enabling of models.
3539
*
3640
* @author Ilayaperumal Gopinathan
41+
* @author Issam El-atif
3742
*/
3843
public class OpenAiModelConfigurationTests {
3944

4045
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
41-
.withPropertyValues("spring.ai.openai.api-key=API_KEY", "spring.ai.openai.base-url=TEST_BASE_URL");
46+
.withPropertyValues("spring.ai.openai.api-key=API_KEY", "spring.ai.openai.base-url=TEST_BASE_URL")
47+
.withConfiguration(
48+
AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class,
49+
WebClientAutoConfiguration.class, ToolCallingAutoConfiguration.class));
4250

4351
@Test
4452
void chatModelActivation() {

0 commit comments

Comments
 (0)