Skip to content

Commit 611c077

Browse files
committed
OpenAi: auto configure to support audio path
Signed-off-by: lambochen <[email protected]>
1 parent 327cdb6 commit 611c077

File tree

6 files changed

+43
-20
lines changed

6 files changed

+43
-20
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 & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public OpenAiAudioSpeechModel openAiAudioSpeechModel(OpenAiConnectionProperties
7171
var openAiAudioApi = OpenAiAudioApi.builder()
7272
.baseUrl(resolved.baseUrl())
7373
.apiKey(new SimpleApiKey(resolved.apiKey()))
74+
.audioSpeechPath(speechProperties.getAudioSpeechPath())
7475
.headers(resolved.headers())
7576
.restClientBuilder(restClientBuilderProvider.getIfAvailable(RestClient::builder))
7677
.webClientBuilder(webClientBuilderProvider.getIfAvailable(WebClient::builder))

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.springframework.ai.openai.OpenAiAudioSpeechOptions;
2020
import org.springframework.ai.openai.api.OpenAiAudioApi;
21+
import org.springframework.ai.openai.api.common.OpenAiApiConstants;
2122
import org.springframework.boot.context.properties.ConfigurationProperties;
2223
import org.springframework.boot.context.properties.NestedConfigurationProperty;
2324

@@ -44,6 +45,8 @@ public class OpenAiAudioSpeechProperties extends OpenAiParentProperties {
4445

4546
private static final OpenAiAudioApi.SpeechRequest.AudioResponseFormat DEFAULT_RESPONSE_FORMAT = OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3;
4647

48+
private String audioSpeechPath = OpenAiApiConstants.DEFAULT_AUDIO_SPEECH_PATH;
49+
4750
@NestedConfigurationProperty
4851
private OpenAiAudioSpeechOptions options = OpenAiAudioSpeechOptions.builder()
4952
.model(DEFAULT_SPEECH_MODEL)
@@ -60,4 +63,12 @@ public void setOptions(OpenAiAudioSpeechOptions options) {
6063
this.options = options;
6164
}
6265

66+
public String getAudioSpeechPath() {
67+
return audioSpeechPath;
68+
}
69+
70+
public void setAudioSpeechPath(String audioSpeechPath) {
71+
this.audioSpeechPath = audioSpeechPath;
72+
}
73+
6374
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public OpenAiAudioTranscriptionModel openAiAudioTranscriptionModel(OpenAiConnect
7171
var openAiAudioApi = OpenAiAudioApi.builder()
7272
.baseUrl(resolved.baseUrl())
7373
.apiKey(new SimpleApiKey(resolved.apiKey()))
74+
.audioTranscriptionPath(transcriptionProperties.getAudioTranscriptionPath())
7475
.headers(resolved.headers())
7576
.restClientBuilder(restClientBuilderProvider.getIfAvailable(RestClient::builder))
7677
.webClientBuilder(webClientBuilderProvider.getIfAvailable(WebClient::builder))

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.springframework.ai.openai.OpenAiAudioTranscriptionOptions;
2020
import org.springframework.ai.openai.api.OpenAiAudioApi;
21+
import org.springframework.ai.openai.api.common.OpenAiApiConstants;
2122
import org.springframework.boot.context.properties.ConfigurationProperties;
2223
import org.springframework.boot.context.properties.NestedConfigurationProperty;
2324

@@ -32,6 +33,8 @@ public class OpenAiAudioTranscriptionProperties extends OpenAiParentProperties {
3233

3334
private static final OpenAiAudioApi.TranscriptResponseFormat DEFAULT_RESPONSE_FORMAT = OpenAiAudioApi.TranscriptResponseFormat.TEXT;
3435

36+
private String audioTranscriptionPath = OpenAiApiConstants.DEFAULT_AUDIO_TRANSCRIPTION_PATH;
37+
3538
@NestedConfigurationProperty
3639
private OpenAiAudioTranscriptionOptions options = OpenAiAudioTranscriptionOptions.builder()
3740
.model(DEFAULT_TRANSCRIPTION_MODEL)
@@ -47,4 +50,12 @@ public void setOptions(OpenAiAudioTranscriptionOptions options) {
4750
this.options = options;
4851
}
4952

53+
public String getAudioTranscriptionPath() {
54+
return audioTranscriptionPath;
55+
}
56+
57+
public void setAudioTranscriptionPath(String audioTranscriptionPath) {
58+
this.audioTranscriptionPath = audioTranscriptionPath;
59+
}
60+
5061
}

models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiAudioApi.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ public class OpenAiAudioApi {
6161

6262
private final String audioSpeechPath;
6363

64-
private final String audioTranscriptionsPath;
64+
private final String audioTranscriptionPath;
6565

66-
private final String audioTranslationsPath;
66+
private final String audioTranslationPath;
6767

6868
/**
6969
* Create a new audio api.
@@ -78,9 +78,8 @@ public OpenAiAudioApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, Strin
7878
RestClient.Builder restClientBuilder, WebClient.Builder webClientBuilder,
7979
ResponseErrorHandler responseErrorHandler) {
8080
this(baseUrl, apiKey, headers, OpenAiApiConstants.DEFAULT_AUDIO_SPEECH_PATH,
81-
OpenAiApiConstants.DEFAULT_AUDIO_TRANSCRIPTIONS_PATH,
82-
OpenAiApiConstants.DEFAULT_AUDIO_TRANSLATIONS_PATH, restClientBuilder, webClientBuilder,
83-
responseErrorHandler);
81+
OpenAiApiConstants.DEFAULT_AUDIO_TRANSCRIPTION_PATH, OpenAiApiConstants.DEFAULT_AUDIO_TRANSLATION_PATH,
82+
restClientBuilder, webClientBuilder, responseErrorHandler);
8483
}
8584

8685
/**
@@ -92,15 +91,15 @@ public OpenAiAudioApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, Strin
9291
* @param webClientBuilder WebClient builder.
9392
* @param responseErrorHandler Response error handler.
9493
* @param audioSpeechPath Audio speech path.
95-
* @param audioTranscriptionsPath Audio transcriptions path.
96-
* @param audioTranslationsPath Audio translations path.
94+
* @param audioTranscriptionPath Audio transcriptions path.
95+
* @param audioTranslationPath Audio translations path.
9796
*/
9897
public OpenAiAudioApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, String> headers, String audioSpeechPath,
99-
String audioTranscriptionsPath, String audioTranslationsPath, RestClient.Builder restClientBuilder,
98+
String audioTranscriptionPath, String audioTranslationPath, RestClient.Builder restClientBuilder,
10099
WebClient.Builder webClientBuilder, ResponseErrorHandler responseErrorHandler) {
101100
this.audioSpeechPath = audioSpeechPath;
102-
this.audioTranscriptionsPath = audioTranscriptionsPath;
103-
this.audioTranslationsPath = audioTranslationsPath;
101+
this.audioTranscriptionPath = audioTranscriptionPath;
102+
this.audioTranslationPath = audioTranslationPath;
104103

105104
Consumer<HttpHeaders> authHeaders = h -> {
106105
h.addAll(headers);
@@ -206,7 +205,7 @@ public String getFilename() {
206205
}
207206

208207
return this.restClient.post()
209-
.uri(this.audioTranscriptionsPath)
208+
.uri(this.audioTranscriptionPath)
210209
.body(multipartBody)
211210
.retrieve()
212211
.toEntity(responseType);
@@ -246,7 +245,7 @@ public String getFilename() {
246245
multipartBody.add("temperature", requestBody.temperature());
247246

248247
return this.restClient.post()
249-
.uri(this.audioTranslationsPath)
248+
.uri(this.audioTranslationPath)
250249
.body(multipartBody)
251250
.retrieve()
252251
.toEntity(responseType);
@@ -810,9 +809,9 @@ public static class Builder {
810809

811810
private String audioSpeechPath = OpenAiApiConstants.DEFAULT_AUDIO_SPEECH_PATH;
812811

813-
private String audioTranscriptionsPath = OpenAiApiConstants.DEFAULT_AUDIO_TRANSCRIPTIONS_PATH;
812+
private String audioTranscriptionPath = OpenAiApiConstants.DEFAULT_AUDIO_TRANSCRIPTION_PATH;
814813

815-
private String audioTranslationsPath = OpenAiApiConstants.DEFAULT_AUDIO_TRANSLATIONS_PATH;
814+
private String audioTranslationPath = OpenAiApiConstants.DEFAULT_AUDIO_TRANSLATION_PATH;
816815

817816
private ApiKey apiKey;
818817

@@ -836,15 +835,15 @@ public Builder audioSpeechPath(String audioSpeechPath) {
836835
return this;
837836
}
838837

839-
public Builder audioTranscriptionsPath(String audioTranscriptionsPath) {
838+
public Builder audioTranscriptionPath(String audioTranscriptionsPath) {
840839
Assert.hasText(audioTranscriptionsPath, "audioTranscriptionsPath cannot be null or empty");
841-
this.audioTranscriptionsPath = audioTranscriptionsPath;
840+
this.audioTranscriptionPath = audioTranscriptionsPath;
842841
return this;
843842
}
844843

845844
public Builder audioTranslationsPath(String audioTranslationsPath) {
846845
Assert.hasText(audioTranslationsPath, "audioTranslationsPath cannot be null or empty");
847-
this.audioTranslationsPath = audioTranslationsPath;
846+
this.audioTranslationPath = audioTranslationsPath;
848847
return this;
849848
}
850849

@@ -887,7 +886,7 @@ public Builder responseErrorHandler(ResponseErrorHandler responseErrorHandler) {
887886
public OpenAiAudioApi build() {
888887
Assert.notNull(this.apiKey, "apiKey must be set");
889888
return new OpenAiAudioApi(this.baseUrl, this.apiKey, this.headers, this.audioSpeechPath,
890-
this.audioTranscriptionsPath, this.audioTranslationsPath, this.restClientBuilder,
889+
this.audioTranscriptionPath, this.audioTranslationPath, this.restClientBuilder,
891890
this.webClientBuilder, this.responseErrorHandler);
892891
}
893892

models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/common/OpenAiApiConstants.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ public final class OpenAiApiConstants {
3232

3333
public static final String DEFAULT_AUDIO_SPEECH_PATH = "/v1/audio/speech";
3434

35-
public static final String DEFAULT_AUDIO_TRANSCRIPTIONS_PATH = "/v1/audio/transcriptions";
35+
public static final String DEFAULT_AUDIO_TRANSCRIPTION_PATH = "/v1/audio/transcriptions";
3636

37-
public static final String DEFAULT_AUDIO_TRANSLATIONS_PATH = "/v1/audio/translations";
37+
public static final String DEFAULT_AUDIO_TRANSLATION_PATH = "/v1/audio/translations";
3838

3939
public static final String PROVIDER_NAME = AiProvider.OPENAI.value();
4040

0 commit comments

Comments
 (0)