@ai-sdk/elevenlabs 3.0.54 → 3.0.55

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,16 @@
1
1
  # @ai-sdk/elevenlabs
2
2
 
3
+ ## 3.0.55
4
+
5
+ ### Patch Changes
6
+
7
+ - 615c491: fix(elevenlabs): preserve default diarization when provider options are supplied
8
+ - 4c19228: fix(elevenlabs): preserve transcription word metadata
9
+ - Updated dependencies [2959d35]
10
+ - Updated dependencies [59116e6]
11
+ - @ai-sdk/provider@4.0.22
12
+ - @ai-sdk/provider-utils@5.0.54
13
+
3
14
  ## 3.0.54
4
15
 
5
16
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["TranscriptionModelV4StreamOptions"],"sources":["../src/elevenlabs-config.ts","../src/elevenlabs-transcription-options.ts","../src/elevenlabs-transcription-model.ts","../src/elevenlabs-speech-options.ts","../src/elevenlabs-provider.ts","../src/elevenlabs-speech-model-options.ts","../src/elevenlabs-transcription-model-options.ts","../src/version.ts"],"mappings":";;;;KAKY;EACV;EACA,MAAM;IAAW;IAAiB;;EAClC,gBAAgB;EAChB,QAAQ;EACR;EACA,YAAY;;;;KCXF;;;UC6EF,2CAA2C;EACnD;IACE,oBAAoB;;;cAIX,wCAAwC;WAsBxC,SAAS;mBACD;WAtBV;MAEL;UAII,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B,SAAS;IACT,QAAQ;MACT;EAKU,YAAA,SAAS,gCACD,QAAQ;UAGb;EAuER,WACJ,SAAS,WAAW,yCACnB,QAAQ,QAAQ,WAAW;EAiDxB,SACJ,SAASA,iDACR,QACD,QAAQ,WAAW,YAAY;;;;KC1OvB;KAWA;;;UCOK,2BAA2B;GAExC,SAAS,gCACT;IAEA,eAAe;;;;;EAMjB,cAAc,SAAS,iCAAiC;;;;EAKxD,OAAO,SAAS,0BAA0B;;;;EAK1C,mBAAmB;;UAGJ;;;;EAIf;;;;EAKA,UAAU;;;;;EAMV,QAAQ;;;;;EAMR,YAAY;;;;;wBAME,iBACd,UAAS,6BACR;;;;qBA0EU,YAAU;;;cC9IV,oCAAkC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;GA2B7C,EAAA,KAAA;KAEU,+BAA+B,EAAE,aACpC;;;cC9BI,2CAAyC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BpD,EAAA,KAAA;KAEU,sCAAsC,EAAE,aAC3C;;;qBC/BI"}
1
+ {"version":3,"file":"index.d.ts","names":["TranscriptionModelV4StreamOptions"],"sources":["../src/elevenlabs-config.ts","../src/elevenlabs-transcription-options.ts","../src/elevenlabs-transcription-model.ts","../src/elevenlabs-speech-options.ts","../src/elevenlabs-provider.ts","../src/elevenlabs-speech-model-options.ts","../src/elevenlabs-transcription-model-options.ts","../src/version.ts"],"mappings":";;;;KAKY;EACV;EACA,MAAM;IAAW;IAAiB;;EAClC,gBAAgB;EAChB,QAAQ;EACR;EACA,YAAY;;;;KCXF;;;UC6EF,2CAA2C;EACnD;IACE,oBAAoB;;;cAIX,wCAAwC;WAsBxC,SAAS;mBACD;WAtBV;MAEL;UAII,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B,SAAS;IACT,QAAQ;MACT;EAKU,YAAA,SAAS,gCACD,QAAQ;UAGb;EAmER,WACJ,SAAS,WAAW,yCACnB,QAAQ,QAAQ,WAAW;EAwDxB,SACJ,SAASA,iDACR,QACD,QAAQ,WAAW,YAAY;;;;KC7OvB;KAWA;;;UCOK,2BAA2B;GAExC,SAAS,gCACT;IAEA,eAAe;;;;;EAMjB,cAAc,SAAS,iCAAiC;;;;EAKxD,OAAO,SAAS,0BAA0B;;;;EAK1C,mBAAmB;;UAGJ;;;;EAIf;;;;EAKA,UAAU;;;;;EAMV,QAAQ;;;;;EAMR,YAAY;;;;;wBAME,iBACd,UAAS,6BACR;;;;qBA0EU,YAAU;;;cC9IV,oCAAkC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;GA2B7C,EAAA,KAAA;KAEU,+BAA+B,EAAE,aACpC;;;cC9BI,2CAAyC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BpD,EAAA,KAAA;KAEU,sCAAsC,EAAE,aAC3C;;;qBC/BI"}
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ const elevenLabsTranscriptionModelOptionsSchema = z.object({
21
21
  "word",
22
22
  "character"
23
23
  ]).nullish().default("word"),
24
- diarize: z.boolean().nullish().default(false),
24
+ diarize: z.boolean().nullish().default(true),
25
25
  fileFormat: z.enum(["pcm_s16le_16", "other"]).nullish().default("other"),
