@elizaos/plugin-elevenlabs 1.5.11 → 1.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -94,6 +94,6 @@ https://github.com/browserify/crypto-browserify`)},X.constants={DH_CHECK_P_NOT_S
94
94
  On mac you can install it with 'brew install ffmpeg'.
95
95
  On linux and windows you can install it from https://ffmpeg.org/`});let U=j("ffplay",["-autoexit","-","-nodisp"],{stdio:["pipe","ignore","pipe"]});Z.from(X).pipe(U.stdin);let Q=[];return U.stderr.on("data",(Y)=>{Q.push(Y)}),new Promise((Y,f)=>{U.on("close",(z)=>{if(z===0)Y();else{let R=Buffer.concat(Q).toString();f(new B_.ElevenLabsError({message:`ffplay exited with code ${z}. Stderr: ${R}`}))}}),U.on("error",(z)=>{f(new B_.ElevenLabsError({message:`Failed to start ffplay: ${z.message}`}))})})})}});var D22=J((e7)=>{var IO0=e7&&e7.__createBinding||(Object.create?function(X,j,Z,V){if(V===void 0)V=Z;var U=Object.getOwnPropertyDescriptor(j,Z);if(!U||("get"in U?!j.__esModule:U.writable||U.configurable))U={enumerable:!0,get:function(){return j[Z]}};Object.defineProperty(X,V,U)}:function(X,j,Z,V){if(V===void 0)V=Z;X[V]=j[Z]}),SO0=e7&&e7.__setModuleDefault||(Object.create?function(X,j){Object.defineProperty(X,"default",{enumerable:!0,value:j})}:function(X,j){X.default=j}),s21=e7&&e7.__importStar||function(){var X=function(j){return X=Object.getOwnPropertyNames||function(Z){var V=[];for(var U in Z)if(Object.prototype.hasOwnProperty.call(Z,U))V[V.length]=U;return V},X(j)};return function(j){if(j&&j.__esModule)return j;var Z={};if(j!=null){for(var V=X(j),U=0;U<V.length;U++)if(V[U]!=="default")IO0(Z,j,V[U])}return SO0(Z,j),Z}}(),KO0=e7&&e7.__awaiter||function(X,j,Z,V){function U(Q){return Q instanceof Z?Q:new Z(function(Y){Y(Q)})}return new(Z||(Z=Promise))(function(Q,Y){function f(L){try{R(V.next(L))}catch(C){Y(C)}}function z(L){try{R(V.throw(L))}catch(C){Y(C)}}function R(L){L.done?Q(L.value):U(L.value).then(f,z)}R((V=V.apply(X,j||[])).next())})};Object.defineProperty(e7,"__esModule",{value:!0});e7.stream=vO0;var T22=t21(),P_=py();function vO0(X){return KO0(this,void 0,void 0,function*(){if(!(0,T22.isNode)())throw new P_.ElevenLabsError({message:"The stream function is only available in a Node.js environment."});let{spawn:j}=yield Promise.resolve().then(()=>s21((()=>({})))),{Readable:Z}=yield Promise.resolve().then(()=>s21(jN()));if(!(yield Promise.resolve().then(()=>s21((()=>({}))))).default.sync("mpv"))throw new P_.ElevenLabsError({message:`mpv not found, necessary to stream audio."
96
96
  On mac you can install it with 'brew install mpv'.
