@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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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(
|
|
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",
|
|
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.
|
|
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.
|
|
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.
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
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(
|
|
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',
|
|
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
|
|