@@ -261,6 +261,43 @@ export const embedParams = (
261261 return { ...baseParams , ...( extra ?? { } ) } ;
262262} ;
263263
264+ export const createSpeechParams = (
265+ exclude : string [ ] ,
266+ defaultValues ?: Record < string , string > ,
267+ extra ?: ProviderConfig
268+ ) : ProviderConfig => {
269+ const baseParams : ProviderConfig = {
270+ model : {
271+ param : 'model' ,
272+ required : true ,
273+ default : 'tts-1' ,
274+ } ,
275+ input : {
276+ param : 'input' ,
277+ required : true ,
278+ } ,
279+ voice : {
280+ param : 'voice' ,
281+ required : true ,
282+ default : 'alloy' ,
283+ } ,
284+ response_format : {
285+ param : 'response_format' ,
286+ required : false ,
287+ default : 'mp3' ,
288+ } ,
289+ speed : {
290+ param : 'speed' ,
291+ required : false ,
292+ default : 1 ,
293+ } ,
294+ } ;
295+
296+ excludeObjectKeys ( exclude , baseParams ) ;
297+
298+ return { ...baseParams , ...( extra ?? { } ) } ;
299+ } ;
300+
264301export const createModelResponseParams = (
265302 exclude : string [ ] ,
266303 defaultValues : Record < string , string > = { } ,
@@ -338,6 +375,39 @@ const CompleteResponseTransformer = <
338375 return transformer ;
339376} ;
340377
378+ const CreateSpeechResponseTransformer = < T extends Response | ErrorResponse > (
379+ provider : string ,
380+ customTransformer ?: CustomTransformer < Response | ErrorResponse , T >
381+ ) => {
382+ const transformer : (
383+ response : T | ErrorResponse ,
384+ responseStatus : number
385+ ) => T | ErrorResponse = ( response , responseStatus ) => {
386+ if ( responseStatus !== 200 && 'error' in response ) {
387+ const errorResponse = OpenAIErrorResponseTransform (
388+ response ,
389+ provider ?? OPEN_AI
390+ ) ;
391+ if ( customTransformer ) {
392+ return customTransformer ( errorResponse , true ) ;
393+ }
394+ }
395+
396+ if ( customTransformer ) {
397+ return customTransformer ( response as T ) ;
398+ }
399+
400+ Object . defineProperty ( response , 'provider' , {
401+ value : provider ,
402+ enumerable : true ,
403+ } ) ;
404+
405+ return response ;
406+ } ;
407+
408+ return transformer ;
409+ } ;
410+
341411const ChatCompleteResponseTransformer = <
342412 T extends OpenAIChatCompleteResponse | ErrorResponse ,
343413> (
@@ -528,6 +598,7 @@ export const responseTransformers = <
528598 T extends EmbedResponse | ErrorResponse ,
529599 U extends OpenAICompleteResponse | ErrorResponse ,
530600 V extends OpenAIChatCompleteResponse | ErrorResponse ,
601+ W extends Response | ErrorResponse ,
531602> (
532603 provider : string ,
533604 options : {
@@ -538,15 +609,17 @@ export const responseTransformers = <
538609 chatComplete ?:
539610 | boolean
540611 | CustomTransformer < OpenAIChatCompleteResponse | ErrorResponse , V > ;
612+ createSpeech ?: boolean | CustomTransformer < Response | ErrorResponse , W > ;
541613 }
542614) => {
543615 const transformers : Record <
544- 'complete' | 'chatComplete' | 'embed' ,
616+ 'complete' | 'chatComplete' | 'embed' | 'createSpeech' ,
545617 Function | null
546618 > = {
547619 complete : null ,
548620 chatComplete : null ,
549621 embed : null ,
622+ createSpeech : null ,
550623 } ;
551624
552625 if ( options . embed ) {
@@ -572,6 +645,14 @@ export const responseTransformers = <
572645 ) ;
573646 }
574647
648+ if ( options . createSpeech ) {
649+ transformers . createSpeech = CreateSpeechResponseTransformer < W > (
650+ provider ,
651+ typeof options . createSpeech === 'function'
652+ ? options . createSpeech
653+ : undefined
654+ ) ;
655+ }
575656 return transformers ;
576657} ;
577658
0 commit comments