@ai-sdk/cartesia 3.0.42 → 3.0.45

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,29 @@
1
1
  # @ai-sdk/cartesia
2
2
 
3
+ ## 3.0.45
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [e3605f6]
8
+ - Updated dependencies [525efc5]
9
+ - @ai-sdk/provider-utils@5.0.50
10
+ - @ai-sdk/provider@4.0.19
11
+
12
+ ## 3.0.44
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [af9597b]
17
+ - Updated dependencies [bc49f78]
18
+ - @ai-sdk/provider-utils@5.0.49
19
+
20
+ ## 3.0.43
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [be877ff]
25
+ - @ai-sdk/provider-utils@5.0.48
26
+
3
27
  ## 3.0.42
4
28
 
5
29
  ### Patch Changes
package/dist/index.js CHANGED
@@ -105,7 +105,7 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
105
105
  providerOptions,
106
106
  schema: cartesiaTranscriptionModelOptionsSchema
107
107
  });
108
- if ((cartesiaOptions == null ? void 0 : cartesiaOptions.streaming) != null) {
108
+ if (cartesiaOptions?.streaming != null) {
109
109
  warnings.push({
110
110
  type: "unsupported",
111
111
  feature: "providerOptions.cartesia.streaming",
@@ -137,13 +137,12 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
137
137
  };
138
138
  }
139
139
  async doGenerate(options) {
140
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
141
140
  if (isStreamingTranscriptionModelId(this.modelId)) {
142
141
  throw new UnsupportedFunctionalityError({
143
142
  functionality: `non-streaming transcription with ${this.modelId}`
144
143
  });
145
144
  }
146
- const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
145
+ const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
147
146
  const { formData, warnings } = await this.getArgs(options);
148
147
  const {
149
148
  value: response,
@@ -154,7 +153,7 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
154
153
  path: "/stt",
155
154
  modelId: this.modelId
156
155
  }),
157
- headers: combineHeaders((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
156
+ headers: combineHeaders(this.config.headers?.(), options.headers),
158
157
  formData,
159
158
  failedResponseHandler: cartesiaFailedResponseHandler,
160
159
  successfulResponseHandler: createJsonResponseHandler(
@@ -165,13 +164,13 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
165
164
  });
166
165
  return {
167
166
  text: response.text,
168
- segments: (_g = (_f = response.words) == null ? void 0 : _f.map((word) => ({
167
+ segments: response.words?.map((word) => ({
169
168
  text: word.word,
170
169
  startSecond: word.start,
171
170
  endSecond: word.end
172
- }))) != null ? _g : [],
173
- language: (_h = response.language) != null ? _h : void 0,
174
- durationInSeconds: (_i = response.duration) != null ? _i : void 0,
171
+ })) ?? [],
172
+ language: response.language ?? void 0,
173
+ durationInSeconds: response.duration ?? void 0,
175
174
  warnings,
176
175
  response: {
177
176
  timestamp: currentDate,
@@ -182,26 +181,25 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
182
181
  };
183
182
  }
184
183
  async doStream(options) {
185
- var _a, _b, _c, _d, _e, _f, _g, _h;
186
184
  if (!isStreamingTranscriptionModelId(this.modelId)) {
187
185
  throw new UnsupportedFunctionalityError({
188
186
  functionality: `streaming transcription with ${this.modelId}`
189
187
  });
190
188
  }
191
- const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
189
+ const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
192
190
  const warnings = [];
193
191
  const cartesiaOptions = await parseProviderOptions({
194
192
  provider: "cartesia",
195
193
  providerOptions: options.providerOptions,
196
194
  schema: cartesiaTranscriptionModelOptionsSchema
197
195
  });
198
- if ((cartesiaOptions == null ? void 0 : cartesiaOptions.language) != null && cartesiaOptions.language !== "en") {
196
+ if (cartesiaOptions?.language != null && cartesiaOptions.language !== "en") {
199
197
  throw new InvalidArgumentError({
200
198
  argument: "providerOptions",
201
199
  message: "Cartesia Ink 2 currently supports English only."
202
200
  });
203
201
  }
204
- if ((cartesiaOptions == null ? void 0 : cartesiaOptions.timestampGranularities) != null) {
202
+ if (cartesiaOptions?.timestampGranularities != null) {
205
203
  warnings.push({
206
204
  type: "unsupported",
207
205
  feature: "providerOptions.cartesia.timestampGranularities",
@@ -211,7 +209,7 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
211
209
  const inferredEncoding = cartesiaEncodingFromInputAudioFormat(
212
210
  options.inputAudioFormat.type
213
211
  );
214
- const encoding = (_e = (_d = cartesiaOptions == null ? void 0 : cartesiaOptions.streaming) == null ? void 0 : _d.encoding) != null ? _e : inferredEncoding;
212
+ const encoding = cartesiaOptions?.streaming?.encoding ?? inferredEncoding;
215
213
  if (encoding !== inferredEncoding && !(inferredEncoding === "pcm_s16le" && LINEAR_PCM_STREAMING_ENCODINGS.has(encoding))) {
216
214
  warnings.push({
217
215
  type: "other",
@@ -219,10 +217,10 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
219
217
  });
220
218
  }
221
219
  const token = await this.createStreamingAccessToken(options);
222
- const useTurnDetection = ((_f = cartesiaOptions == null ? void 0 : cartesiaOptions.streaming) == null ? void 0 : _f.turnDetection) !== false;
220
+ const useTurnDetection = cartesiaOptions?.streaming?.turnDetection !== false;
223
221
  const url = buildCartesiaStreamingTranscriptionUrl({
224
222
  baseURL: this.config.url({ path: "/", modelId: this.modelId }),
225
- version: (_g = this.config.version) != null ? _g : "2026-03-01",
223
+ version: this.config.version ?? "2026-03-01",
226
224
  modelId: this.modelId,
227
225
  encoding,
228
226
  inputAudioFormat: options.inputAudioFormat,
@@ -242,7 +240,7 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
242
240
  webSocket: this.config.webSocket,
243
241
  url,
244
242
  warnings,
245
- language: (_h = cartesiaOptions == null ? void 0 : cartesiaOptions.language) != null ? _h : "en",
243
+ language: cartesiaOptions?.language ?? "en",
246
244
  useTurnDetection,
247
245
  audio: options.audio,
248
246
  abortSignal: options.abortSignal,
@@ -251,10 +249,9 @@ var CartesiaTranscriptionModel = class _CartesiaTranscriptionModel {
251
249
  };
252
250
  }
253
251
  async createStreamingAccessToken(options) {
254
- var _a, _b;
255
252
  const { value } = await postJsonToApi({
256
253
  url: this.config.url({ path: "/access-token", modelId: this.modelId }),
257
- headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
254
+ headers: combineHeaders(this.config.headers?.(), options.headers),
258
255
  body: { grants: { stt: true } },
259
256
  failedResponseHandler: cartesiaFailedResponseHandler,
260
257
  successfulResponseHandler: createJsonResponseHandler(
@@ -293,7 +290,7 @@ function createCartesiaStreamingTranscriptionStream({
293
290
  void audio.cancel().catch(() => {
294
291
  });
295
292
  }
296
- connection == null ? void 0 : connection.close(closeCode);
293
+ connection?.close(closeCode);
297
294
  };
298
295
  const finishWithError = (error) => {
299
296
  if (finished) return;
@@ -346,7 +343,6 @@ function createCartesiaStreamingTranscriptionStream({
346
343
  void sendAudio(socket).catch(finishWithError);
347
344
  },
348
345
  onMessageText: async (text) => {
349
- var _a, _b, _c, _d, _e, _f, _g;
350
346
  const parsed = await safeParseJSON({ text });
351
347
  if (!parsed.success) return;
352
348
  const raw = parsed.value;
@@ -359,12 +355,12 @@ function createCartesiaStreamingTranscriptionStream({
359
355
  controller.enqueue({
360
356
  type: "transcript-partial",
361
357
  id: raw.request_id,
362
- text: (_a = raw.transcript) != null ? _a : ""
358
+ text: raw.transcript ?? ""
363
359
  });
364
360
  break;
365
361
  }
366
362
  case "turn.end": {
367
- const text2 = (_b = raw.transcript) != null ? _b : "";
363
+ const text2 = raw.transcript ?? "";
368
364
  finalTexts.push(text2);
369
365
  controller.enqueue({
370
366
  type: "transcript-final",
@@ -374,10 +370,10 @@ function createCartesiaStreamingTranscriptionStream({
374
370
  break;
375
371
  }
376
372
  case "transcript": {
377
- const transcript = (_c = raw.text) != null ? _c : "";
373
+ const transcript = raw.text ?? "";
378
374
  if (raw.is_final === true) {
379
375
  finalTexts.push(transcript);
380
- durationInSeconds += (_d = raw.duration) != null ? _d : 0;
376
+ durationInSeconds += raw.duration ?? 0;
381
377
  controller.enqueue({
382
378
  type: "transcript-final",
383
379
  id: raw.request_id,
@@ -394,7 +390,7 @@ function createCartesiaStreamingTranscriptionStream({
394
390
  break;
395
391
  }
396
392
  case "flush_done": {
397
- (_e = connection == null ? void 0 : connection.socket) == null ? void 0 : _e.send("close");
393
+ connection?.socket?.send("close");
398
394
  break;
399
395
  }
400
396
  case "done": {
@@ -404,7 +400,7 @@ function createCartesiaStreamingTranscriptionStream({
404
400
  case "error": {
405
401
  finishWithError(
406
402
  new Error(
407
- (_g = (_f = raw.message) != null ? _f : raw.error_code) != null ? _g : "Cartesia streaming transcription error"
403
+ raw.message ?? raw.error_code ?? "Cartesia streaming transcription error"
408
404
  )
409
405
  );
410
406
  break;
@@ -445,7 +441,6 @@ function buildCartesiaStreamingTranscriptionUrl({
445
441
  token,
446
442
  useTurnDetection
447
443
  }) {
448
- var _a;
449
444
  const url = toWebSocketUrl(
450
445
  new URL(
451
446
  useTurnDetection ? "/stt/turns/websocket" : "/stt/websocket",
@@ -454,10 +449,10 @@ function buildCartesiaStreamingTranscriptionUrl({
454
449
  );
455
450
  url.searchParams.set("model", modelId);
456
451
  url.searchParams.set("encoding", encoding);
457
- url.searchParams.set("sample_rate", String((_a = inputAudioFormat.rate) != null ? _a : 24e3));
452
+ url.searchParams.set("sample_rate", String(inputAudioFormat.rate ?? 24e3));
458
453
  url.searchParams.set("cartesia_version", version);
459
454
  url.searchParams.set("access_token", token);
460
- if (!useTurnDetection && (providerOptions == null ? void 0 : providerOptions.language) != null) {
455
+ if (!useTurnDetection && providerOptions?.language != null) {
461
456
  url.searchParams.set("language", providerOptions.language);
462
457
  }
463
458
  return url;
@@ -560,7 +555,6 @@ function resolveOutputFormat({
560
555
  providerOptions,
561
556
  warnings
562
557
  }) {
563
- var _a, _b, _c, _d;
564
558
  const [formatName, sampleRateText, ...extraParts] = outputFormat.toLowerCase().split("_");
565
559
  const mapped = OUTPUT_FORMATS[formatName];
566
560
  let resolved = mapped ? { ...mapped } : { ...DEFAULT_OUTPUT_FORMAT };
@@ -582,10 +576,10 @@ function resolveOutputFormat({
582
576
  });
583
577
  }
584
578
  }
585
- const container = (_a = providerOptions == null ? void 0 : providerOptions.container) != null ? _a : resolved.container;
586
- const sampleRate = (_b = providerOptions == null ? void 0 : providerOptions.sampleRate) != null ? _b : resolved.sample_rate;
579
+ const container = providerOptions?.container ?? resolved.container;
580
+ const sampleRate = providerOptions?.sampleRate ?? resolved.sample_rate;
587
581
  if (container === "mp3") {
588
- if ((providerOptions == null ? void 0 : providerOptions.encoding) != null) {
582
+ if (providerOptions?.encoding != null) {
589
583
  warnings.push({
590
584
  type: "unsupported",
591
585
  feature: "providerOptions.cartesia.encoding",
@@ -595,10 +589,10 @@ function resolveOutputFormat({
595
589
  return {
596
590
  container,
597
591
  sample_rate: sampleRate,
598
- bit_rate: (_c = providerOptions == null ? void 0 : providerOptions.bitRate) != null ? _c : resolved.container === "mp3" ? resolved.bit_rate : 128e3
592
+ bit_rate: providerOptions?.bitRate ?? (resolved.container === "mp3" ? resolved.bit_rate : 128e3)
599
593
  };
600
594
  }
601
- if ((providerOptions == null ? void 0 : providerOptions.bitRate) != null) {
595
+ if (providerOptions?.bitRate != null) {
602
596
  warnings.push({
603
597
  type: "unsupported",
604
598
  feature: "providerOptions.cartesia.bitRate",
@@ -607,7 +601,7 @@ function resolveOutputFormat({
607
601
  }
608
602
  return {
609
603
  container,
610
- encoding: (_d = providerOptions == null ? void 0 : providerOptions.encoding) != null ? _d : resolved.container === "mp3" ? container === "wav" ? "pcm_s16le" : "pcm_f32le" : resolved.encoding,
604
+ encoding: providerOptions?.encoding ?? (resolved.container === "mp3" ? container === "wav" ? "pcm_s16le" : "pcm_f32le" : resolved.encoding),
611
605
  sample_rate: sampleRate
612
606
  };
613
607
  }
@@ -638,7 +632,6 @@ var CartesiaSpeechModel = class _CartesiaSpeechModel {
638
632
  speed,
639
633
  providerOptions
640
634
  }) {
641
- var _a;
642
635
  const warnings = [];
643
636
  const cartesiaOptions = await parseProviderOptions2({
644
637
  provider: "cartesia",
@@ -670,7 +663,7 @@ var CartesiaSpeechModel = class _CartesiaSpeechModel {
670
663
  requestBody.language = cartesiaOptions.language;
671
664
  }
672
665
  }
673
- const resolvedSpeed = (_a = cartesiaOptions == null ? void 0 : cartesiaOptions.speed) != null ? _a : speed;
666
+ const resolvedSpeed = cartesiaOptions?.speed ?? speed;
674
667
  if (resolvedSpeed != null) {
675
668
  if (resolvedSpeed >= 0.6 && resolvedSpeed <= 1.5) {
676
669
  requestBody.generation_config = { speed: resolvedSpeed };
@@ -695,8 +688,7 @@ var CartesiaSpeechModel = class _CartesiaSpeechModel {
695
688
  };
696
689
  }
697
690
  async doGenerate(options) {
698
- var _a, _b, _c, _d, _e;
699
- const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
691
+ const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
700
692
  const { requestBody, warnings } = await this.getArgs(options);
701
693
  const {
702
694
  value: audio,
@@ -707,7 +699,7 @@ var CartesiaSpeechModel = class _CartesiaSpeechModel {
707
699
  path: "/tts/bytes",
708
700
  modelId: this.modelId
709
701
  }),
710
- headers: combineHeaders2((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
702
+ headers: combineHeaders2(this.config.headers?.(), options.headers),
711
703
  body: requestBody,
712
704
  failedResponseHandler: cartesiaFailedResponseHandler,
713
705
  successfulResponseHandler: createBinaryResponseHandler(),
@@ -749,7 +741,6 @@ var CartesiaRealtimeModel = class {
749
741
  this.config = config;
750
742
  }
751
743
  async doCreateClientSecret(options) {
752
- var _a, _b, _c, _d, _e, _f;
753
744
  const expiresIn = options.expiresAfterSeconds;
754
745
  if (expiresIn != null && (!Number.isInteger(expiresIn) || expiresIn <= 0 || expiresIn > 3600)) {
755
746
  throw new Error(
@@ -757,11 +748,11 @@ var CartesiaRealtimeModel = class {
757
748
  );
758
749
  }
759
750
  const sessionConfig = options.sessionConfig;
760
- const language = (_a = sessionConfig == null ? void 0 : sessionConfig.inputAudioTranscription) == null ? void 0 : _a.language;
751
+ const language = sessionConfig?.inputAudioTranscription?.language;
761
752
  if (language != null && language !== "en") {
762
753
  throw new Error("Cartesia Ink 2 currently supports English only.");
763
754
  }
764
- const fetchFn = (_b = this.config.fetch) != null ? _b : fetch;
755
+ const fetchFn = this.config.fetch ?? fetch;
765
756
  const response = await fetchFn(`${this.config.baseURL}/access-token`, {
766
757
  method: "POST",
767
758
  headers: {
@@ -785,9 +776,9 @@ var CartesiaRealtimeModel = class {
785
776
  "Cartesia realtime client secret response did not include a token."
786
777
  );
787
778
  }
788
- const turnDetection = sessionConfig == null ? void 0 : sessionConfig.turnDetection;
779
+ const turnDetection = sessionConfig?.turnDetection;
789
780
  const useTurnDetection = turnDetection === void 0 || turnDetection !== null && turnDetection.type !== "disabled";
790
- const inputAudioFormat = sessionConfig == null ? void 0 : sessionConfig.inputAudioFormat;
781
+ const inputAudioFormat = sessionConfig?.inputAudioFormat;
791
782
  const url = new URL(
792
783
  useTurnDetection ? `${this.config.baseURL}/stt/turns/websocket` : `${this.config.baseURL}/stt/websocket`
793
784
  );
@@ -795,11 +786,11 @@ var CartesiaRealtimeModel = class {
795
786
  url.searchParams.set("model", this.modelId);
796
787
  url.searchParams.set(
797
788
  "encoding",
798
- resolveCartesiaEncoding(inputAudioFormat == null ? void 0 : inputAudioFormat.type)
789
+ resolveCartesiaEncoding(inputAudioFormat?.type)
799
790
  );
800
791
  url.searchParams.set(
801
792
  "sample_rate",
802
- String((_c = inputAudioFormat == null ? void 0 : inputAudioFormat.rate) != null ? _c : 24e3)
793
+ String(inputAudioFormat?.rate ?? 24e3)
803
794
  );
804
795
  url.searchParams.set("cartesia_version", this.config.version);
805
796
  if (!useTurnDetection && language != null) {
@@ -810,7 +801,7 @@ var CartesiaRealtimeModel = class {
810
801
  url: url.toString(),
811
802
  ...expiresIn != null ? {
812
803
  expiresAt: Math.floor(
813
- ((_f = (_e = (_d = this.config._internal) == null ? void 0 : _d.currentDate) == null ? void 0 : _e.call(_d)) != null ? _f : /* @__PURE__ */ new Date()).getTime() / 1e3
804
+ (this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date()).getTime() / 1e3
814
805
  ) + expiresIn
815
806
  } : {}
816
807
  };
@@ -822,9 +813,8 @@ var CartesiaRealtimeModel = class {
822
813
  return { url: url.toString() };
823
814
  }
824
815
  parseServerEvent(raw) {
825
- var _a, _b, _c, _d, _e;
826
816
  const event = raw;
827
- const requestId = (_a = event.request_id) != null ? _a : "cartesia-realtime";
817
+ const requestId = event.request_id ?? "cartesia-realtime";
828
818
  let mapped;
829
819
  switch (event.type) {
830
820
  case "connected":
@@ -849,15 +839,15 @@ var CartesiaRealtimeModel = class {
849
839
  {
850
840
  type: "input-transcription-completed",
851
841
  itemId: requestId,
852
- transcript: (_b = event.transcript) != null ? _b : "",
842
+ transcript: event.transcript ?? "",
853
843
  raw
854
844
  }
855
845
  ];
856
846
  break;
857
847
  case "transcript":
858
848
  if (event.is_final === true) {
859
- this.manualTranscript.text += (_c = event.text) != null ? _c : "";
860
- this.manualTranscript.duration += (_d = event.duration) != null ? _d : 0;
849
+ this.manualTranscript.text += event.text ?? "";
850
+ this.manualTranscript.duration += event.duration ?? 0;
861
851
  this.manualTranscript.events.push(event);
862
852
  }
863
853
  mapped = { type: "custom", rawType: event.type, raw };
@@ -877,7 +867,7 @@ var CartesiaRealtimeModel = class {
877
867
  case "error":
878
868
  mapped = {
879
869
  type: "error",
880
- message: (_e = event.message) != null ? _e : "Unknown Cartesia realtime error",
870
+ message: event.message ?? "Unknown Cartesia realtime error",
881
871
  code: event.error_code,
882
872
  raw
883
873
  };
@@ -908,7 +898,6 @@ var CartesiaRealtimeModel = class {
908
898
  return null;
909
899
  }
910
900
  finishManualTranscript(event, raw) {
911
- var _a;
912
901
  const state = this.manualTranscript;
913
902
  this.manualTranscript = { duration: 0, events: [], text: "" };
914
903
  if (state.text.length === 0) {
@@ -922,7 +911,7 @@ var CartesiaRealtimeModel = class {
922
911
  },
923
912
  {
924
913
  type: "input-transcription-completed",
925
- itemId: (_a = event.request_id) != null ? _a : "cartesia-realtime",
914
+ itemId: event.request_id ?? "cartesia-realtime",
926
915
  transcript: state.text,
927
916
  raw: {
928
917
  event,
@@ -960,53 +949,44 @@ function resolveCartesiaEncoding(type) {
960
949
  }
961
950
 
962
951
  // src/version.ts
963
- var VERSION = true ? "3.0.42" : "0.0.0-test";
952
+ var VERSION = true ? "3.0.45" : "0.0.0-test";
964
953
 
965
954
  // src/cartesia-provider.ts
966
955
  var CARTESIA_API_VERSION = "2026-03-01";
967
956
  function createCartesia(options = {}) {
968
- const getHeaders = () => {
969
- var _a;
970
- return withUserAgentSuffix(
971
- {
972
- Authorization: `Bearer ${loadApiKey({
973
- apiKey: options.apiKey,
974
- environmentVariableName: "CARTESIA_API_KEY",
975
- description: "Cartesia"
976
- })}`,
977
- "Cartesia-Version": (_a = options.version) != null ? _a : CARTESIA_API_VERSION,
978
- ...options.headers
979
- },
980
- `ai-sdk/cartesia/${VERSION}`
981
- );
982
- };
983
- const createTranscriptionModel = (modelId) => {
984
- var _a;
985
- return new CartesiaTranscriptionModel(modelId, {
986
- provider: `cartesia.transcription`,
987
- url: ({ path }) => `https://api.cartesia.ai${path}`,
988
- headers: getHeaders,
989
- fetch: options.fetch,
990
- version: (_a = options.version) != null ? _a : CARTESIA_API_VERSION,
991
- webSocket: options.webSocket
992
- });
993
- };
957
+ const getHeaders = () => withUserAgentSuffix(
958
+ {
959
+ Authorization: `Bearer ${loadApiKey({
960
+ apiKey: options.apiKey,
961
+ environmentVariableName: "CARTESIA_API_KEY",
962
+ description: "Cartesia"
963
+ })}`,
964
+ "Cartesia-Version": options.version ?? CARTESIA_API_VERSION,
965
+ ...options.headers
966
+ },
967
+ `ai-sdk/cartesia/${VERSION}`
968
+ );
969
+ const createTranscriptionModel = (modelId) => new CartesiaTranscriptionModel(modelId, {
970
+ provider: `cartesia.transcription`,
971
+ url: ({ path }) => `https://api.cartesia.ai${path}`,
972
+ headers: getHeaders,
973
+ fetch: options.fetch,
974
+ version: options.version ?? CARTESIA_API_VERSION,
975
+ webSocket: options.webSocket
976
+ });
994
977
  const createSpeechModel = (modelId) => new CartesiaSpeechModel(modelId, {
995
978
  provider: `cartesia.speech`,
996
979
  url: ({ path }) => `https://api.cartesia.ai${path}`,
997
980
  headers: getHeaders,
998
981
  fetch: options.fetch
999
982
  });
1000
- const createRealtimeModel = (modelId) => {
1001
- var _a;
1002
- return new CartesiaRealtimeModel(modelId, {
1003
- provider: `cartesia.realtime`,
1004
- baseURL: "https://api.cartesia.ai",
1005
- version: (_a = options.version) != null ? _a : CARTESIA_API_VERSION,
1006
- headers: getHeaders,
1007
- fetch: options.fetch
1008
- });
1009
- };
983
+ const createRealtimeModel = (modelId) => new CartesiaRealtimeModel(modelId, {
984
+ provider: `cartesia.realtime`,
985
+ baseURL: "https://api.cartesia.ai",
986
+ version: options.version ?? CARTESIA_API_VERSION,
987
+ headers: getHeaders,
988
+ fetch: options.fetch
989
+ });
1010
990
  const experimentalRealtimeFactory = Object.assign(
1011
991
  (modelId) => createRealtimeModel(modelId),
1012
992
  {
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,"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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/cartesia",
3
- "version": "3.0.42",
3
+ "version": "3.0.45",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -29,11 +29,11 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@ai-sdk/provider": "4.0.18",
33
- "@ai-sdk/provider-utils": "5.0.47"
32
+ "@ai-sdk/provider": "4.0.19",
33
+ "@ai-sdk/provider-utils": "5.0.50"
34
34
  },
35
35
  "devDependencies": {
36
- "@ai-sdk/test-server": "2.0.1",
36
+ "@ai-sdk/test-server": "2.0.2",
37
37
  "@types/node": "22.19.19",
38
38
  "@vercel/ai-tsconfig": "0.0.0",
39
39
  "tsup": "^8.5.1",