@elizaos/plugin-elevenlabs 2.0.0-alpha.9 → 2.0.11-beta.7
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.
- package/README.md +52 -49
- package/package.json +22 -19
- package/dist/browser/index.browser.js +0 -4
- package/dist/browser/index.browser.js.map +0 -10
- package/dist/browser/index.d.ts +0 -2
- package/dist/cjs/index.d.ts +0 -2
- package/dist/cjs/index.node.cjs +0 -100183
- package/dist/cjs/index.node.js.map +0 -2391
- package/dist/index.browser.d.ts +0 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.node.d.ts +0 -2
- package/dist/node/index.d.ts +0 -2
- package/dist/node/index.node.js +0 -100156
- package/dist/node/index.node.js.map +0 -2390
package/README.md
CHANGED
|
@@ -1,67 +1,70 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @elizaos/plugin-elevenlabs
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Adds ElevenLabs-powered text-to-speech (TTS) and speech-to-text (STT) capabilities to Eliza agents.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## What this plugin does
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- **TTS (`ModelType.TEXT_TO_SPEECH`):** Converts text to spoken audio using ElevenLabs voices. Returns a `Uint8Array` of audio data. Supports multiple voice models, configurable voice settings, and per-call format/voice overrides.
|
|
8
|
+
- **STT (`ModelType.TRANSCRIPTION`):** Transcribes audio to text using ElevenLabs Scribe. Accepts a URL, `Buffer`, or `{ audioUrl }` object. Supports speaker diarization (up to 32 speakers), language auto-detection, and audio event tagging.
|
|
9
|
+
|
|
10
|
+
## Enable the plugin
|
|
11
|
+
|
|
12
|
+
Add to your character's `plugins` list:
|
|
8
13
|
|
|
9
14
|
```json
|
|
10
|
-
"plugins": ["@elizaos
|
|
15
|
+
"plugins": ["@elizaos/plugin-elevenlabs"]
|
|
11
16
|
```
|
|
12
17
|
|
|
13
|
-
##
|
|
18
|
+
## Required configuration
|
|
19
|
+
|
|
20
|
+
| Variable | Required | Description |
|
|
21
|
+
|----------|----------|-------------|
|
|
22
|
+
| `ELEVENLABS_API_KEY` | **Yes** | ElevenLabs API key |
|
|
23
|
+
|
|
24
|
+
## Optional TTS configuration
|
|
14
25
|
|
|
15
|
-
|
|
26
|
+
| Variable | Default | Description |
|
|
27
|
+
|----------|---------|-------------|
|
|
28
|
+
| `ELEVENLABS_VOICE_ID` | `EXAVITQu4vr4xnSDxMaL` | Voice ID |
|
|
29
|
+
| `ELEVENLABS_MODEL_ID` | `eleven_monolingual_v1` | TTS model |
|
|
30
|
+
| `ELEVENLABS_OUTPUT_FORMAT` | `mp3_44100_128` | Audio format (ElevenLabs enum); use `mp3_44100_128` for browser compatibility |
|
|
31
|
+
| `ELEVENLABS_VOICE_STABILITY` | `0.5` | 0–1; higher = more consistent |
|
|
32
|
+
| `ELEVENLABS_VOICE_SIMILARITY_BOOST` | `0.75` | 0–1; higher = closer to reference voice |
|
|
33
|
+
| `ELEVENLABS_VOICE_STYLE` | `0` | 0–1; style intensity |
|
|
34
|
+
| `ELEVENLABS_VOICE_USE_SPEAKER_BOOST` | `true` | Enable speaker boost |
|
|
35
|
+
| `ELEVENLABS_OPTIMIZE_STREAMING_LATENCY` | `0` | 0–4; higher reduces latency at quality cost |
|
|
36
|
+
| `ELEVENLABS_BROWSER_URL` | — | Proxy base URL for browser builds; the proxy injects the API key server-side |
|
|
37
|
+
|
|
38
|
+
## Optional STT configuration
|
|
39
|
+
|
|
40
|
+
| Variable | Default | Description |
|
|
41
|
+
|----------|---------|-------------|
|
|
42
|
+
| `ELEVENLABS_STT_MODEL_ID` | `scribe_v1` | STT model |
|
|
43
|
+
| `ELEVENLABS_STT_LANGUAGE_CODE` | _(auto-detect)_ | e.g. `en`, `es`; leave unset for auto |
|
|
44
|
+
| `ELEVENLABS_STT_TIMESTAMPS_GRANULARITY` | `word` | `none`, `word`, or `character` |
|
|
45
|
+
| `ELEVENLABS_STT_DIARIZE` | `false` | Enable speaker diarization |
|
|
46
|
+
| `ELEVENLABS_STT_NUM_SPEAKERS` | — | Expected speaker count (1–32); used when diarize=true |
|
|
47
|
+
| `ELEVENLABS_STT_TAG_AUDIO_EVENTS` | `false` | Tag laughter, applause, etc. |
|
|
48
|
+
|
|
49
|
+
## Example character settings
|
|
16
50
|
|
|
17
51
|
```json
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"ELEVENLABS_VOICE_STYLE": "0",
|
|
27
|
-
"ELEVENLABS_VOICE_USE_SPEAKER_BOOST": "true"
|
|
52
|
+
{
|
|
53
|
+
"plugins": ["@elizaos/plugin-elevenlabs"],
|
|
54
|
+
"settings": {
|
|
55
|
+
"ELEVENLABS_API_KEY": "your_api_key",
|
|
56
|
+
"ELEVENLABS_VOICE_ID": "EXAVITQu4vr4xnSDxMaL",
|
|
57
|
+
"ELEVENLABS_MODEL_ID": "eleven_monolingual_v1",
|
|
58
|
+
"ELEVENLABS_OUTPUT_FORMAT": "mp3_44100_128"
|
|
59
|
+
}
|
|
28
60
|
}
|
|
29
61
|
```
|
|
30
62
|
|
|
31
|
-
Or
|
|
63
|
+
Or via `.env`:
|
|
32
64
|
|
|
33
65
|
```
|
|
34
|
-
ELEVENLABS_API_KEY=
|
|
35
|
-
# Optional overrides:
|
|
66
|
+
ELEVENLABS_API_KEY=your_api_key
|
|
36
67
|
ELEVENLABS_VOICE_ID=EXAVITQu4vr4xnSDxMaL
|
|
37
68
|
ELEVENLABS_MODEL_ID=eleven_monolingual_v1
|
|
38
|
-
|
|
39
|
-
ELEVENLABS_OPTIMIZE_STREAMING_LATENCY=0
|
|
40
|
-
ELEVENLABS_OUTPUT_FORMAT=pcm_16000
|
|
41
|
-
ELEVENLABS_VOICE_SIMILARITY_BOOST=0.75
|
|
42
|
-
ELEVENLABS_VOICE_STYLE=0
|
|
43
|
-
ELEVENLABS_VOICE_USE_SPEAKER_BOOST=true
|
|
69
|
+
ELEVENLABS_OUTPUT_FORMAT=mp3_44100_128
|
|
44
70
|
```
|
|
45
|
-
|
|
46
|
-
### Configuration Options
|
|
47
|
-
|
|
48
|
-
- `ELEVENLABS_API_KEY` (required): Your ElevenLabs API credentials.
|
|
49
|
-
- `ELEVENLABS_VOICE_ID`: Optional. Voice selection ID. Defaults to `EXAVITQu4vr4xnSDxMaL`.
|
|
50
|
-
- `ELEVENLABS_MODEL_ID`: Optional. Speech model ID. Defaults to `eleven_monolingual_v1`.
|
|
51
|
-
- `ELEVENLABS_VOICE_STABILITY`: Optional. Controls voice stability. Defaults to `0.5`.
|
|
52
|
-
- `ELEVENLABS_OPTIMIZE_STREAMING_LATENCY`: Optional. Adjusts streaming latency. Defaults to `0`.
|
|
53
|
-
- `ELEVENLABS_OUTPUT_FORMAT`: Optional. Output format (e.g., pcm_16000). Defaults to `pcm_16000`.
|
|
54
|
-
- `ELEVENLABS_VOICE_SIMILARITY_BOOST`: Optional. Adjusts similarity to the reference voice (0-1). Defaults to `0.75`.
|
|
55
|
-
- `ELEVENLABS_VOICE_STYLE`: Optional. Controls voice style intensity (0-1). Defaults to `0`.
|
|
56
|
-
- `ELEVENLABS_VOICE_USE_SPEAKER_BOOST`: Optional. Enhances speaker presence (true/false). Defaults to `true`.
|
|
57
|
-
- `ELEVENLABS_STT_MODEL_ID`: Optional. Speech-to-text model ID. Defaults to `scribe_v1`.
|
|
58
|
-
- `ELEVENLABS_STT_LANGUAGE_CODE`: Optional. Language code for transcription (e.g., 'en', 'es'). Leave empty for automatic detection.
|
|
59
|
-
- `ELEVENLABS_STT_TIMESTAMPS_GRANULARITY`: Optional. Timestamp detail level: 'none', 'word', or 'character'. Defaults to `word`.
|
|
60
|
-
- `ELEVENLABS_STT_DIARIZE`: Optional. Enable speaker diarization (true/false). Defaults to `false`.
|
|
61
|
-
- `ELEVENLABS_STT_NUM_SPEAKERS`: Optional. Expected number of speakers for diarization (1-32).
|
|
62
|
-
- `ELEVENLABS_STT_TAG_AUDIO_EVENTS`: Optional. Tag audio events like laughter, applause (true/false). Defaults to `false`.
|
|
63
|
-
|
|
64
|
-
The plugin provides the following model types:
|
|
65
|
-
|
|
66
|
-
- `TEXT_TO_SPEECH`: Converts text into spoken audio.
|
|
67
|
-
- `TRANSCRIPTION`: Converts audio/video into text transcripts.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-elevenlabs",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.11-beta.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/cjs/index.node.cjs",
|
|
6
6
|
"module": "dist/node/index.node.js",
|
|
@@ -15,6 +15,11 @@
|
|
|
15
15
|
"./package.json": "./package.json",
|
|
16
16
|
".": {
|
|
17
17
|
"types": "./dist/index.d.ts",
|
|
18
|
+
"eliza-source": {
|
|
19
|
+
"types": "./src/index.node.ts",
|
|
20
|
+
"import": "./src/index.node.ts",
|
|
21
|
+
"default": "./src/index.node.ts"
|
|
22
|
+
},
|
|
18
23
|
"browser": {
|
|
19
24
|
"types": "./dist/browser/index.d.ts",
|
|
20
25
|
"import": "./dist/browser/index.browser.js",
|
|
@@ -28,15 +33,11 @@
|
|
|
28
33
|
},
|
|
29
34
|
"default": "./dist/node/index.node.js"
|
|
30
35
|
},
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
"./browser": {
|
|
37
|
-
"types": "./dist/browser/index.d.ts",
|
|
38
|
-
"import": "./dist/browser/index.browser.js",
|
|
39
|
-
"default": "./dist/browser/index.browser.js"
|
|
36
|
+
"./*.css": "./dist/*.css",
|
|
37
|
+
"./*": {
|
|
38
|
+
"types": "./dist/*.d.ts",
|
|
39
|
+
"import": "./dist/*.js",
|
|
40
|
+
"default": "./dist/*.js"
|
|
40
41
|
}
|
|
41
42
|
},
|
|
42
43
|
"files": [
|
|
@@ -44,22 +45,24 @@
|
|
|
44
45
|
],
|
|
45
46
|
"dependencies": {
|
|
46
47
|
"@elevenlabs/elevenlabs-js": "^2.16.0",
|
|
47
|
-
"@elizaos/core": "
|
|
48
|
+
"@elizaos/core": "2.0.11-beta.7"
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
51
|
+
"@biomejs/biome": "^2.4.14",
|
|
50
52
|
"@types/bun": "^1.2.22",
|
|
51
53
|
"@types/node": "^24.5.2",
|
|
52
|
-
"
|
|
53
|
-
"typescript": "^5.9.2"
|
|
54
|
+
"typescript": "^6.0.3"
|
|
54
55
|
},
|
|
55
56
|
"scripts": {
|
|
56
57
|
"build": "bun run build.ts",
|
|
57
58
|
"dev": "bun --hot build.ts",
|
|
58
|
-
"test": "
|
|
59
|
-
"clean": "rm -rf dist .turbo
|
|
60
|
-
"format": "
|
|
61
|
-
"format:check": "
|
|
62
|
-
"lint": "
|
|
59
|
+
"test": "bun test __tests__",
|
|
60
|
+
"clean": "rm -rf dist .turbo .turbo-tsconfig.json tsconfig.tsbuildinfo",
|
|
61
|
+
"format": "bunx @biomejs/biome format --write .",
|
|
62
|
+
"format:check": "bunx @biomejs/biome format .",
|
|
63
|
+
"lint": "bunx @biomejs/biome check --write --unsafe .",
|
|
64
|
+
"lint:check": "bunx @biomejs/biome check .",
|
|
65
|
+
"typecheck": "tsgo --project tsconfig.json --noEmit"
|
|
63
66
|
},
|
|
64
67
|
"publishConfig": {
|
|
65
68
|
"access": "public"
|
|
@@ -177,5 +180,5 @@
|
|
|
177
180
|
}
|
|
178
181
|
}
|
|
179
182
|
},
|
|
180
|
-
"gitHead": "
|
|
183
|
+
"gitHead": "cdbc876f793d96073d7eb0d09715a031ce0cd32e"
|
|
181
184
|
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{ModelType as x,logger as N,parseBooleanFromText as I}from"@elizaos/core";import{ElevenLabsClient as A}from"@elevenlabs/elevenlabs-js";function $(){return typeof globalThis<"u"&&typeof globalThis.document<"u"}function X(G,D,H){let J=typeof process<"u"&&process.env?process.env[D]:void 0;return G.getSetting(D)??J??H}function h(G){let D=G.getSetting("ELEVENLABS_BROWSER_URL");if($()&&D)return D;return"https://api.elevenlabs.io/v1"}function j(G){let D=typeof process<"u"&&process.env||{};return G.getSetting("ELEVENLABS_API_KEY")||D.ELEVENLABS_API_KEY}function Z(G){return{apiKey:j(G)||"",voiceId:X(G,"ELEVENLABS_VOICE_ID","EXAVITQu4vr4xnSDxMaL"),model:X(G,"ELEVENLABS_MODEL_ID","eleven_monolingual_v1"),stability:X(G,"ELEVENLABS_VOICE_STABILITY","0.5"),latency:X(G,"ELEVENLABS_OPTIMIZE_STREAMING_LATENCY","0"),outputFormat:X(G,"ELEVENLABS_OUTPUT_FORMAT","mp3_44100_128"),similarity:X(G,"ELEVENLABS_VOICE_SIMILARITY_BOOST","0.75"),style:X(G,"ELEVENLABS_VOICE_STYLE","0"),speakerBoost:I(`${X(G,"ELEVENLABS_VOICE_USE_SPEAKER_BOOST","true")}`)}}function z(G){let D=X(G,"ELEVENLABS_STT_LANGUAGE_CODE"),H=X(G,"ELEVENLABS_STT_NUM_SPEAKERS");return{apiKey:j(G)||"",modelId:X(G,"ELEVENLABS_STT_MODEL_ID","scribe_v1"),languageCode:D||void 0,timestampsGranularity:X(G,"ELEVENLABS_STT_TIMESTAMPS_GRANULARITY","word"),diarize:I(`${X(G,"ELEVENLABS_STT_DIARIZE","false")}`),numSpeakers:H?Number(H):void 0,tagAudioEvents:I(`${X(G,"ELEVENLABS_STT_TAG_AUDIO_EVENTS","false")}`)}}async function E(G,D){try{let H=h(G),J=j(G)??($()?"sk-proxy":void 0),Q=await new A({apiKey:J,baseUrl:H}).textToSpeech.stream(D.voiceId,{text:D.text,modelId:D.modelId,outputFormat:D.outputFormat,optimizeStreamingLatency:Number(D.latency)||0,voiceSettings:{stability:Number(D.stability)||0,similarityBoost:Number(D.similarity)||0,style:Number(D.style)||0,useSpeakerBoost:!!D.speakerBoost}});if(!Q)throw Error("Empty response body from ElevenLabs SDK");return Q}catch(H){let J=H instanceof Error?H.message:String(H);throw N.error(`ElevenLabs fetchSpeech error: ${J}`),H instanceof Error?H:Error(J)}}async function M(G,D){try{let H=h(G),J=j(G)??($()?"sk-proxy":void 0),O=new A({apiKey:J,baseUrl:H}),Q={modelId:D.modelId,audio:D.audioFile};if(D.languageCode)Q.languageCode=D.languageCode;if(D.timestampsGranularity!=="none")Q.timestampsGranularity=D.timestampsGranularity;if(D.diarize){if(Q.diarize=!0,D.numSpeakers)Q.numSpeakers=D.numSpeakers}if(D.tagAudioEvents)Q.tagAudioEvents=!0;let W=await O.speechToText.convert(Q);if(!W)throw Error("Empty response from ElevenLabs STT API");let Y="";if("transcript"in W&&W.transcript)Y=W.transcript.text||"";else if("transcripts"in W&&W.transcripts)Y=W.transcripts.map((w)=>w.text||"").join(`
|
|
2
|
-
`);return Y}catch(H){let J=H instanceof Error?H.message:String(H);throw N.error(`ElevenLabs fetchTranscription error: ${J}`),H instanceof Error?H:Error(J)}}var q={name:"elevenLabs",description:"High-quality text-to-speech synthesis and speech-to-text transcription using ElevenLabs API with support for multiple voices, languages, and speaker diarization",models:{[x.TEXT_TO_SPEECH]:async(G,D)=>{let H=typeof D==="string"?{text:D}:D,J=Z(G),O=H.model||J.model,Q=H.voiceId||J.voiceId,W=H.format?H.format==="mp3"?"mp3_44100_128":H.format:J.outputFormat;N.log(`[ElevenLabs] Using TEXT_TO_SPEECH model: ${O}`);try{return await E(G,{text:H.text,voiceId:Q,modelId:O,outputFormat:W,stability:J.stability,similarity:J.similarity,style:J.style,speakerBoost:J.speakerBoost,latency:J.latency})}catch(Y){let _=Y instanceof Error?Y.message:String(Y);throw N.error(`ElevenLabs model error: ${_}`),Y instanceof Error?Y:Error(_)}},[x.TRANSCRIPTION]:async(G,D)=>{let H=z(G);N.log(`[ElevenLabs] Using TRANSCRIPTION model: ${H.modelId}`);try{let J;if(typeof D==="string"){let Q=await fetch(D);if(!Q.ok)throw Error(`Failed to fetch audio from URL: ${D}`);let W=await Q.arrayBuffer();J=Buffer.from(W)}else if(Buffer.isBuffer(D))J=D;else if(typeof D==="object"&&"audioUrl"in D){let Q=await fetch(D.audioUrl);if(!Q.ok)throw Error(`Failed to fetch audio from URL: ${D.audioUrl}`);let W=await Q.arrayBuffer();J=Buffer.from(W)}else throw Error("Invalid input type for TRANSCRIPTION model");return await M(G,{audioFile:J,modelId:H.modelId,languageCode:H.languageCode,timestampsGranularity:H.timestampsGranularity,diarize:H.diarize,numSpeakers:H.numSpeakers,tagAudioEvents:H.tagAudioEvents})}catch(J){let O=J instanceof Error?J.message:String(J);throw N.error(`ElevenLabs transcription error: ${O}`),J instanceof Error?J:Error(O)}}},tests:[{name:"test eleven labs",tests:[{name:"Eleven Labs API key validation",fn:async(G)=>{if(!Z(G).apiKey)throw Error("Missing API key: Please provide a valid Eleven Labs API key.")}},{name:"Voice settings validation",fn:async(G)=>{let D=Z(G);if(!D.voiceId)throw Error("Missing voice ID configuration");let H=Number.parseFloat(D.stability);if(Number.isNaN(H)||H<0||H>1)throw Error("Voice stability must be between 0 and 1");let J=Number.parseFloat(D.similarity);if(Number.isNaN(J)||J<0||J>1)throw Error("Voice similarity boost must be between 0 and 1");N.success("Voice settings validated successfully")}},{name:"Eleven Labs API connectivity",fn:async(G)=>{let D=Z(G);if(!D.apiKey){N.warn("Skipping API connectivity test - no API key provided");return}try{await E(G,{text:"test",voiceId:D.voiceId,modelId:D.model,outputFormat:D.outputFormat,stability:D.stability,similarity:D.similarity,style:D.style,speakerBoost:D.speakerBoost,latency:D.latency}),N.success("API connectivity test passed")}catch(H){let J=H instanceof Error?H.message:String(H);if(J.includes("QUOTA_EXCEEDED")){N.warn("API quota exceeded - test skipped");return}throw N.error(`API connectivity test failed: ${J}`),Error(`API connectivity test failed: ${J}`)}}},{name:"ElevenLabs TTS Generation (stream exists)",fn:async(G)=>{if(!Z(G).apiKey&&!$()){N.warn("Skipping TTS generation test - no API key provided");return}let H="Hello from ElevenLabs test.";try{let J=await G.useModel(x.TEXT_TO_SPEECH,H);if(!J||typeof J.getReader!=="function")throw Error("TTS output is not a Web ReadableStream");let O=J.getReader(),{value:Q,done:W}=await O.read();if(O.releaseLock(),W&&!Q)throw Error("Received empty audio stream");N.success("Received audio stream chunk successfully")}catch(J){let O=J instanceof Error?J.message:String(J);if(O.includes("QUOTA_EXCEEDED")){N.warn("[ElevenLabs Test] API quota exceeded - test skipped");return}throw N.error("[ElevenLabs Test] TTS Generation test failed:",O),Error(`TTS Generation test failed: ${O}`)}}},{name:"Output format handling",fn:async(G)=>{let D=Z(G),H=["mp3_44100_128","pcm_16000","pcm_22050","pcm_24000","pcm_44100"];for(let J of H)if(J.startsWith("pcm_")){let O=Number.parseInt(J.slice(4));if(Number.isNaN(O)||O<=0)throw Error(`Invalid PCM format: ${J}`)}N.success(`Output format validated: ${D.outputFormat}`)}}]},{name:"test eleven labs STT",tests:[{name:"STT settings validation",fn:async(G)=>{let D=z(G);if(!D.modelId)throw Error("Missing STT model ID configuration");if(!["none","word","character"].includes(D.timestampsGranularity))throw Error(`Invalid timestamps granularity: ${D.timestampsGranularity}`);if(D.numSpeakers!==void 0&&(D.numSpeakers<1||D.numSpeakers>32))throw Error("Number of speakers must be between 1 and 32");N.success("STT settings validated successfully")}},{name:"STT configuration defaults",fn:async(G)=>{let D=z(G);if(D.modelId!=="scribe_v1")N.warn(`Using non-default STT model: ${D.modelId}`);if(D.timestampsGranularity!=="word")N.warn(`Using non-default timestamps granularity: ${D.timestampsGranularity}`);N.success("STT configuration defaults checked")}},{name:"STT input handling validation",fn:async(G)=>{let D=[{type:"string URL",valid:!0},{type:"Buffer",valid:!0},{type:"object with audioUrl",valid:!0}];for(let H of D)if(!H.valid)throw Error(`Invalid test case should not be valid: ${H.type}`);N.success("STT input handling validation passed")}}]}]},C=q;export{q as elevenLabsPlugin,C as default};
|
|
3
|
-
|
|
4
|
-
//# debugId=EE5CDA95AFBBAFB064756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/index.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import {\n type IAgentRuntime,\n ModelType,\n type Plugin,\n logger,\n parseBooleanFromText,\n} from \"@elizaos/core\";\nimport { ElevenLabsClient } from \"@elevenlabs/elevenlabs-js\";\n\n/**\n * Voice settings configuration for ElevenLabs API\n */\ninterface VoiceSettings {\n apiKey: string;\n voiceId: string;\n model: string;\n stability: string;\n latency: string;\n outputFormat: string;\n similarity: string;\n style: string;\n speakerBoost: boolean;\n}\n\ninterface TranscriptionSettings {\n apiKey: string;\n modelId: string;\n languageCode?: string;\n timestampsGranularity: string;\n diarize: boolean;\n numSpeakers?: number;\n tagAudioEvents: boolean;\n}\n\nfunction isBrowser(): boolean {\n return (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as unknown as { document?: unknown }).document !==\n \"undefined\"\n );\n}\n\nfunction getSetting(\n runtime: IAgentRuntime,\n key: string,\n fallback?: string\n): string {\n const envValue =\n typeof process !== \"undefined\" &&\n (process as { env?: Record<string, string> }).env\n ? (process as { env: Record<string, string> }).env[key]\n : undefined;\n return (\n (runtime.getSetting(key) as string) ??\n (envValue as string) ??\n (fallback as string)\n );\n}\n\nfunction getBaseURL(runtime: IAgentRuntime): string {\n const browserURL = runtime.getSetting(\"ELEVENLABS_BROWSER_URL\") as\n | string\n | undefined;\n if (isBrowser() && browserURL) return browserURL;\n return \"https://api.elevenlabs.io/v1\";\n}\n\nfunction getApiKey(runtime: IAgentRuntime): string | undefined {\n const env =\n (typeof process !== \"undefined\" &&\n (process as { env?: Record<string, string> }).env) ||\n {};\n return (\n (runtime.getSetting(\"ELEVENLABS_API_KEY\") as string | undefined) ||\n (env.ELEVENLABS_API_KEY as string | undefined)\n );\n}\n\n/**\n * Function to retrieve voice settings based on runtime and environment variables.\n * @param {IAgentRuntime} runtime - The agent runtime object.\n * @returns {VoiceSettings} - Object containing various voice settings.\n */\nfunction getVoiceSettings(runtime: IAgentRuntime): VoiceSettings {\n return {\n apiKey: getApiKey(runtime) || \"\",\n voiceId: getSetting(runtime, \"ELEVENLABS_VOICE_ID\", \"EXAVITQu4vr4xnSDxMaL\"),\n model: getSetting(runtime, \"ELEVENLABS_MODEL_ID\", \"eleven_monolingual_v1\"),\n stability: getSetting(runtime, \"ELEVENLABS_VOICE_STABILITY\", \"0.5\"),\n latency: getSetting(runtime, \"ELEVENLABS_OPTIMIZE_STREAMING_LATENCY\", \"0\"),\n // Use mp3 by default to be browser-safe and align with OpenAI plugin behavior\n outputFormat: getSetting(\n runtime,\n \"ELEVENLABS_OUTPUT_FORMAT\",\n \"mp3_44100_128\"\n ),\n similarity: getSetting(\n runtime,\n \"ELEVENLABS_VOICE_SIMILARITY_BOOST\",\n \"0.75\"\n ),\n style: getSetting(runtime, \"ELEVENLABS_VOICE_STYLE\", \"0\"),\n speakerBoost: parseBooleanFromText(\n `${getSetting(runtime, \"ELEVENLABS_VOICE_USE_SPEAKER_BOOST\", \"true\")}` as string\n ),\n };\n}\n\nfunction getTranscriptionSettings(\n runtime: IAgentRuntime\n): TranscriptionSettings {\n const languageCode = getSetting(runtime, \"ELEVENLABS_STT_LANGUAGE_CODE\");\n const numSpeakersStr = getSetting(runtime, \"ELEVENLABS_STT_NUM_SPEAKERS\");\n\n return {\n apiKey: getApiKey(runtime) || \"\",\n modelId: getSetting(runtime, \"ELEVENLABS_STT_MODEL_ID\", \"scribe_v1\"),\n languageCode: languageCode || undefined,\n timestampsGranularity: getSetting(\n runtime,\n \"ELEVENLABS_STT_TIMESTAMPS_GRANULARITY\",\n \"word\"\n ),\n diarize: parseBooleanFromText(\n `${getSetting(runtime, \"ELEVENLABS_STT_DIARIZE\", \"false\")}` as string\n ),\n numSpeakers: numSpeakersStr ? Number(numSpeakersStr) : undefined,\n tagAudioEvents: parseBooleanFromText(\n `${getSetting(runtime, \"ELEVENLABS_STT_TAG_AUDIO_EVENTS\", \"false\")}` as string\n ),\n };\n}\n\n/**\n * Fetch speech from ElevenLabs API using official SDK.\n * Returns a Web ReadableStream to align with plugin-openai.\n * @param {IAgentRuntime} runtime - The runtime interface containing necessary data for the API call.\n * @param {string} text - The text to be converted into speech.\n * @returns {Promise<ReadableStream<Uint8Array>>}\n */\nasync function fetchSpeech(\n runtime: IAgentRuntime,\n params: {\n text: string;\n voiceId: string;\n modelId: string;\n outputFormat: string;\n stability: string;\n similarity: string;\n style: string;\n speakerBoost: boolean;\n latency: string;\n }\n): Promise<ReadableStream<Uint8Array>> {\n try {\n const baseUrl = getBaseURL(runtime);\n // In browser mode with proxy URL, use a harmless placeholder key.\n const apiKey = getApiKey(runtime) ?? (isBrowser() ? \"sk-proxy\" : undefined);\n const client = new ElevenLabsClient({\n apiKey: apiKey,\n baseUrl,\n });\n\n const stream = await client.textToSpeech.stream(params.voiceId, {\n text: params.text,\n modelId: params.modelId,\n outputFormat: params.outputFormat as any,\n optimizeStreamingLatency: Number(params.latency) || 0,\n voiceSettings: {\n stability: Number(params.stability) || 0,\n similarityBoost: Number(params.similarity) || 0,\n style: Number(params.style) || 0,\n useSpeakerBoost: !!params.speakerBoost,\n },\n });\n\n if (!stream) {\n throw new Error(\"Empty response body from ElevenLabs SDK\");\n }\n\n return stream;\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logger.error(`ElevenLabs fetchSpeech error: ${msg}`);\n throw error instanceof Error ? error : new Error(msg);\n }\n}\n\nasync function fetchTranscription(\n runtime: IAgentRuntime,\n params: {\n audioFile: File | Buffer | Blob;\n modelId: string;\n languageCode?: string;\n timestampsGranularity: string;\n diarize: boolean;\n numSpeakers?: number;\n tagAudioEvents: boolean;\n }\n): Promise<string> {\n try {\n const baseUrl = getBaseURL(runtime);\n const apiKey = getApiKey(runtime) ?? (isBrowser() ? \"sk-proxy\" : undefined);\n const client = new ElevenLabsClient({\n apiKey: apiKey,\n baseUrl,\n });\n\n const requestParams: any = {\n modelId: params.modelId,\n audio: params.audioFile,\n };\n\n if (params.languageCode) {\n requestParams.languageCode = params.languageCode;\n }\n\n if (params.timestampsGranularity !== \"none\") {\n requestParams.timestampsGranularity = params.timestampsGranularity;\n }\n\n if (params.diarize) {\n requestParams.diarize = true;\n if (params.numSpeakers) {\n requestParams.numSpeakers = params.numSpeakers;\n }\n }\n\n if (params.tagAudioEvents) {\n requestParams.tagAudioEvents = true;\n }\n\n const response = await client.speechToText.convert(requestParams);\n\n if (!response) {\n throw new Error(\"Empty response from ElevenLabs STT API\");\n }\n\n let transcript = \"\";\n if (\"transcript\" in response && response.transcript) {\n const transcriptObj = response.transcript as { text?: string };\n transcript = transcriptObj.text || \"\";\n } else if (\"transcripts\" in response && response.transcripts) {\n const transcriptsArray = response.transcripts as Array<{ text?: string }>;\n transcript = transcriptsArray\n .map((t: { text?: string }) => t.text || \"\")\n .join(\"\\n\");\n }\n\n return transcript;\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logger.error(`ElevenLabs fetchTranscription error: ${msg}`);\n throw error instanceof Error ? error : new Error(msg);\n }\n}\n\n// Note: WAV header utilities removed to ensure browser safety. Prefer mp3 output.\n\n/**\n * Represents the ElevenLabs plugin.\n * This plugin provides text-to-speech and speech-to-text functionality using the ElevenLabs API.\n *\n * Features:\n * - High-quality voice synthesis (TTS)\n * - High-accuracy speech transcription (STT) with Scribe v1 model\n * - Support for multiple voice models and settings\n * - Configurable voice parameters (stability, similarity, style)\n * - Stream-based audio output for efficient memory usage\n * - Speaker diarization (up to 32 speakers)\n * - Multi-language support (99 languages for STT)\n * - Audio event detection (laughter, applause, etc.)\n *\n * Required environment variables:\n * - ELEVENLABS_API_KEY: Your ElevenLabs API key\n *\n * Optional TTS environment variables:\n * - ELEVENLABS_VOICE_ID: Voice ID to use (default: EXAVITQu4vr4xnSDxMaL)\n * - ELEVENLABS_MODEL_ID: Model to use (default: eleven_monolingual_v1)\n * - ELEVENLABS_VOICE_STABILITY: Voice stability 0-1 (default: 0.5)\n * - ELEVENLABS_VOICE_SIMILARITY_BOOST: Voice similarity 0-1 (default: 0.75)\n * - ELEVENLABS_VOICE_STYLE: Voice style 0-1 (default: 0)\n * - ELEVENLABS_VOICE_USE_SPEAKER_BOOST: Enable speaker boost (default: true)\n * - ELEVENLABS_OPTIMIZE_STREAMING_LATENCY: Latency optimization 0-4 (default: 0)\n * - ELEVENLABS_OUTPUT_FORMAT: Output format (default: mp3_44100_128)\n *\n * Optional STT environment variables:\n * - ELEVENLABS_STT_MODEL_ID: STT model ID (default: scribe_v1)\n * - ELEVENLABS_STT_LANGUAGE_CODE: Language code for transcription (auto-detect if not set)\n * - ELEVENLABS_STT_TIMESTAMPS_GRANULARITY: Timestamp level (default: word)\n * - ELEVENLABS_STT_DIARIZE: Enable speaker diarization (default: false)\n * - ELEVENLABS_STT_NUM_SPEAKERS: Expected number of speakers (1-32)\n * - ELEVENLABS_STT_TAG_AUDIO_EVENTS: Tag audio events (default: false)\n *\n * @type {Plugin}\n */\nexport const elevenLabsPlugin: Plugin = {\n name: \"elevenLabs\",\n description:\n \"High-quality text-to-speech synthesis and speech-to-text transcription using ElevenLabs API with support for multiple voices, languages, and speaker diarization\",\n models: {\n [ModelType.TEXT_TO_SPEECH]: async (\n runtime: IAgentRuntime,\n input:\n | string\n | {\n text: string;\n model?: string;\n voiceId?: string;\n format?: string;\n instructions?: string;\n }\n ) => {\n // Align with OpenAI plugin: accept string or params object and return Web ReadableStream\n const options = typeof input === \"string\" ? { text: input } : input;\n const settings = getVoiceSettings(runtime);\n const resolvedModel = options.model || settings.model;\n // Prefer explicit ElevenLabs voiceId param; fall back to configured voiceId.\n const resolvedVoiceId =\n (options.voiceId as string | undefined) || settings.voiceId;\n // Honor explicit caller-provided format (e.g., \"pcm_16000\", \"mp3_22050_64\").\n // Gracefully map generic \"mp3\" to a valid ElevenLabs enum, otherwise pass through.\n // Only default to settings.outputFormat when absent.\n const outputFormat = options.format\n ? options.format === \"mp3\"\n ? \"mp3_44100_128\"\n : (options.format as string)\n : settings.outputFormat;\n\n logger.log(`[ElevenLabs] Using TEXT_TO_SPEECH model: ${resolvedModel}`);\n try {\n const stream = await fetchSpeech(runtime, {\n text: options.text,\n voiceId: resolvedVoiceId,\n modelId: resolvedModel,\n outputFormat,\n stability: settings.stability,\n similarity: settings.similarity,\n style: settings.style,\n speakerBoost: settings.speakerBoost,\n latency: settings.latency,\n });\n return stream;\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logger.error(`ElevenLabs model error: ${msg}`);\n throw error instanceof Error ? error : new Error(msg);\n }\n },\n [ModelType.TRANSCRIPTION]: async (\n runtime: IAgentRuntime,\n input: string | Buffer | { audioUrl: string; prompt?: string }\n ) => {\n const settings = getTranscriptionSettings(runtime);\n\n logger.log(`[ElevenLabs] Using TRANSCRIPTION model: ${settings.modelId}`);\n\n try {\n let audioFile: Buffer | File | Blob;\n\n if (typeof input === \"string\") {\n const response = await fetch(input);\n if (!response.ok) {\n throw new Error(`Failed to fetch audio from URL: ${input}`);\n }\n const arrayBuffer = await response.arrayBuffer();\n audioFile = Buffer.from(arrayBuffer);\n } else if (Buffer.isBuffer(input)) {\n audioFile = input;\n } else if (typeof input === \"object\" && \"audioUrl\" in input) {\n const response = await fetch(input.audioUrl);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch audio from URL: ${input.audioUrl}`\n );\n }\n const arrayBuffer = await response.arrayBuffer();\n audioFile = Buffer.from(arrayBuffer);\n } else {\n throw new Error(\"Invalid input type for TRANSCRIPTION model\");\n }\n\n const transcript = await fetchTranscription(runtime, {\n audioFile,\n modelId: settings.modelId,\n languageCode: settings.languageCode,\n timestampsGranularity: settings.timestampsGranularity,\n diarize: settings.diarize,\n numSpeakers: settings.numSpeakers,\n tagAudioEvents: settings.tagAudioEvents,\n });\n\n return transcript;\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logger.error(`ElevenLabs transcription error: ${msg}`);\n throw error instanceof Error ? error : new Error(msg);\n }\n },\n },\n tests: [\n {\n name: \"test eleven labs\",\n tests: [\n {\n name: \"Eleven Labs API key validation\",\n fn: async (runtime: IAgentRuntime) => {\n const settings = getVoiceSettings(runtime);\n if (!settings.apiKey) {\n throw new Error(\n \"Missing API key: Please provide a valid Eleven Labs API key.\"\n );\n }\n },\n },\n {\n name: \"Voice settings validation\",\n fn: async (runtime: IAgentRuntime) => {\n const settings = getVoiceSettings(runtime);\n\n // Validate that all required settings are present\n if (!settings.voiceId) {\n throw new Error(\"Missing voice ID configuration\");\n }\n\n // Validate numeric settings\n const stability = Number.parseFloat(settings.stability);\n if (Number.isNaN(stability) || stability < 0 || stability > 1) {\n throw new Error(\"Voice stability must be between 0 and 1\");\n }\n\n const similarity = Number.parseFloat(settings.similarity);\n if (Number.isNaN(similarity) || similarity < 0 || similarity > 1) {\n throw new Error(\"Voice similarity boost must be between 0 and 1\");\n }\n\n logger.success(\"Voice settings validated successfully\");\n },\n },\n // WAV header generation test removed; we favor mp3 streaming for browser safety\n {\n name: \"Eleven Labs API connectivity\",\n fn: async (runtime: IAgentRuntime) => {\n const settings = getVoiceSettings(runtime);\n if (!settings.apiKey) {\n logger.warn(\n \"Skipping API connectivity test - no API key provided\"\n );\n return;\n }\n\n try {\n await fetchSpeech(runtime, {\n text: \"test\",\n voiceId: settings.voiceId,\n modelId: settings.model,\n outputFormat: settings.outputFormat,\n stability: settings.stability,\n similarity: settings.similarity,\n style: settings.style,\n speakerBoost: settings.speakerBoost,\n latency: settings.latency,\n });\n logger.success(\"API connectivity test passed\");\n } catch (error: unknown) {\n const msg =\n error instanceof Error ? error.message : String(error);\n if (msg.includes(\"QUOTA_EXCEEDED\")) {\n logger.warn(\"API quota exceeded - test skipped\");\n return;\n }\n logger.error(`API connectivity test failed: ${msg}`);\n throw new Error(`API connectivity test failed: ${msg}`);\n }\n },\n },\n {\n name: \"ElevenLabs TTS Generation (stream exists)\",\n fn: async (runtime: IAgentRuntime) => {\n const settings = getVoiceSettings(runtime);\n if (!settings.apiKey && !isBrowser()) {\n logger.warn(\"Skipping TTS generation test - no API key provided\");\n return;\n }\n\n const testText = \"Hello from ElevenLabs test.\";\n try {\n const audioStream = (await runtime.useModel(\n ModelType.TEXT_TO_SPEECH,\n testText\n )) as ReadableStream<Uint8Array>;\n\n if (\n !audioStream ||\n typeof (audioStream as { getReader?: unknown }).getReader !==\n \"function\"\n ) {\n throw new Error(\"TTS output is not a Web ReadableStream\");\n }\n\n const reader = audioStream.getReader();\n const { value, done } = await reader.read();\n reader.releaseLock();\n if (done && !value) {\n throw new Error(\"Received empty audio stream\");\n }\n logger.success(\"Received audio stream chunk successfully\");\n } catch (error: unknown) {\n const msg =\n error instanceof Error ? error.message : String(error);\n if (msg.includes(\"QUOTA_EXCEEDED\")) {\n logger.warn(\n \"[ElevenLabs Test] API quota exceeded - test skipped\"\n );\n return;\n }\n logger.error(\n \"[ElevenLabs Test] TTS Generation test failed:\",\n msg\n );\n throw new Error(`TTS Generation test failed: ${msg}`);\n }\n },\n },\n {\n name: \"Output format handling\",\n fn: async (runtime: IAgentRuntime) => {\n const settings = getVoiceSettings(runtime);\n\n // Test supported formats list includes common entries\n const pcmFormats = [\n \"mp3_44100_128\",\n \"pcm_16000\",\n \"pcm_22050\",\n \"pcm_24000\",\n \"pcm_44100\",\n ];\n for (const format of pcmFormats) {\n if (format.startsWith(\"pcm_\")) {\n const sampleRate = Number.parseInt(format.slice(4));\n if (Number.isNaN(sampleRate) || sampleRate <= 0) {\n throw new Error(`Invalid PCM format: ${format}`);\n }\n }\n }\n\n // Test current output format\n logger.success(`Output format validated: ${settings.outputFormat}`);\n },\n },\n ],\n },\n {\n name: \"test eleven labs STT\",\n tests: [\n {\n name: \"STT settings validation\",\n fn: async (runtime: IAgentRuntime) => {\n const settings = getTranscriptionSettings(runtime);\n\n if (!settings.modelId) {\n throw new Error(\"Missing STT model ID configuration\");\n }\n\n const validGranularities = [\"none\", \"word\", \"character\"];\n if (!validGranularities.includes(settings.timestampsGranularity)) {\n throw new Error(\n `Invalid timestamps granularity: ${settings.timestampsGranularity}`\n );\n }\n\n if (\n settings.numSpeakers !== undefined &&\n (settings.numSpeakers < 1 || settings.numSpeakers > 32)\n ) {\n throw new Error(\"Number of speakers must be between 1 and 32\");\n }\n\n logger.success(\"STT settings validated successfully\");\n },\n },\n {\n name: \"STT configuration defaults\",\n fn: async (runtime: IAgentRuntime) => {\n const settings = getTranscriptionSettings(runtime);\n\n if (settings.modelId !== \"scribe_v1\") {\n logger.warn(`Using non-default STT model: ${settings.modelId}`);\n }\n\n if (settings.timestampsGranularity !== \"word\") {\n logger.warn(\n `Using non-default timestamps granularity: ${settings.timestampsGranularity}`\n );\n }\n\n logger.success(\"STT configuration defaults checked\");\n },\n },\n {\n name: \"STT input handling validation\",\n fn: async (runtime: IAgentRuntime) => {\n const testCases = [\n { type: \"string URL\", valid: true },\n { type: \"Buffer\", valid: true },\n { type: \"object with audioUrl\", valid: true },\n ];\n\n for (const testCase of testCases) {\n if (!testCase.valid) {\n throw new Error(\n `Invalid test case should not be valid: ${testCase.type}`\n );\n }\n }\n\n logger.success(\"STT input handling validation passed\");\n },\n },\n ],\n },\n ],\n};\nexport default elevenLabsPlugin;\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "EE5CDA95AFBBAFB064756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
package/dist/browser/index.d.ts
DELETED
package/dist/cjs/index.d.ts
DELETED