@@ -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