26
26
  streaming: z.object({
27
27
  commitStrategy: z.enum(["manual", "vad"]).nullish(),
@@ -100,7 +100,7 @@ var ElevenLabsTranscriptionModel = class ElevenLabsTranscriptionModel {
100
100
  formData.append("model_id", this.modelId);
101
101
  const fileExtension = mediaTypeToExtension(mediaType);
102
102
  formData.append("file", new File([blob], "audio", { type: mediaType }), `audio.${fileExtension}`);
103
- formData.append("diarize", "true");
103
+ formData.append("diarize", String(elevenlabsOptions?.diarize ?? true));
104
104
  if (elevenlabsOptions) {
105
105
  const transcriptionModelOptions = {
106
106
  language_code: elevenlabsOptions.languageCode ?? void 0,
@@ -109,7 +109,6 @@ var ElevenLabsTranscriptionModel = class ElevenLabsTranscriptionModel {
109
109
  timestamps_granularity: elevenlabsOptions.timestampsGranularity ?? void 0,
110
110
  file_format: elevenlabsOptions.fileFormat ?? void 0
111
111
  };
112
- if (typeof elevenlabsOptions.diarize === "boolean") formData.append("diarize", String(elevenlabsOptions.diarize));
113
112
  for (const key in transcriptionModelOptions) {
114
113
  const value = transcriptionModelOptions[key];
115
114
  if (value !== void 0) formData.append(key, String(value));
@@ -151,7 +150,8 @@ var ElevenLabsTranscriptionModel = class ElevenLabsTranscriptionModel {
151
150
  modelId: this.modelId,
152
151
  headers: responseHeaders,
153
152
  body: rawResponse
154
- }
153
+ },
154
+ ...response.words != null && { providerMetadata: { elevenlabs: { words: response.words } } }
155
155
  };
156
156
  }
157
157
  async doStream(options) {
@@ -633,7 +633,7 @@ var ElevenLabsSpeechModel = class ElevenLabsSpeechModel {
633
633
  };
634
634
  //#endregion
635
635
  //#region src/version.ts
636
- const VERSION = "3.0.54";
636
+ const VERSION = "3.0.55";
637
637
  //#endregion
638
638
  //#region src/elevenlabs-provider.ts
639
639
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/elevenlabs-error.ts","../src/elevenlabs-transcription-model-options.ts","../src/elevenlabs-transcription-model.ts","../src/elevenlabs-speech-model-options.ts","../src/elevenlabs-speech-model.ts","../src/version.ts","../src/elevenlabs-provider.ts"],"sourcesContent":["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 {\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';\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","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","// 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","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"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/elevenlabs-error.ts","../src/elevenlabs-transcription-model-options.ts","../src/elevenlabs-transcription-model.ts","../src/elevenlabs-speech-model-options.ts","../src/elevenlabs-speech-model.ts","../src/version.ts","../src/elevenlabs-provider.ts"],"sourcesContent":["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(true),\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 {\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', String(elevenlabsOptions?.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 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 ...(response.words != null && {\n providerMetadata: {\n elevenlabs: {\n words: response.words,\n },\n },\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';\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","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","// 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","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"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/elevenlabs",
3
- "version": "3.0.54",
3
+ "version": "3.0.55",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -29,8 +29,8 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@ai-sdk/provider": "4.0.21",
33
- "@ai-sdk/provider-utils": "5.0.53"
32
+ "@ai-sdk/provider": "4.0.22",
33
+ "@ai-sdk/provider-utils": "5.0.54"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@ai-sdk/test-server": "2.0.3",
@@ -9,7 +9,7 @@ export const elevenLabsTranscriptionModelOptionsSchema = z.object({
9
9
  .enum(['none', 'word', 'character'])
10
10
  .nullish()
11
11
  .default('word'),
12
- diarize: z.boolean().nullish().default(false),
12
+ diarize: z.boolean().nullish().default(true),
13
13
  fileFormat: z.enum(['pcm_s16le_16', 'other']).nullish().default('other'),
14
14
  streaming: z
15
15
  .object({
@@ -144,7 +144,7 @@ export class ElevenLabsTranscriptionModel implements TranscriptionModelV4 {
144
144
  new File([blob], 'audio', { type: mediaType }),
145
145
  `audio.${fileExtension}`,
146
146
  );
147
- formData.append('diarize', 'true');
147
+ formData.append('diarize', String(elevenlabsOptions?.diarize ?? true));
148
148
 
149
149
  // Add provider-specific options
150
150
  if (elevenlabsOptions) {
@@ -157,10 +157,6 @@ export class ElevenLabsTranscriptionModel implements TranscriptionModelV4 {
157
157
  file_format: elevenlabsOptions.fileFormat ?? undefined,
158
158
  };
159
159
 
160
- if (typeof elevenlabsOptions.diarize === 'boolean') {
161
- formData.append('diarize', String(elevenlabsOptions.diarize));
162
- }
163
-
164
160
  for (const key in transcriptionModelOptions) {
165
161
  const value =
166
162
  transcriptionModelOptions[
@@ -226,6 +222,13 @@ export class ElevenLabsTranscriptionModel implements TranscriptionModelV4 {
226
222
  headers: responseHeaders,
227
223
  body: rawResponse,
228
224
  },
225
+ ...(response.words != null && {
226
+ providerMetadata: {
227
+ elevenlabs: {
228
+ words: response.words,
229
+ },
230
+ },
231
+ }),
229
232
  };
230
233
  }
231
234