@@ -212,4 +212,50 @@ describe("provider-registry — extended coverage", () => {
212212 undefined
213213 ) ;
214214 } ) ;
215+
216+ it ( "discovers music and routes encoded audio through the Python bridge" , async ( ) => {
217+ const wav = new Uint8Array ( [
218+ 0x52 , 0x49 , 0x46 , 0x46 , 0 , 0 , 0 , 0 , 0x57 , 0x41 , 0x56 , 0x45
219+ ] ) ;
220+ const getProviderModels = vi . fn ( async ( ) => [
221+ { id : "ace" , name : "ACE-Step" , provider : "wangp" }
222+ ] ) ;
223+ const textToAudio = vi . fn ( async ( ) => wav ) ;
224+ const ttsEncoded = vi . fn ( async ( ) => wav ) ;
225+ const provider = new PythonProvider ( {
226+ _id : "wangp" ,
227+ _bridge : {
228+ getProviderModels,
229+ providerTextToAudio : textToAudio ,
230+ providerTTSEncoded : ttsEncoded
231+ }
232+ } as any ) ;
233+
234+ await expect ( provider . getAvailableMusicModels ( ) ) . resolves . toEqual ( [
235+ { id : "ace" , name : "ACE-Step" , provider : "wangp" }
236+ ] ) ;
237+ await expect (
238+ provider . textToMusic ( {
239+ model : { id : "ace" , name : "ACE-Step" , provider : "wangp" } ,
240+ prompt : "ambient"
241+ } )
242+ ) . resolves . toEqual ( { data : wav , mimeType : "audio/wav" } ) ;
243+ await expect (
244+ provider . textToSpeechEncoded ( { text : "hello" , model : "qwen3" } )
245+ ) . resolves . toEqual ( { data : wav , mimeType : "audio/wav" } ) ;
246+ expect ( getProviderModels ) . toHaveBeenCalledWith ( "wangp" , "music" , { } ) ;
247+ expect ( textToAudio ) . toHaveBeenCalledWith (
248+ "wangp" ,
249+ {
250+ model : "ace" ,
251+ prompt : "ambient"
252+ } ,
253+ { }
254+ ) ;
255+ expect ( ttsEncoded ) . toHaveBeenCalledWith (
256+ "wangp" ,
257+ { text : "hello" , model : "qwen3" } ,
258+ { }
259+ ) ;
260+ } ) ;
215261} ) ;
0 commit comments