@ai-sdk/elevenlabs 3.0.48 → 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 CHANGED
@@ -1,5 +1,20 @@
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
+
3
18
  ## 3.0.48
4
19
 
5
20
  ### 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 ((elevenlabsOptions == null ? void 0 : elevenlabsOptions.streaming) != null) {
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: (_a = elevenlabsOptions.languageCode) != null ? _a : void 0,
148
- tag_audio_events: (_b = elevenlabsOptions.tagAudioEvents) != null ? _b : void 0,
149
- num_speakers: (_c = elevenlabsOptions.numSpeakers) != null ? _c : void 0,
150
- timestamps_granularity: (_d = elevenlabsOptions.timestampsGranularity) != null ? _d : void 0,
151
- file_format: (_e = elevenlabsOptions.fileFormat) != null ? _e : void 0
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 = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
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((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
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: (_g = (_f = response.words) == null ? void 0 : _f.map((word) => {
198
- var _a2, _b2;
199
- return {
200
- text: word.text,
201
- startSecond: (_a2 = word.start) != null ? _a2 : 0,
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: (_j = (_i = (_h = response.words) == null ? void 0 : _h.at(-1)) == null ? void 0 : _i.end) != null ? _j : void 0,
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 = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
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 = (_d = elevenLabsOptions == null ? void 0 : elevenLabsOptions.streaming) != null ? _d : void 0;
223
+ const streamingOptions = elevenLabsOptions?.streaming ?? void 0;
230
224
  const warnings = [];
231
- const rawElevenLabsOptions = (_f = (_e = options.providerOptions) == null ? void 0 : _e.elevenlabs) != null ? _f : {};
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 ((streamingOptions == null ? void 0 : streamingOptions.filterBackgroundAudio) === true && (streamingOptions.includeTimestamps === true || streamingOptions.includeLanguageDetection === true)) {
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: (_g = elevenLabsOptions == null ? void 0 : elevenLabsOptions.languageCode) != null ? _g : void 0,
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((_i = (_h = this.config).headers) == null ? void 0 : _i.call(_h), options.headers),
278
- includeLanguageDetection: (streamingOptions == null ? void 0 : streamingOptions.includeLanguageDetection) === true,
271
+ headers: combineHeaders(this.config.headers?.(), options.headers),
272
+ includeLanguageDetection: streamingOptions?.includeLanguageDetection === true,
279
273
  includeRawChunks: options.includeRawChunks,
280
- includeTimestamps: (streamingOptions == null ? void 0 : streamingOptions.includeTimestamps) === true,
281
- language: (_j = elevenLabsOptions == null ? void 0 : elevenLabsOptions.languageCode) != null ? _j : void 0,
282
- previousText: (_k = streamingOptions == null ? void 0 : streamingOptions.previousText) != null ? _k : void 0,
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 != null ? rate : 16e3;
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 = (streamingOptions == null ? void 0 : streamingOptions.includeTimestamps) === true || (streamingOptions == null ? void 0 : streamingOptions.includeLanguageDetection) === true;
317
+ const includeDetailedCommit = streamingOptions?.includeTimestamps === true || streamingOptions?.includeLanguageDetection === true;
325
318
  const parameters = {
326
- commit_strategy: streamingOptions == null ? void 0 : streamingOptions.commitStrategy,
327
- enable_logging: streamingOptions == null ? void 0 : streamingOptions.enableLogging,
328
- filter_background_audio: streamingOptions == null ? void 0 : streamingOptions.filterBackgroundAudio,
329
- include_language_detection: streamingOptions == null ? void 0 : streamingOptions.includeLanguageDetection,
330
- include_timestamps: includeDetailedCommit ? true : streamingOptions == null ? void 0 : streamingOptions.includeTimestamps,
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 == null ? void 0 : streamingOptions.minSilenceDurationMs,
333
- min_speech_duration_ms: streamingOptions == null ? void 0 : streamingOptions.minSpeechDurationMs,
334
- no_verbatim: streamingOptions == null ? void 0 : streamingOptions.noVerbatim,
335
- vad_silence_threshold_secs: streamingOptions == null ? void 0 : streamingOptions.vadSilenceThresholdSecs,
336
- vad_threshold: streamingOptions == null ? void 0 : streamingOptions.vadThreshold
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 (_a = streamingOptions == null ? void 0 : streamingOptions.keyterms) != null ? _a : []) {
336
+ for (const keyterm of streamingOptions?.keyterms ?? []) {
344
337
  url.searchParams.append("keyterms", keyterm);
345
338
  }
346
- for (const secondaryLanguage of (_b = streamingOptions == null ? void 0 : streamingOptions.secondaryLanguages) != null ? _b : []) {
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 == null ? void 0 : connection.close(closeCode);
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: (_a = finalSegments.at(-1)) == null ? void 0 : _a.endSecond
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((_a = raw.error) != null ? _a : "ElevenLabs realtime transcription 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 == null ? void 0 : connection.socket;
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 != null ? sessionId : "session"}:${segmentIndex}`,
507
- text: (_b = raw.text) != null ? _b : ""
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 = ((_c = raw.text) != null ? _c : "").trim();
515
- const id = `${sessionId != null ? sessionId : "session"}:${segmentIndex}`;
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 = ((_d = raw.text) != null ? _d : "").trim();
537
- const words = (_e = raw.words) != null ? _e : [];
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 = (_f = raw.language_code) != null ? _f : detectedLanguage;
532
+ detectedLanguage = raw.language_code ?? detectedLanguage;
542
533
  if (finalTexts[timestampedCommitCount] == null && text2.length > 0) {
543
- const id = `${sessionId != null ? sessionId : "session"}:${segmentIndex++}`;
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: (_g = timestampedWords[0]) == null ? void 0 : _g.start,
551
- endSecond: (_h = timestampedWords.at(-1)) == null ? void 0 : _h.end
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
- var _a2;
560
- return {
561
- text: (_a2 = word.text) != null ? _a2 : "",
562
- startSecond: word.start,
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
- var _a, _b, _c, _d, _e;
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((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
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.48" : "0.0.0-test";
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":";AAAA;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;;;ACXP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,KAAAA,UAAS;;;ACzBlB,SAAS,SAAS;AAClB,SAAS,sCAAsC;AAExC,IAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,OAAO,EAAE,OAAO;AAAA,IACd,SAAS,EAAE,OAAO;AAAA,IAClB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAIM,IAAM,kCAAkC,+BAA+B;AAAA,EAC5E,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK,MAAM;AACrC,CAAC;;;ACfD,SAAS,KAAAC,UAAS;AAGX,IAAM,4CAA4CA,GAAE,OAAO;AAAA,EAChE,cAAcA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACjC,gBAAgBA,GAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAClD,aAAaA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ;AAAA,EACrD,uBAAuBA,GACpB,KAAK,CAAC,QAAQ,QAAQ,WAAW,CAAC,EAClC,QAAQ,EACR,QAAQ,MAAM;AAAA,EACjB,SAASA,GAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC5C,YAAYA,GAAE,KAAK,CAAC,gBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,OAAO;AAAA,EACvE,WAAWA,GACR,OAAO;AAAA,IACN,gBAAgBA,GAAE,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,QAAQ;AAAA,IAClD,eAAeA,GAAE,QAAQ,EAAE,QAAQ;AAAA,IACnC,uBAAuBA,GAAE,QAAQ,EAAE,QAAQ;AAAA,IAC3C,0BAA0BA,GAAE,QAAQ,EAAE,QAAQ;AAAA,IAC9C,mBAAmBA,GAAE,QAAQ,EAAE,QAAQ;AAAA,IACvC,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ;AAAA,IACtD,sBAAsBA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,GAAI,EAAE,QAAQ;AAAA,IACjE,qBAAqBA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,GAAI,EAAE,QAAQ;AAAA,IAChE,YAAYA,GAAE,QAAQ,EAAE,QAAQ;AAAA,IAChC,cAAcA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACjC,oBAAoBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,QAAQ;AAAA,IAChD,yBAAyBA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ;AAAA,IAC5D,cAAcA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,QAAQ;AAAA,EACrD,CAAC,EACA,QAAQ;AACb,CAAC;;;AFmBD,IAAM,+BAA+B,oBAAI,IAAI;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,uCAAuC,oBAAI,IAAI;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,2BAA2B;AAEjC,SAAS,+BAA+B,SAA0B;AAChE,SAAO,YAAY;AACrB;AAQO,IAAM,+BAAN,MAAM,8BAA6D;AAAA,EAqBxE,YACW,SACQ,QACjB;AAFS;AACQ;AAtBnB,SAAS,uBAAuB;AAAA,EAuB7B;AAAA,EArBH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQ,kBAAkB,EAAE,OAAqC;AAC/D,WAAO,sBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,oBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,8BAA6B,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACzE;AAAA,EAOA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAsD;AAjHxD;AAkHI,UAAM,WAA8B,CAAC;AAGrC,UAAM,oBAAoB,MAAM,qBAAqB;AAAA,MACnD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAED,SAAI,uDAAmB,cAAa,MAAM;AACxC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAGA,UAAM,WAAW,IAAI,SAAS;AAC9B,UAAM,OACJ,iBAAiB,aACb,IAAI,KAAK,CAAC,KAAK,CAAC,IAChB,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,CAAC;AAEjD,aAAS,OAAO,YAAY,KAAK,OAAO;AACxC,UAAM,gBAAgB,qBAAqB,SAAS;AACpD,aAAS;AAAA,MACP;AAAA,MACA,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,EAAE,MAAM,UAAU,CAAC;AAAA,MAC7C,SAAS,aAAa;AAAA,IACxB;AACA,aAAS,OAAO,WAAW,MAAM;AAGjC,QAAI,mBAAmB;AACrB,YAAM,4BAA6D;AAAA,QACjE,gBAAe,uBAAkB,iBAAlB,YAAkC;AAAA,QACjD,mBAAkB,uBAAkB,mBAAlB,YAAoC;AAAA,QACtD,eAAc,uBAAkB,gBAAlB,YAAiC;AAAA,QAC/C,yBACE,uBAAkB,0BAAlB,YAA2C;AAAA,QAC7C,cAAa,uBAAkB,eAAlB,YAAgC;AAAA,MAC/C;AAEA,UAAI,OAAO,kBAAkB,YAAY,WAAW;AAClD,iBAAS,OAAO,WAAW,OAAO,kBAAkB,OAAO,CAAC;AAAA,MAC9D;AAEA,iBAAW,OAAO,2BAA2B;AAC3C,cAAM,QACJ,0BACE,GACF;AACF,YAAI,UAAU,QAAW;AACvB,mBAAS,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACkE;AAtLtE;AAuLI,QAAI,+BAA+B,KAAK,OAAO,GAAG;AAChD,YAAM,IAAI,8BAA8B;AAAA,QACtC,eAAe,oCAAoC,KAAK,OAAO;AAAA,MACjE,CAAC;AAAA,IACH;AAEA,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,UAAU,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAEzD,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,MAAM,kBAAkB;AAAA,MAC1B,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,SAAS,gBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf,WACE,oBAAS,UAAT,mBAAgB,IAAI,UAAK;AAtNjC,YAAAC,KAAAC;AAsNqC;AAAA,UAC3B,MAAM,KAAK;AAAA,UACX,cAAaD,MAAA,KAAK,UAAL,OAAAA,MAAc;AAAA,UAC3B,YAAWC,MAAA,KAAK,QAAL,OAAAA,MAAY;AAAA,QACzB;AAAA,aAJA,YAIO,CAAC;AAAA,MACV,UAAU,SAAS;AAAA,MACnB,oBAAmB,0BAAS,UAAT,mBAAgB,GAAG,QAAnB,mBAAwB,QAAxB,YAA+B;AAAA,MAClD;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAGA;AA3OJ;AA4OI,QAAI,CAAC,+BAA+B,KAAK,OAAO,GAAG;AACjD,YAAM,IAAI,8BAA8B;AAAA,QACtC,eAAe,gCAAgC,KAAK,OAAO;AAAA,MAC7D,CAAC;AAAA,IACH;AAEA,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,oBAAoB,MAAM,qBAAqB;AAAA,MACnD,UAAU;AAAA,MACV,iBAAiB,QAAQ;AAAA,MACzB,QAAQ;AAAA,IACV,CAAC;AACD,UAAM,oBAAmB,4DAAmB,cAAnB,YAAgC;AACzD,UAAM,WAA8B,CAAC;AAErC,UAAM,wBAAuB,mBAAQ,oBAAR,mBAAyB,eAAzB,YAAuC,CAAC;AACrE,eAAW,UAAU;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAAG;AACD,UACE,qBAAqB,MAA2C,KAChE,MACA;AACA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,8BAA8B,MAAM;AAAA,UAC7C,SAAS,sDAAsD,MAAM;AAAA,QACvE,CAAC;AAAA,MACH;AAAA,IACF;AAMA,SACE,qDAAkB,2BAA0B,SAC3C,iBAAiB,sBAAsB,QACtC,iBAAiB,6BAA6B,OAChD;AACA,YAAM,IAAI,qBAAqB;AAAA,QAC7B,UAAU;AAAA,QACV,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,UAAM,cAAc;AAAA,MAClB,QAAQ;AAAA,IACV;AACA,UAAM,MAAM,wCAAwC;AAAA,MAClD,SAAS;AAAA,QACP,KAAK,OAAO,IAAI;AAAA,UACd,MAAM;AAAA,UACN,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,YAAY;AAAA,MACzB,eAAc,4DAAmB,iBAAnB,YAAmC;AAAA,MACjD,SAAS,KAAK;AAAA,MACd;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE;AAAA,MAChC,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,QAAQ,4CAA4C;AAAA,QAClD,aAAa,QAAQ;AAAA,QACrB,OAAO,QAAQ;AAAA,QACf,SAAS,gBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,QAChE,2BACE,qDAAkB,8BAA6B;AAAA,QACjD,kBAAkB,QAAQ;AAAA,QAC1B,oBAAmB,qDAAkB,uBAAsB;AAAA,QAC3D,WAAU,4DAAmB,iBAAnB,YAAmC;AAAA,QAC7C,eAAc,0DAAkB,iBAAlB,YAAkC;AAAA,QAChD,YAAY,YAAY;AAAA,QACxB;AAAA,QACA;AAAA,QACA,WAAW,KAAK,OAAO;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,iCACP,kBAC6C;AAC7C,QAAM,OAAO,iBAAiB,KAAK,YAAY;AAC/C,QAAM,OAAO,iBAAiB;AAE9B,MAAI,SAAS,cAAc;AACzB,QAAI,QAAQ,QAAQ,SAAS,KAAM;AACjC,YAAM,IAAI,qBAAqB;AAAA,QAC7B,UAAU;AAAA,QACV,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,WAAO,EAAE,aAAa,aAAa,YAAY,IAAK;AAAA,EACtD;AAEA,QAAM,oBAAoB,CAAC,KAAM,MAAO,OAAO,MAAO,OAAO,IAAK;AAClE,QAAM,UAAU,sBAAQ;AACxB,MAAI,SAAS,eAAe,CAAC,kBAAkB,SAAS,OAAO,GAAG;AAChE,UAAM,IAAI,qBAAqB;AAAA,MAC7B,UAAU;AAAA,MACV,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,aAAa,OAAO,OAAO,IAAI,YAAY,QAAQ;AAC9D;AAEA,SAAS,wCAAwC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQQ;AAnXR;AAoXE,QAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,MAAI,aAAa,IAAI,YAAY,OAAO;AACxC,MAAI,aAAa,IAAI,gBAAgB,WAAW;AAChD,QAAM,yBACJ,qDAAkB,uBAAsB,SACxC,qDAAkB,8BAA6B;AAEjD,QAAM,aAAa;AAAA,IACjB,iBAAiB,qDAAkB;AAAA,IACnC,gBAAgB,qDAAkB;AAAA,IAClC,yBAAyB,qDAAkB;AAAA,IAC3C,4BAA4B,qDAAkB;AAAA,IAC9C,oBAAoB,wBAChB,OACA,qDAAkB;AAAA,IACtB,eAAe;AAAA,IACf,yBAAyB,qDAAkB;AAAA,IAC3C,wBAAwB,qDAAkB;AAAA,IAC1C,aAAa,qDAAkB;AAAA,IAC/B,4BAA4B,qDAAkB;AAAA,IAC9C,eAAe,qDAAkB;AAAA,EACnC;AACA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,QAAI,SAAS,MAAM;AACjB,UAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,IACzC;AAAA,EACF;AACA,aAAW,YAAW,0DAAkB,aAAlB,YAA8B,CAAC,GAAG;AACtD,QAAI,aAAa,OAAO,YAAY,OAAO;AAAA,EAC7C;AACA,aAAW,sBAAqB,0DAAkB,uBAAlB,YAAwC,CAAC,GAAG;AAC1E,QAAI,aAAa,OAAO,uBAAuB,iBAAiB;AAAA,EAClE;AAEA,SAAO;AACT;AAEA,SAAS,4CAA4C;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAaG;AACD,MAAI,WAAW;AACf,MAAI,UAAwC,MAAM;AAAA,EAAC;AAEnD,SAAO,IAAI,eAAe;AAAA,IACxB,OAAO,gBAAc;AACnB,UAAI;AAGJ,UAAI;AACJ,UAAI,mBAAmB;AACvB,UAAI,aAAa;AACjB,UAAI;AACJ,UAAI,0BAA0B;AAC9B,UAAI,eAAe;AACnB,UAAI;AACJ,UAAI,sBAAsB;AAC1B,UAAI,8BAA8B;AAClC,UAAI;AACJ,UAAI,yBAAyB;AAC7B,YAAM,uBACJ,qBAAqB;AACvB,YAAM,gBAID,CAAC;AACN,YAAM,aAAuB,CAAC;AAE9B,gBAAU,CAAC,cAAuB;AAChC,qBAAa,sBAAsB;AACnC,YAAI,eAAe,MAAM;AACvB,eAAK,YAAY,OAAO,EAAE,MAAM,MAAM;AAAA,UAAC,CAAC;AAAA,QAC1C,OAAO;AACL,eAAK,MAAM,OAAO,EAAE,MAAM,MAAM;AAAA,UAAC,CAAC;AAAA,QACpC;AACA,iDAAY,MAAM;AAAA,MACpB;AAEA,YAAM,kBAAkB,CAAC,UAAmB;AAC1C,YAAI,SAAU;AACd,mBAAW;AACX,gBAAQ;AACR,mBAAW,MAAM,KAAK;AAAA,MACxB;AAEA,YAAM,SAAS,MAAM;AAje3B;AAkeQ,YAAI,SAAU;AACd,mBAAW;AACX,mBAAW,QAAQ;AAAA,UACjB,MAAM;AAAA,UACN,MAAM,WAAW,KAAK,GAAG,EAAE,KAAK;AAAA,UAChC,UAAU;AAAA,UACV,UAAU;AAAA,UACV,oBAAmB,mBAAc,GAAG,EAAE,MAAnB,mBAAsB;AAAA,QAC3C,CAAC;AACD,mBAAW,MAAM;AACjB,gBAAQ,GAAI;AAAA,MACd;AAEA,YAAM,iBAAiB,MAAM;AAC3B,qBAAa,sBAAsB;AACnC,iCAAyB,WAAW,QAAQ,wBAAwB;AAAA,MACtE;AAEA,YAAM,YAAY,OAAO,WAA0B;AACjD,sBAAc,MAAM,UAAU;AAC9B,YAAI,aAAa;AACjB,YAAI;AACF,iBAAO,MAAM;AACX,kBAAM,EAAE,MAAM,MAAM,IAAI,MAAM,YAAY,KAAK;AAC/C,gBAAI,QAAQ,SAAU;AACtB,mBAAO;AAAA,cACL,KAAK,UAAU;AAAA,gBACb,cAAc;AAAA,gBACd,eAAe,gBAAgB,KAAK;AAAA,gBACpC,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,GAAI,cAAc,gBAAgB,OAC9B,EAAE,eAAe,aAAa,IAC9B,CAAC;AAAA,cACP,CAAC;AAAA,YACH;AACA,yBAAa;AACb,kBAAM,4BAA4B,MAAM;AAAA,UAC1C;AAAA,QACF,UAAE;AACA,sBAAY,YAAY;AACxB,wBAAc;AAAA,QAChB;AACA,YAAI,CAAC,UAAU;AACb,wCAA8B;AAC9B,uBAAa;AACb,iBAAO;AAAA,YACL,KAAK,UAAU;AAAA,cACb,cAAc;AAAA,cACd,eAAe;AAAA,cACf,QAAQ;AAAA,cACR,aAAa;AAAA,YACf,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAEA,mBAAa,mBAAmB;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS,MAAM;AACb,cAAI,SAAU;AACd,cAAI,cAAc,yBAAyB;AACzC,mBAAO;AACP;AAAA,UACF;AACA;AAAA,YACE,IAAI;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,eAAe,OAAM,SAAQ;AA3iBrC;AA4iBU,gBAAM,SAAS,MAAM,cAAc,EAAE,KAAK,CAAC;AAC3C,cAAI,CAAC,OAAO,QAAS;AACrB,gBAAM,MAAM,OAAO;AAEnB,cAAI,kBAAkB;AACpB,uBAAW,QAAQ,EAAE,MAAM,OAAO,UAAU,IAAI,CAAC;AAAA,UACnD;AAEA,cACE,IAAI,gBAAgB,QACpB,6BAA6B,IAAI,IAAI,YAAY,GACjD;AACA,gBACE,eACC,sBAAsB,KAAK,yBAAyB,MACrD,qCAAqC,IAAI,IAAI,YAAY,GACzD;AACA,wCAA0B;AAC1B,qBAAO;AACP;AAAA,YACF;AACA;AAAA,cACE,IAAI,OAAM,SAAI,UAAJ,YAAa,yCAAyC;AAAA,YAClE;AACA;AAAA,UACF;AAEA,kBAAQ,IAAI,cAAc;AAAA,YACxB,KAAK,mBAAmB;AACtB,0BAAY,IAAI;AAChB,yBAAW,QAAQ,EAAE,MAAM,gBAAgB,SAAS,CAAC;AACrD,oBAAM,SAAS,yCAAY;AAC3B,kBAAI,UAAU,MAAM;AAClB,gCAAgB,IAAI,MAAM,6BAA6B,CAAC;AACxD;AAAA,cACF;AACA,mBAAK,UAAU,MAAM,EAAE,MAAM,eAAe;AAC5C;AAAA,YACF;AAAA,YACA,KAAK,sBAAsB;AACzB,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI,GAAG,gCAAa,SAAS,IAAI,YAAY;AAAA,gBAC7C,OAAM,SAAI,SAAJ,YAAY;AAAA,cACpB,CAAC;AACD;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL,KAAK,wBAAwB;AAC3B;AACA,oBAAMC,UAAQ,SAAI,SAAJ,YAAY,IAAI,KAAK;AACnC,oBAAM,KAAK,GAAG,gCAAa,SAAS,IAAI,YAAY;AAEpD,kBAAIA,MAAK,SAAS,GAAG;AACnB,2BAAW,KAAKA,KAAI;AACpB;AACA,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA,MAAAA;AAAA,gBACF,CAAC;AAAA,cACH;AAIA,kBACE,cACA,sBAAsB,6BACtB;AACA,0CAA0B;AAC1B,wCAAwB;AACxB,oBACE,CAAC,wBACD,IAAI,iBAAiB,oBACrB;AACA,iCAAe;AAAA,gBACjB;AAAA,cACF;AACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL,KAAK,wCAAwC;AAC3C,oBAAMA,UAAQ,SAAI,SAAJ,YAAY,IAAI,KAAK;AACnC,oBAAM,SAAQ,SAAI,UAAJ,YAAa,CAAC;AAC5B,oBAAM,mBAAmB,MAAM;AAAA,gBAC7B,CAAC,SACC,OAAO,KAAK,UAAU,YACtB,OAAO,KAAK,QAAQ;AAAA,cACxB;AACA,kCAAmB,SAAI,kBAAJ,YAAqB;AAIxC,kBACE,WAAW,sBAAsB,KAAK,QACtCA,MAAK,SAAS,GACd;AACA,sBAAM,KAAK,GAAG,gCAAa,SAAS,IAAI,cAAc;AACtD,2BAAW,KAAKA,KAAI;AACpB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA,MAAAA;AAAA,kBACA,GAAI,oBACA;AAAA,oBACE,cAAa,sBAAiB,CAAC,MAAlB,mBAAqB;AAAA,oBAClC,YAAW,sBAAiB,GAAG,EAAE,MAAtB,mBAAyB;AAAA,kBACtC,IACA,CAAC;AAAA,gBACP,CAAC;AAAA,cACH;AACA;AACA,kBAAI,mBAAmB;AACrB,8BAAc;AAAA,kBACZ,GAAG,iBAAiB,IAAI,UAAK;AA9pB/C,wBAAAF;AA8pBmD;AAAA,sBAC/B,OAAMA,MAAA,KAAK,SAAL,OAAAA,MAAa;AAAA,sBACnB,aAAa,KAAK;AAAA,sBAClB,WAAW,KAAK;AAAA,oBAClB;AAAA,mBAAE;AAAA,gBACJ;AAAA,cACF;AAEA,kBACE,cACA,yBAAyB,gCACxB,yBAAyB,QACxB,0BAA0B,wBAC5B;AACA,0CAA0B;AAC1B,+BAAe;AAAA,cACjB;AACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,mBAAmB;AAAA,QACnB,eAAe,MAAM;AACnB;AAAA,YACE,IAAI;AAAA,cACF,8CACG,aAAa,OACV,yPAKA;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,MAAM;AACZ,UAAI,SAAU;AACd,iBAAW;AACX,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AACH;AAEA,IAAM,wCAAwCG,GAAE,OAAO;AAAA,EACrD,eAAeA,GAAE,OAAO;AAAA,EACxB,sBAAsBA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,OAAO;AAAA,EACf,OAAOA,GACJ;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,OAAO;AAAA,MACf,MAAMA,GAAE,KAAK,CAAC,QAAQ,WAAW,aAAa,CAAC;AAAA,MAC/C,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAC1B,KAAKA,GAAE,OAAO,EAAE,QAAQ;AAAA,MACxB,YAAYA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAC/B,YAAYA,GACT;AAAA,QACCA,GAAE,OAAO;AAAA,UACP,MAAMA,GAAE,OAAO;AAAA,UACf,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,UAC1B,KAAKA,GAAE,OAAO,EAAE,QAAQ;AAAA,QAC1B,CAAC;AAAA,MACH,EACC,QAAQ;AAAA,IACb,CAAC;AAAA,EACH,EACC,QAAQ;AACb,CAAC;;;AGtuBD;AAAA,EACE,kBAAAC;AAAA,EACA;AAAA,EACA,wBAAAC;AAAA,EACA;AAAA,EACA,yBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,wBAAAC;AAAA,OACK;;;ACTP,SAAS,KAAAC,UAAS;AAGX,IAAM,qCAAqCA,GAAE,OAAO;AAAA,EACzD,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,GACZ,OAAO;AAAA,IACN,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC7C,iBAAiBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACnD,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACzC,iBAAiBA,GAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,CAAC,EACA,SAAS;AAAA,EACZ,iCAAiCA,GAC9B;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,2BAA2BA,GAAE,OAAO;AAAA,MACpC,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,IACjC,CAAC;AAAA,EACH,EACC,IAAI,CAAC,EACL,SAAS;AAAA,EACZ,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,UAAU,EAAE,SAAS;AAAA,EACjD,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,oBAAoBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxD,gBAAgBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpD,wBAAwBA,GAAE,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,EAAE,SAAS;AAAA,EAC/D,gCAAgCA,GAAE,QAAQ,EAAE,SAAS;AAAA,EACrD,eAAeA,GAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;;;ADLM,IAAM,wBAAN,MAAM,uBAA+C;AAAA,EAqB1D,YACW,SACQ,QACjB;AAFS;AACQ;AAtBnB,SAAS,uBAAuB;AAAA,EAuB7B;AAAA,EArBH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQC,mBAAkB,EAAE,OAA8B;AACxD,WAAOC,uBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQC,qBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,uBAAsB,QAAQ,SAAS,QAAQ,MAAM;AAAA,EAClE;AAAA,EAOA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA+C;AAC7C,UAAM,WAA8B,CAAC;AAGrC,UAAM,oBAAoB,MAAMC,sBAAqB;AAAA,MACnD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAGD,UAAM,cAAwC;AAAA,MAC5C;AAAA,MACA,UAAU,KAAK;AAAA,IACjB;AAGA,UAAM,cAAsC,CAAC;AAG7C,QAAI,cAAc;AAChB,YAAM,YAAoC;AAAA,QACxC,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,KAAK;AAAA,QACL,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,MAAM;AAAA,MACR;AAEA,YAAM,eAAe,UAAU,YAAY,KAAK;AAChD,kBAAY,gBAAgB;AAAA,IAC9B;AAGA,QAAI,UAAU;AACZ,kBAAY,gBAAgB;AAAA,IAC9B;AAEA,UAAM,gBAAmD,CAAC;AAE1D,QAAI,SAAS,MAAM;AACjB,oBAAc,QAAQ;AAAA,IACxB;AAGA,QAAI,mBAAmB;AACrB,UAAI,kBAAkB,eAAe;AAEnC,YAAI,kBAAkB,cAAc,aAAa,MAAM;AACrD,wBAAc,YAAY,kBAAkB,cAAc;AAAA,QAC5D;AACA,YAAI,kBAAkB,cAAc,mBAAmB,MAAM;AAC3D,wBAAc,mBACZ,kBAAkB,cAAc;AAAA,QACpC;AACA,YAAI,kBAAkB,cAAc,SAAS,MAAM;AACjD,wBAAc,QAAQ,kBAAkB,cAAc;AAAA,QACxD;AACA,YAAI,kBAAkB,cAAc,mBAAmB,MAAM;AAC3D,wBAAc,oBACZ,kBAAkB,cAAc;AAAA,QACpC;AAAA,MACF;AAEA,UAAI,kBAAkB,gBAAgB,CAAC,YAAY,eAAe;AAChE,oBAAY,gBAAgB,kBAAkB;AAAA,MAChD;AAGA,UAAI,kBAAkB,iCAAiC;AACrD,oBAAY,oCACV,kBAAkB,gCAAgC,IAAI,cAAY;AAAA,UAChE,6BAA6B,QAAQ;AAAA,UACrC,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,UAAU;AAAA,QAC3D,EAAE;AAAA,MACN;AAEA,UAAI,kBAAkB,QAAQ,MAAM;AAClC,oBAAY,OAAO,kBAAkB;AAAA,MACvC;AACA,UAAI,kBAAkB,cAAc;AAClC,oBAAY,gBAAgB,kBAAkB;AAAA,MAChD;AACA,UAAI,kBAAkB,UAAU;AAC9B,oBAAY,YAAY,kBAAkB;AAAA,MAC5C;AAGA,UAAI,kBAAkB,oBAAoB;AACxC,oBAAY,uBAAuB,kBAAkB;AAAA,MACvD;AACA,UAAI,kBAAkB,gBAAgB;AACpC,oBAAY,mBAAmB,kBAAkB;AAAA,MACnD;AAGA,UAAI,kBAAkB,wBAAwB;AAC5C,oBAAY,2BACV,kBAAkB;AAAA,MACtB;AACA,UAAI,kBAAkB,kCAAkC,MAAM;AAC5D,oBAAY,oCACV,kBAAkB;AAAA,MACtB;AAGA,UAAI,kBAAkB,iBAAiB,MAAM;AAC3C,oBAAY,iBAAiB,OAAO,kBAAkB,aAAa;AAAA,MACrE;AAAA,IACF;AAGA,QAAI,OAAO,KAAK,aAAa,EAAE,SAAS,GAAG;AACzC,kBAAY,iBAAiB;AAAA,IAC/B;AAEA,QAAI,cAAc;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC2D;AAxM/D;AAyMI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,aAAa,aAAa,UAAU,QAAQ,IAClD,MAAM,KAAK,QAAQ,OAAO;AAE5B,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,MAAM,cAAc;AAAA,MACtB,MAAM,MAAM;AACV,cAAM,UAAU,KAAK,OAAO,IAAI;AAAA,UAC9B,MAAM,sBAAsB,OAAO;AAAA,UACnC,SAAS,KAAK;AAAA,QAChB,CAAC;AACD,cAAM,cAAc,IAAI,gBAAgB,WAAW,EAAE,SAAS;AAC9D,eAAO,cAAc,GAAG,OAAO,IAAI,WAAW,KAAK;AAAA,MACrD,GAAG;AAAA,MACH,SAASC,iBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2B,4BAA4B;AAAA,MACvD,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS;AAAA,QACP,MAAM,KAAK,UAAU,WAAW;AAAA,MAClC;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;;;AE9OO,IAAM,UACX,OACI,WACA;;;ANgEC,SAAS,iBACd,UAAsC,CAAC,GACnB;AACpB,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,cAAc,WAAW;AAAA,QACvB,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC;AAAA,MACD,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,qBAAqB,OAAO;AAAA,EAC9B;AAEF,QAAM,2BAA2B,CAAC,YAChC,IAAI,6BAA6B,SAAS;AAAA,IACxC,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,4BAA4B,IAAI;AAAA,IACnD,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,WAAW,QAAQ;AAAA,EACrB,CAAC;AAEH,QAAM,oBAAoB,CAAC,YACzB,IAAI,sBAAsB,SAAS;AAAA,IACjC,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,4BAA4B,IAAI;AAAA,IACnD,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,SAAU,SAAyC;AAClE,WAAO;AAAA,MACL,eAAe,yBAAyB,OAAO;AAAA,IACjD;AAAA,EACF;AAEA,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAC9B,WAAS,SAAS;AAClB,WAAS,cAAc;AAEvB,WAAS,gBAAgB,CAAC,YAAoB;AAC5C,UAAM,IAAI,iBAAiB;AAAA,MACzB;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,iBAAiB;AAAA,MACzB;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,WAAS,qBAAqB,SAAS;AAEvC,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB;AAAA,MACzB;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAKO,IAAM,aAAa,iBAAiB;","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.48",
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.47"
33
+ "@ai-sdk/provider-utils": "5.0.49"
34
34
  },
35
35
  "devDependencies": {
36
- "@ai-sdk/test-server": "2.0.1",
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",