Skip to content

Commit 8ae506f

Browse files
committed
Improve the OpenAi Audio code structure
- Move the OpenAiAudioTranscriptionClient and OpenAiAudioTranscriptionOptions under the org.springframework.ai.openai package. - Rename the AudioTranscriptionRequest into AudioTranscriptionPrompt. - Minor imports cleaning.
1 parent 7d04167 commit 8ae506f

File tree

12 files changed

+26
-25
lines changed

12 files changed

+26
-25
lines changed
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.ai.openai.audio.transcription;
17+
package org.springframework.ai.openai;
1818

1919
import java.time.Duration;
2020

@@ -26,6 +26,9 @@
2626
import org.springframework.ai.openai.api.OpenAiAudioApi;
2727
import org.springframework.ai.openai.api.OpenAiAudioApi.StructuredResponse;
2828
import org.springframework.ai.openai.api.common.OpenAiApiException;
29+
import org.springframework.ai.openai.audio.transcription.AudioTranscription;
30+
import org.springframework.ai.openai.audio.transcription.AudioTranscriptionPrompt;
31+
import org.springframework.ai.openai.audio.transcription.AudioTranscriptionResponse;
2932
import org.springframework.ai.openai.metadata.audio.OpenAiAudioTranscriptionResponseMetadata;
3033
import org.springframework.ai.openai.metadata.support.OpenAiResponseHeaderExtractor;
3134
import org.springframework.core.io.Resource;
@@ -42,7 +45,7 @@
4245
* @since 0.8.1
4346
*/
4447
public class OpenAiAudioTranscriptionClient
45-
implements ModelClient<AudioTranscriptionRequest, AudioTranscriptionResponse> {
48+
implements ModelClient<AudioTranscriptionPrompt, AudioTranscriptionResponse> {
4649

4750
private final Logger logger = LoggerFactory.getLogger(getClass());
4851

@@ -73,12 +76,12 @@ public OpenAiAudioTranscriptionClient(OpenAiAudioApi audioApi, OpenAiAudioTransc
7376
}
7477

7578
public String call(Resource audioResource) {
76-
AudioTranscriptionRequest transcriptionRequest = new AudioTranscriptionRequest(audioResource);
79+
AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioResource);
7780
return call(transcriptionRequest).getResult().getOutput();
7881
}
7982

8083
@Override
81-
public AudioTranscriptionResponse call(AudioTranscriptionRequest request) {
84+
public AudioTranscriptionResponse call(AudioTranscriptionPrompt request) {
8285

8386
return this.retryTemplate.execute(ctx -> {
8487

@@ -130,7 +133,7 @@ public AudioTranscriptionResponse call(AudioTranscriptionRequest request) {
130133
});
131134
}
132135

133-
OpenAiAudioApi.TranscriptionRequest createRequestBody(AudioTranscriptionRequest request) {
136+
OpenAiAudioApi.TranscriptionRequest createRequestBody(AudioTranscriptionPrompt request) {
134137

135138
OpenAiAudioTranscriptionOptions options = this.defaultOptions;
136139

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.ai.openai.audio.transcription;
17+
package org.springframework.ai.openai;
1818

1919
import com.fasterxml.jackson.annotation.JsonInclude;
2020
import com.fasterxml.jackson.annotation.JsonInclude.Include;
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@
2424
* @author Michael Lavelle
2525
* @since 0.8.1
2626
*/
27-
public class AudioTranscriptionRequest implements ModelRequest<Resource> {
27+
public class AudioTranscriptionPrompt implements ModelRequest<Resource> {
2828

2929
private Resource audioResource;
3030

3131
private ModelOptions modelOptions;
3232

33-
public AudioTranscriptionRequest(Resource audioResource) {
33+
public AudioTranscriptionPrompt(Resource audioResource) {
3434
this.audioResource = audioResource;
3535
}
3636

37-
public AudioTranscriptionRequest(Resource audioResource, ModelOptions modelOptions) {
37+
public AudioTranscriptionPrompt(Resource audioResource, ModelOptions modelOptions) {
3838
this.audioResource = audioResource;
3939
this.modelOptions = modelOptions;
4040
}

models/spring-ai-openai/src/main/java/org/springframework/ai/openai/metadata/audio/OpenAiAudioTranscriptionResponseMetadata.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
/**
2828
* Audio transcription metadata implementation for {@literal OpenAI}.
2929
*
30-
* @author MichaelLavelle
30+
* @author Michael Lavelle
3131
* @since 0.8.1
3232
* @see RateLimit
3333
*/

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/OpenAiTestConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.springframework.ai.openai.api.OpenAiApi;
55
import org.springframework.ai.openai.api.OpenAiAudioApi;
66
import org.springframework.ai.openai.api.OpenAiImageApi;
7-
import org.springframework.ai.openai.audio.transcription.OpenAiAudioTranscriptionClient;
87
import org.springframework.boot.SpringBootConfiguration;
98
import org.springframework.context.annotation.Bean;
109
import org.springframework.util.StringUtils;

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/audio/transcription/OpenAiTranscriptionClientIT.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
import org.junit.jupiter.api.Test;
44
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
55

6+
import org.springframework.ai.openai.OpenAiAudioTranscriptionOptions;
67
import org.springframework.ai.openai.OpenAiTestConfiguration;
78
import org.springframework.ai.openai.api.OpenAiAudioApi;
89
import org.springframework.ai.openai.api.OpenAiAudioApi.TranscriptResponseFormat;
9-
import org.springframework.ai.openai.audio.transcription.AudioTranscriptionRequest;
10-
import org.springframework.ai.openai.audio.transcription.AudioTranscriptionResponse;
1110
import org.springframework.ai.openai.testutils.AbstractIT;
1211
import org.springframework.beans.factory.annotation.Value;
1312
import org.springframework.boot.test.context.SpringBootTest;
@@ -28,7 +27,7 @@ void transcriptionTest() {
2827
.withResponseFormat(TranscriptResponseFormat.TEXT)
2928
.withTemperature(0f)
3029
.build();
31-
AudioTranscriptionRequest transcriptionRequest = new AudioTranscriptionRequest(audioFile, transcriptionOptions);
30+
AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile, transcriptionOptions);
3231
AudioTranscriptionResponse response = openAiTranscriptionClient.call(transcriptionRequest);
3332
assertThat(response.getResults()).hasSize(1);
3433
assertThat(response.getResults().get(0).getOutput().toLowerCase().contains("fellow")).isTrue();
@@ -44,7 +43,7 @@ void transcriptionTestWithOptions() {
4443
.withTemperature(0f)
4544
.withResponseFormat(responseFormat)
4645
.build();
47-
AudioTranscriptionRequest transcriptionRequest = new AudioTranscriptionRequest(audioFile, transcriptionOptions);
46+
AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile, transcriptionOptions);
4847
AudioTranscriptionResponse response = openAiTranscriptionClient.call(transcriptionRequest);
4948
assertThat(response.getResults()).hasSize(1);
5049
assertThat(response.getResults().get(0).getOutput().toLowerCase().contains("fellow")).isTrue();

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/audio/transcription/OpenAiTranscriptionClientWithTranscriptionResponseMetadataTests.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@
2222
import org.junit.jupiter.api.Test;
2323

2424
import org.springframework.ai.chat.metadata.RateLimit;
25+
import org.springframework.ai.openai.OpenAiAudioTranscriptionClient;
2526
import org.springframework.ai.openai.api.OpenAiAudioApi;
26-
import org.springframework.ai.openai.audio.transcription.AudioTranscriptionRequest;
27-
import org.springframework.ai.openai.audio.transcription.AudioTranscriptionResponse;
2827
import org.springframework.ai.openai.metadata.audio.OpenAiAudioTranscriptionMetadata;
2928
import org.springframework.ai.openai.metadata.audio.OpenAiAudioTranscriptionResponseMetadata;
3029
import org.springframework.ai.openai.metadata.support.OpenAiApiResponseHeaders;
@@ -72,7 +71,7 @@ void aiResponseContainsAiMetadata() {
7271

7372
Resource audioFile = new ClassPathResource("speech/jfk.flac");
7473

75-
AudioTranscriptionRequest transcriptionRequest = new AudioTranscriptionRequest(audioFile);
74+
AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile);
7675

7776
AudioTranscriptionResponse response = this.openAiTranscriptionClient.call(transcriptionRequest);
7877

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/audio/transcription/TranscriptionClientTests.java

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

22+
import org.springframework.ai.openai.OpenAiAudioTranscriptionClient;
2223
import org.springframework.core.io.Resource;
2324

2425
import static org.assertj.core.api.Assertions.assertThat;
@@ -64,19 +65,19 @@ void transcrbeRequestReturnsResponseCorrectly() {
6465

6566
doAnswer(invocationOnMock -> {
6667

67-
AudioTranscriptionRequest transcriptionRequest = invocationOnMock.getArgument(0);
68+
AudioTranscriptionPrompt transcriptionRequest = invocationOnMock.getArgument(0);
6869

6970
assertThat(transcriptionRequest).isNotNull();
7071
assertThat(transcriptionRequest.getInstructions()).isEqualTo(mockAudioFile);
7172

7273
return response;
7374

74-
}).when(mockClient).call(any(AudioTranscriptionRequest.class));
75+
}).when(mockClient).call(any(AudioTranscriptionPrompt.class));
7576

7677
assertThat(mockClient.call(mockAudioFile)).isEqualTo(mockTranscription);
7778

7879
verify(mockClient, times(1)).call(eq(mockAudioFile));
79-
verify(mockClient, times(1)).call(isA(AudioTranscriptionRequest.class));
80+
verify(mockClient, times(1)).call(isA(AudioTranscriptionPrompt.class));
8081
verify(response, times(1)).getResult();
8182
verify(transcript, times(1)).getOutput();
8283
verifyNoMoreInteractions(mockClient, transcript, response);

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/testutils/AbstractIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.springframework.ai.chat.messages.Message;
1515
import org.springframework.ai.chat.messages.SystemMessage;
1616
import org.springframework.ai.image.ImageClient;
17-
import org.springframework.ai.openai.audio.transcription.OpenAiAudioTranscriptionClient;
17+
import org.springframework.ai.openai.OpenAiAudioTranscriptionClient;
1818
import org.springframework.beans.factory.annotation.Autowired;
1919
import org.springframework.beans.factory.annotation.Value;
2020
import org.springframework.core.io.Resource;

spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAudioTranscriptionProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
package org.springframework.ai.autoconfigure.openai;
1818

19+
import org.springframework.ai.openai.OpenAiAudioTranscriptionOptions;
1920
import org.springframework.ai.openai.api.OpenAiAudioApi;
20-
import org.springframework.ai.openai.audio.transcription.OpenAiAudioTranscriptionOptions;
2121
import org.springframework.boot.context.properties.ConfigurationProperties;
2222
import org.springframework.boot.context.properties.NestedConfigurationProperty;
2323

spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121
import org.springframework.ai.embedding.EmbeddingClient;
2222
import org.springframework.ai.model.function.FunctionCallback;
2323
import org.springframework.ai.model.function.FunctionCallbackContext;
24+
import org.springframework.ai.openai.OpenAiAudioTranscriptionClient;
2425
import org.springframework.ai.openai.OpenAiChatClient;
2526
import org.springframework.ai.openai.OpenAiEmbeddingClient;
2627
import org.springframework.ai.openai.OpenAiImageClient;
2728
import org.springframework.ai.openai.api.OpenAiApi;
2829
import org.springframework.ai.openai.api.OpenAiAudioApi;
2930
import org.springframework.ai.openai.api.OpenAiImageApi;
30-
import org.springframework.ai.openai.audio.transcription.OpenAiAudioTranscriptionClient;
3131
import org.springframework.boot.autoconfigure.AutoConfiguration;
3232
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3333
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;

spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfigurationIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@
2828
import org.springframework.ai.image.ImagePrompt;
2929
import org.springframework.ai.image.ImageResponse;
3030
import org.springframework.ai.openai.OpenAiImageClient;
31-
import org.springframework.ai.openai.audio.transcription.OpenAiAudioTranscriptionClient;
3231
import org.springframework.core.io.ClassPathResource;
3332
import org.springframework.core.io.Resource;
3433
import reactor.core.publisher.Flux;
3534

3635
import org.springframework.ai.chat.ChatResponse;
3736
import org.springframework.ai.embedding.EmbeddingResponse;
37+
import org.springframework.ai.openai.OpenAiAudioTranscriptionClient;
3838
import org.springframework.ai.openai.OpenAiChatClient;
3939
import org.springframework.ai.openai.OpenAiEmbeddingClient;
4040
import org.springframework.boot.autoconfigure.AutoConfigurations;

0 commit comments

Comments
 (0)