diff --git a/spring-ai-spring-boot-autoconfigure/pom.xml b/spring-ai-spring-boot-autoconfigure/pom.xml
index 315e38d9d..af181ea9d 100644
--- a/spring-ai-spring-boot-autoconfigure/pom.xml
+++ b/spring-ai-spring-boot-autoconfigure/pom.xml
@@ -47,6 +47,12 @@
true
+
+ com.squareup.retrofit2
+ converter-jackson
+ 2.9.0
+
+
org.springframework.boot
diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java
index 9acfa19db..1c3cf4850 100644
--- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java
+++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java
@@ -16,8 +16,15 @@
package org.springframework.ai.autoconfigure.openai;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.theokanning.openai.OpenAiApi;
import com.theokanning.openai.service.OpenAiService;
+import okhttp3.OkHttpClient;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.jackson.JacksonConverterFactory;
+
import org.springframework.ai.autoconfigure.NativeHints;
import org.springframework.ai.embedding.EmbeddingClient;
import org.springframework.ai.openai.embedding.OpenAiEmbeddingClient;
@@ -45,11 +52,27 @@ public class OpenAiAutoConfiguration {
@Bean
public OpenAiService theoOpenAiService(OpenAiProperties openAiProperties) {
- if (!StringUtils.hasText(openAiProperties.getApiKey())) {
- throw new IllegalArgumentException(
- "You must provide an API key with the property name " + CONFIG_PREFIX + ".api-key");
+ if (openAiProperties.getBaseUrl().equals("https://api.openai.com")) {
+ if (!StringUtils.hasText(openAiProperties.getApiKey())) {
+ throw new IllegalArgumentException(
+ "You must provide an API key with the property name " + CONFIG_PREFIX + ".api-key");
+ }
}
- return new OpenAiService(openAiProperties.getApiKey(), openAiProperties.getDuration());
+
+ ObjectMapper mapper = OpenAiService.defaultObjectMapper();
+ OkHttpClient client = OpenAiService.defaultClient(openAiProperties.getApiKey(), openAiProperties.getDuration());
+
+ // Waiting for https://github.com/TheoKanning/openai-java/issues/249 to be
+ // resolved.
+ Retrofit retrofit = new Retrofit.Builder().baseUrl(openAiProperties.getBaseUrl())
+ .client(client)
+ .addConverterFactory(JacksonConverterFactory.create(mapper))
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .build();
+
+ OpenAiApi api = retrofit.create(OpenAiApi.class);
+
+ return new OpenAiService(api);
}
@Bean
diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiProperties.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiProperties.java
index d4dd19d5d..b0eec9a1c 100644
--- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiProperties.java
+++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiProperties.java
@@ -35,6 +35,8 @@ public class OpenAiProperties {
private String model = "gpt-3.5-turbo";
+ private String baseUrl = "https://api.openai.com";
+
public String getApiKey() {
return apiKey;
}
@@ -67,4 +69,12 @@ public class OpenAiProperties {
this.duration = duration;
}
+ public String getBaseUrl() {
+ return baseUrl;
+ }
+
+ public void setBaseUrl(String baseUrl) {
+ this.baseUrl = baseUrl;
+ }
+
}