Skip to content

Commit 6446920

Browse files
committed
refactor ElevenLabsTextToSpeechModel
Signed-off-by: Alexandros Pappas <[email protected]>
1 parent 779160a commit 6446920

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

models/spring-ai-elevenlabs/src/main/java/org/springframework/ai/elevenlabs/ElevenLabsTextToSpeechModel.java

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,13 @@ public static Builder builder() {
7171

7272
@Override
7373
public TextToSpeechResponse call(TextToSpeechPrompt prompt) {
74-
ElevenLabsApi.SpeechRequest request = createRequest(prompt);
75-
String voiceId = getOptions(prompt).getVoice();
76-
77-
MultiValueMap<String, String> queryParameters = new LinkedMultiValueMap<>();
78-
if (getOptions(prompt).getEnableLogging() != null) {
79-
queryParameters.add("enable_logging", getOptions(prompt).getEnableLogging().toString());
80-
}
81-
if (getOptions(prompt).getFormat() != null) {
82-
queryParameters.add("output_format", getOptions(prompt).getFormat());
83-
}
74+
RequestContext requestContext = prepareRequest(prompt);
8475

8576
byte[] audioData = retryTemplate.execute(context -> {
86-
var response = elevenLabsApi.textToSpeech(request, voiceId, queryParameters);
77+
var response = elevenLabsApi.textToSpeech(requestContext.request, requestContext.voiceId,
78+
requestContext.queryParameters);
8779
if (response.getBody() == null) {
88-
logger.warn("No speech response returned for request: {}", request);
80+
logger.warn("No speech response returned for request: {}", requestContext.request);
8981
return new byte[0];
9082
}
9183
return response.getBody();
@@ -96,19 +88,35 @@ public TextToSpeechResponse call(TextToSpeechPrompt prompt) {
9688

9789
@Override
9890
public Flux<TextToSpeechResponse> stream(TextToSpeechPrompt prompt) {
91+
RequestContext requestContext = prepareRequest(prompt);
92+
93+
return retryTemplate.execute(context -> elevenLabsApi
94+
.textToSpeechStream(requestContext.request, requestContext.voiceId, requestContext.queryParameters)
95+
.map(entity -> new TextToSpeechResponse(List.of(new Speech(entity.getBody())))));
96+
}
97+
98+
private RequestContext prepareRequest(TextToSpeechPrompt prompt) {
9999
ElevenLabsApi.SpeechRequest request = createRequest(prompt);
100-
String voiceId = getOptions(prompt).getVoice();
100+
ElevenLabsTextToSpeechOptions options = getOptions(prompt);
101+
String voiceId = options.getVoice();
102+
MultiValueMap<String, String> queryParameters = buildQueryParameters(options);
103+
104+
return new RequestContext(request, voiceId, queryParameters);
105+
}
101106

107+
private record RequestContext(ElevenLabsApi.SpeechRequest request, String voiceId,
108+
MultiValueMap<String, String> queryParameters) {
109+
}
110+
111+
private MultiValueMap<String, String> buildQueryParameters(ElevenLabsTextToSpeechOptions options) {
102112
MultiValueMap<String, String> queryParameters = new LinkedMultiValueMap<>();
103-
if (getOptions(prompt).getEnableLogging() != null) {
104-
queryParameters.add("enable_logging", getOptions(prompt).getEnableLogging().toString());
113+
if (options.getEnableLogging() != null) {
114+
queryParameters.add("enable_logging", options.getEnableLogging().toString());
105115
}
106-
if (getOptions(prompt).getFormat() != null) {
107-
queryParameters.add("output_format", getOptions(prompt).getFormat());
116+
if (options.getFormat() != null) {
117+
queryParameters.add("output_format", options.getFormat());
108118
}
109-
110-
return retryTemplate.execute(context -> elevenLabsApi.textToSpeechStream(request, voiceId, queryParameters)
111-
.map(entity -> new TextToSpeechResponse(List.of(new Speech(entity.getBody())))));
119+
return queryParameters;
112120
}
113121

114122
private ElevenLabsApi.SpeechRequest createRequest(TextToSpeechPrompt prompt) {

0 commit comments

Comments
 (0)