@ai-sdk/cartesia 3.0.41 → 3.0.44
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 +25 -0
- package/dist/index.js +74 -94
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @ai-sdk/cartesia
|
|
2
2
|
|
|
3
|
+
## 3.0.44
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [af9597b]
|
|
8
|
+
- Updated dependencies [bc49f78]
|
|
9
|
+
- @ai-sdk/provider-utils@5.0.49
|
|
10
|
+
|
|
11
|
+
## 3.0.43
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [be877ff]
|
|
16
|
+
- @ai-sdk/provider-utils@5.0.48
|
|
17
|
+
|
|
18
|
+
## 3.0.42
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- 771e74b: chore: enable dead code lint rules
|
|
23
|
+
- Updated dependencies [fe07867]
|
|
24
|
+
- Updated dependencies [a4b0940]
|
|
25
|
+
- Updated dependencies [771e74b]
|
|
26
|
+
- @ai-sdk/provider-utils@5.0.47
|
|
27
|
+
|
|
3
28
|
## 3.0.41
|
|
4
29
|
|
|
5
30
|
### 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 (
|
|
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 =
|
|
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(
|
|
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:
|
|
167
|
+
segments: response.words?.map((word) => ({
|
|
169
168
|
text: word.word,
|
|
170
169
|
startSecond: word.start,
|
|
171
170
|
endSecond: word.end
|
|
172
|
-
}))
|
|
173
|
-
language:
|
|
174
|
-
durationInSeconds:
|
|
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 =
|
|
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 (
|
|
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 (
|
|
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 =
|
|
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 =
|
|
220
|
+
const useTurnDetection = cartesiaOptions?.streaming?.turnDetection !== false;
|
|
223
221
|
const url = buildCartesiaStreamingTranscriptionUrl({
|
|
224
222
|
baseURL: this.config.url({ path: "/", modelId: this.modelId }),
|
|
225
|
-
version:
|
|
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:
|
|
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(
|
|
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
|
|
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:
|
|
358
|
+
text: raw.transcript ?? ""
|
|
363
359
|
});
|
|
364
360
|
break;
|
|
365
361
|
}
|
|
366
362
|
case "turn.end": {
|
|
367
|
-
const text2 =
|
|
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 =
|
|
373
|
+
const transcript = raw.text ?? "";
|
|
378
374
|
if (raw.is_final === true) {
|
|
379
375
|
finalTexts.push(transcript);
|
|
380
|
-
durationInSeconds +=
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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 &&
|
|
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 =
|
|
586
|
-
const sampleRate =
|
|
579
|
+
const container = providerOptions?.container ?? resolved.container;
|
|
580
|
+
const sampleRate = providerOptions?.sampleRate ?? resolved.sample_rate;
|
|
587
581
|
if (container === "mp3") {
|
|
588
|
-
if (
|
|
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:
|
|
592
|
+
bit_rate: providerOptions?.bitRate ?? (resolved.container === "mp3" ? resolved.bit_rate : 128e3)
|
|
599
593
|
};
|
|
600
594
|
}
|
|
601
|
-
if (
|
|
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:
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
|
779
|
+
const turnDetection = sessionConfig?.turnDetection;
|
|
789
780
|
const useTurnDetection = turnDetection === void 0 || turnDetection !== null && turnDetection.type !== "disabled";
|
|
790
|
-
const inputAudioFormat = sessionConfig
|
|
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
|
|
789
|
+
resolveCartesiaEncoding(inputAudioFormat?.type)
|
|
799
790
|
);
|
|
800
791
|
url.searchParams.set(
|
|
801
792
|
"sample_rate",
|
|
802
|
-
String(
|
|
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
|
-
(
|
|
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 =
|
|
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:
|
|
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 +=
|
|
860
|
-
this.manualTranscript.duration +=
|
|
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:
|
|
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:
|
|
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.
|
|
952
|
+
var VERSION = true ? "3.0.44" : "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
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
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
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
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.
|
|
3
|
+
"version": "3.0.44",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@ai-sdk/provider": "4.0.18",
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.49"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@ai-sdk/test-server": "2.0.
|
|
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",
|