@ai-sdk/elevenlabs 3.0.47 → 3.0.50
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/CHANGELOG.md +24 -0
- package/dist/index.js +60 -73
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @ai-sdk/elevenlabs
|
|
2
2
|
|
|
3
|
+
## 3.0.50
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [af9597b]
|
|
8
|
+
- Updated dependencies [bc49f78]
|
|
9
|
+
- @ai-sdk/provider-utils@5.0.49
|
|
10
|
+
|
|
11
|
+
## 3.0.49
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [be877ff]
|
|
16
|
+
- @ai-sdk/provider-utils@5.0.48
|
|
17
|
+
|
|
18
|
+
## 3.0.48
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [fe07867]
|
|
23
|
+
- Updated dependencies [a4b0940]
|
|
24
|
+
- Updated dependencies [771e74b]
|
|
25
|
+
- @ai-sdk/provider-utils@5.0.47
|
|
26
|
+
|
|
3
27
|
## 3.0.47
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -118,14 +118,13 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
118
118
|
mediaType,
|
|
119
119
|
providerOptions
|
|
120
120
|
}) {
|
|
121
|
-
var _a, _b, _c, _d, _e;
|
|
122
121
|
const warnings = [];
|
|
123
122
|
const elevenlabsOptions = await parseProviderOptions({
|
|
124
123
|
provider: "elevenlabs",
|
|
125
124
|
providerOptions,
|
|
126
125
|
schema: elevenLabsTranscriptionModelOptionsSchema
|
|
127
126
|
});
|
|
128
|
-
if (
|
|
127
|
+
if (elevenlabsOptions?.streaming != null) {
|
|
129
128
|
warnings.push({
|
|
130
129
|
type: "unsupported",
|
|
131
130
|
feature: "providerOptions.elevenlabs.streaming",
|
|
@@ -144,11 +143,11 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
144
143
|
formData.append("diarize", "true");
|
|
145
144
|
if (elevenlabsOptions) {
|
|
146
145
|
const transcriptionModelOptions = {
|
|
147
|
-
language_code:
|
|
148
|
-
tag_audio_events:
|
|
149
|
-
num_speakers:
|
|
150
|
-
timestamps_granularity:
|
|
151
|
-
file_format:
|
|
146
|
+
language_code: elevenlabsOptions.languageCode ?? void 0,
|
|
147
|
+
tag_audio_events: elevenlabsOptions.tagAudioEvents ?? void 0,
|
|
148
|
+
num_speakers: elevenlabsOptions.numSpeakers ?? void 0,
|
|
149
|
+
timestamps_granularity: elevenlabsOptions.timestampsGranularity ?? void 0,
|
|
150
|
+
file_format: elevenlabsOptions.fileFormat ?? void 0
|
|
152
151
|
};
|
|
153
152
|
if (typeof elevenlabsOptions.diarize === "boolean") {
|
|
154
153
|
formData.append("diarize", String(elevenlabsOptions.diarize));
|
|
@@ -166,13 +165,12 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
166
165
|
};
|
|
167
166
|
}
|
|
168
167
|
async doGenerate(options) {
|
|
169
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
170
168
|
if (isRealtimeTranscriptionModelId(this.modelId)) {
|
|
171
169
|
throw new UnsupportedFunctionalityError({
|
|
172
170
|
functionality: `non-streaming transcription with ${this.modelId}`
|
|
173
171
|
});
|
|
174
172
|
}
|
|
175
|
-
const currentDate =
|
|
173
|
+
const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
|
|
176
174
|
const { formData, warnings } = await this.getArgs(options);
|
|
177
175
|
const {
|
|
178
176
|
value: response,
|
|
@@ -183,7 +181,7 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
183
181
|
path: "/v1/speech-to-text",
|
|
184
182
|
modelId: this.modelId
|
|
185
183
|
}),
|
|
186
|
-
headers: combineHeaders(
|
|
184
|
+
headers: combineHeaders(this.config.headers?.(), options.headers),
|
|
187
185
|
formData,
|
|
188
186
|
failedResponseHandler: elevenlabsFailedResponseHandler,
|
|
189
187
|
successfulResponseHandler: createJsonResponseHandler(
|
|
@@ -194,16 +192,13 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
194
192
|
});
|
|
195
193
|
return {
|
|
196
194
|
text: response.text,
|
|
197
|
-
segments:
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
endSecond: (_b2 = word.end) != null ? _b2 : 0
|
|
203
|
-
};
|
|
204
|
-
})) != null ? _g : [],
|
|
195
|
+
segments: response.words?.map((word) => ({
|
|
196
|
+
text: word.text,
|
|
197
|
+
startSecond: word.start ?? 0,
|
|
198
|
+
endSecond: word.end ?? 0
|
|
199
|
+
})) ?? [],
|
|
205
200
|
language: response.language_code,
|
|
206
|
-
durationInSeconds:
|
|
201
|
+
durationInSeconds: response.words?.at(-1)?.end ?? void 0,
|
|
207
202
|
warnings,
|
|
208
203
|
response: {
|
|
209
204
|
timestamp: currentDate,
|
|
@@ -214,21 +209,20 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
214
209
|
};
|
|
215
210
|
}
|
|
216
211
|
async doStream(options) {
|
|
217
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
218
212
|
if (!isRealtimeTranscriptionModelId(this.modelId)) {
|
|
219
213
|
throw new UnsupportedFunctionalityError({
|
|
220
214
|
functionality: `streaming transcription with ${this.modelId}`
|
|
221
215
|
});
|
|
222
216
|
}
|
|
223
|
-
const currentDate =
|
|
217
|
+
const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
|
|
224
218
|
const elevenLabsOptions = await parseProviderOptions({
|
|
225
219
|
provider: "elevenlabs",
|
|
226
220
|
providerOptions: options.providerOptions,
|
|
227
221
|
schema: elevenLabsTranscriptionModelOptionsSchema
|
|
228
222
|
});
|
|
229
|
-
const streamingOptions =
|
|
223
|
+
const streamingOptions = elevenLabsOptions?.streaming ?? void 0;
|
|
230
224
|
const warnings = [];
|
|
231
|
-
const rawElevenLabsOptions =
|
|
225
|
+
const rawElevenLabsOptions = options.providerOptions?.elevenlabs ?? {};
|
|
232
226
|
for (const option of [
|
|
233
227
|
"diarize",
|
|
234
228
|
"fileFormat",
|
|
@@ -244,7 +238,7 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
244
238
|
});
|
|
245
239
|
}
|
|
246
240
|
}
|
|
247
|
-
if (
|
|
241
|
+
if (streamingOptions?.filterBackgroundAudio === true && (streamingOptions.includeTimestamps === true || streamingOptions.includeLanguageDetection === true)) {
|
|
248
242
|
throw new InvalidArgumentError({
|
|
249
243
|
argument: "providerOptions",
|
|
250
244
|
message: "providerOptions.elevenlabs.streaming.filterBackgroundAudio cannot be combined with includeTimestamps or includeLanguageDetection"
|
|
@@ -261,7 +255,7 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
261
255
|
})
|
|
262
256
|
),
|
|
263
257
|
inputFormat: inputFormat.audioFormat,
|
|
264
|
-
languageCode:
|
|
258
|
+
languageCode: elevenLabsOptions?.languageCode ?? void 0,
|
|
265
259
|
modelId: this.modelId,
|
|
266
260
|
streamingOptions
|
|
267
261
|
});
|
|
@@ -274,12 +268,12 @@ var ElevenLabsTranscriptionModel = class _ElevenLabsTranscriptionModel {
|
|
|
274
268
|
stream: createElevenLabsRealtimeTranscriptionStream({
|
|
275
269
|
abortSignal: options.abortSignal,
|
|
276
270
|
audio: options.audio,
|
|
277
|
-
headers: combineHeaders(
|
|
278
|
-
includeLanguageDetection:
|
|
271
|
+
headers: combineHeaders(this.config.headers?.(), options.headers),
|
|
272
|
+
includeLanguageDetection: streamingOptions?.includeLanguageDetection === true,
|
|
279
273
|
includeRawChunks: options.includeRawChunks,
|
|
280
|
-
includeTimestamps:
|
|
281
|
-
language:
|
|
282
|
-
previousText:
|
|
274
|
+
includeTimestamps: streamingOptions?.includeTimestamps === true,
|
|
275
|
+
language: elevenLabsOptions?.languageCode ?? void 0,
|
|
276
|
+
previousText: streamingOptions?.previousText ?? void 0,
|
|
283
277
|
sampleRate: inputFormat.sampleRate,
|
|
284
278
|
url,
|
|
285
279
|
warnings,
|
|
@@ -301,7 +295,7 @@ function getElevenLabsRealtimeAudioFormat(inputAudioFormat) {
|
|
|
301
295
|
return { audioFormat: "ulaw_8000", sampleRate: 8e3 };
|
|
302
296
|
}
|
|
303
297
|
const supportedPcmRates = [8e3, 16e3, 22050, 24e3, 44100, 48e3];
|
|
304
|
-
const pcmRate = rate
|
|
298
|
+
const pcmRate = rate ?? 16e3;
|
|
305
299
|
if (type !== "audio/pcm" || !supportedPcmRates.includes(pcmRate)) {
|
|
306
300
|
throw new InvalidArgumentError({
|
|
307
301
|
argument: "inputAudioFormat",
|
|
@@ -317,33 +311,32 @@ function buildElevenLabsRealtimeTranscriptionUrl({
|
|
|
317
311
|
modelId,
|
|
318
312
|
streamingOptions
|
|
319
313
|
}) {
|
|
320
|
-
var _a, _b;
|
|
321
314
|
const url = new URL(baseUrl);
|
|
322
315
|
url.searchParams.set("model_id", modelId);
|
|
323
316
|
url.searchParams.set("audio_format", inputFormat);
|
|
324
|
-
const includeDetailedCommit =
|
|
317
|
+
const includeDetailedCommit = streamingOptions?.includeTimestamps === true || streamingOptions?.includeLanguageDetection === true;
|
|
325
318
|
const parameters = {
|
|
326
|
-
commit_strategy: streamingOptions
|
|
327
|
-
enable_logging: streamingOptions
|
|
328
|
-
filter_background_audio: streamingOptions
|
|
329
|
-
include_language_detection: streamingOptions
|
|
330
|
-
include_timestamps: includeDetailedCommit ? true : streamingOptions
|
|
319
|
+
commit_strategy: streamingOptions?.commitStrategy,
|
|
320
|
+
enable_logging: streamingOptions?.enableLogging,
|
|
321
|
+
filter_background_audio: streamingOptions?.filterBackgroundAudio,
|
|
322
|
+
include_language_detection: streamingOptions?.includeLanguageDetection,
|
|
323
|
+
include_timestamps: includeDetailedCommit ? true : streamingOptions?.includeTimestamps,
|
|
331
324
|
language_code: languageCode,
|
|
332
|
-
min_silence_duration_ms: streamingOptions
|
|
333
|
-
min_speech_duration_ms: streamingOptions
|
|
334
|
-
no_verbatim: streamingOptions
|
|
335
|
-
vad_silence_threshold_secs: streamingOptions
|
|
336
|
-
vad_threshold: streamingOptions
|
|
325
|
+
min_silence_duration_ms: streamingOptions?.minSilenceDurationMs,
|
|
326
|
+
min_speech_duration_ms: streamingOptions?.minSpeechDurationMs,
|
|
327
|
+
no_verbatim: streamingOptions?.noVerbatim,
|
|
328
|
+
vad_silence_threshold_secs: streamingOptions?.vadSilenceThresholdSecs,
|
|
329
|
+
vad_threshold: streamingOptions?.vadThreshold
|
|
337
330
|
};
|
|
338
331
|
for (const [key, value] of Object.entries(parameters)) {
|
|
339
332
|
if (value != null) {
|
|
340
333
|
url.searchParams.set(key, String(value));
|
|
341
334
|
}
|
|
342
335
|
}
|
|
343
|
-
for (const keyterm of
|
|
336
|
+
for (const keyterm of streamingOptions?.keyterms ?? []) {
|
|
344
337
|
url.searchParams.append("keyterms", keyterm);
|
|
345
338
|
}
|
|
346
|
-
for (const secondaryLanguage of
|
|
339
|
+
for (const secondaryLanguage of streamingOptions?.secondaryLanguages ?? []) {
|
|
347
340
|
url.searchParams.append("secondary_languages", secondaryLanguage);
|
|
348
341
|
}
|
|
349
342
|
return url;
|
|
@@ -391,7 +384,7 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
391
384
|
void audio.cancel().catch(() => {
|
|
392
385
|
});
|
|
393
386
|
}
|
|
394
|
-
connection
|
|
387
|
+
connection?.close(closeCode);
|
|
395
388
|
};
|
|
396
389
|
const finishWithError = (error) => {
|
|
397
390
|
if (finished) return;
|
|
@@ -400,7 +393,6 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
400
393
|
controller.error(error);
|
|
401
394
|
};
|
|
402
395
|
const finish = () => {
|
|
403
|
-
var _a;
|
|
404
396
|
if (finished) return;
|
|
405
397
|
finished = true;
|
|
406
398
|
controller.enqueue({
|
|
@@ -408,7 +400,7 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
408
400
|
text: finalTexts.join(" ").trim(),
|
|
409
401
|
segments: finalSegments,
|
|
410
402
|
language: detectedLanguage,
|
|
411
|
-
durationInSeconds:
|
|
403
|
+
durationInSeconds: finalSegments.at(-1)?.endSecond
|
|
412
404
|
});
|
|
413
405
|
controller.close();
|
|
414
406
|
cleanup(1e3);
|
|
@@ -470,7 +462,6 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
470
462
|
);
|
|
471
463
|
},
|
|
472
464
|
onMessageText: async (text) => {
|
|
473
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
474
465
|
const parsed = await safeParseJSON({ text });
|
|
475
466
|
if (!parsed.success) return;
|
|
476
467
|
const raw = parsed.value;
|
|
@@ -484,7 +475,7 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
484
475
|
return;
|
|
485
476
|
}
|
|
486
477
|
finishWithError(
|
|
487
|
-
new Error(
|
|
478
|
+
new Error(raw.error ?? "ElevenLabs realtime transcription error")
|
|
488
479
|
);
|
|
489
480
|
return;
|
|
490
481
|
}
|
|
@@ -492,7 +483,7 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
492
483
|
case "session_started": {
|
|
493
484
|
sessionId = raw.session_id;
|
|
494
485
|
controller.enqueue({ type: "stream-start", warnings });
|
|
495
|
-
const socket = connection
|
|
486
|
+
const socket = connection?.socket;
|
|
496
487
|
if (socket == null) {
|
|
497
488
|
finishWithError(new Error("WebSocket is not connected."));
|
|
498
489
|
break;
|
|
@@ -503,16 +494,16 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
503
494
|
case "partial_transcript": {
|
|
504
495
|
controller.enqueue({
|
|
505
496
|
type: "transcript-partial",
|
|
506
|
-
id: `${sessionId
|
|
507
|
-
text:
|
|
497
|
+
id: `${sessionId ?? "session"}:${segmentIndex}`,
|
|
498
|
+
text: raw.text ?? ""
|
|
508
499
|
});
|
|
509
500
|
break;
|
|
510
501
|
}
|
|
511
502
|
case "final_transcript":
|
|
512
503
|
case "committed_transcript": {
|
|
513
504
|
committedEventCount++;
|
|
514
|
-
const text2 = (
|
|
515
|
-
const id = `${sessionId
|
|
505
|
+
const text2 = (raw.text ?? "").trim();
|
|
506
|
+
const id = `${sessionId ?? "session"}:${segmentIndex}`;
|
|
516
507
|
if (text2.length > 0) {
|
|
517
508
|
finalTexts.push(text2);
|
|
518
509
|
segmentIndex++;
|
|
@@ -533,36 +524,33 @@ function createElevenLabsRealtimeTranscriptionStream({
|
|
|
533
524
|
}
|
|
534
525
|
case "final_transcript_with_timestamps":
|
|
535
526
|
case "committed_transcript_with_timestamps": {
|
|
536
|
-
const text2 = (
|
|
537
|
-
const words =
|
|
527
|
+
const text2 = (raw.text ?? "").trim();
|
|
528
|
+
const words = raw.words ?? [];
|
|
538
529
|
const timestampedWords = words.filter(
|
|
539
530
|
(word) => typeof word.start === "number" && typeof word.end === "number"
|
|
540
531
|
);
|
|
541
|
-
detectedLanguage =
|
|
532
|
+
detectedLanguage = raw.language_code ?? detectedLanguage;
|
|
542
533
|
if (finalTexts[timestampedCommitCount] == null && text2.length > 0) {
|
|
543
|
-
const id = `${sessionId
|
|
534
|
+
const id = `${sessionId ?? "session"}:${segmentIndex++}`;
|
|
544
535
|
finalTexts.push(text2);
|
|
545
536
|
controller.enqueue({
|
|
546
537
|
type: "transcript-final",
|
|
547
538
|
id,
|
|
548
539
|
text: text2,
|
|
549
540
|
...includeTimestamps ? {
|
|
550
|
-
startSecond:
|
|
551
|
-
endSecond:
|
|
541
|
+
startSecond: timestampedWords[0]?.start,
|
|
542
|
+
endSecond: timestampedWords.at(-1)?.end
|
|
552
543
|
} : {}
|
|
553
544
|
});
|
|
554
545
|
}
|
|
555
546
|
timestampedCommitCount++;
|
|
556
547
|
if (includeTimestamps) {
|
|
557
548
|
finalSegments.push(
|
|
558
|
-
...timestampedWords.map((word) => {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
endSecond: word.end
|
|
564
|
-
};
|
|
565
|
-
})
|
|
549
|
+
...timestampedWords.map((word) => ({
|
|
550
|
+
text: word.text ?? "",
|
|
551
|
+
startSecond: word.start,
|
|
552
|
+
endSecond: word.end
|
|
553
|
+
}))
|
|
566
554
|
);
|
|
567
555
|
}
|
|
568
556
|
if (endOfInput && timestampedCommitCount > committedEventsAtEndOfInput && (finalCommitEventCount == null || timestampedCommitCount >= finalCommitEventCount)) {
|
|
@@ -782,8 +770,7 @@ var ElevenLabsSpeechModel = class _ElevenLabsSpeechModel {
|
|
|
782
770
|
};
|
|
783
771
|
}
|
|
784
772
|
async doGenerate(options) {
|
|
785
|
-
|
|
786
|
-
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
773
|
+
const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
|
|
787
774
|
const { requestBody, queryParams, warnings, voiceId } = await this.getArgs(options);
|
|
788
775
|
const {
|
|
789
776
|
value: audio,
|
|
@@ -798,7 +785,7 @@ var ElevenLabsSpeechModel = class _ElevenLabsSpeechModel {
|
|
|
798
785
|
const queryString = new URLSearchParams(queryParams).toString();
|
|
799
786
|
return queryString ? `${baseUrl}?${queryString}` : baseUrl;
|
|
800
787
|
})(),
|
|
801
|
-
headers: combineHeaders2(
|
|
788
|
+
headers: combineHeaders2(this.config.headers?.(), options.headers),
|
|
802
789
|
body: requestBody,
|
|
803
790
|
failedResponseHandler: elevenlabsFailedResponseHandler,
|
|
804
791
|
successfulResponseHandler: createBinaryResponseHandler(),
|
|
@@ -822,7 +809,7 @@ var ElevenLabsSpeechModel = class _ElevenLabsSpeechModel {
|
|
|
822
809
|
};
|
|
823
810
|
|
|
824
811
|
// src/version.ts
|
|
825
|
-
var VERSION = true ? "3.0.
|
|
812
|
+
var VERSION = true ? "3.0.50" : "0.0.0-test";
|
|
826
813
|
|
|
827
814
|
// src/elevenlabs-provider.ts
|
|
828
815
|
function createElevenLabs(options = {}) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/elevenlabs-provider.ts","../src/elevenlabs-transcription-model.ts","../src/elevenlabs-error.ts","../src/elevenlabs-transcription-model-options.ts","../src/elevenlabs-speech-model.ts","../src/elevenlabs-speech-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type TranscriptionModelV4,\n type SpeechModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n type WebSocketConstructor,\n} from '@ai-sdk/provider-utils';\nimport { ElevenLabsTranscriptionModel } from './elevenlabs-transcription-model';\nimport type { ElevenLabsTranscriptionModelId } from './elevenlabs-transcription-options';\nimport { ElevenLabsSpeechModel } from './elevenlabs-speech-model';\nimport type { ElevenLabsSpeechModelId } from './elevenlabs-speech-options';\nimport { VERSION } from './version';\n\nexport interface ElevenLabsProvider extends ProviderV4 {\n (\n modelId: ElevenLabsTranscriptionModelId,\n settings?: {},\n ): {\n transcription: ElevenLabsTranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: ElevenLabsTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for speech generation.\n */\n speech(modelId: ElevenLabsSpeechModelId): SpeechModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface ElevenLabsProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Custom WebSocket implementation. Required in runtimes whose native\n * WebSocket constructor does not support headers for realtime transcription.\n */\n webSocket?: WebSocketConstructor;\n}\n\n/**\n * Create an ElevenLabs provider instance.\n */\nexport function createElevenLabs(\n options: ElevenLabsProviderSettings = {},\n): ElevenLabsProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'xi-api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ELEVENLABS_API_KEY',\n description: 'ElevenLabs',\n }),\n ...options.headers,\n },\n `ai-sdk/elevenlabs/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: ElevenLabsTranscriptionModelId) =>\n new ElevenLabsTranscriptionModel(modelId, {\n provider: `elevenlabs.transcription`,\n url: ({ path }) => `https://api.elevenlabs.io${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n webSocket: options.webSocket,\n });\n\n const createSpeechModel = (modelId: ElevenLabsSpeechModelId) =>\n new ElevenLabsSpeechModel(modelId, {\n provider: `elevenlabs.speech`,\n url: ({ path }) => `https://api.elevenlabs.io${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: ElevenLabsTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n provider.languageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'languageModel',\n message: 'ElevenLabs does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n message: 'ElevenLabs does not provide embedding models',\n });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'imageModel',\n message: 'ElevenLabs does not provide image models',\n });\n };\n\n return provider as ElevenLabsProvider;\n}\n\n/**\n * Default ElevenLabs provider instance.\n */\nexport const elevenLabs = createElevenLabs();\n","import {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type Experimental_TranscriptionModelV4StreamOptions as TranscriptionModelV4StreamOptions,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertToBase64,\n connectToWebSocket,\n createJsonResponseHandler,\n mediaTypeToExtension,\n parseProviderOptions,\n postFormDataToApi,\n safeParseJSON,\n serializeModelOptions,\n toWebSocketUrl,\n waitForWebSocketBufferDrain,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type WebSocketConnection,\n type WebSocketLike,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ElevenLabsConfig } from './elevenlabs-config';\nimport { elevenlabsFailedResponseHandler } from './elevenlabs-error';\nimport {\n elevenLabsTranscriptionModelOptionsSchema,\n type ElevenLabsTranscriptionModelOptions,\n} from './elevenlabs-transcription-model-options';\nimport type { ElevenLabsTranscriptionModelId } from './elevenlabs-transcription-options';\nimport type { ElevenLabsTranscriptionAPITypes } from './elevenlabs-api-types';\n\ntype ElevenLabsRealtimeTranscriptionEvent = {\n message_type?: string;\n session_id?: string;\n text?: string;\n language_code?: string | null;\n words?: Array<{\n text?: string;\n start?: number;\n end?: number;\n type?: string;\n }> | null;\n error?: string;\n};\n\nconst elevenLabsRealtimeErrorTypes = new Set([\n 'auth_error',\n 'chunk_size_exceeded',\n 'commit_throttled',\n 'error',\n 'input_error',\n 'insufficient_audio_activity',\n 'queue_overflow',\n 'quota_exceeded',\n 'rate_limited',\n 'resource_exhausted',\n 'session_time_limit_exceeded',\n 'transcriber_error',\n 'unaccepted_terms',\n]);\n\nconst elevenLabsLateFinalizationErrorTypes = new Set([\n 'commit_throttled',\n 'input_error',\n 'insufficient_audio_activity',\n]);\n\nconst finalCommitGracePeriodMs = 250;\n\nfunction isRealtimeTranscriptionModelId(modelId: string): boolean {\n return modelId === 'scribe_v2_realtime';\n}\n\ninterface ElevenLabsTranscriptionModelConfig extends ElevenLabsConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class ElevenLabsTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: ElevenLabsTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: ElevenLabsTranscriptionModelId;\n config: ElevenLabsTranscriptionModelConfig;\n }) {\n return new ElevenLabsTranscriptionModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: ElevenLabsTranscriptionModelId,\n private readonly config: ElevenLabsTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const elevenlabsOptions = await parseProviderOptions({\n provider: 'elevenlabs',\n providerOptions,\n schema: elevenLabsTranscriptionModelOptionsSchema,\n });\n\n if (elevenlabsOptions?.streaming != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.elevenlabs.streaming',\n details:\n 'ElevenLabs batch transcription does not support streaming options.',\n });\n }\n\n // Create form data with base fields\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('model_id', this.modelId);\n const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n 'file',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\n formData.append('diarize', 'true');\n\n // Add provider-specific options\n if (elevenlabsOptions) {\n const transcriptionModelOptions: ElevenLabsTranscriptionAPITypes = {\n language_code: elevenlabsOptions.languageCode ?? undefined,\n tag_audio_events: elevenlabsOptions.tagAudioEvents ?? undefined,\n num_speakers: elevenlabsOptions.numSpeakers ?? undefined,\n timestamps_granularity:\n elevenlabsOptions.timestampsGranularity ?? undefined,\n file_format: elevenlabsOptions.fileFormat ?? undefined,\n };\n\n if (typeof elevenlabsOptions.diarize === 'boolean') {\n formData.append('diarize', String(elevenlabsOptions.diarize));\n }\n\n for (const key in transcriptionModelOptions) {\n const value =\n transcriptionModelOptions[\n key as keyof ElevenLabsTranscriptionAPITypes\n ];\n if (value !== undefined) {\n formData.append(key, String(value));\n }\n }\n }\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n if (isRealtimeTranscriptionModelId(this.modelId)) {\n throw new UnsupportedFunctionalityError({\n functionality: `non-streaming transcription with ${this.modelId}`,\n });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: '/v1/speech-to-text',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n formData,\n failedResponseHandler: elevenlabsFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n elevenlabsTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.text,\n segments:\n response.words?.map(word => ({\n text: word.text,\n startSecond: word.start ?? 0,\n endSecond: word.end ?? 0,\n })) ?? [],\n language: response.language_code,\n durationInSeconds: response.words?.at(-1)?.end ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n\n async doStream(\n options: TranscriptionModelV4StreamOptions,\n ): Promise<\n Awaited<ReturnType<NonNullable<TranscriptionModelV4['doStream']>>>\n > {\n if (!isRealtimeTranscriptionModelId(this.modelId)) {\n throw new UnsupportedFunctionalityError({\n functionality: `streaming transcription with ${this.modelId}`,\n });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const elevenLabsOptions = await parseProviderOptions({\n provider: 'elevenlabs',\n providerOptions: options.providerOptions,\n schema: elevenLabsTranscriptionModelOptionsSchema,\n });\n const streamingOptions = elevenLabsOptions?.streaming ?? undefined;\n const warnings: SharedV4Warning[] = [];\n\n const rawElevenLabsOptions = options.providerOptions?.elevenlabs ?? {};\n for (const option of [\n 'diarize',\n 'fileFormat',\n 'numSpeakers',\n 'tagAudioEvents',\n 'timestampsGranularity',\n ]) {\n if (\n rawElevenLabsOptions[option as keyof typeof rawElevenLabsOptions] !=\n null\n ) {\n warnings.push({\n type: 'unsupported',\n feature: `providerOptions.elevenlabs.${option}`,\n details: `ElevenLabs realtime transcription does not support ${option}.`,\n });\n }\n }\n\n // ElevenLabs documents filter_background_audio as incompatible with\n // include_timestamps. Language detection is delivered on the same\n // timestamp-bearing event, so it also requires include_timestamps here.\n // https://elevenlabs.io/docs/api-reference/speech-to-text/v-1-speech-to-text-realtime\n if (\n streamingOptions?.filterBackgroundAudio === true &&\n (streamingOptions.includeTimestamps === true ||\n streamingOptions.includeLanguageDetection === true)\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message:\n 'providerOptions.elevenlabs.streaming.filterBackgroundAudio cannot be combined with includeTimestamps or includeLanguageDetection',\n });\n }\n\n const inputFormat = getElevenLabsRealtimeAudioFormat(\n options.inputAudioFormat,\n );\n const url = buildElevenLabsRealtimeTranscriptionUrl({\n baseUrl: toWebSocketUrl(\n this.config.url({\n path: '/v1/speech-to-text/realtime',\n modelId: this.modelId,\n }),\n ),\n inputFormat: inputFormat.audioFormat,\n languageCode: elevenLabsOptions?.languageCode ?? undefined,\n modelId: this.modelId,\n streamingOptions,\n });\n\n return {\n request: { body: url.toString() },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n },\n stream: createElevenLabsRealtimeTranscriptionStream({\n abortSignal: options.abortSignal,\n audio: options.audio,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n includeLanguageDetection:\n streamingOptions?.includeLanguageDetection === true,\n includeRawChunks: options.includeRawChunks,\n includeTimestamps: streamingOptions?.includeTimestamps === true,\n language: elevenLabsOptions?.languageCode ?? undefined,\n previousText: streamingOptions?.previousText ?? undefined,\n sampleRate: inputFormat.sampleRate,\n url,\n warnings,\n webSocket: this.config.webSocket,\n }),\n };\n }\n}\n\nfunction getElevenLabsRealtimeAudioFormat(\n inputAudioFormat: TranscriptionModelV4StreamOptions['inputAudioFormat'],\n): { audioFormat: string; sampleRate: number } {\n const type = inputAudioFormat.type.toLowerCase();\n const rate = inputAudioFormat.rate;\n\n if (type === 'audio/pcmu') {\n if (rate != null && rate !== 8000) {\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message: 'ElevenLabs only supports audio/pcmu at 8000 Hz',\n });\n }\n return { audioFormat: 'ulaw_8000', sampleRate: 8000 };\n }\n\n const supportedPcmRates = [8000, 16000, 22050, 24000, 44100, 48000];\n const pcmRate = rate ?? 16000;\n if (type !== 'audio/pcm' || !supportedPcmRates.includes(pcmRate)) {\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message:\n 'ElevenLabs realtime transcription supports audio/pcm at 8000, 16000, 22050, 24000, 44100, or 48000 Hz, and audio/pcmu at 8000 Hz',\n });\n }\n\n return { audioFormat: `pcm_${pcmRate}`, sampleRate: pcmRate };\n}\n\nfunction buildElevenLabsRealtimeTranscriptionUrl({\n baseUrl,\n inputFormat,\n languageCode,\n modelId,\n streamingOptions,\n}: {\n baseUrl: URL;\n inputFormat: string;\n languageCode: string | undefined;\n modelId: string;\n streamingOptions:\n | NonNullable<ElevenLabsTranscriptionModelOptions['streaming']>\n | undefined;\n}): URL {\n const url = new URL(baseUrl);\n url.searchParams.set('model_id', modelId);\n url.searchParams.set('audio_format', inputFormat);\n const includeDetailedCommit =\n streamingOptions?.includeTimestamps === true ||\n streamingOptions?.includeLanguageDetection === true;\n\n const parameters = {\n commit_strategy: streamingOptions?.commitStrategy,\n enable_logging: streamingOptions?.enableLogging,\n filter_background_audio: streamingOptions?.filterBackgroundAudio,\n include_language_detection: streamingOptions?.includeLanguageDetection,\n include_timestamps: includeDetailedCommit\n ? true\n : streamingOptions?.includeTimestamps,\n language_code: languageCode,\n min_silence_duration_ms: streamingOptions?.minSilenceDurationMs,\n min_speech_duration_ms: streamingOptions?.minSpeechDurationMs,\n no_verbatim: streamingOptions?.noVerbatim,\n vad_silence_threshold_secs: streamingOptions?.vadSilenceThresholdSecs,\n vad_threshold: streamingOptions?.vadThreshold,\n };\n for (const [key, value] of Object.entries(parameters)) {\n if (value != null) {\n url.searchParams.set(key, String(value));\n }\n }\n for (const keyterm of streamingOptions?.keyterms ?? []) {\n url.searchParams.append('keyterms', keyterm);\n }\n for (const secondaryLanguage of streamingOptions?.secondaryLanguages ?? []) {\n url.searchParams.append('secondary_languages', secondaryLanguage);\n }\n\n return url;\n}\n\nfunction createElevenLabsRealtimeTranscriptionStream({\n abortSignal,\n audio,\n headers,\n includeLanguageDetection,\n includeRawChunks,\n includeTimestamps,\n language,\n previousText,\n sampleRate,\n url,\n warnings,\n webSocket,\n}: {\n abortSignal: AbortSignal | undefined;\n audio: ReadableStream<Uint8Array | string>;\n headers: Record<string, string | undefined>;\n includeLanguageDetection: boolean;\n includeRawChunks: boolean | undefined;\n includeTimestamps: boolean;\n language: string | undefined;\n previousText: string | undefined;\n sampleRate: number;\n url: URL;\n warnings: SharedV4Warning[];\n webSocket: ElevenLabsConfig['webSocket'];\n}) {\n let finished = false;\n let cleanup: (closeCode?: number) => void = () => {};\n\n return new ReadableStream({\n start: controller => {\n let audioReader:\n | ReadableStreamDefaultReader<Uint8Array | string>\n | undefined;\n let connection: WebSocketConnection | undefined;\n let detectedLanguage = language;\n let endOfInput = false;\n let finalCommitGracePeriod: ReturnType<typeof setTimeout> | undefined;\n let receivedPostInputCommit = false;\n let segmentIndex = 0;\n let sessionId: string | undefined;\n let committedEventCount = 0;\n let committedEventsAtEndOfInput = 0;\n let finalCommitEventCount: number | undefined;\n let timestampedCommitCount = 0;\n const expectDetailedCommit =\n includeTimestamps || includeLanguageDetection;\n const finalSegments: Array<{\n text: string;\n startSecond: number;\n endSecond: number;\n }> = [];\n const finalTexts: string[] = [];\n\n cleanup = (closeCode?: number) => {\n clearTimeout(finalCommitGracePeriod);\n if (audioReader != null) {\n void audioReader.cancel().catch(() => {});\n } else {\n void audio.cancel().catch(() => {});\n }\n connection?.close(closeCode);\n };\n\n const finishWithError = (error: unknown) => {\n if (finished) return;\n finished = true;\n cleanup();\n controller.error(error);\n };\n\n const finish = () => {\n if (finished) return;\n finished = true;\n controller.enqueue({\n type: 'finish',\n text: finalTexts.join(' ').trim(),\n segments: finalSegments,\n language: detectedLanguage,\n durationInSeconds: finalSegments.at(-1)?.endSecond,\n });\n controller.close();\n cleanup(1000);\n };\n\n const scheduleFinish = () => {\n clearTimeout(finalCommitGracePeriod);\n finalCommitGracePeriod = setTimeout(finish, finalCommitGracePeriodMs);\n };\n\n const sendAudio = async (socket: WebSocketLike) => {\n audioReader = audio.getReader();\n let firstChunk = true;\n try {\n while (true) {\n const { done, value } = await audioReader.read();\n if (done || finished) break;\n socket.send(\n JSON.stringify({\n message_type: 'input_audio_chunk',\n audio_base_64: convertToBase64(value),\n commit: false,\n sample_rate: sampleRate,\n ...(firstChunk && previousText != null\n ? { previous_text: previousText }\n : {}),\n }),\n );\n firstChunk = false;\n await waitForWebSocketBufferDrain(socket);\n }\n } finally {\n audioReader.releaseLock();\n audioReader = undefined;\n }\n if (!finished) {\n committedEventsAtEndOfInput = committedEventCount;\n endOfInput = true;\n socket.send(\n JSON.stringify({\n message_type: 'input_audio_chunk',\n audio_base_64: '',\n commit: true,\n sample_rate: sampleRate,\n }),\n );\n }\n };\n\n connection = connectToWebSocket({\n abortSignal,\n headers,\n onAbort: finishWithError,\n onClose: () => {\n if (finished) return;\n if (endOfInput && receivedPostInputCommit) {\n finish();\n return;\n }\n finishWithError(\n new Error(\n 'ElevenLabs realtime transcription stream closed before completion.',\n ),\n );\n },\n onMessageText: async text => {\n const parsed = await safeParseJSON({ text });\n if (!parsed.success) return;\n const raw = parsed.value as ElevenLabsRealtimeTranscriptionEvent;\n\n if (includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: raw });\n }\n\n if (\n raw.message_type != null &&\n elevenLabsRealtimeErrorTypes.has(raw.message_type)\n ) {\n if (\n endOfInput &&\n (committedEventCount > 0 || timestampedCommitCount > 0) &&\n elevenLabsLateFinalizationErrorTypes.has(raw.message_type)\n ) {\n receivedPostInputCommit = true;\n finish();\n return;\n }\n finishWithError(\n new Error(raw.error ?? 'ElevenLabs realtime transcription error'),\n );\n return;\n }\n\n switch (raw.message_type) {\n case 'session_started': {\n sessionId = raw.session_id;\n controller.enqueue({ type: 'stream-start', warnings });\n const socket = connection?.socket;\n if (socket == null) {\n finishWithError(new Error('WebSocket is not connected.'));\n break;\n }\n void sendAudio(socket).catch(finishWithError);\n break;\n }\n case 'partial_transcript': {\n controller.enqueue({\n type: 'transcript-partial',\n id: `${sessionId ?? 'session'}:${segmentIndex}`,\n text: raw.text ?? '',\n });\n break;\n }\n case 'final_transcript':\n case 'committed_transcript': {\n committedEventCount++;\n const text = (raw.text ?? '').trim();\n const id = `${sessionId ?? 'session'}:${segmentIndex}`;\n\n if (text.length > 0) {\n finalTexts.push(text);\n segmentIndex++;\n controller.enqueue({\n type: 'transcript-final',\n id,\n text,\n });\n }\n\n // When timestamps are requested, ElevenLabs follows this event\n // with committed_transcript_with_timestamps for the same commit.\n if (\n endOfInput &&\n committedEventCount > committedEventsAtEndOfInput\n ) {\n receivedPostInputCommit = true;\n finalCommitEventCount = committedEventCount;\n if (\n !expectDetailedCommit ||\n raw.message_type === 'final_transcript'\n ) {\n scheduleFinish();\n }\n }\n break;\n }\n case 'final_transcript_with_timestamps':\n case 'committed_transcript_with_timestamps': {\n const text = (raw.text ?? '').trim();\n const words = raw.words ?? [];\n const timestampedWords = words.filter(\n (word): word is typeof word & { start: number; end: number } =>\n typeof word.start === 'number' &&\n typeof word.end === 'number',\n );\n detectedLanguage = raw.language_code ?? detectedLanguage;\n\n // Normally this is paired with the preceding committed_transcript.\n // Still handle a timestamp-only server response defensively.\n if (\n finalTexts[timestampedCommitCount] == null &&\n text.length > 0\n ) {\n const id = `${sessionId ?? 'session'}:${segmentIndex++}`;\n finalTexts.push(text);\n controller.enqueue({\n type: 'transcript-final',\n id,\n text,\n ...(includeTimestamps\n ? {\n startSecond: timestampedWords[0]?.start,\n endSecond: timestampedWords.at(-1)?.end,\n }\n : {}),\n });\n }\n timestampedCommitCount++;\n if (includeTimestamps) {\n finalSegments.push(\n ...timestampedWords.map(word => ({\n text: word.text ?? '',\n startSecond: word.start,\n endSecond: word.end,\n })),\n );\n }\n\n if (\n endOfInput &&\n timestampedCommitCount > committedEventsAtEndOfInput &&\n (finalCommitEventCount == null ||\n timestampedCommitCount >= finalCommitEventCount)\n ) {\n receivedPostInputCommit = true;\n scheduleFinish();\n }\n break;\n }\n }\n },\n onProcessingError: finishWithError,\n onSocketError: () => {\n finishWithError(\n new Error(\n 'ElevenLabs realtime transcription error.' +\n (webSocket == null\n ? ' Note: the native WebSocket implementation in browsers,' +\n ' Node.js, Deno, and Bun cannot send the xi-api-key header' +\n ' required by ElevenLabs. Pass a header-capable WebSocket' +\n \" implementation (e.g. the 'ws' package) via\" +\n ' createElevenLabs({ webSocket }).'\n : ''),\n ),\n );\n },\n url,\n webSocket,\n });\n },\n\n cancel: () => {\n if (finished) return;\n finished = true;\n cleanup();\n },\n });\n}\n\nconst elevenlabsTranscriptionResponseSchema = z.object({\n language_code: z.string(),\n language_probability: z.number(),\n text: z.string(),\n words: z\n .array(\n z.object({\n text: z.string(),\n type: z.enum(['word', 'spacing', 'audio_event']),\n start: z.number().nullish(),\n end: z.number().nullish(),\n speaker_id: z.string().nullish(),\n characters: z\n .array(\n z.object({\n text: z.string(),\n start: z.number().nullish(),\n end: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const elevenlabsErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type ElevenLabsErrorData = z.infer<typeof elevenlabsErrorDataSchema>;\n\nexport const elevenlabsFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: elevenlabsErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { z } from 'zod/v4';\n\n// https://elevenlabs.io/docs/api-reference/speech-to-text/convert\nexport const elevenLabsTranscriptionModelOptionsSchema = z.object({\n languageCode: z.string().nullish(),\n tagAudioEvents: z.boolean().nullish().default(true),\n numSpeakers: z.number().int().min(1).max(32).nullish(),\n timestampsGranularity: z\n .enum(['none', 'word', 'character'])\n .nullish()\n .default('word'),\n diarize: z.boolean().nullish().default(false),\n fileFormat: z.enum(['pcm_s16le_16', 'other']).nullish().default('other'),\n streaming: z\n .object({\n commitStrategy: z.enum(['manual', 'vad']).nullish(),\n enableLogging: z.boolean().nullish(),\n filterBackgroundAudio: z.boolean().nullish(),\n includeLanguageDetection: z.boolean().nullish(),\n includeTimestamps: z.boolean().nullish(),\n keyterms: z.array(z.string().max(20)).max(50).nullish(),\n minSilenceDurationMs: z.number().int().min(50).max(2000).nullish(),\n minSpeechDurationMs: z.number().int().min(50).max(2000).nullish(),\n noVerbatim: z.boolean().nullish(),\n previousText: z.string().nullish(),\n secondaryLanguages: z.array(z.string()).nullish(),\n vadSilenceThresholdSecs: z.number().min(0.3).max(3).nullish(),\n vadThreshold: z.number().min(0.1).max(0.9).nullish(),\n })\n .nullish(),\n});\n\nexport type ElevenLabsTranscriptionModelOptions = z.infer<\n typeof elevenLabsTranscriptionModelOptionsSchema\n>;\n","import type { SpeechModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport type { ElevenLabsConfig } from './elevenlabs-config';\nimport { elevenlabsFailedResponseHandler } from './elevenlabs-error';\nimport { elevenLabsSpeechModelOptionsSchema } from './elevenlabs-speech-model-options';\nimport type { ElevenLabsSpeechAPITypes } from './elevenlabs-speech-api-types';\nimport type {\n ElevenLabsSpeechModelId,\n ElevenLabsSpeechVoiceId,\n} from './elevenlabs-speech-options';\n\ninterface ElevenLabsSpeechModelConfig extends ElevenLabsConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class ElevenLabsSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: ElevenLabsSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: ElevenLabsSpeechModelId;\n config: ElevenLabsSpeechModelConfig;\n }) {\n return new ElevenLabsSpeechModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: ElevenLabsSpeechModelId,\n private readonly config: ElevenLabsSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice = '21m00Tcm4TlvDq8ikWAM',\n outputFormat = 'mp3_44100_128',\n instructions,\n language,\n speed,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const elevenLabsOptions = await parseProviderOptions({\n provider: 'elevenlabs',\n providerOptions,\n schema: elevenLabsSpeechModelOptionsSchema,\n });\n\n // Create request body\n const requestBody: ElevenLabsSpeechAPITypes = {\n text,\n model_id: this.modelId,\n };\n\n // Prepare query parameters\n const queryParams: Record<string, string> = {};\n\n // Map outputFormat to ElevenLabs format (as query param)\n if (outputFormat) {\n const formatMap: Record<string, string> = {\n mp3: 'mp3_44100_128',\n mp3_32: 'mp3_44100_32',\n mp3_64: 'mp3_44100_64',\n mp3_96: 'mp3_44100_96',\n mp3_128: 'mp3_44100_128',\n mp3_192: 'mp3_44100_192',\n pcm: 'pcm_44100',\n pcm_16000: 'pcm_16000',\n pcm_22050: 'pcm_22050',\n pcm_24000: 'pcm_24000',\n pcm_44100: 'pcm_44100',\n ulaw: 'ulaw_8000',\n };\n\n const mappedFormat = formatMap[outputFormat] || outputFormat;\n queryParams.output_format = mappedFormat;\n }\n\n // Add language code if provided\n if (language) {\n requestBody.language_code = language;\n }\n\n const voiceSettings: typeof requestBody.voice_settings = {};\n\n if (speed != null) {\n voiceSettings.speed = speed;\n }\n\n // Add provider-specific options - map from camelCase to snake_case\n if (elevenLabsOptions) {\n if (elevenLabsOptions.voiceSettings) {\n // Map camelCase voice settings to snake_case for API\n if (elevenLabsOptions.voiceSettings.stability != null) {\n voiceSettings.stability = elevenLabsOptions.voiceSettings.stability;\n }\n if (elevenLabsOptions.voiceSettings.similarityBoost != null) {\n voiceSettings.similarity_boost =\n elevenLabsOptions.voiceSettings.similarityBoost;\n }\n if (elevenLabsOptions.voiceSettings.style != null) {\n voiceSettings.style = elevenLabsOptions.voiceSettings.style;\n }\n if (elevenLabsOptions.voiceSettings.useSpeakerBoost != null) {\n voiceSettings.use_speaker_boost =\n elevenLabsOptions.voiceSettings.useSpeakerBoost;\n }\n }\n // Add language code from provider options if not already set\n if (elevenLabsOptions.languageCode && !requestBody.language_code) {\n requestBody.language_code = elevenLabsOptions.languageCode;\n }\n\n // Map pronunciation dictionary locators\n if (elevenLabsOptions.pronunciationDictionaryLocators) {\n requestBody.pronunciation_dictionary_locators =\n elevenLabsOptions.pronunciationDictionaryLocators.map(locator => ({\n pronunciation_dictionary_id: locator.pronunciationDictionaryId,\n ...(locator.versionId && { version_id: locator.versionId }),\n }));\n }\n\n if (elevenLabsOptions.seed != null) {\n requestBody.seed = elevenLabsOptions.seed;\n }\n if (elevenLabsOptions.previousText) {\n requestBody.previous_text = elevenLabsOptions.previousText;\n }\n if (elevenLabsOptions.nextText) {\n requestBody.next_text = elevenLabsOptions.nextText;\n }\n\n // Add previous and next request IDs\n if (elevenLabsOptions.previousRequestIds) {\n requestBody.previous_request_ids = elevenLabsOptions.previousRequestIds;\n }\n if (elevenLabsOptions.nextRequestIds) {\n requestBody.next_request_ids = elevenLabsOptions.nextRequestIds;\n }\n\n // Add text normalization options\n if (elevenLabsOptions.applyTextNormalization) {\n requestBody.apply_text_normalization =\n elevenLabsOptions.applyTextNormalization;\n }\n if (elevenLabsOptions.applyLanguageTextNormalization != null) {\n requestBody.apply_language_text_normalization =\n elevenLabsOptions.applyLanguageTextNormalization;\n }\n\n // enable_logging is a query parameter\n if (elevenLabsOptions.enableLogging != null) {\n queryParams.enable_logging = String(elevenLabsOptions.enableLogging);\n }\n }\n\n // Only add voice_settings if there are settings to add\n if (Object.keys(voiceSettings).length > 0) {\n requestBody.voice_settings = voiceSettings;\n }\n\n if (instructions) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details: `ElevenLabs speech models do not support instructions. Instructions parameter was ignored.`,\n });\n }\n\n return {\n requestBody,\n queryParams,\n warnings,\n voiceId: voice as ElevenLabsSpeechVoiceId,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, queryParams, warnings, voiceId } =\n await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: (() => {\n const baseUrl = this.config.url({\n path: `/v1/text-to-speech/${voiceId}`,\n modelId: this.modelId,\n });\n const queryString = new URLSearchParams(queryParams).toString();\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n })(),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: requestBody,\n failedResponseHandler: elevenlabsFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from 'zod/v4';\n\n// Schema for camelCase input from users\nexport const elevenLabsSpeechModelOptionsSchema = z.object({\n languageCode: z.string().optional(),\n voiceSettings: z\n .object({\n stability: z.number().min(0).max(1).optional(),\n similarityBoost: z.number().min(0).max(1).optional(),\n style: z.number().min(0).max(1).optional(),\n useSpeakerBoost: z.boolean().optional(),\n })\n .optional(),\n pronunciationDictionaryLocators: z\n .array(\n z.object({\n pronunciationDictionaryId: z.string(),\n versionId: z.string().optional(),\n }),\n )\n .max(3)\n .optional(),\n seed: z.number().min(0).max(4294967295).optional(),\n previousText: z.string().optional(),\n nextText: z.string().optional(),\n previousRequestIds: z.array(z.string()).max(3).optional(),\n nextRequestIds: z.array(z.string()).max(3).optional(),\n applyTextNormalization: z.enum(['auto', 'on', 'off']).optional(),\n applyLanguageTextNormalization: z.boolean().optional(),\n enableLogging: z.boolean().optional(),\n});\n\nexport type ElevenLabsSpeechModelOptions = z.infer<\n typeof elevenLabsSpeechModelOptionsSchema\n>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","_a","_b","text","z","combineHeaders","parseProviderOptions","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","combineHeaders"]}
|
|
1
|
+
{"version":3,"sources":["../src/elevenlabs-provider.ts","../src/elevenlabs-transcription-model.ts","../src/elevenlabs-error.ts","../src/elevenlabs-transcription-model-options.ts","../src/elevenlabs-speech-model.ts","../src/elevenlabs-speech-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type TranscriptionModelV4,\n type SpeechModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n type WebSocketConstructor,\n} from '@ai-sdk/provider-utils';\nimport { ElevenLabsTranscriptionModel } from './elevenlabs-transcription-model';\nimport type { ElevenLabsTranscriptionModelId } from './elevenlabs-transcription-options';\nimport { ElevenLabsSpeechModel } from './elevenlabs-speech-model';\nimport type { ElevenLabsSpeechModelId } from './elevenlabs-speech-options';\nimport { VERSION } from './version';\n\nexport interface ElevenLabsProvider extends ProviderV4 {\n (\n modelId: ElevenLabsTranscriptionModelId,\n settings?: {},\n ): {\n transcription: ElevenLabsTranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: ElevenLabsTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for speech generation.\n */\n speech(modelId: ElevenLabsSpeechModelId): SpeechModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface ElevenLabsProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Custom WebSocket implementation. Required in runtimes whose native\n * WebSocket constructor does not support headers for realtime transcription.\n */\n webSocket?: WebSocketConstructor;\n}\n\n/**\n * Create an ElevenLabs provider instance.\n */\nexport function createElevenLabs(\n options: ElevenLabsProviderSettings = {},\n): ElevenLabsProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'xi-api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ELEVENLABS_API_KEY',\n description: 'ElevenLabs',\n }),\n ...options.headers,\n },\n `ai-sdk/elevenlabs/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: ElevenLabsTranscriptionModelId) =>\n new ElevenLabsTranscriptionModel(modelId, {\n provider: `elevenlabs.transcription`,\n url: ({ path }) => `https://api.elevenlabs.io${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n webSocket: options.webSocket,\n });\n\n const createSpeechModel = (modelId: ElevenLabsSpeechModelId) =>\n new ElevenLabsSpeechModel(modelId, {\n provider: `elevenlabs.speech`,\n url: ({ path }) => `https://api.elevenlabs.io${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: ElevenLabsTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n provider.languageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'languageModel',\n message: 'ElevenLabs does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n message: 'ElevenLabs does not provide embedding models',\n });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'imageModel',\n message: 'ElevenLabs does not provide image models',\n });\n };\n\n return provider as ElevenLabsProvider;\n}\n\n/**\n * Default ElevenLabs provider instance.\n */\nexport const elevenLabs = createElevenLabs();\n","import {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type Experimental_TranscriptionModelV4StreamOptions as TranscriptionModelV4StreamOptions,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertToBase64,\n connectToWebSocket,\n createJsonResponseHandler,\n mediaTypeToExtension,\n parseProviderOptions,\n postFormDataToApi,\n safeParseJSON,\n serializeModelOptions,\n toWebSocketUrl,\n waitForWebSocketBufferDrain,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type WebSocketConnection,\n type WebSocketLike,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ElevenLabsConfig } from './elevenlabs-config';\nimport { elevenlabsFailedResponseHandler } from './elevenlabs-error';\nimport {\n elevenLabsTranscriptionModelOptionsSchema,\n type ElevenLabsTranscriptionModelOptions,\n} from './elevenlabs-transcription-model-options';\nimport type { ElevenLabsTranscriptionModelId } from './elevenlabs-transcription-options';\nimport type { ElevenLabsTranscriptionAPITypes } from './elevenlabs-api-types';\n\ntype ElevenLabsRealtimeTranscriptionEvent = {\n message_type?: string;\n session_id?: string;\n text?: string;\n language_code?: string | null;\n words?: Array<{\n text?: string;\n start?: number;\n end?: number;\n type?: string;\n }> | null;\n error?: string;\n};\n\nconst elevenLabsRealtimeErrorTypes = new Set([\n 'auth_error',\n 'chunk_size_exceeded',\n 'commit_throttled',\n 'error',\n 'input_error',\n 'insufficient_audio_activity',\n 'queue_overflow',\n 'quota_exceeded',\n 'rate_limited',\n 'resource_exhausted',\n 'session_time_limit_exceeded',\n 'transcriber_error',\n 'unaccepted_terms',\n]);\n\nconst elevenLabsLateFinalizationErrorTypes = new Set([\n 'commit_throttled',\n 'input_error',\n 'insufficient_audio_activity',\n]);\n\nconst finalCommitGracePeriodMs = 250;\n\nfunction isRealtimeTranscriptionModelId(modelId: string): boolean {\n return modelId === 'scribe_v2_realtime';\n}\n\ninterface ElevenLabsTranscriptionModelConfig extends ElevenLabsConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class ElevenLabsTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: ElevenLabsTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: ElevenLabsTranscriptionModelId;\n config: ElevenLabsTranscriptionModelConfig;\n }) {\n return new ElevenLabsTranscriptionModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: ElevenLabsTranscriptionModelId,\n private readonly config: ElevenLabsTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const elevenlabsOptions = await parseProviderOptions({\n provider: 'elevenlabs',\n providerOptions,\n schema: elevenLabsTranscriptionModelOptionsSchema,\n });\n\n if (elevenlabsOptions?.streaming != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.elevenlabs.streaming',\n details:\n 'ElevenLabs batch transcription does not support streaming options.',\n });\n }\n\n // Create form data with base fields\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('model_id', this.modelId);\n const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n 'file',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\n formData.append('diarize', 'true');\n\n // Add provider-specific options\n if (elevenlabsOptions) {\n const transcriptionModelOptions: ElevenLabsTranscriptionAPITypes = {\n language_code: elevenlabsOptions.languageCode ?? undefined,\n tag_audio_events: elevenlabsOptions.tagAudioEvents ?? undefined,\n num_speakers: elevenlabsOptions.numSpeakers ?? undefined,\n timestamps_granularity:\n elevenlabsOptions.timestampsGranularity ?? undefined,\n file_format: elevenlabsOptions.fileFormat ?? undefined,\n };\n\n if (typeof elevenlabsOptions.diarize === 'boolean') {\n formData.append('diarize', String(elevenlabsOptions.diarize));\n }\n\n for (const key in transcriptionModelOptions) {\n const value =\n transcriptionModelOptions[\n key as keyof ElevenLabsTranscriptionAPITypes\n ];\n if (value !== undefined) {\n formData.append(key, String(value));\n }\n }\n }\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n if (isRealtimeTranscriptionModelId(this.modelId)) {\n throw new UnsupportedFunctionalityError({\n functionality: `non-streaming transcription with ${this.modelId}`,\n });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: '/v1/speech-to-text',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n formData,\n failedResponseHandler: elevenlabsFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n elevenlabsTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.text,\n segments:\n response.words?.map(word => ({\n text: word.text,\n startSecond: word.start ?? 0,\n endSecond: word.end ?? 0,\n })) ?? [],\n language: response.language_code,\n durationInSeconds: response.words?.at(-1)?.end ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n\n async doStream(\n options: TranscriptionModelV4StreamOptions,\n ): Promise<\n Awaited<ReturnType<NonNullable<TranscriptionModelV4['doStream']>>>\n > {\n if (!isRealtimeTranscriptionModelId(this.modelId)) {\n throw new UnsupportedFunctionalityError({\n functionality: `streaming transcription with ${this.modelId}`,\n });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const elevenLabsOptions = await parseProviderOptions({\n provider: 'elevenlabs',\n providerOptions: options.providerOptions,\n schema: elevenLabsTranscriptionModelOptionsSchema,\n });\n const streamingOptions = elevenLabsOptions?.streaming ?? undefined;\n const warnings: SharedV4Warning[] = [];\n\n const rawElevenLabsOptions = options.providerOptions?.elevenlabs ?? {};\n for (const option of [\n 'diarize',\n 'fileFormat',\n 'numSpeakers',\n 'tagAudioEvents',\n 'timestampsGranularity',\n ]) {\n if (\n rawElevenLabsOptions[option as keyof typeof rawElevenLabsOptions] !=\n null\n ) {\n warnings.push({\n type: 'unsupported',\n feature: `providerOptions.elevenlabs.${option}`,\n details: `ElevenLabs realtime transcription does not support ${option}.`,\n });\n }\n }\n\n // ElevenLabs documents filter_background_audio as incompatible with\n // include_timestamps. Language detection is delivered on the same\n // timestamp-bearing event, so it also requires include_timestamps here.\n // https://elevenlabs.io/docs/api-reference/speech-to-text/v-1-speech-to-text-realtime\n if (\n streamingOptions?.filterBackgroundAudio === true &&\n (streamingOptions.includeTimestamps === true ||\n streamingOptions.includeLanguageDetection === true)\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message:\n 'providerOptions.elevenlabs.streaming.filterBackgroundAudio cannot be combined with includeTimestamps or includeLanguageDetection',\n });\n }\n\n const inputFormat = getElevenLabsRealtimeAudioFormat(\n options.inputAudioFormat,\n );\n const url = buildElevenLabsRealtimeTranscriptionUrl({\n baseUrl: toWebSocketUrl(\n this.config.url({\n path: '/v1/speech-to-text/realtime',\n modelId: this.modelId,\n }),\n ),\n inputFormat: inputFormat.audioFormat,\n languageCode: elevenLabsOptions?.languageCode ?? undefined,\n modelId: this.modelId,\n streamingOptions,\n });\n\n return {\n request: { body: url.toString() },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n },\n stream: createElevenLabsRealtimeTranscriptionStream({\n abortSignal: options.abortSignal,\n audio: options.audio,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n includeLanguageDetection:\n streamingOptions?.includeLanguageDetection === true,\n includeRawChunks: options.includeRawChunks,\n includeTimestamps: streamingOptions?.includeTimestamps === true,\n language: elevenLabsOptions?.languageCode ?? undefined,\n previousText: streamingOptions?.previousText ?? undefined,\n sampleRate: inputFormat.sampleRate,\n url,\n warnings,\n webSocket: this.config.webSocket,\n }),\n };\n }\n}\n\nfunction getElevenLabsRealtimeAudioFormat(\n inputAudioFormat: TranscriptionModelV4StreamOptions['inputAudioFormat'],\n): { audioFormat: string; sampleRate: number } {\n const type = inputAudioFormat.type.toLowerCase();\n const rate = inputAudioFormat.rate;\n\n if (type === 'audio/pcmu') {\n if (rate != null && rate !== 8000) {\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message: 'ElevenLabs only supports audio/pcmu at 8000 Hz',\n });\n }\n return { audioFormat: 'ulaw_8000', sampleRate: 8000 };\n }\n\n const supportedPcmRates = [8000, 16000, 22050, 24000, 44100, 48000];\n const pcmRate = rate ?? 16000;\n if (type !== 'audio/pcm' || !supportedPcmRates.includes(pcmRate)) {\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message:\n 'ElevenLabs realtime transcription supports audio/pcm at 8000, 16000, 22050, 24000, 44100, or 48000 Hz, and audio/pcmu at 8000 Hz',\n });\n }\n\n return { audioFormat: `pcm_${pcmRate}`, sampleRate: pcmRate };\n}\n\nfunction buildElevenLabsRealtimeTranscriptionUrl({\n baseUrl,\n inputFormat,\n languageCode,\n modelId,\n streamingOptions,\n}: {\n baseUrl: URL;\n inputFormat: string;\n languageCode: string | undefined;\n modelId: string;\n streamingOptions:\n | NonNullable<ElevenLabsTranscriptionModelOptions['streaming']>\n | undefined;\n}): URL {\n const url = new URL(baseUrl);\n url.searchParams.set('model_id', modelId);\n url.searchParams.set('audio_format', inputFormat);\n const includeDetailedCommit =\n streamingOptions?.includeTimestamps === true ||\n streamingOptions?.includeLanguageDetection === true;\n\n const parameters = {\n commit_strategy: streamingOptions?.commitStrategy,\n enable_logging: streamingOptions?.enableLogging,\n filter_background_audio: streamingOptions?.filterBackgroundAudio,\n include_language_detection: streamingOptions?.includeLanguageDetection,\n include_timestamps: includeDetailedCommit\n ? true\n : streamingOptions?.includeTimestamps,\n language_code: languageCode,\n min_silence_duration_ms: streamingOptions?.minSilenceDurationMs,\n min_speech_duration_ms: streamingOptions?.minSpeechDurationMs,\n no_verbatim: streamingOptions?.noVerbatim,\n vad_silence_threshold_secs: streamingOptions?.vadSilenceThresholdSecs,\n vad_threshold: streamingOptions?.vadThreshold,\n };\n for (const [key, value] of Object.entries(parameters)) {\n if (value != null) {\n url.searchParams.set(key, String(value));\n }\n }\n for (const keyterm of streamingOptions?.keyterms ?? []) {\n url.searchParams.append('keyterms', keyterm);\n }\n for (const secondaryLanguage of streamingOptions?.secondaryLanguages ?? []) {\n url.searchParams.append('secondary_languages', secondaryLanguage);\n }\n\n return url;\n}\n\nfunction createElevenLabsRealtimeTranscriptionStream({\n abortSignal,\n audio,\n headers,\n includeLanguageDetection,\n includeRawChunks,\n includeTimestamps,\n language,\n previousText,\n sampleRate,\n url,\n warnings,\n webSocket,\n}: {\n abortSignal: AbortSignal | undefined;\n audio: ReadableStream<Uint8Array | string>;\n headers: Record<string, string | undefined>;\n includeLanguageDetection: boolean;\n includeRawChunks: boolean | undefined;\n includeTimestamps: boolean;\n language: string | undefined;\n previousText: string | undefined;\n sampleRate: number;\n url: URL;\n warnings: SharedV4Warning[];\n webSocket: ElevenLabsConfig['webSocket'];\n}) {\n let finished = false;\n let cleanup: (closeCode?: number) => void = () => {};\n\n return new ReadableStream({\n start: controller => {\n let audioReader:\n | ReadableStreamDefaultReader<Uint8Array | string>\n | undefined;\n let connection: WebSocketConnection | undefined;\n let detectedLanguage = language;\n let endOfInput = false;\n let finalCommitGracePeriod: ReturnType<typeof setTimeout> | undefined;\n let receivedPostInputCommit = false;\n let segmentIndex = 0;\n let sessionId: string | undefined;\n let committedEventCount = 0;\n let committedEventsAtEndOfInput = 0;\n let finalCommitEventCount: number | undefined;\n let timestampedCommitCount = 0;\n const expectDetailedCommit =\n includeTimestamps || includeLanguageDetection;\n const finalSegments: Array<{\n text: string;\n startSecond: number;\n endSecond: number;\n }> = [];\n const finalTexts: string[] = [];\n\n cleanup = (closeCode?: number) => {\n clearTimeout(finalCommitGracePeriod);\n if (audioReader != null) {\n void audioReader.cancel().catch(() => {});\n } else {\n void audio.cancel().catch(() => {});\n }\n connection?.close(closeCode);\n };\n\n const finishWithError = (error: unknown) => {\n if (finished) return;\n finished = true;\n cleanup();\n controller.error(error);\n };\n\n const finish = () => {\n if (finished) return;\n finished = true;\n controller.enqueue({\n type: 'finish',\n text: finalTexts.join(' ').trim(),\n segments: finalSegments,\n language: detectedLanguage,\n durationInSeconds: finalSegments.at(-1)?.endSecond,\n });\n controller.close();\n cleanup(1000);\n };\n\n const scheduleFinish = () => {\n clearTimeout(finalCommitGracePeriod);\n finalCommitGracePeriod = setTimeout(finish, finalCommitGracePeriodMs);\n };\n\n const sendAudio = async (socket: WebSocketLike) => {\n audioReader = audio.getReader();\n let firstChunk = true;\n try {\n while (true) {\n const { done, value } = await audioReader.read();\n if (done || finished) break;\n socket.send(\n JSON.stringify({\n message_type: 'input_audio_chunk',\n audio_base_64: convertToBase64(value),\n commit: false,\n sample_rate: sampleRate,\n ...(firstChunk && previousText != null\n ? { previous_text: previousText }\n : {}),\n }),\n );\n firstChunk = false;\n await waitForWebSocketBufferDrain(socket);\n }\n } finally {\n audioReader.releaseLock();\n audioReader = undefined;\n }\n if (!finished) {\n committedEventsAtEndOfInput = committedEventCount;\n endOfInput = true;\n socket.send(\n JSON.stringify({\n message_type: 'input_audio_chunk',\n audio_base_64: '',\n commit: true,\n sample_rate: sampleRate,\n }),\n );\n }\n };\n\n connection = connectToWebSocket({\n abortSignal,\n headers,\n onAbort: finishWithError,\n onClose: () => {\n if (finished) return;\n if (endOfInput && receivedPostInputCommit) {\n finish();\n return;\n }\n finishWithError(\n new Error(\n 'ElevenLabs realtime transcription stream closed before completion.',\n ),\n );\n },\n onMessageText: async text => {\n const parsed = await safeParseJSON({ text });\n if (!parsed.success) return;\n const raw = parsed.value as ElevenLabsRealtimeTranscriptionEvent;\n\n if (includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: raw });\n }\n\n if (\n raw.message_type != null &&\n elevenLabsRealtimeErrorTypes.has(raw.message_type)\n ) {\n if (\n endOfInput &&\n (committedEventCount > 0 || timestampedCommitCount > 0) &&\n elevenLabsLateFinalizationErrorTypes.has(raw.message_type)\n ) {\n receivedPostInputCommit = true;\n finish();\n return;\n }\n finishWithError(\n new Error(raw.error ?? 'ElevenLabs realtime transcription error'),\n );\n return;\n }\n\n switch (raw.message_type) {\n case 'session_started': {\n sessionId = raw.session_id;\n controller.enqueue({ type: 'stream-start', warnings });\n const socket = connection?.socket;\n if (socket == null) {\n finishWithError(new Error('WebSocket is not connected.'));\n break;\n }\n void sendAudio(socket).catch(finishWithError);\n break;\n }\n case 'partial_transcript': {\n controller.enqueue({\n type: 'transcript-partial',\n id: `${sessionId ?? 'session'}:${segmentIndex}`,\n text: raw.text ?? '',\n });\n break;\n }\n case 'final_transcript':\n case 'committed_transcript': {\n committedEventCount++;\n const text = (raw.text ?? '').trim();\n const id = `${sessionId ?? 'session'}:${segmentIndex}`;\n\n if (text.length > 0) {\n finalTexts.push(text);\n segmentIndex++;\n controller.enqueue({\n type: 'transcript-final',\n id,\n text,\n });\n }\n\n // When timestamps are requested, ElevenLabs follows this event\n // with committed_transcript_with_timestamps for the same commit.\n if (\n endOfInput &&\n committedEventCount > committedEventsAtEndOfInput\n ) {\n receivedPostInputCommit = true;\n finalCommitEventCount = committedEventCount;\n if (\n !expectDetailedCommit ||\n raw.message_type === 'final_transcript'\n ) {\n scheduleFinish();\n }\n }\n break;\n }\n case 'final_transcript_with_timestamps':\n case 'committed_transcript_with_timestamps': {\n const text = (raw.text ?? '').trim();\n const words = raw.words ?? [];\n const timestampedWords = words.filter(\n (word): word is typeof word & { start: number; end: number } =>\n typeof word.start === 'number' &&\n typeof word.end === 'number',\n );\n detectedLanguage = raw.language_code ?? detectedLanguage;\n\n // Normally this is paired with the preceding committed_transcript.\n // Still handle a timestamp-only server response defensively.\n if (\n finalTexts[timestampedCommitCount] == null &&\n text.length > 0\n ) {\n const id = `${sessionId ?? 'session'}:${segmentIndex++}`;\n finalTexts.push(text);\n controller.enqueue({\n type: 'transcript-final',\n id,\n text,\n ...(includeTimestamps\n ? {\n startSecond: timestampedWords[0]?.start,\n endSecond: timestampedWords.at(-1)?.end,\n }\n : {}),\n });\n }\n timestampedCommitCount++;\n if (includeTimestamps) {\n finalSegments.push(\n ...timestampedWords.map(word => ({\n text: word.text ?? '',\n startSecond: word.start,\n endSecond: word.end,\n })),\n );\n }\n\n if (\n endOfInput &&\n timestampedCommitCount > committedEventsAtEndOfInput &&\n (finalCommitEventCount == null ||\n timestampedCommitCount >= finalCommitEventCount)\n ) {\n receivedPostInputCommit = true;\n scheduleFinish();\n }\n break;\n }\n }\n },\n onProcessingError: finishWithError,\n onSocketError: () => {\n finishWithError(\n new Error(\n 'ElevenLabs realtime transcription error.' +\n (webSocket == null\n ? ' Note: the native WebSocket implementation in browsers,' +\n ' Node.js, Deno, and Bun cannot send the xi-api-key header' +\n ' required by ElevenLabs. Pass a header-capable WebSocket' +\n \" implementation (e.g. the 'ws' package) via\" +\n ' createElevenLabs({ webSocket }).'\n : ''),\n ),\n );\n },\n url,\n webSocket,\n });\n },\n\n cancel: () => {\n if (finished) return;\n finished = true;\n cleanup();\n },\n });\n}\n\nconst elevenlabsTranscriptionResponseSchema = z.object({\n language_code: z.string(),\n language_probability: z.number(),\n text: z.string(),\n words: z\n .array(\n z.object({\n text: z.string(),\n type: z.enum(['word', 'spacing', 'audio_event']),\n start: z.number().nullish(),\n end: z.number().nullish(),\n speaker_id: z.string().nullish(),\n characters: z\n .array(\n z.object({\n text: z.string(),\n start: z.number().nullish(),\n end: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const elevenlabsErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type ElevenLabsErrorData = z.infer<typeof elevenlabsErrorDataSchema>;\n\nexport const elevenlabsFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: elevenlabsErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { z } from 'zod/v4';\n\n// https://elevenlabs.io/docs/api-reference/speech-to-text/convert\nexport const elevenLabsTranscriptionModelOptionsSchema = z.object({\n languageCode: z.string().nullish(),\n tagAudioEvents: z.boolean().nullish().default(true),\n numSpeakers: z.number().int().min(1).max(32).nullish(),\n timestampsGranularity: z\n .enum(['none', 'word', 'character'])\n .nullish()\n .default('word'),\n diarize: z.boolean().nullish().default(false),\n fileFormat: z.enum(['pcm_s16le_16', 'other']).nullish().default('other'),\n streaming: z\n .object({\n commitStrategy: z.enum(['manual', 'vad']).nullish(),\n enableLogging: z.boolean().nullish(),\n filterBackgroundAudio: z.boolean().nullish(),\n includeLanguageDetection: z.boolean().nullish(),\n includeTimestamps: z.boolean().nullish(),\n keyterms: z.array(z.string().max(20)).max(50).nullish(),\n minSilenceDurationMs: z.number().int().min(50).max(2000).nullish(),\n minSpeechDurationMs: z.number().int().min(50).max(2000).nullish(),\n noVerbatim: z.boolean().nullish(),\n previousText: z.string().nullish(),\n secondaryLanguages: z.array(z.string()).nullish(),\n vadSilenceThresholdSecs: z.number().min(0.3).max(3).nullish(),\n vadThreshold: z.number().min(0.1).max(0.9).nullish(),\n })\n .nullish(),\n});\n\nexport type ElevenLabsTranscriptionModelOptions = z.infer<\n typeof elevenLabsTranscriptionModelOptionsSchema\n>;\n","import type { SpeechModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport type { ElevenLabsConfig } from './elevenlabs-config';\nimport { elevenlabsFailedResponseHandler } from './elevenlabs-error';\nimport { elevenLabsSpeechModelOptionsSchema } from './elevenlabs-speech-model-options';\nimport type { ElevenLabsSpeechAPITypes } from './elevenlabs-speech-api-types';\nimport type {\n ElevenLabsSpeechModelId,\n ElevenLabsSpeechVoiceId,\n} from './elevenlabs-speech-options';\n\ninterface ElevenLabsSpeechModelConfig extends ElevenLabsConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class ElevenLabsSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: ElevenLabsSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: ElevenLabsSpeechModelId;\n config: ElevenLabsSpeechModelConfig;\n }) {\n return new ElevenLabsSpeechModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: ElevenLabsSpeechModelId,\n private readonly config: ElevenLabsSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice = '21m00Tcm4TlvDq8ikWAM',\n outputFormat = 'mp3_44100_128',\n instructions,\n language,\n speed,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const elevenLabsOptions = await parseProviderOptions({\n provider: 'elevenlabs',\n providerOptions,\n schema: elevenLabsSpeechModelOptionsSchema,\n });\n\n // Create request body\n const requestBody: ElevenLabsSpeechAPITypes = {\n text,\n model_id: this.modelId,\n };\n\n // Prepare query parameters\n const queryParams: Record<string, string> = {};\n\n // Map outputFormat to ElevenLabs format (as query param)\n if (outputFormat) {\n const formatMap: Record<string, string> = {\n mp3: 'mp3_44100_128',\n mp3_32: 'mp3_44100_32',\n mp3_64: 'mp3_44100_64',\n mp3_96: 'mp3_44100_96',\n mp3_128: 'mp3_44100_128',\n mp3_192: 'mp3_44100_192',\n pcm: 'pcm_44100',\n pcm_16000: 'pcm_16000',\n pcm_22050: 'pcm_22050',\n pcm_24000: 'pcm_24000',\n pcm_44100: 'pcm_44100',\n ulaw: 'ulaw_8000',\n };\n\n const mappedFormat = formatMap[outputFormat] || outputFormat;\n queryParams.output_format = mappedFormat;\n }\n\n // Add language code if provided\n if (language) {\n requestBody.language_code = language;\n }\n\n const voiceSettings: typeof requestBody.voice_settings = {};\n\n if (speed != null) {\n voiceSettings.speed = speed;\n }\n\n // Add provider-specific options - map from camelCase to snake_case\n if (elevenLabsOptions) {\n if (elevenLabsOptions.voiceSettings) {\n // Map camelCase voice settings to snake_case for API\n if (elevenLabsOptions.voiceSettings.stability != null) {\n voiceSettings.stability = elevenLabsOptions.voiceSettings.stability;\n }\n if (elevenLabsOptions.voiceSettings.similarityBoost != null) {\n voiceSettings.similarity_boost =\n elevenLabsOptions.voiceSettings.similarityBoost;\n }\n if (elevenLabsOptions.voiceSettings.style != null) {\n voiceSettings.style = elevenLabsOptions.voiceSettings.style;\n }\n if (elevenLabsOptions.voiceSettings.useSpeakerBoost != null) {\n voiceSettings.use_speaker_boost =\n elevenLabsOptions.voiceSettings.useSpeakerBoost;\n }\n }\n // Add language code from provider options if not already set\n if (elevenLabsOptions.languageCode && !requestBody.language_code) {\n requestBody.language_code = elevenLabsOptions.languageCode;\n }\n\n // Map pronunciation dictionary locators\n if (elevenLabsOptions.pronunciationDictionaryLocators) {\n requestBody.pronunciation_dictionary_locators =\n elevenLabsOptions.pronunciationDictionaryLocators.map(locator => ({\n pronunciation_dictionary_id: locator.pronunciationDictionaryId,\n ...(locator.versionId && { version_id: locator.versionId }),\n }));\n }\n\n if (elevenLabsOptions.seed != null) {\n requestBody.seed = elevenLabsOptions.seed;\n }\n if (elevenLabsOptions.previousText) {\n requestBody.previous_text = elevenLabsOptions.previousText;\n }\n if (elevenLabsOptions.nextText) {\n requestBody.next_text = elevenLabsOptions.nextText;\n }\n\n // Add previous and next request IDs\n if (elevenLabsOptions.previousRequestIds) {\n requestBody.previous_request_ids = elevenLabsOptions.previousRequestIds;\n }\n if (elevenLabsOptions.nextRequestIds) {\n requestBody.next_request_ids = elevenLabsOptions.nextRequestIds;\n }\n\n // Add text normalization options\n if (elevenLabsOptions.applyTextNormalization) {\n requestBody.apply_text_normalization =\n elevenLabsOptions.applyTextNormalization;\n }\n if (elevenLabsOptions.applyLanguageTextNormalization != null) {\n requestBody.apply_language_text_normalization =\n elevenLabsOptions.applyLanguageTextNormalization;\n }\n\n // enable_logging is a query parameter\n if (elevenLabsOptions.enableLogging != null) {\n queryParams.enable_logging = String(elevenLabsOptions.enableLogging);\n }\n }\n\n // Only add voice_settings if there are settings to add\n if (Object.keys(voiceSettings).length > 0) {\n requestBody.voice_settings = voiceSettings;\n }\n\n if (instructions) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details: `ElevenLabs speech models do not support instructions. Instructions parameter was ignored.`,\n });\n }\n\n return {\n requestBody,\n queryParams,\n warnings,\n voiceId: voice as ElevenLabsSpeechVoiceId,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, queryParams, warnings, voiceId } =\n await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: (() => {\n const baseUrl = this.config.url({\n path: `/v1/text-to-speech/${voiceId}`,\n modelId: this.modelId,\n });\n const queryString = new URLSearchParams(queryParams).toString();\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n })(),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: requestBody,\n failedResponseHandler: elevenlabsFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from 'zod/v4';\n\n// Schema for camelCase input from users\nexport const elevenLabsSpeechModelOptionsSchema = z.object({\n languageCode: z.string().optional(),\n voiceSettings: z\n .object({\n stability: z.number().min(0).max(1).optional(),\n similarityBoost: z.number().min(0).max(1).optional(),\n style: z.number().min(0).max(1).optional(),\n useSpeakerBoost: z.boolean().optional(),\n })\n .optional(),\n pronunciationDictionaryLocators: z\n .array(\n z.object({\n pronunciationDictionaryId: z.string(),\n versionId: z.string().optional(),\n }),\n )\n .max(3)\n .optional(),\n seed: z.number().min(0).max(4294967295).optional(),\n previousText: z.string().optional(),\n nextText: z.string().optional(),\n previousRequestIds: z.array(z.string()).max(3).optional(),\n nextRequestIds: z.array(z.string()).max(3).optional(),\n applyTextNormalization: z.enum(['auto', 'on', 'off']).optional(),\n applyLanguageTextNormalization: z.boolean().optional(),\n enableLogging: z.boolean().optional(),\n});\n\nexport type ElevenLabsSpeechModelOptions = z.infer<\n typeof elevenLabsSpeechModelOptionsSchema\n>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","text","z","combineHeaders","parseProviderOptions","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","combineHeaders"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/elevenlabs",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.50",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@ai-sdk/provider": "4.0.18",
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.49"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@ai-sdk/test-server": "2.0.
|
|
36
|
+
"@ai-sdk/test-server": "2.0.2",
|
|
37
37
|
"@types/node": "22.19.19",
|
|
38
38
|
"@vercel/ai-tsconfig": "0.0.0",
|
|
39
39
|
"tsup": "^8.5.1",
|