97
- On linux and windows you can install it from https://mpv.io/`});let U=j("mpv",["--no-cache","--no-terminal","--","fd://0"],{stdio:["pipe","ignore","pipe"]});Z.from((0,T22.toAsyncIterable)(X)).pipe(U.stdin);let Q=[];return U.stderr.on("data",(Y)=>{Q.push(Y)}),new Promise((Y,f)=>{U.on("close",(z)=>{if(z===0)Y();else{let R=Buffer.concat(Q).toString();f(new P_.ElevenLabsError({message:`mpv exited with code ${z}. Stderr: ${R}`}))}}),U.on("error",(z)=>{f(new P_.ElevenLabsError({message:`Failed to start mpv: ${z.message}`}))})})})}});var A22=J((Mv)=>{Object.defineProperty(Mv,"__esModule",{value:!0});Mv.stream=Mv.play=Mv.Music=Mv.ElevenLabsClient=void 0;var hO0=P22();Object.defineProperty(Mv,"ElevenLabsClient",{enumerable:!0,get:function(){return hO0.ElevenLabsClient}});var gO0=k21();Object.defineProperty(Mv,"Music",{enumerable:!0,get:function(){return gO0.Music}});var wO0=F22();Object.defineProperty(Mv,"play",{enumerable:!0,get:function(){return wO0.play}});var OO0=D22();Object.defineProperty(Mv,"stream",{enumerable:!0,get:function(){return OO0.stream}})});var K22=J((R6)=>{var I22=R6&&R6.__createBinding||(Object.create?function(X,j,Z,V){if(V===void 0)V=Z;var U=Object.getOwnPropertyDescriptor(j,Z);if(!U||("get"in U?!j.__esModule:U.writable||U.configurable))U={enumerable:!0,get:function(){return j[Z]}};Object.defineProperty(X,V,U)}:function(X,j,Z,V){if(V===void 0)V=Z;X[V]=j[Z]}),bO0=R6&&R6.__setModuleDefault||(Object.create?function(X,j){Object.defineProperty(X,"default",{enumerable:!0,value:j})}:function(X,j){X.default=j}),lO0=R6&&R6.__importStar||function(){var X=function(j){return X=Object.getOwnPropertyNames||function(Z){var V=[];for(var U in Z)if(Object.prototype.hasOwnProperty.call(Z,U))V[V.length]=U;return V},X(j)};return function(j){if(j&&j.__esModule)return j;var Z={};if(j!=null){for(var V=X(j),U=0;U<V.length;U++)if(V[U]!=="default")I22(Z,j,V[U])}return bO0(Z,j),Z}}(),qO0=R6&&R6.__exportStar||function(X,j){for(var Z in X)if(Z!=="default"&&!Object.prototype.hasOwnProperty.call(j,Z))I22(j,X,Z)};Object.defineProperty(R6,"__esModule",{value:!0});R6.ElevenLabsTimeoutError=R6.ElevenLabsError=R6.ElevenLabsEnvironment=R6.ElevenLabs=void 0;R6.ElevenLabs=lO0(j2());qO0(A22(),R6);var cO0=o1();Object.defineProperty(R6,"ElevenLabsEnvironment",{enumerable:!0,get:function(){return cO0.ElevenLabsEnvironment}});var S22=t1();Object.defineProperty(R6,"ElevenLabsError",{enumerable:!0,get:function(){return S22.ElevenLabsError}});Object.defineProperty(R6,"ElevenLabsTimeoutError",{enumerable:!0,get:function(){return S22.ElevenLabsTimeoutError}})});var g22=l22(K22(),1);import{ModelType as v22,logger as G8,parseBooleanFromText as _O0}from"@elizaos/core";function e21(){return typeof globalThis<"u"&&typeof globalThis.document<"u"}function KP(X,j,Z){let V=typeof process<"u"&&process.env?process.env[j]:void 0;return X.getSetting(j)??V??Z}function aO0(X){let j=X.getSetting("ELEVENLABS_BROWSER_URL");if(e21()&&j)return j;return"https://api.elevenlabs.io/v1"}function w22(X){let j=typeof process<"u"&&process.env||{};return X.getSetting("ELEVENLABS_API_KEY")||j.ELEVENLABS_API_KEY}function Lv(X){return{apiKey:w22(X)||"",voiceId:KP(X,"ELEVENLABS_VOICE_ID","EXAVITQu4vr4xnSDxMaL"),model:KP(X,"ELEVENLABS_MODEL_ID","eleven_monolingual_v1"),stability:KP(X,"ELEVENLABS_VOICE_STABILITY","0.5"),latency:KP(X,"ELEVENLABS_OPTIMIZE_STREAMING_LATENCY","0"),outputFormat:KP(X,"ELEVENLABS_OUTPUT_FORMAT","mp3_44100_128"),similarity:KP(X,"ELEVENLABS_VOICE_SIMILARITY_BOOST","0.75"),style:KP(X,"ELEVENLABS_VOICE_STYLE","0"),speakerBoost:_O0(KP(X,"ELEVENLABS_VOICE_USE_SPEAKER_BOOST","true")+"")}}async function h22(X,j){try{let Z=aO0(X),V=w22(X)??(e21()?"sk-proxy":void 0),Q=await new g22.ElevenLabsClient({apiKey:V,baseUrl:Z}).textToSpeech.stream(j.voiceId,{text:j.text,modelId:j.modelId,outputFormat:j.outputFormat,optimizeStreamingLatency:Number(j.latency)||0,voiceSettings:{stability:Number(j.stability)||0,similarityBoost:Number(j.similarity)||0,style:Number(j.style)||0,useSpeakerBoost:!!j.speakerBoost}});if(!Q)throw Error("Empty response body from ElevenLabs SDK");return Q}catch(Z){let V=Z instanceof Error?Z.message:String(Z);throw G8.error(`ElevenLabs fetchSpeech error: ${V}`),Z instanceof Error?Z:Error(V)}}var uO0={name:"elevenLabs",description:"High-quality text-to-speech synthesis using ElevenLabs API with support for multiple voices and languages",models:{[v22.TEXT_TO_SPEECH]:async(X,j)=>{let Z=typeof j==="string"?{text:j}:j,V=Lv(X),U=Z.model||V.model,Q=Z.voice||V.voiceId,Y=Z.format||V.outputFormat;G8.log(`[ElevenLabs] Using TEXT_TO_SPEECH model: ${U}`);try{return await h22(X,{text:Z.text,voiceId:Q,modelId:U,outputFormat:Y,stability:V.stability,similarity:V.similarity,style:V.style,speakerBoost:V.speakerBoost,latency:V.latency})}catch(f){let z=f instanceof Error?f.message:String(f);throw G8.error(`ElevenLabs model error: ${z}`),f instanceof Error?f:Error(z)}}},tests:[{name:"test eleven labs",tests:[{name:"Eleven Labs API key validation",fn:async(X)=>{if(!Lv(X).apiKey)throw Error("Missing API key: Please provide a valid Eleven Labs API key.")}},{name:"Voice settings validation",fn:async(X)=>{let j=Lv(X);if(!j.voiceId)throw Error("Missing voice ID configuration");let Z=parseFloat(j.stability);if(isNaN(Z)||Z<0||Z>1)throw Error("Voice stability must be between 0 and 1");let V=parseFloat(j.similarity);if(isNaN(V)||V<0||V>1)throw Error("Voice similarity boost must be between 0 and 1");G8.success("Voice settings validated successfully")}},{name:"Eleven Labs API connectivity",fn:async(X)=>{let j=Lv(X);if(!j.apiKey){G8.warn("Skipping API connectivity test - no API key provided");return}try{await h22(X,{text:"test",voiceId:j.voiceId,modelId:j.model,outputFormat:j.outputFormat,stability:j.stability,similarity:j.similarity,style:j.style,speakerBoost:j.speakerBoost,latency:j.latency}),G8.success("API connectivity test passed")}catch(Z){let V=Z instanceof Error?Z.message:String(Z);if(V.includes("QUOTA_EXCEEDED")){G8.warn("API quota exceeded - test skipped");return}throw G8.error(`API connectivity test failed: ${V}`),Error(`API connectivity test failed: ${V}`)}}},{name:"ElevenLabs TTS Generation (stream exists)",fn:async(X)=>{if(!Lv(X).apiKey&&!e21()){G8.warn("Skipping TTS generation test - no API key provided");return}let Z="Hello from ElevenLabs test.";try{let V=await X.useModel(v22.TEXT_TO_SPEECH,Z);if(!V||typeof V.getReader!=="function")throw Error("TTS output is not a Web ReadableStream");let U=V.getReader(),{value:Q,done:Y}=await U.read();if(U.releaseLock(),Y&&!Q)throw Error("Received empty audio stream");G8.success("Received audio stream chunk successfully")}catch(V){let U=V instanceof Error?V.message:String(V);if(U.includes("QUOTA_EXCEEDED")){G8.warn("[ElevenLabs Test] API quota exceeded - test skipped");return}throw G8.error("[ElevenLabs Test] TTS Generation test failed:",U),Error(`TTS Generation test failed: ${U}`)}}},{name:"Output format handling",fn:async(X)=>{let j=Lv(X),Z=["mp3_44100_128","pcm_16000","pcm_22050","pcm_24000","pcm_44100"];for(let V of Z)if(V.startsWith("pcm_")){let U=Number.parseInt(V.slice(4));if(isNaN(U)||U<=0)throw Error(`Invalid PCM format: ${V}`)}G8.success(`Output format validated: ${j.outputFormat}`)}}]}]},xO0=uO0;export{uO0 as elevenLabsPlugin,xO0 as default};
97
+ On linux and windows you can install it from https://mpv.io/`});let U=j("mpv",["--no-cache","--no-terminal","--","fd://0"],{stdio:["pipe","ignore","pipe"]});Z.from((0,T22.toAsyncIterable)(X)).pipe(U.stdin);let Q=[];return U.stderr.on("data",(Y)=>{Q.push(Y)}),new Promise((Y,f)=>{U.on("close",(z)=>{if(z===0)Y();else{let R=Buffer.concat(Q).toString();f(new P_.ElevenLabsError({message:`mpv exited with code ${z}. Stderr: ${R}`}))}}),U.on("error",(z)=>{f(new P_.ElevenLabsError({message:`Failed to start mpv: ${z.message}`}))})})})}});var A22=J((Mv)=>{Object.defineProperty(Mv,"__esModule",{value:!0});Mv.stream=Mv.play=Mv.Music=Mv.ElevenLabsClient=void 0;var hO0=P22();Object.defineProperty(Mv,"ElevenLabsClient",{enumerable:!0,get:function(){return hO0.ElevenLabsClient}});var gO0=k21();Object.defineProperty(Mv,"Music",{enumerable:!0,get:function(){return gO0.Music}});var wO0=F22();Object.defineProperty(Mv,"play",{enumerable:!0,get:function(){return wO0.play}});var OO0=D22();Object.defineProperty(Mv,"stream",{enumerable:!0,get:function(){return OO0.stream}})});var K22=J((R6)=>{var I22=R6&&R6.__createBinding||(Object.create?function(X,j,Z,V){if(V===void 0)V=Z;var U=Object.getOwnPropertyDescriptor(j,Z);if(!U||("get"in U?!j.__esModule:U.writable||U.configurable))U={enumerable:!0,get:function(){return j[Z]}};Object.defineProperty(X,V,U)}:function(X,j,Z,V){if(V===void 0)V=Z;X[V]=j[Z]}),bO0=R6&&R6.__setModuleDefault||(Object.create?function(X,j){Object.defineProperty(X,"default",{enumerable:!0,value:j})}:function(X,j){X.default=j}),lO0=R6&&R6.__importStar||function(){var X=function(j){return X=Object.getOwnPropertyNames||function(Z){var V=[];for(var U in Z)if(Object.prototype.hasOwnProperty.call(Z,U))V[V.length]=U;return V},X(j)};return function(j){if(j&&j.__esModule)return j;var Z={};if(j!=null){for(var V=X(j),U=0;U<V.length;U++)if(V[U]!=="default")I22(Z,j,V[U])}return bO0(Z,j),Z}}(),qO0=R6&&R6.__exportStar||function(X,j){for(var Z in X)if(Z!=="default"&&!Object.prototype.hasOwnProperty.call(j,Z))I22(j,X,Z)};Object.defineProperty(R6,"__esModule",{value:!0});R6.ElevenLabsTimeoutError=R6.ElevenLabsError=R6.ElevenLabsEnvironment=R6.ElevenLabs=void 0;R6.ElevenLabs=lO0(j2());qO0(A22(),R6);var cO0=o1();Object.defineProperty(R6,"ElevenLabsEnvironment",{enumerable:!0,get:function(){return cO0.ElevenLabsEnvironment}});var S22=t1();Object.defineProperty(R6,"ElevenLabsError",{enumerable:!0,get:function(){return S22.ElevenLabsError}});Object.defineProperty(R6,"ElevenLabsTimeoutError",{enumerable:!0,get:function(){return S22.ElevenLabsTimeoutError}})});var g22=l22(K22(),1);import{ModelType as v22,logger as G8,parseBooleanFromText as _O0}from"@elizaos/core";function e21(){return typeof globalThis<"u"&&typeof globalThis.document<"u"}function KP(X,j,Z){let V=typeof process<"u"&&process.env?process.env[j]:void 0;return X.getSetting(j)??V??Z}function aO0(X){let j=X.getSetting("ELEVENLABS_BROWSER_URL");if(e21()&&j)return j;return"https://api.elevenlabs.io/v1"}function w22(X){let j=typeof process<"u"&&process.env||{};return X.getSetting("ELEVENLABS_API_KEY")||j.ELEVENLABS_API_KEY}function Lv(X){return{apiKey:w22(X)||"",voiceId:KP(X,"ELEVENLABS_VOICE_ID","EXAVITQu4vr4xnSDxMaL"),model:KP(X,"ELEVENLABS_MODEL_ID","eleven_monolingual_v1"),stability:KP(X,"ELEVENLABS_VOICE_STABILITY","0.5"),latency:KP(X,"ELEVENLABS_OPTIMIZE_STREAMING_LATENCY","0"),outputFormat:KP(X,"ELEVENLABS_OUTPUT_FORMAT","mp3_44100_128"),similarity:KP(X,"ELEVENLABS_VOICE_SIMILARITY_BOOST","0.75"),style:KP(X,"ELEVENLABS_VOICE_STYLE","0"),speakerBoost:_O0(KP(X,"ELEVENLABS_VOICE_USE_SPEAKER_BOOST","true")+"")}}async function h22(X,j){try{let Z=aO0(X),V=w22(X)??(e21()?"sk-proxy":void 0),Q=await new g22.ElevenLabsClient({apiKey:V,baseUrl:Z}).textToSpeech.stream(j.voiceId,{text:j.text,modelId:j.modelId,outputFormat:j.outputFormat,optimizeStreamingLatency:Number(j.latency)||0,voiceSettings:{stability:Number(j.stability)||0,similarityBoost:Number(j.similarity)||0,style:Number(j.style)||0,useSpeakerBoost:!!j.speakerBoost}});if(!Q)throw Error("Empty response body from ElevenLabs SDK");return Q}catch(Z){let V=Z instanceof Error?Z.message:String(Z);throw G8.error(`ElevenLabs fetchSpeech error: ${V}`),Z instanceof Error?Z:Error(V)}}var uO0={name:"elevenLabs",description:"High-quality text-to-speech synthesis using ElevenLabs API with support for multiple voices and languages",models:{[v22.TEXT_TO_SPEECH]:async(X,j)=>{let Z=typeof j==="string"?{text:j}:j,V=Lv(X),U=Z.model||V.model,Q=Z.voiceId||V.voiceId,Y=Z.format?Z.format==="mp3"?"mp3_44100_128":Z.format:V.outputFormat;G8.log(`[ElevenLabs] Using TEXT_TO_SPEECH model: ${U}`);try{return await h22(X,{text:Z.text,voiceId:Q,modelId:U,outputFormat:Y,stability:V.stability,similarity:V.similarity,style:V.style,speakerBoost:V.speakerBoost,latency:V.latency})}catch(f){let z=f instanceof Error?f.message:String(f);throw G8.error(`ElevenLabs model error: ${z}`),f instanceof Error?f:Error(z)}}},tests:[{name:"test eleven labs",tests:[{name:"Eleven Labs API key validation",fn:async(X)=>{if(!Lv(X).apiKey)throw Error("Missing API key: Please provide a valid Eleven Labs API key.")}},{name:"Voice settings validation",fn:async(X)=>{let j=Lv(X);if(!j.voiceId)throw Error("Missing voice ID configuration");let Z=parseFloat(j.stability);if(isNaN(Z)||Z<0||Z>1)throw Error("Voice stability must be between 0 and 1");let V=parseFloat(j.similarity);if(isNaN(V)||V<0||V>1)throw Error("Voice similarity boost must be between 0 and 1");G8.success("Voice settings validated successfully")}},{name:"Eleven Labs API connectivity",fn:async(X)=>{let j=Lv(X);if(!j.apiKey){G8.warn("Skipping API connectivity test - no API key provided");return}try{await h22(X,{text:"test",voiceId:j.voiceId,modelId:j.model,outputFormat:j.outputFormat,stability:j.stability,similarity:j.similarity,style:j.style,speakerBoost:j.speakerBoost,latency:j.latency}),G8.success("API connectivity test passed")}catch(Z){let V=Z instanceof Error?Z.message:String(Z);if(V.includes("QUOTA_EXCEEDED")){G8.warn("API quota exceeded - test skipped");return}throw G8.error(`API connectivity test failed: ${V}`),Error(`API connectivity test failed: ${V}`)}}},{name:"ElevenLabs TTS Generation (stream exists)",fn:async(X)=>{if(!Lv(X).apiKey&&!e21()){G8.warn("Skipping TTS generation test - no API key provided");return}let Z="Hello from ElevenLabs test.";try{let V=await X.useModel(v22.TEXT_TO_SPEECH,Z);if(!V||typeof V.getReader!=="function")throw Error("TTS output is not a Web ReadableStream");let U=V.getReader(),{value:Q,done:Y}=await U.read();if(U.releaseLock(),Y&&!Q)throw Error("Received empty audio stream");G8.success("Received audio stream chunk successfully")}catch(V){let U=V instanceof Error?V.message:String(V);if(U.includes("QUOTA_EXCEEDED")){G8.warn("[ElevenLabs Test] API quota exceeded - test skipped");return}throw G8.error("[ElevenLabs Test] TTS Generation test failed:",U),Error(`TTS Generation test failed: ${U}`)}}},{name:"Output format handling",fn:async(X)=>{let j=Lv(X),Z=["mp3_44100_128","pcm_16000","pcm_22050","pcm_24000","pcm_44100"];for(let V of Z)if(V.startsWith("pcm_")){let U=Number.parseInt(V.slice(4));if(isNaN(U)||U<=0)throw Error(`Invalid PCM format: ${V}`)}G8.success(`Output format validated: ${j.outputFormat}`)}}]}]},xO0=uO0;export{uO0 as elevenLabsPlugin,xO0 as default};
98
98
 
99
- //# debugId=2064C40A060FAB9864756E2164756E21
99
+ //# debugId=4B4D7E773736FD5C64756E2164756E21