@ai-sdk/cartesia 3.0.45 → 3.0.47
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 +17 -0
- package/dist/index.d.ts +179 -169
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +876 -1025
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/src/cartesia-provider.ts +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cartesia-provider.ts","../src/cartesia-transcription-model.ts","../src/cartesia-error.ts","../src/cartesia-transcription-model-options.ts","../src/cartesia-speech-model.ts","../src/cartesia-speech-model-options.ts","../src/cartesia-realtime-model.ts","../src/version.ts"],"sourcesContent":["import {\n type Experimental_RealtimeFactoryV4 as RealtimeFactoryV4,\n type Experimental_RealtimeFactoryV4GetTokenOptions as RealtimeFactoryV4GetTokenOptions,\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 { CartesiaTranscriptionModel } from './cartesia-transcription-model';\nimport type { CartesiaTranscriptionModelId } from './cartesia-transcription-options';\nimport { CartesiaSpeechModel } from './cartesia-speech-model';\nimport type { CartesiaSpeechModelId } from './cartesia-speech-options';\nimport { CartesiaRealtimeModel } from './cartesia-realtime-model';\nimport type { CartesiaRealtimeModelId } from './cartesia-realtime-model-options';\nimport { VERSION } from './version';\n\n/**\n * The Cartesia API version sent with every request via the `Cartesia-Version`\n * header. See https://docs.cartesia.ai/api-reference/api-versioning\n */\nconst CARTESIA_API_VERSION = '2026-03-01';\n\nexport interface CartesiaProvider extends ProviderV4 {\n (\n modelId: CartesiaSpeechModelId,\n settings?: {},\n ): {\n speech: CartesiaSpeechModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: CartesiaTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for speech generation.\n */\n speech(modelId: CartesiaSpeechModelId): SpeechModelV4;\n\n /**\n * Creates a realtime Ink speech-to-text model.\n */\n experimental_realtime: RealtimeFactoryV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface CartesiaProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * The Cartesia API version to use (sent via the `Cartesia-Version` header).\n */\n version?: 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 for streaming transcription.\n */\n webSocket?: WebSocketConstructor;\n}\n\n/**\n * Create a Cartesia provider instance.\n */\nexport function createCartesia(\n options: CartesiaProviderSettings = {},\n): CartesiaProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'CARTESIA_API_KEY',\n description: 'Cartesia',\n })}`,\n 'Cartesia-Version': options.version ?? CARTESIA_API_VERSION,\n ...options.headers,\n },\n `ai-sdk/cartesia/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: CartesiaTranscriptionModelId) =>\n new CartesiaTranscriptionModel(modelId, {\n provider: `cartesia.transcription`,\n url: ({ path }) => `https://api.cartesia.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n version: options.version ?? CARTESIA_API_VERSION,\n webSocket: options.webSocket,\n });\n\n const createSpeechModel = (modelId: CartesiaSpeechModelId) =>\n new CartesiaSpeechModel(modelId, {\n provider: `cartesia.speech`,\n url: ({ path }) => `https://api.cartesia.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createRealtimeModel = (modelId: CartesiaRealtimeModelId) =>\n new CartesiaRealtimeModel(modelId, {\n provider: `cartesia.realtime`,\n baseURL: 'https://api.cartesia.ai',\n version: options.version ?? CARTESIA_API_VERSION,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const experimentalRealtimeFactory = Object.assign(\n (modelId: CartesiaRealtimeModelId) => createRealtimeModel(modelId),\n {\n getToken: async (tokenOptions: RealtimeFactoryV4GetTokenOptions) => {\n const secret = await createRealtimeModel(\n tokenOptions.model as CartesiaRealtimeModelId,\n ).doCreateClientSecret({\n sessionConfig: tokenOptions.sessionConfig,\n expiresAfterSeconds: tokenOptions.expiresAfterSeconds,\n });\n\n return {\n token: secret.token,\n url: secret.url,\n expiresAt: secret.expiresAt,\n };\n },\n },\n ) as RealtimeFactoryV4;\n\n const provider = function (modelId: CartesiaSpeechModelId) {\n return {\n speech: createSpeechModel(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 provider.experimental_realtime = experimentalRealtimeFactory;\n\n // Required ProviderV4 methods that are not supported\n provider.languageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'languageModel',\n message: 'Cartesia does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n message: 'Cartesia 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: 'Cartesia does not provide image models',\n });\n };\n\n return provider as CartesiaProvider;\n}\n\n/**\n * Default Cartesia provider instance.\n */\nexport const cartesia = createCartesia();\n","import {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type Experimental_TranscriptionModelV4StreamOptions as TranscriptionModelV4StreamOptions,\n type Experimental_TranscriptionModelV4StreamPart as TranscriptionModelV4StreamPart,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n connectToWebSocket,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\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 { CartesiaConfig } from './cartesia-config';\nimport { cartesiaFailedResponseHandler } from './cartesia-error';\nimport {\n cartesiaStreamingEncodingSchema,\n cartesiaTranscriptionModelOptionsSchema,\n type CartesiaTranscriptionModelOptions,\n} from './cartesia-transcription-model-options';\nimport type { CartesiaTranscriptionModelId } from './cartesia-transcription-options';\n\ninterface CartesiaTranscriptionModelConfig extends CartesiaConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\ntype CartesiaStreamingTranscriptionEvent = {\n type?: string;\n request_id?: string;\n transcript?: string;\n text?: string;\n is_final?: boolean;\n duration?: number;\n message?: string;\n error_code?: string;\n};\n\nexport class CartesiaTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: CartesiaTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CartesiaTranscriptionModelId;\n config: CartesiaTranscriptionModelConfig;\n }) {\n return new CartesiaTranscriptionModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: CartesiaTranscriptionModelId,\n private readonly config: CartesiaTranscriptionModelConfig,\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 cartesiaOptions = await parseProviderOptions({\n provider: 'cartesia',\n providerOptions,\n schema: cartesiaTranscriptionModelOptionsSchema,\n });\n\n if (cartesiaOptions?.streaming != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.streaming',\n details:\n 'Cartesia 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 const fileExtension = mediaTypeToExtension(mediaType);\n formData.append('model', this.modelId);\n formData.append(\n 'file',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\n\n // Add provider-specific options\n if (cartesiaOptions) {\n if (cartesiaOptions.language != null) {\n formData.set('language', cartesiaOptions.language);\n }\n if (cartesiaOptions.timestampGranularities != null) {\n for (const granularity of cartesiaOptions.timestampGranularities) {\n formData.append('timestamp_granularities[]', granularity);\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 (isStreamingTranscriptionModelId(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: '/stt',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n formData,\n failedResponseHandler: cartesiaFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cartesiaTranscriptionResponseSchema,\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.word,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: response.language ?? undefined,\n durationInSeconds: response.duration ?? 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 (!isStreamingTranscriptionModelId(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 warnings: SharedV4Warning[] = [];\n const cartesiaOptions = await parseProviderOptions({\n provider: 'cartesia',\n providerOptions: options.providerOptions,\n schema: cartesiaTranscriptionModelOptionsSchema,\n });\n\n if (\n cartesiaOptions?.language != null &&\n cartesiaOptions.language !== 'en'\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: 'Cartesia Ink 2 currently supports English only.',\n });\n }\n\n if (cartesiaOptions?.timestampGranularities != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.timestampGranularities',\n details:\n 'Cartesia streaming transcription does not support timestamp granularities.',\n });\n }\n\n // Always validate the declared media type — an explicit\n // `streaming.encoding` override must not bypass the allowlist.\n const inferredEncoding = cartesiaEncodingFromInputAudioFormat(\n options.inputAudioFormat.type,\n );\n const encoding = cartesiaOptions?.streaming?.encoding ?? inferredEncoding;\n // `audio/pcm` is generic linear PCM, so widening its default 16-bit\n // interpretation is the intended use of the option. Overriding a G.711\n // media type (or turning generic PCM into G.711) contradicts the declared\n // format; surface that instead of sending it silently.\n if (\n encoding !== inferredEncoding &&\n !(\n inferredEncoding === 'pcm_s16le' &&\n LINEAR_PCM_STREAMING_ENCODINGS.has(encoding)\n )\n ) {\n warnings.push({\n type: 'other',\n message: `providerOptions.cartesia.streaming.encoding '${encoding}' contradicts inputAudioFormat.type '${options.inputAudioFormat.type}' (inferred '${inferredEncoding}'); sending '${encoding}'.`,\n });\n }\n\n const token = await this.createStreamingAccessToken(options);\n const useTurnDetection =\n cartesiaOptions?.streaming?.turnDetection !== false;\n const url = buildCartesiaStreamingTranscriptionUrl({\n baseURL: this.config.url({ path: '/', modelId: this.modelId }),\n version: this.config.version ?? '2026-03-01',\n modelId: this.modelId,\n encoding,\n inputAudioFormat: options.inputAudioFormat,\n providerOptions: cartesiaOptions,\n token,\n useTurnDetection,\n });\n const requestUrl = new URL(url);\n requestUrl.searchParams.delete('access_token');\n\n return {\n request: { body: requestUrl.toString() },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n },\n stream: createCartesiaStreamingTranscriptionStream({\n webSocket: this.config.webSocket,\n url,\n warnings,\n language: cartesiaOptions?.language ?? 'en',\n useTurnDetection,\n audio: options.audio,\n abortSignal: options.abortSignal,\n includeRawChunks: options.includeRawChunks,\n }),\n };\n }\n\n private async createStreamingAccessToken(\n options: TranscriptionModelV4StreamOptions,\n ): Promise<string> {\n const { value } = await postJsonToApi({\n url: this.config.url({ path: '/access-token', modelId: this.modelId }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: { grants: { stt: true } },\n failedResponseHandler: cartesiaFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cartesiaAccessTokenResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return value.token;\n }\n}\n\nfunction createCartesiaStreamingTranscriptionStream({\n webSocket,\n url,\n warnings,\n language,\n useTurnDetection,\n audio,\n abortSignal,\n includeRawChunks,\n}: {\n webSocket: CartesiaConfig['webSocket'];\n url: URL;\n warnings: SharedV4Warning[];\n language: string;\n useTurnDetection: boolean;\n audio: ReadableStream<Uint8Array | string>;\n abortSignal: AbortSignal | undefined;\n includeRawChunks: boolean | undefined;\n}): ReadableStream<TranscriptionModelV4StreamPart> {\n let finished = false;\n let cleanup: (closeCode?: number) => void = () => {};\n\n return new ReadableStream({\n start: controller => {\n const finalTexts: string[] = [];\n let durationInSeconds = 0;\n let audioReader:\n | ReadableStreamDefaultReader<Uint8Array | string>\n | undefined;\n let connection: WebSocketConnection | undefined;\n\n cleanup = (closeCode?: number) => {\n if (audioReader != null) {\n void audioReader.cancel().catch(() => {});\n } else {\n // Pre-open failure or abort: cancel the caller's audio stream so an\n // upstream producer piping into it does not hang.\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(useTurnDetection ? ' ' : ''),\n segments: [],\n language,\n ...(durationInSeconds > 0 ? { durationInSeconds } : {}),\n });\n controller.close();\n cleanup(1000);\n };\n\n const sendAudio = async (socket: WebSocketLike) => {\n audioReader = audio.getReader();\n try {\n while (true) {\n const { done, value } = await audioReader.read();\n if (done || finished) break;\n socket.send(\n value instanceof Uint8Array\n ? value\n : convertBase64ToUint8Array(value),\n );\n await waitForWebSocketBufferDrain(socket);\n }\n } finally {\n audioReader.releaseLock();\n audioReader = undefined;\n }\n\n if (!finished) {\n socket.send(\n useTurnDetection ? JSON.stringify({ type: 'close' }) : 'finalize',\n );\n }\n };\n\n connection = connectToWebSocket({\n url,\n webSocket,\n abortSignal,\n onAbort: finishWithError,\n onProcessingError: finishWithError,\n onOpen: socket => {\n controller.enqueue({ type: 'stream-start', warnings });\n void sendAudio(socket).catch(finishWithError);\n },\n onMessageText: async text => {\n const parsed = await safeParseJSON({ text });\n if (!parsed.success) return;\n const raw = parsed.value as CartesiaStreamingTranscriptionEvent;\n\n if (includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: raw });\n }\n\n switch (raw.type) {\n case 'turn.update':\n case 'turn.eager_end': {\n controller.enqueue({\n type: 'transcript-partial',\n id: raw.request_id,\n text: raw.transcript ?? '',\n });\n break;\n }\n\n case 'turn.end': {\n const text = raw.transcript ?? '';\n finalTexts.push(text);\n controller.enqueue({\n type: 'transcript-final',\n id: raw.request_id,\n text,\n });\n break;\n }\n\n case 'transcript': {\n const transcript = raw.text ?? '';\n if (raw.is_final === true) {\n finalTexts.push(transcript);\n durationInSeconds += raw.duration ?? 0;\n controller.enqueue({\n type: 'transcript-final',\n id: raw.request_id,\n text: transcript,\n });\n } else {\n controller.enqueue({\n type: 'transcript-partial',\n id: raw.request_id,\n text: transcript,\n ...(raw.duration != null\n ? { durationInSeconds: raw.duration }\n : {}),\n });\n }\n break;\n }\n\n case 'flush_done': {\n connection?.socket?.send('close');\n break;\n }\n\n case 'done': {\n finish();\n break;\n }\n\n case 'error': {\n finishWithError(\n new Error(\n raw.message ??\n raw.error_code ??\n 'Cartesia streaming transcription error',\n ),\n );\n break;\n }\n }\n },\n onSocketError: () => {\n finishWithError(new Error('Cartesia streaming transcription error'));\n },\n onClose: () => {\n if (!finished) finish();\n },\n });\n },\n\n cancel: () => {\n if (finished) return;\n finished = true;\n cleanup();\n },\n });\n}\n\n/** G.711 companding laws — the only non-linear members of the encoding enum. */\nconst G711_STREAMING_ENCODINGS: ReadonlySet<string> = new Set([\n 'pcm_mulaw',\n 'pcm_alaw',\n]);\n\n/**\n * Linear PCM encodings that legitimately widen generic `audio/pcm` input.\n * Derived from the option enum so a future linear encoding added there is\n * treated as widening-compatible by default; G.711 is a closed set (the\n * standard defines exactly two companding laws), so it is the hardcoded half.\n */\nconst LINEAR_PCM_STREAMING_ENCODINGS: ReadonlySet<string> = new Set(\n cartesiaStreamingEncodingSchema.options.filter(\n encoding => !G711_STREAMING_ENCODINGS.has(encoding),\n ),\n);\n\nfunction buildCartesiaStreamingTranscriptionUrl({\n baseURL,\n version,\n modelId,\n encoding,\n inputAudioFormat,\n providerOptions,\n token,\n useTurnDetection,\n}: {\n baseURL: string;\n version: string;\n modelId: string;\n encoding: string;\n inputAudioFormat: TranscriptionModelV4StreamOptions['inputAudioFormat'];\n providerOptions: CartesiaTranscriptionModelOptions | undefined;\n token: string;\n useTurnDetection: boolean;\n}) {\n const url = toWebSocketUrl(\n new URL(\n useTurnDetection ? '/stt/turns/websocket' : '/stt/websocket',\n baseURL,\n ),\n );\n url.searchParams.set('model', modelId);\n url.searchParams.set('encoding', encoding);\n url.searchParams.set('sample_rate', String(inputAudioFormat.rate ?? 24000));\n url.searchParams.set('cartesia_version', version);\n url.searchParams.set('access_token', token);\n if (!useTurnDetection && providerOptions?.language != null) {\n url.searchParams.set('language', providerOptions.language);\n }\n return url;\n}\n\nfunction cartesiaEncodingFromInputAudioFormat(type: string): string {\n switch (type) {\n case 'audio/pcm':\n return 'pcm_s16le';\n case 'audio/pcmu':\n return 'pcm_mulaw';\n case 'audio/pcma':\n return 'pcm_alaw';\n default:\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message: `Unsupported Cartesia streaming audio format: ${type}`,\n });\n }\n}\n\nfunction isStreamingTranscriptionModelId(modelId: string): boolean {\n return modelId === 'ink-2' || modelId.startsWith('ink-2-');\n}\n\nconst cartesiaTranscriptionResponseSchema = z.object({\n text: z.string(),\n language: z.string().nullish(),\n duration: z.number().nullish(),\n words: z\n .array(\n z.object({\n word: z.string(),\n start: z.number(),\n end: z.number(),\n }),\n )\n .nullish(),\n});\n\nconst cartesiaAccessTokenResponseSchema = z.object({\n token: z.string().min(1),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const cartesiaErrorDataSchema = z.object({\n error_code: z.string().nullish(),\n title: z.string(),\n message: z.string(),\n request_id: z.string(),\n doc_url: z.string().optional(),\n});\n\nexport type CartesiaErrorData = z.infer<typeof cartesiaErrorDataSchema>;\n\nexport const cartesiaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: cartesiaErrorDataSchema,\n errorToMessage: data => `${data.title}: ${data.message}`,\n});\n","import { z } from 'zod/v4';\n\n/** Raw audio encodings accepted by Ink 2 streaming transcription. */\nexport const cartesiaStreamingEncodingSchema = z.enum([\n 'pcm_alaw',\n 'pcm_f16le',\n 'pcm_f32le',\n 'pcm_mulaw',\n 'pcm_s16le',\n 'pcm_s32le',\n]);\n\n// https://docs.cartesia.ai/api-reference/stt/transcribe\nexport const cartesiaTranscriptionModelOptionsSchema = z.object({\n /** The language of the audio (ISO 639-1 code). Defaults to English. */\n language: z.string().nullish(),\n /** The timestamp granularities to populate. Currently only `word` is supported. */\n timestampGranularities: z.array(z.enum(['word'])).nullish(),\n /** Options for realtime Ink 2 transcription over WebSocket. */\n streaming: z\n .object({\n /**\n * Raw audio encoding sent to Ink 2. Defaults to the encoding inferred\n * from `inputAudioFormat.type`.\n */\n encoding: cartesiaStreamingEncodingSchema.optional(),\n /**\n * Use Cartesia's native turn detection endpoint. Defaults to true.\n * Disable this to finalize the transcript only when the audio stream ends.\n */\n turnDetection: z.boolean().optional(),\n })\n .optional(),\n});\n\nexport type CartesiaTranscriptionModelOptions = z.infer<\n typeof cartesiaTranscriptionModelOptionsSchema\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 { CartesiaConfig } from './cartesia-config';\nimport { cartesiaFailedResponseHandler } from './cartesia-error';\nimport { cartesiaSpeechModelOptionsSchema } from './cartesia-speech-model-options';\nimport type {\n CartesiaSpeechAPITypes,\n CartesiaSpeechBitRate,\n CartesiaSpeechEncoding,\n CartesiaSpeechOutputFormat,\n CartesiaSpeechSampleRate,\n} from './cartesia-speech-api-types';\nimport type {\n CartesiaSpeechModelId,\n CartesiaSpeechVoiceId,\n} from './cartesia-speech-options';\n\ninterface CartesiaSpeechModelConfig extends CartesiaConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// Default output format used when no outputFormat / provider options are set.\nconst DEFAULT_OUTPUT_FORMAT: CartesiaSpeechAPITypes['output_format'] = {\n container: 'mp3',\n sample_rate: 44100,\n bit_rate: 128000,\n};\n\nconst OUTPUT_FORMATS: Record<string, CartesiaSpeechOutputFormat> = {\n alaw: { container: 'raw', encoding: 'pcm_alaw', sample_rate: 8000 },\n mp3: DEFAULT_OUTPUT_FORMAT,\n mulaw: { container: 'raw', encoding: 'pcm_mulaw', sample_rate: 8000 },\n pcm: { container: 'raw', encoding: 'pcm_f32le', sample_rate: 44100 },\n raw: { container: 'raw', encoding: 'pcm_f32le', sample_rate: 44100 },\n wav: { container: 'wav', encoding: 'pcm_s16le', sample_rate: 44100 },\n};\n\nconst SAMPLE_RATES = [8000, 16000, 22050, 24000, 44100, 48000] as const;\n\nfunction isSampleRate(value: number): value is CartesiaSpeechSampleRate {\n return SAMPLE_RATES.includes(value as CartesiaSpeechSampleRate);\n}\n\nfunction resolveOutputFormat({\n outputFormat,\n providerOptions,\n warnings,\n}: {\n outputFormat: string;\n providerOptions:\n | {\n container?: 'raw' | 'wav' | 'mp3' | null;\n encoding?: CartesiaSpeechEncoding | null;\n sampleRate?: CartesiaSpeechSampleRate | null;\n bitRate?: CartesiaSpeechBitRate | null;\n }\n | undefined;\n warnings: SharedV4Warning[];\n}): CartesiaSpeechOutputFormat {\n const [formatName, sampleRateText, ...extraParts] = outputFormat\n .toLowerCase()\n .split('_');\n const mapped = OUTPUT_FORMATS[formatName];\n let resolved = mapped ? { ...mapped } : { ...DEFAULT_OUTPUT_FORMAT };\n\n if (!mapped) {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unknown output format \"${outputFormat}\". Falling back to mp3. Use providerOptions.cartesia to configure container, encoding, and sampleRate directly.`,\n });\n } else if (sampleRateText != null) {\n const parsedRate = Number(sampleRateText);\n if (\n extraParts.length === 0 &&\n Number.isInteger(parsedRate) &&\n isSampleRate(parsedRate)\n ) {\n resolved.sample_rate = parsedRate;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported Cartesia sample rate in output format \"${outputFormat}\". Using ${resolved.sample_rate} Hz instead.`,\n });\n }\n }\n\n const container = providerOptions?.container ?? resolved.container;\n const sampleRate = providerOptions?.sampleRate ?? resolved.sample_rate;\n\n if (container === 'mp3') {\n if (providerOptions?.encoding != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.encoding',\n details:\n 'Cartesia MP3 output does not accept an encoding. The encoding option was ignored.',\n });\n }\n\n return {\n container,\n sample_rate: sampleRate,\n bit_rate:\n providerOptions?.bitRate ??\n (resolved.container === 'mp3' ? resolved.bit_rate : 128000),\n };\n }\n\n if (providerOptions?.bitRate != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.bitRate',\n details:\n 'Cartesia raw and WAV output do not accept a bit rate. The bitRate option was ignored.',\n });\n }\n\n return {\n container,\n encoding:\n providerOptions?.encoding ??\n (resolved.container === 'mp3'\n ? container === 'wav'\n ? 'pcm_s16le'\n : 'pcm_f32le'\n : resolved.encoding),\n sample_rate: sampleRate,\n };\n}\n\nexport class CartesiaSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: CartesiaSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CartesiaSpeechModelId;\n config: CartesiaSpeechModelConfig;\n }) {\n return new CartesiaSpeechModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: CartesiaSpeechModelId,\n private readonly config: CartesiaSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat = 'mp3',\n instructions,\n language,\n speed,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const cartesiaOptions = await parseProviderOptions({\n provider: 'cartesia',\n providerOptions,\n schema: cartesiaSpeechModelOptionsSchema,\n });\n\n if (!voice) {\n throw new Error('Cartesia speech models require a `voice` to be set.');\n }\n\n const outputFormatObject = resolveOutputFormat({\n outputFormat,\n providerOptions: cartesiaOptions,\n warnings,\n });\n\n // Create request body\n const requestBody: CartesiaSpeechAPITypes = {\n model_id: this.modelId,\n transcript: text,\n voice: {\n mode: 'id',\n id: voice as CartesiaSpeechVoiceId,\n },\n output_format: outputFormatObject,\n };\n\n // Map generic language\n if (language) {\n requestBody.language = language;\n }\n\n // Provider-specific options override the corresponding generic options.\n if (cartesiaOptions) {\n if (cartesiaOptions.language != null) {\n requestBody.language = cartesiaOptions.language;\n }\n }\n\n const resolvedSpeed = cartesiaOptions?.speed ?? speed;\n if (resolvedSpeed != null) {\n if (resolvedSpeed >= 0.6 && resolvedSpeed <= 1.5) {\n requestBody.generation_config = { speed: resolvedSpeed };\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'speed',\n details:\n 'Cartesia speed must be between 0.6 and 1.5. The speed option was ignored.',\n });\n }\n }\n\n if (instructions) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details: `Cartesia speech models do not support instructions. Instructions parameter was ignored.`,\n });\n }\n\n return {\n requestBody,\n warnings,\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, warnings } = await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/tts/bytes',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: requestBody,\n failedResponseHandler: cartesiaFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from 'zod/v4';\n\n// https://docs.cartesia.ai/api-reference/tts/bytes\nexport const cartesiaSpeechModelOptionsSchema = z.object({\n /** Container format for the output audio (raw, wav, mp3). */\n container: z.enum(['raw', 'wav', 'mp3']).nullish(),\n /** Encoding type for the audio output (pcm_f32le, pcm_s16le, pcm_mulaw, pcm_alaw). */\n encoding: z\n .enum(['pcm_f32le', 'pcm_s16le', 'pcm_mulaw', 'pcm_alaw'])\n .nullish(),\n /** Sample rate for the output audio in Hz (e.g. 8000, 16000, 22050, 24000, 44100, 48000). */\n sampleRate: z\n .union([\n z.literal(8000),\n z.literal(16000),\n z.literal(22050),\n z.literal(24000),\n z.literal(44100),\n z.literal(48000),\n ])\n .nullish(),\n /** Bitrate for mp3 output in bits per second (e.g. 32000, 64000, 128000, 192000). */\n bitRate: z\n .union([\n z.literal(32000),\n z.literal(64000),\n z.literal(96000),\n z.literal(128000),\n z.literal(192000),\n ])\n .nullish(),\n /** Controls the speed of the generated speech. */\n speed: z.number().min(0.6).max(1.5).nullish(),\n /** The language to generate speech in (ISO 639-1 code). */\n language: z.string().nullish(),\n});\n\nexport type CartesiaSpeechModelOptions = z.infer<\n typeof cartesiaSpeechModelOptionsSchema\n>;\n","import type {\n Experimental_RealtimeModelV4 as RealtimeModelV4,\n Experimental_RealtimeModelV4ClientEvent as RealtimeModelV4ClientEvent,\n Experimental_RealtimeModelV4ClientSecretOptions as RealtimeModelV4ClientSecretOptions,\n Experimental_RealtimeModelV4ClientSecretResult as RealtimeModelV4ClientSecretResult,\n Experimental_RealtimeModelV4ServerEvent as RealtimeModelV4ServerEvent,\n Experimental_RealtimeModelV4SessionConfig as RealtimeModelV4SessionConfig,\n} from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport type { CartesiaRealtimeModelId } from './cartesia-realtime-model-options';\n\nexport type CartesiaRealtimeModelConfig = {\n provider: string;\n baseURL: string;\n version: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n};\n\ntype CartesiaRealtimeWireEvent = {\n type: string;\n request_id?: string;\n transcript?: string;\n text?: string;\n is_final?: boolean;\n duration?: number;\n message?: string;\n error_code?: string;\n};\n\ntype ManualTranscriptState = {\n duration: number;\n events: CartesiaRealtimeWireEvent[];\n text: string;\n};\n\n/**\n * Realtime Ink model using Cartesia's STT WebSocket APIs.\n */\nexport class CartesiaRealtimeModel implements RealtimeModelV4 {\n readonly specificationVersion = 'v4' as const;\n readonly provider: string;\n readonly modelId: CartesiaRealtimeModelId;\n\n private readonly config: CartesiaRealtimeModelConfig;\n private manualTranscript: ManualTranscriptState = {\n duration: 0,\n events: [],\n text: '',\n };\n private sessionCreated = false;\n private useTurnDetection = true;\n\n constructor(\n modelId: CartesiaRealtimeModelId,\n config: CartesiaRealtimeModelConfig,\n ) {\n this.modelId = modelId;\n this.provider = config.provider;\n this.config = config;\n }\n\n async doCreateClientSecret(\n options: RealtimeModelV4ClientSecretOptions,\n ): Promise<RealtimeModelV4ClientSecretResult> {\n const expiresIn = options.expiresAfterSeconds;\n if (\n expiresIn != null &&\n (!Number.isInteger(expiresIn) || expiresIn <= 0 || expiresIn > 3600)\n ) {\n throw new Error(\n 'Cartesia realtime client secrets must expire between 1 and 3600 seconds.',\n );\n }\n\n const sessionConfig = options.sessionConfig;\n const language = sessionConfig?.inputAudioTranscription?.language;\n if (language != null && language !== 'en') {\n throw new Error('Cartesia Ink 2 currently supports English only.');\n }\n\n const fetchFn = this.config.fetch ?? fetch;\n const response = await fetchFn(`${this.config.baseURL}/access-token`, {\n method: 'POST',\n headers: {\n ...this.config.headers(),\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n grants: { stt: true },\n ...(expiresIn != null ? { expires_in: expiresIn } : {}),\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\n `Cartesia realtime client secret request failed: ${response.status} ${text}`,\n );\n }\n\n const data = (await response.json()) as { token?: unknown };\n if (typeof data.token !== 'string' || data.token.length === 0) {\n throw new Error(\n 'Cartesia realtime client secret response did not include a token.',\n );\n }\n\n const turnDetection = sessionConfig?.turnDetection;\n const useTurnDetection =\n turnDetection === undefined ||\n (turnDetection !== null && turnDetection.type !== 'disabled');\n const inputAudioFormat = sessionConfig?.inputAudioFormat;\n const url = new URL(\n useTurnDetection\n ? `${this.config.baseURL}/stt/turns/websocket`\n : `${this.config.baseURL}/stt/websocket`,\n );\n url.protocol = url.protocol === 'http:' ? 'ws:' : 'wss:';\n url.searchParams.set('model', this.modelId);\n url.searchParams.set(\n 'encoding',\n resolveCartesiaEncoding(inputAudioFormat?.type),\n );\n url.searchParams.set(\n 'sample_rate',\n String(inputAudioFormat?.rate ?? 24000),\n );\n url.searchParams.set('cartesia_version', this.config.version);\n if (!useTurnDetection && language != null) {\n url.searchParams.set('language', language);\n }\n\n return {\n token: data.token,\n url: url.toString(),\n ...(expiresIn != null\n ? {\n expiresAt:\n Math.floor(\n (\n this.config._internal?.currentDate?.() ?? new Date()\n ).getTime() / 1000,\n ) + expiresIn,\n }\n : {}),\n };\n }\n\n getWebSocketConfig(options: { token: string; url: string }): {\n url: string;\n } {\n const url = new URL(options.url);\n this.useTurnDetection = url.pathname.includes('/stt/turns/websocket');\n url.searchParams.set('access_token', options.token);\n return { url: url.toString() };\n }\n\n parseServerEvent(\n raw: unknown,\n ): RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[] {\n const event = raw as CartesiaRealtimeWireEvent;\n const requestId = event.request_id ?? 'cartesia-realtime';\n let mapped: RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[];\n\n switch (event.type) {\n case 'connected':\n this.sessionCreated = true;\n return {\n type: 'session-created',\n sessionId: event.request_id,\n raw,\n };\n\n case 'turn.start':\n mapped = { type: 'speech-started', itemId: requestId, raw };\n break;\n\n case 'turn.resume':\n mapped = [\n { type: 'speech-started', itemId: requestId, raw },\n { type: 'custom', rawType: event.type, raw },\n ];\n break;\n\n case 'turn.end':\n mapped = [\n { type: 'speech-stopped', itemId: requestId, raw },\n {\n type: 'input-transcription-completed',\n itemId: requestId,\n transcript: event.transcript ?? '',\n raw,\n },\n ];\n break;\n\n case 'transcript':\n if (event.is_final === true) {\n this.manualTranscript.text += event.text ?? '';\n this.manualTranscript.duration += event.duration ?? 0;\n this.manualTranscript.events.push(event);\n }\n mapped = { type: 'custom', rawType: event.type, raw };\n break;\n\n case 'flush_done':\n mapped = this.finishManualTranscript(event, raw);\n break;\n\n case 'done': {\n if (this.manualTranscript.text.length > 0) {\n const completed = this.finishManualTranscript(event, raw);\n mapped = Array.isArray(completed)\n ? [...completed, { type: 'custom', rawType: event.type, raw }]\n : [completed, { type: 'custom', rawType: event.type, raw }];\n } else {\n mapped = { type: 'custom', rawType: event.type, raw };\n }\n break;\n }\n\n case 'error':\n mapped = {\n type: 'error',\n message: event.message ?? 'Unknown Cartesia realtime error',\n code: event.error_code,\n raw,\n };\n break;\n\n default:\n mapped = { type: 'custom', rawType: event.type, raw };\n break;\n }\n\n return this.withSessionCreated(mapped, requestId, raw);\n }\n\n serializeClientEvent(event: RealtimeModelV4ClientEvent): unknown {\n switch (event.type) {\n case 'session-update':\n case 'input-audio-clear':\n case 'response-create':\n return null;\n case 'input-audio-append':\n return convertBase64ToUint8Array(event.audio);\n case 'input-audio-commit':\n return this.useTurnDetection ? null : 'finalize';\n default:\n throw new Error(\n `Cartesia Ink 2 does not support realtime client event \"${event.type}\".`,\n );\n }\n }\n\n buildSessionConfig(_config: RealtimeModelV4SessionConfig): null {\n return null;\n }\n\n private finishManualTranscript(\n event: CartesiaRealtimeWireEvent,\n raw: unknown,\n ): RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[] {\n const state = this.manualTranscript;\n this.manualTranscript = { duration: 0, events: [], text: '' };\n if (state.text.length === 0) {\n return { type: 'custom', rawType: event.type, raw };\n }\n\n return [\n {\n type: 'audio-committed',\n itemId: event.request_id,\n raw,\n },\n {\n type: 'input-transcription-completed',\n itemId: event.request_id ?? 'cartesia-realtime',\n transcript: state.text,\n raw: {\n event,\n transcriptEvents: state.events,\n duration: state.duration,\n },\n },\n ];\n }\n\n private withSessionCreated(\n event: RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[],\n sessionId: string,\n raw: unknown,\n ): RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[] {\n if (this.sessionCreated) {\n return event;\n }\n this.sessionCreated = true;\n const created: RealtimeModelV4ServerEvent = {\n type: 'session-created',\n sessionId,\n raw,\n };\n return Array.isArray(event) ? [created, ...event] : [created, event];\n }\n}\n\nfunction resolveCartesiaEncoding(type: string | undefined): string {\n switch (type) {\n case undefined:\n case 'audio/pcm':\n return 'pcm_s16le';\n case 'audio/pcmu':\n return 'pcm_mulaw';\n case 'audio/pcma':\n return 'pcm_alaw';\n default:\n throw new Error(`Unsupported Cartesia realtime audio format: ${type}`);\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"],"mappings":"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","names":["z","z","text","z","combineHeaders","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","postJsonToApi","combineHeaders","convertBase64ToUint8Array"]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/cartesia-error.ts","../src/cartesia-transcription-model-options.ts","../src/cartesia-transcription-model.ts","../src/cartesia-speech-model-options.ts","../src/cartesia-speech-model.ts","../src/cartesia-realtime-model.ts","../src/version.ts","../src/cartesia-provider.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const cartesiaErrorDataSchema = z.object({\n error_code: z.string().nullish(),\n title: z.string(),\n message: z.string(),\n request_id: z.string(),\n doc_url: z.string().optional(),\n});\n\nexport type CartesiaErrorData = z.infer<typeof cartesiaErrorDataSchema>;\n\nexport const cartesiaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: cartesiaErrorDataSchema,\n errorToMessage: data => `${data.title}: ${data.message}`,\n});\n","import { z } from 'zod/v4';\n\n/** Raw audio encodings accepted by Ink 2 streaming transcription. */\nexport const cartesiaStreamingEncodingSchema = z.enum([\n 'pcm_alaw',\n 'pcm_f16le',\n 'pcm_f32le',\n 'pcm_mulaw',\n 'pcm_s16le',\n 'pcm_s32le',\n]);\n\n// https://docs.cartesia.ai/api-reference/stt/transcribe\nexport const cartesiaTranscriptionModelOptionsSchema = z.object({\n /** The language of the audio (ISO 639-1 code). Defaults to English. */\n language: z.string().nullish(),\n /** The timestamp granularities to populate. Currently only `word` is supported. */\n timestampGranularities: z.array(z.enum(['word'])).nullish(),\n /** Options for realtime Ink 2 transcription over WebSocket. */\n streaming: z\n .object({\n /**\n * Raw audio encoding sent to Ink 2. Defaults to the encoding inferred\n * from `inputAudioFormat.type`.\n */\n encoding: cartesiaStreamingEncodingSchema.optional(),\n /**\n * Use Cartesia's native turn detection endpoint. Defaults to true.\n * Disable this to finalize the transcript only when the audio stream ends.\n */\n turnDetection: z.boolean().optional(),\n })\n .optional(),\n});\n\nexport type CartesiaTranscriptionModelOptions = z.infer<\n typeof cartesiaTranscriptionModelOptionsSchema\n>;\n","import {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type Experimental_TranscriptionModelV4StreamOptions as TranscriptionModelV4StreamOptions,\n type Experimental_TranscriptionModelV4StreamPart as TranscriptionModelV4StreamPart,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n connectToWebSocket,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\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 { CartesiaConfig } from './cartesia-config';\nimport { cartesiaFailedResponseHandler } from './cartesia-error';\nimport {\n cartesiaStreamingEncodingSchema,\n cartesiaTranscriptionModelOptionsSchema,\n type CartesiaTranscriptionModelOptions,\n} from './cartesia-transcription-model-options';\nimport type { CartesiaTranscriptionModelId } from './cartesia-transcription-options';\n\ninterface CartesiaTranscriptionModelConfig extends CartesiaConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\ntype CartesiaStreamingTranscriptionEvent = {\n type?: string;\n request_id?: string;\n transcript?: string;\n text?: string;\n is_final?: boolean;\n duration?: number;\n message?: string;\n error_code?: string;\n};\n\nexport class CartesiaTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: CartesiaTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CartesiaTranscriptionModelId;\n config: CartesiaTranscriptionModelConfig;\n }) {\n return new CartesiaTranscriptionModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: CartesiaTranscriptionModelId,\n private readonly config: CartesiaTranscriptionModelConfig,\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 cartesiaOptions = await parseProviderOptions({\n provider: 'cartesia',\n providerOptions,\n schema: cartesiaTranscriptionModelOptionsSchema,\n });\n\n if (cartesiaOptions?.streaming != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.streaming',\n details:\n 'Cartesia 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 const fileExtension = mediaTypeToExtension(mediaType);\n formData.append('model', this.modelId);\n formData.append(\n 'file',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\n\n // Add provider-specific options\n if (cartesiaOptions) {\n if (cartesiaOptions.language != null) {\n formData.set('language', cartesiaOptions.language);\n }\n if (cartesiaOptions.timestampGranularities != null) {\n for (const granularity of cartesiaOptions.timestampGranularities) {\n formData.append('timestamp_granularities[]', granularity);\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 (isStreamingTranscriptionModelId(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: '/stt',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n formData,\n failedResponseHandler: cartesiaFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cartesiaTranscriptionResponseSchema,\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.word,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: response.language ?? undefined,\n durationInSeconds: response.duration ?? 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 (!isStreamingTranscriptionModelId(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 warnings: SharedV4Warning[] = [];\n const cartesiaOptions = await parseProviderOptions({\n provider: 'cartesia',\n providerOptions: options.providerOptions,\n schema: cartesiaTranscriptionModelOptionsSchema,\n });\n\n if (\n cartesiaOptions?.language != null &&\n cartesiaOptions.language !== 'en'\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: 'Cartesia Ink 2 currently supports English only.',\n });\n }\n\n if (cartesiaOptions?.timestampGranularities != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.timestampGranularities',\n details:\n 'Cartesia streaming transcription does not support timestamp granularities.',\n });\n }\n\n // Always validate the declared media type — an explicit\n // `streaming.encoding` override must not bypass the allowlist.\n const inferredEncoding = cartesiaEncodingFromInputAudioFormat(\n options.inputAudioFormat.type,\n );\n const encoding = cartesiaOptions?.streaming?.encoding ?? inferredEncoding;\n // `audio/pcm` is generic linear PCM, so widening its default 16-bit\n // interpretation is the intended use of the option. Overriding a G.711\n // media type (or turning generic PCM into G.711) contradicts the declared\n // format; surface that instead of sending it silently.\n if (\n encoding !== inferredEncoding &&\n !(\n inferredEncoding === 'pcm_s16le' &&\n LINEAR_PCM_STREAMING_ENCODINGS.has(encoding)\n )\n ) {\n warnings.push({\n type: 'other',\n message: `providerOptions.cartesia.streaming.encoding '${encoding}' contradicts inputAudioFormat.type '${options.inputAudioFormat.type}' (inferred '${inferredEncoding}'); sending '${encoding}'.`,\n });\n }\n\n const token = await this.createStreamingAccessToken(options);\n const useTurnDetection =\n cartesiaOptions?.streaming?.turnDetection !== false;\n const url = buildCartesiaStreamingTranscriptionUrl({\n baseURL: this.config.url({ path: '/', modelId: this.modelId }),\n version: this.config.version ?? '2026-03-01',\n modelId: this.modelId,\n encoding,\n inputAudioFormat: options.inputAudioFormat,\n providerOptions: cartesiaOptions,\n token,\n useTurnDetection,\n });\n const requestUrl = new URL(url);\n requestUrl.searchParams.delete('access_token');\n\n return {\n request: { body: requestUrl.toString() },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n },\n stream: createCartesiaStreamingTranscriptionStream({\n webSocket: this.config.webSocket,\n url,\n warnings,\n language: cartesiaOptions?.language ?? 'en',\n useTurnDetection,\n audio: options.audio,\n abortSignal: options.abortSignal,\n includeRawChunks: options.includeRawChunks,\n }),\n };\n }\n\n private async createStreamingAccessToken(\n options: TranscriptionModelV4StreamOptions,\n ): Promise<string> {\n const { value } = await postJsonToApi({\n url: this.config.url({ path: '/access-token', modelId: this.modelId }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: { grants: { stt: true } },\n failedResponseHandler: cartesiaFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cartesiaAccessTokenResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return value.token;\n }\n}\n\nfunction createCartesiaStreamingTranscriptionStream({\n webSocket,\n url,\n warnings,\n language,\n useTurnDetection,\n audio,\n abortSignal,\n includeRawChunks,\n}: {\n webSocket: CartesiaConfig['webSocket'];\n url: URL;\n warnings: SharedV4Warning[];\n language: string;\n useTurnDetection: boolean;\n audio: ReadableStream<Uint8Array | string>;\n abortSignal: AbortSignal | undefined;\n includeRawChunks: boolean | undefined;\n}): ReadableStream<TranscriptionModelV4StreamPart> {\n let finished = false;\n let cleanup: (closeCode?: number) => void = () => {};\n\n return new ReadableStream({\n start: controller => {\n const finalTexts: string[] = [];\n let durationInSeconds = 0;\n let audioReader:\n | ReadableStreamDefaultReader<Uint8Array | string>\n | undefined;\n let connection: WebSocketConnection | undefined;\n\n cleanup = (closeCode?: number) => {\n if (audioReader != null) {\n void audioReader.cancel().catch(() => {});\n } else {\n // Pre-open failure or abort: cancel the caller's audio stream so an\n // upstream producer piping into it does not hang.\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(useTurnDetection ? ' ' : ''),\n segments: [],\n language,\n ...(durationInSeconds > 0 ? { durationInSeconds } : {}),\n });\n controller.close();\n cleanup(1000);\n };\n\n const sendAudio = async (socket: WebSocketLike) => {\n audioReader = audio.getReader();\n try {\n while (true) {\n const { done, value } = await audioReader.read();\n if (done || finished) break;\n socket.send(\n value instanceof Uint8Array\n ? value\n : convertBase64ToUint8Array(value),\n );\n await waitForWebSocketBufferDrain(socket);\n }\n } finally {\n audioReader.releaseLock();\n audioReader = undefined;\n }\n\n if (!finished) {\n socket.send(\n useTurnDetection ? JSON.stringify({ type: 'close' }) : 'finalize',\n );\n }\n };\n\n connection = connectToWebSocket({\n url,\n webSocket,\n abortSignal,\n onAbort: finishWithError,\n onProcessingError: finishWithError,\n onOpen: socket => {\n controller.enqueue({ type: 'stream-start', warnings });\n void sendAudio(socket).catch(finishWithError);\n },\n onMessageText: async text => {\n const parsed = await safeParseJSON({ text });\n if (!parsed.success) return;\n const raw = parsed.value as CartesiaStreamingTranscriptionEvent;\n\n if (includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: raw });\n }\n\n switch (raw.type) {\n case 'turn.update':\n case 'turn.eager_end': {\n controller.enqueue({\n type: 'transcript-partial',\n id: raw.request_id,\n text: raw.transcript ?? '',\n });\n break;\n }\n\n case 'turn.end': {\n const text = raw.transcript ?? '';\n finalTexts.push(text);\n controller.enqueue({\n type: 'transcript-final',\n id: raw.request_id,\n text,\n });\n break;\n }\n\n case 'transcript': {\n const transcript = raw.text ?? '';\n if (raw.is_final === true) {\n finalTexts.push(transcript);\n durationInSeconds += raw.duration ?? 0;\n controller.enqueue({\n type: 'transcript-final',\n id: raw.request_id,\n text: transcript,\n });\n } else {\n controller.enqueue({\n type: 'transcript-partial',\n id: raw.request_id,\n text: transcript,\n ...(raw.duration != null\n ? { durationInSeconds: raw.duration }\n : {}),\n });\n }\n break;\n }\n\n case 'flush_done': {\n connection?.socket?.send('close');\n break;\n }\n\n case 'done': {\n finish();\n break;\n }\n\n case 'error': {\n finishWithError(\n new Error(\n raw.message ??\n raw.error_code ??\n 'Cartesia streaming transcription error',\n ),\n );\n break;\n }\n }\n },\n onSocketError: () => {\n finishWithError(new Error('Cartesia streaming transcription error'));\n },\n onClose: () => {\n if (!finished) finish();\n },\n });\n },\n\n cancel: () => {\n if (finished) return;\n finished = true;\n cleanup();\n },\n });\n}\n\n/** G.711 companding laws — the only non-linear members of the encoding enum. */\nconst G711_STREAMING_ENCODINGS: ReadonlySet<string> = new Set([\n 'pcm_mulaw',\n 'pcm_alaw',\n]);\n\n/**\n * Linear PCM encodings that legitimately widen generic `audio/pcm` input.\n * Derived from the option enum so a future linear encoding added there is\n * treated as widening-compatible by default; G.711 is a closed set (the\n * standard defines exactly two companding laws), so it is the hardcoded half.\n */\nconst LINEAR_PCM_STREAMING_ENCODINGS: ReadonlySet<string> = new Set(\n cartesiaStreamingEncodingSchema.options.filter(\n encoding => !G711_STREAMING_ENCODINGS.has(encoding),\n ),\n);\n\nfunction buildCartesiaStreamingTranscriptionUrl({\n baseURL,\n version,\n modelId,\n encoding,\n inputAudioFormat,\n providerOptions,\n token,\n useTurnDetection,\n}: {\n baseURL: string;\n version: string;\n modelId: string;\n encoding: string;\n inputAudioFormat: TranscriptionModelV4StreamOptions['inputAudioFormat'];\n providerOptions: CartesiaTranscriptionModelOptions | undefined;\n token: string;\n useTurnDetection: boolean;\n}) {\n const url = toWebSocketUrl(\n new URL(\n useTurnDetection ? '/stt/turns/websocket' : '/stt/websocket',\n baseURL,\n ),\n );\n url.searchParams.set('model', modelId);\n url.searchParams.set('encoding', encoding);\n url.searchParams.set('sample_rate', String(inputAudioFormat.rate ?? 24000));\n url.searchParams.set('cartesia_version', version);\n url.searchParams.set('access_token', token);\n if (!useTurnDetection && providerOptions?.language != null) {\n url.searchParams.set('language', providerOptions.language);\n }\n return url;\n}\n\nfunction cartesiaEncodingFromInputAudioFormat(type: string): string {\n switch (type) {\n case 'audio/pcm':\n return 'pcm_s16le';\n case 'audio/pcmu':\n return 'pcm_mulaw';\n case 'audio/pcma':\n return 'pcm_alaw';\n default:\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message: `Unsupported Cartesia streaming audio format: ${type}`,\n });\n }\n}\n\nfunction isStreamingTranscriptionModelId(modelId: string): boolean {\n return modelId === 'ink-2' || modelId.startsWith('ink-2-');\n}\n\nconst cartesiaTranscriptionResponseSchema = z.object({\n text: z.string(),\n language: z.string().nullish(),\n duration: z.number().nullish(),\n words: z\n .array(\n z.object({\n word: z.string(),\n start: z.number(),\n end: z.number(),\n }),\n )\n .nullish(),\n});\n\nconst cartesiaAccessTokenResponseSchema = z.object({\n token: z.string().min(1),\n});\n","import { z } from 'zod/v4';\n\n// https://docs.cartesia.ai/api-reference/tts/bytes\nexport const cartesiaSpeechModelOptionsSchema = z.object({\n /** Container format for the output audio (raw, wav, mp3). */\n container: z.enum(['raw', 'wav', 'mp3']).nullish(),\n /** Encoding type for the audio output (pcm_f32le, pcm_s16le, pcm_mulaw, pcm_alaw). */\n encoding: z\n .enum(['pcm_f32le', 'pcm_s16le', 'pcm_mulaw', 'pcm_alaw'])\n .nullish(),\n /** Sample rate for the output audio in Hz (e.g. 8000, 16000, 22050, 24000, 44100, 48000). */\n sampleRate: z\n .union([\n z.literal(8000),\n z.literal(16000),\n z.literal(22050),\n z.literal(24000),\n z.literal(44100),\n z.literal(48000),\n ])\n .nullish(),\n /** Bitrate for mp3 output in bits per second (e.g. 32000, 64000, 128000, 192000). */\n bitRate: z\n .union([\n z.literal(32000),\n z.literal(64000),\n z.literal(96000),\n z.literal(128000),\n z.literal(192000),\n ])\n .nullish(),\n /** Controls the speed of the generated speech. */\n speed: z.number().min(0.6).max(1.5).nullish(),\n /** The language to generate speech in (ISO 639-1 code). */\n language: z.string().nullish(),\n});\n\nexport type CartesiaSpeechModelOptions = z.infer<\n typeof cartesiaSpeechModelOptionsSchema\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 { CartesiaConfig } from './cartesia-config';\nimport { cartesiaFailedResponseHandler } from './cartesia-error';\nimport { cartesiaSpeechModelOptionsSchema } from './cartesia-speech-model-options';\nimport type {\n CartesiaSpeechAPITypes,\n CartesiaSpeechBitRate,\n CartesiaSpeechEncoding,\n CartesiaSpeechOutputFormat,\n CartesiaSpeechSampleRate,\n} from './cartesia-speech-api-types';\nimport type {\n CartesiaSpeechModelId,\n CartesiaSpeechVoiceId,\n} from './cartesia-speech-options';\n\ninterface CartesiaSpeechModelConfig extends CartesiaConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// Default output format used when no outputFormat / provider options are set.\nconst DEFAULT_OUTPUT_FORMAT: CartesiaSpeechAPITypes['output_format'] = {\n container: 'mp3',\n sample_rate: 44100,\n bit_rate: 128000,\n};\n\nconst OUTPUT_FORMATS: Record<string, CartesiaSpeechOutputFormat> = {\n alaw: { container: 'raw', encoding: 'pcm_alaw', sample_rate: 8000 },\n mp3: DEFAULT_OUTPUT_FORMAT,\n mulaw: { container: 'raw', encoding: 'pcm_mulaw', sample_rate: 8000 },\n pcm: { container: 'raw', encoding: 'pcm_f32le', sample_rate: 44100 },\n raw: { container: 'raw', encoding: 'pcm_f32le', sample_rate: 44100 },\n wav: { container: 'wav', encoding: 'pcm_s16le', sample_rate: 44100 },\n};\n\nconst SAMPLE_RATES = [8000, 16000, 22050, 24000, 44100, 48000] as const;\n\nfunction isSampleRate(value: number): value is CartesiaSpeechSampleRate {\n return SAMPLE_RATES.includes(value as CartesiaSpeechSampleRate);\n}\n\nfunction resolveOutputFormat({\n outputFormat,\n providerOptions,\n warnings,\n}: {\n outputFormat: string;\n providerOptions:\n | {\n container?: 'raw' | 'wav' | 'mp3' | null;\n encoding?: CartesiaSpeechEncoding | null;\n sampleRate?: CartesiaSpeechSampleRate | null;\n bitRate?: CartesiaSpeechBitRate | null;\n }\n | undefined;\n warnings: SharedV4Warning[];\n}): CartesiaSpeechOutputFormat {\n const [formatName, sampleRateText, ...extraParts] = outputFormat\n .toLowerCase()\n .split('_');\n const mapped = OUTPUT_FORMATS[formatName];\n let resolved = mapped ? { ...mapped } : { ...DEFAULT_OUTPUT_FORMAT };\n\n if (!mapped) {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unknown output format \"${outputFormat}\". Falling back to mp3. Use providerOptions.cartesia to configure container, encoding, and sampleRate directly.`,\n });\n } else if (sampleRateText != null) {\n const parsedRate = Number(sampleRateText);\n if (\n extraParts.length === 0 &&\n Number.isInteger(parsedRate) &&\n isSampleRate(parsedRate)\n ) {\n resolved.sample_rate = parsedRate;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported Cartesia sample rate in output format \"${outputFormat}\". Using ${resolved.sample_rate} Hz instead.`,\n });\n }\n }\n\n const container = providerOptions?.container ?? resolved.container;\n const sampleRate = providerOptions?.sampleRate ?? resolved.sample_rate;\n\n if (container === 'mp3') {\n if (providerOptions?.encoding != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.encoding',\n details:\n 'Cartesia MP3 output does not accept an encoding. The encoding option was ignored.',\n });\n }\n\n return {\n container,\n sample_rate: sampleRate,\n bit_rate:\n providerOptions?.bitRate ??\n (resolved.container === 'mp3' ? resolved.bit_rate : 128000),\n };\n }\n\n if (providerOptions?.bitRate != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.cartesia.bitRate',\n details:\n 'Cartesia raw and WAV output do not accept a bit rate. The bitRate option was ignored.',\n });\n }\n\n return {\n container,\n encoding:\n providerOptions?.encoding ??\n (resolved.container === 'mp3'\n ? container === 'wav'\n ? 'pcm_s16le'\n : 'pcm_f32le'\n : resolved.encoding),\n sample_rate: sampleRate,\n };\n}\n\nexport class CartesiaSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: CartesiaSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CartesiaSpeechModelId;\n config: CartesiaSpeechModelConfig;\n }) {\n return new CartesiaSpeechModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: CartesiaSpeechModelId,\n private readonly config: CartesiaSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat = 'mp3',\n instructions,\n language,\n speed,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const cartesiaOptions = await parseProviderOptions({\n provider: 'cartesia',\n providerOptions,\n schema: cartesiaSpeechModelOptionsSchema,\n });\n\n if (!voice) {\n throw new Error('Cartesia speech models require a `voice` to be set.');\n }\n\n const outputFormatObject = resolveOutputFormat({\n outputFormat,\n providerOptions: cartesiaOptions,\n warnings,\n });\n\n // Create request body\n const requestBody: CartesiaSpeechAPITypes = {\n model_id: this.modelId,\n transcript: text,\n voice: {\n mode: 'id',\n id: voice as CartesiaSpeechVoiceId,\n },\n output_format: outputFormatObject,\n };\n\n // Map generic language\n if (language) {\n requestBody.language = language;\n }\n\n // Provider-specific options override the corresponding generic options.\n if (cartesiaOptions) {\n if (cartesiaOptions.language != null) {\n requestBody.language = cartesiaOptions.language;\n }\n }\n\n const resolvedSpeed = cartesiaOptions?.speed ?? speed;\n if (resolvedSpeed != null) {\n if (resolvedSpeed >= 0.6 && resolvedSpeed <= 1.5) {\n requestBody.generation_config = { speed: resolvedSpeed };\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'speed',\n details:\n 'Cartesia speed must be between 0.6 and 1.5. The speed option was ignored.',\n });\n }\n }\n\n if (instructions) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details: `Cartesia speech models do not support instructions. Instructions parameter was ignored.`,\n });\n }\n\n return {\n requestBody,\n warnings,\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, warnings } = await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/tts/bytes',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: requestBody,\n failedResponseHandler: cartesiaFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import type {\n Experimental_RealtimeModelV4 as RealtimeModelV4,\n Experimental_RealtimeModelV4ClientEvent as RealtimeModelV4ClientEvent,\n Experimental_RealtimeModelV4ClientSecretOptions as RealtimeModelV4ClientSecretOptions,\n Experimental_RealtimeModelV4ClientSecretResult as RealtimeModelV4ClientSecretResult,\n Experimental_RealtimeModelV4ServerEvent as RealtimeModelV4ServerEvent,\n Experimental_RealtimeModelV4SessionConfig as RealtimeModelV4SessionConfig,\n} from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport type { CartesiaRealtimeModelId } from './cartesia-realtime-model-options';\n\nexport type CartesiaRealtimeModelConfig = {\n provider: string;\n baseURL: string;\n version: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n};\n\ntype CartesiaRealtimeWireEvent = {\n type: string;\n request_id?: string;\n transcript?: string;\n text?: string;\n is_final?: boolean;\n duration?: number;\n message?: string;\n error_code?: string;\n};\n\ntype ManualTranscriptState = {\n duration: number;\n events: CartesiaRealtimeWireEvent[];\n text: string;\n};\n\n/**\n * Realtime Ink model using Cartesia's STT WebSocket APIs.\n */\nexport class CartesiaRealtimeModel implements RealtimeModelV4 {\n readonly specificationVersion = 'v4' as const;\n readonly provider: string;\n readonly modelId: CartesiaRealtimeModelId;\n\n private readonly config: CartesiaRealtimeModelConfig;\n private manualTranscript: ManualTranscriptState = {\n duration: 0,\n events: [],\n text: '',\n };\n private sessionCreated = false;\n private useTurnDetection = true;\n\n constructor(\n modelId: CartesiaRealtimeModelId,\n config: CartesiaRealtimeModelConfig,\n ) {\n this.modelId = modelId;\n this.provider = config.provider;\n this.config = config;\n }\n\n async doCreateClientSecret(\n options: RealtimeModelV4ClientSecretOptions,\n ): Promise<RealtimeModelV4ClientSecretResult> {\n const expiresIn = options.expiresAfterSeconds;\n if (\n expiresIn != null &&\n (!Number.isInteger(expiresIn) || expiresIn <= 0 || expiresIn > 3600)\n ) {\n throw new Error(\n 'Cartesia realtime client secrets must expire between 1 and 3600 seconds.',\n );\n }\n\n const sessionConfig = options.sessionConfig;\n const language = sessionConfig?.inputAudioTranscription?.language;\n if (language != null && language !== 'en') {\n throw new Error('Cartesia Ink 2 currently supports English only.');\n }\n\n const fetchFn = this.config.fetch ?? fetch;\n const response = await fetchFn(`${this.config.baseURL}/access-token`, {\n method: 'POST',\n headers: {\n ...this.config.headers(),\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n grants: { stt: true },\n ...(expiresIn != null ? { expires_in: expiresIn } : {}),\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\n `Cartesia realtime client secret request failed: ${response.status} ${text}`,\n );\n }\n\n const data = (await response.json()) as { token?: unknown };\n if (typeof data.token !== 'string' || data.token.length === 0) {\n throw new Error(\n 'Cartesia realtime client secret response did not include a token.',\n );\n }\n\n const turnDetection = sessionConfig?.turnDetection;\n const useTurnDetection =\n turnDetection === undefined ||\n (turnDetection !== null && turnDetection.type !== 'disabled');\n const inputAudioFormat = sessionConfig?.inputAudioFormat;\n const url = new URL(\n useTurnDetection\n ? `${this.config.baseURL}/stt/turns/websocket`\n : `${this.config.baseURL}/stt/websocket`,\n );\n url.protocol = url.protocol === 'http:' ? 'ws:' : 'wss:';\n url.searchParams.set('model', this.modelId);\n url.searchParams.set(\n 'encoding',\n resolveCartesiaEncoding(inputAudioFormat?.type),\n );\n url.searchParams.set(\n 'sample_rate',\n String(inputAudioFormat?.rate ?? 24000),\n );\n url.searchParams.set('cartesia_version', this.config.version);\n if (!useTurnDetection && language != null) {\n url.searchParams.set('language', language);\n }\n\n return {\n token: data.token,\n url: url.toString(),\n ...(expiresIn != null\n ? {\n expiresAt:\n Math.floor(\n (\n this.config._internal?.currentDate?.() ?? new Date()\n ).getTime() / 1000,\n ) + expiresIn,\n }\n : {}),\n };\n }\n\n getWebSocketConfig(options: { token: string; url: string }): {\n url: string;\n } {\n const url = new URL(options.url);\n this.useTurnDetection = url.pathname.includes('/stt/turns/websocket');\n url.searchParams.set('access_token', options.token);\n return { url: url.toString() };\n }\n\n parseServerEvent(\n raw: unknown,\n ): RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[] {\n const event = raw as CartesiaRealtimeWireEvent;\n const requestId = event.request_id ?? 'cartesia-realtime';\n let mapped: RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[];\n\n switch (event.type) {\n case 'connected':\n this.sessionCreated = true;\n return {\n type: 'session-created',\n sessionId: event.request_id,\n raw,\n };\n\n case 'turn.start':\n mapped = { type: 'speech-started', itemId: requestId, raw };\n break;\n\n case 'turn.resume':\n mapped = [\n { type: 'speech-started', itemId: requestId, raw },\n { type: 'custom', rawType: event.type, raw },\n ];\n break;\n\n case 'turn.end':\n mapped = [\n { type: 'speech-stopped', itemId: requestId, raw },\n {\n type: 'input-transcription-completed',\n itemId: requestId,\n transcript: event.transcript ?? '',\n raw,\n },\n ];\n break;\n\n case 'transcript':\n if (event.is_final === true) {\n this.manualTranscript.text += event.text ?? '';\n this.manualTranscript.duration += event.duration ?? 0;\n this.manualTranscript.events.push(event);\n }\n mapped = { type: 'custom', rawType: event.type, raw };\n break;\n\n case 'flush_done':\n mapped = this.finishManualTranscript(event, raw);\n break;\n\n case 'done': {\n if (this.manualTranscript.text.length > 0) {\n const completed = this.finishManualTranscript(event, raw);\n mapped = Array.isArray(completed)\n ? [...completed, { type: 'custom', rawType: event.type, raw }]\n : [completed, { type: 'custom', rawType: event.type, raw }];\n } else {\n mapped = { type: 'custom', rawType: event.type, raw };\n }\n break;\n }\n\n case 'error':\n mapped = {\n type: 'error',\n message: event.message ?? 'Unknown Cartesia realtime error',\n code: event.error_code,\n raw,\n };\n break;\n\n default:\n mapped = { type: 'custom', rawType: event.type, raw };\n break;\n }\n\n return this.withSessionCreated(mapped, requestId, raw);\n }\n\n serializeClientEvent(event: RealtimeModelV4ClientEvent): unknown {\n switch (event.type) {\n case 'session-update':\n case 'input-audio-clear':\n case 'response-create':\n return null;\n case 'input-audio-append':\n return convertBase64ToUint8Array(event.audio);\n case 'input-audio-commit':\n return this.useTurnDetection ? null : 'finalize';\n default:\n throw new Error(\n `Cartesia Ink 2 does not support realtime client event \"${event.type}\".`,\n );\n }\n }\n\n buildSessionConfig(_config: RealtimeModelV4SessionConfig): null {\n return null;\n }\n\n private finishManualTranscript(\n event: CartesiaRealtimeWireEvent,\n raw: unknown,\n ): RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[] {\n const state = this.manualTranscript;\n this.manualTranscript = { duration: 0, events: [], text: '' };\n if (state.text.length === 0) {\n return { type: 'custom', rawType: event.type, raw };\n }\n\n return [\n {\n type: 'audio-committed',\n itemId: event.request_id,\n raw,\n },\n {\n type: 'input-transcription-completed',\n itemId: event.request_id ?? 'cartesia-realtime',\n transcript: state.text,\n raw: {\n event,\n transcriptEvents: state.events,\n duration: state.duration,\n },\n },\n ];\n }\n\n private withSessionCreated(\n event: RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[],\n sessionId: string,\n raw: unknown,\n ): RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[] {\n if (this.sessionCreated) {\n return event;\n }\n this.sessionCreated = true;\n const created: RealtimeModelV4ServerEvent = {\n type: 'session-created',\n sessionId,\n raw,\n };\n return Array.isArray(event) ? [created, ...event] : [created, event];\n }\n}\n\nfunction resolveCartesiaEncoding(type: string | undefined): string {\n switch (type) {\n case undefined:\n case 'audio/pcm':\n return 'pcm_s16le';\n case 'audio/pcmu':\n return 'pcm_mulaw';\n case 'audio/pcma':\n return 'pcm_alaw';\n default:\n throw new Error(`Unsupported Cartesia realtime audio format: ${type}`);\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 type Experimental_RealtimeFactoryV4 as RealtimeFactoryV4,\n type Experimental_RealtimeFactoryV4GetTokenOptions as RealtimeFactoryV4GetTokenOptions,\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 { CartesiaTranscriptionModel } from './cartesia-transcription-model';\nimport type { CartesiaTranscriptionModelId } from './cartesia-transcription-options';\nimport { CartesiaSpeechModel } from './cartesia-speech-model';\nimport type { CartesiaSpeechModelId } from './cartesia-speech-options';\nimport { CartesiaRealtimeModel } from './cartesia-realtime-model';\nimport type { CartesiaRealtimeModelId } from './cartesia-realtime-model-options';\nimport { VERSION } from './version';\n\n/**\n * The Cartesia API version sent with every request via the `Cartesia-Version`\n * header. See https://docs.cartesia.ai/api-reference/api-versioning\n */\nconst CARTESIA_API_VERSION = '2026-03-01';\n\nexport interface CartesiaProvider extends ProviderV4 {\n (\n modelId: CartesiaSpeechModelId,\n settings?: {},\n ): {\n speech: CartesiaSpeechModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: CartesiaTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for speech generation.\n */\n speech(modelId: CartesiaSpeechModelId): SpeechModelV4;\n\n /**\n * Creates a realtime Ink speech-to-text model.\n */\n experimental_realtime: RealtimeFactoryV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface CartesiaProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * The Cartesia API version to use (sent via the `Cartesia-Version` header).\n */\n version?: 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 for streaming transcription.\n */\n webSocket?: WebSocketConstructor;\n}\n\n/**\n * Create a Cartesia provider instance.\n */\nexport function createCartesia(\n options: CartesiaProviderSettings = {},\n): CartesiaProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'CARTESIA_API_KEY',\n description: 'Cartesia',\n })}`,\n 'Cartesia-Version': options.version ?? CARTESIA_API_VERSION,\n ...options.headers,\n },\n `ai-sdk-cartesia/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: CartesiaTranscriptionModelId) =>\n new CartesiaTranscriptionModel(modelId, {\n provider: `cartesia.transcription`,\n url: ({ path }) => `https://api.cartesia.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n version: options.version ?? CARTESIA_API_VERSION,\n webSocket: options.webSocket,\n });\n\n const createSpeechModel = (modelId: CartesiaSpeechModelId) =>\n new CartesiaSpeechModel(modelId, {\n provider: `cartesia.speech`,\n url: ({ path }) => `https://api.cartesia.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createRealtimeModel = (modelId: CartesiaRealtimeModelId) =>\n new CartesiaRealtimeModel(modelId, {\n provider: `cartesia.realtime`,\n baseURL: 'https://api.cartesia.ai',\n version: options.version ?? CARTESIA_API_VERSION,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const experimentalRealtimeFactory = Object.assign(\n (modelId: CartesiaRealtimeModelId) => createRealtimeModel(modelId),\n {\n getToken: async (tokenOptions: RealtimeFactoryV4GetTokenOptions) => {\n const secret = await createRealtimeModel(\n tokenOptions.model as CartesiaRealtimeModelId,\n ).doCreateClientSecret({\n sessionConfig: tokenOptions.sessionConfig,\n expiresAfterSeconds: tokenOptions.expiresAfterSeconds,\n });\n\n return {\n token: secret.token,\n url: secret.url,\n expiresAt: secret.expiresAt,\n };\n },\n },\n ) as RealtimeFactoryV4;\n\n const provider = function (modelId: CartesiaSpeechModelId) {\n return {\n speech: createSpeechModel(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 provider.experimental_realtime = experimentalRealtimeFactory;\n\n // Required ProviderV4 methods that are not supported\n provider.languageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'languageModel',\n message: 'Cartesia does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n message: 'Cartesia 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: 'Cartesia does not provide image models',\n });\n };\n\n return provider as CartesiaProvider;\n}\n\n/**\n * Default Cartesia provider instance.\n */\nexport const cartesia = createCartesia();\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/cartesia",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.47",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -29,14 +29,14 @@
|
|
|
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.20",
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.52"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@ai-sdk/test-server": "2.0.
|
|
36
|
+
"@ai-sdk/test-server": "2.0.3",
|
|
37
37
|
"@types/node": "22.19.19",
|
|
38
38
|
"@vercel/ai-tsconfig": "0.0.0",
|
|
39
|
-
"
|
|
39
|
+
"tsdown": "^0.23.0",
|
|
40
40
|
"typescript": "5.6.3",
|
|
41
41
|
"zod": "3.25.76"
|
|
42
42
|
},
|
|
@@ -63,9 +63,9 @@
|
|
|
63
63
|
"ai"
|
|
64
64
|
],
|
|
65
65
|
"scripts": {
|
|
66
|
-
"build": "
|
|
67
|
-
"build:watch": "
|
|
68
|
-
"clean": "del-cli
|
|
66
|
+
"build": "tsdown",
|
|
67
|
+
"build:watch": "tsdown --watch",
|
|
68
|
+
"clean": "del-cli docs",
|
|
69
69
|
"type-check": "tsc --noEmit",
|
|
70
70
|
"test": "pnpm test:node && pnpm test:edge",
|
|
71
71
|
"test:update": "pnpm test:node -u",
|
package/src/cartesia-provider.ts
CHANGED
|
@@ -100,7 +100,7 @@ export function createCartesia(
|
|
|
100
100
|
'Cartesia-Version': options.version ?? CARTESIA_API_VERSION,
|
|
101
101
|
...options.headers,
|
|
102
102
|
},
|
|
103
|
-
`ai-sdk
|
|
103
|
+
`ai-sdk-cartesia/${VERSION}`,
|
|
104
104
|
);
|
|
105
105
|
|
|
106
106
|
const createTranscriptionModel = (modelId: CartesiaTranscriptionModelId) =>
|