@ai-sdk/assemblyai 3.0.0-beta.20 → 3.0.0-beta.21
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 +12 -0
- package/dist/index.js +95 -112
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- package/dist/index.d.mts +0 -123
- package/dist/index.mjs +0 -439
- package/dist/index.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ai-sdk/assemblyai
|
|
2
2
|
|
|
3
|
+
## 3.0.0-beta.21
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- ef992f8: Remove CommonJS exports from all packages. All packages are now ESM-only (`"type": "module"`). Consumers using `require()` must switch to ESM `import` syntax.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [ef992f8]
|
|
12
|
+
- @ai-sdk/provider@4.0.0-beta.11
|
|
13
|
+
- @ai-sdk/provider-utils@5.0.0-beta.19
|
|
14
|
+
|
|
3
15
|
## 3.0.0-beta.20
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -1,197 +1,181 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
VERSION: () => VERSION,
|
|
24
|
-
assemblyai: () => assemblyai,
|
|
25
|
-
createAssemblyAI: () => createAssemblyAI
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(index_exports);
|
|
28
|
-
|
|
29
1
|
// src/assemblyai-provider.ts
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
import {
|
|
3
|
+
NoSuchModelError
|
|
4
|
+
} from "@ai-sdk/provider";
|
|
5
|
+
import {
|
|
6
|
+
loadApiKey,
|
|
7
|
+
withUserAgentSuffix
|
|
8
|
+
} from "@ai-sdk/provider-utils";
|
|
32
9
|
|
|
33
10
|
// src/assemblyai-transcription-model.ts
|
|
34
|
-
|
|
35
|
-
|
|
11
|
+
import {
|
|
12
|
+
combineHeaders,
|
|
13
|
+
createJsonResponseHandler,
|
|
14
|
+
extractResponseHeaders,
|
|
15
|
+
parseProviderOptions,
|
|
16
|
+
postJsonToApi,
|
|
17
|
+
postToApi
|
|
18
|
+
} from "@ai-sdk/provider-utils";
|
|
19
|
+
import { z as z2 } from "zod/v4";
|
|
36
20
|
|
|
37
21
|
// src/assemblyai-error.ts
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var assemblyaiErrorDataSchema =
|
|
41
|
-
error:
|
|
42
|
-
message:
|
|
43
|
-
code:
|
|
22
|
+
import { z } from "zod/v4";
|
|
23
|
+
import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
|
|
24
|
+
var assemblyaiErrorDataSchema = z.object({
|
|
25
|
+
error: z.object({
|
|
26
|
+
message: z.string(),
|
|
27
|
+
code: z.number()
|
|
44
28
|
})
|
|
45
29
|
});
|
|
46
|
-
var assemblyaiFailedResponseHandler =
|
|
30
|
+
var assemblyaiFailedResponseHandler = createJsonErrorResponseHandler({
|
|
47
31
|
errorSchema: assemblyaiErrorDataSchema,
|
|
48
32
|
errorToMessage: (data) => data.error.message
|
|
49
33
|
});
|
|
50
34
|
|
|
51
35
|
// src/assemblyai-transcription-model.ts
|
|
52
|
-
var assemblyaiTranscriptionModelOptionsSchema =
|
|
36
|
+
var assemblyaiTranscriptionModelOptionsSchema = z2.object({
|
|
53
37
|
/**
|
|
54
38
|
* End time of the audio in milliseconds.
|
|
55
39
|
*/
|
|
56
|
-
audioEndAt:
|
|
40
|
+
audioEndAt: z2.number().int().nullish(),
|
|
57
41
|
/**
|
|
58
42
|
* Start time of the audio in milliseconds.
|
|
59
43
|
*/
|
|
60
|
-
audioStartFrom:
|
|
44
|
+
audioStartFrom: z2.number().int().nullish(),
|
|
61
45
|
/**
|
|
62
46
|
* Whether to automatically generate chapters for the transcription.
|
|
63
47
|
*/
|
|
64
|
-
autoChapters:
|
|
48
|
+
autoChapters: z2.boolean().nullish(),
|
|
65
49
|
/**
|
|
66
50
|
* Whether to automatically generate highlights for the transcription.
|
|
67
51
|
*/
|
|
68
|
-
autoHighlights:
|
|
52
|
+
autoHighlights: z2.boolean().nullish(),
|
|
69
53
|
/**
|
|
70
54
|
* Boost parameter for the transcription.
|
|
71
55
|
* Allowed values: 'low', 'default', 'high'.
|
|
72
56
|
*/
|
|
73
|
-
boostParam:
|
|
57
|
+
boostParam: z2.string().nullish(),
|
|
74
58
|
/**
|
|
75
59
|
* Whether to enable content safety filtering.
|
|
76
60
|
*/
|
|
77
|
-
contentSafety:
|
|
61
|
+
contentSafety: z2.boolean().nullish(),
|
|
78
62
|
/**
|
|
79
63
|
* Confidence threshold for content safety filtering (25-100).
|
|
80
64
|
*/
|
|
81
|
-
contentSafetyConfidence:
|
|
65
|
+
contentSafetyConfidence: z2.number().int().min(25).max(100).nullish(),
|
|
82
66
|
/**
|
|
83
67
|
* Custom spelling rules for the transcription.
|
|
84
68
|
*/
|
|
85
|
-
customSpelling:
|
|
86
|
-
|
|
87
|
-
from:
|
|
88
|
-
to:
|
|
69
|
+
customSpelling: z2.array(
|
|
70
|
+
z2.object({
|
|
71
|
+
from: z2.array(z2.string()),
|
|
72
|
+
to: z2.string()
|
|
89
73
|
})
|
|
90
74
|
).nullish(),
|
|
91
75
|
/**
|
|
92
76
|
* Whether to include filler words (um, uh, etc.) in the transcription.
|
|
93
77
|
*/
|
|
94
|
-
disfluencies:
|
|
78
|
+
disfluencies: z2.boolean().nullish(),
|
|
95
79
|
/**
|
|
96
80
|
* Whether to enable entity detection.
|
|
97
81
|
*/
|
|
98
|
-
entityDetection:
|
|
82
|
+
entityDetection: z2.boolean().nullish(),
|
|
99
83
|
/**
|
|
100
84
|
* Whether to filter profanity from the transcription.
|
|
101
85
|
*/
|
|
102
|
-
filterProfanity:
|
|
86
|
+
filterProfanity: z2.boolean().nullish(),
|
|
103
87
|
/**
|
|
104
88
|
* Whether to format text with punctuation and capitalization.
|
|
105
89
|
*/
|
|
106
|
-
formatText:
|
|
90
|
+
formatText: z2.boolean().nullish(),
|
|
107
91
|
/**
|
|
108
92
|
* Whether to enable IAB categories detection.
|
|
109
93
|
*/
|
|
110
|
-
iabCategories:
|
|
94
|
+
iabCategories: z2.boolean().nullish(),
|
|
111
95
|
/**
|
|
112
96
|
* Language code for the transcription.
|
|
113
97
|
*/
|
|
114
|
-
languageCode:
|
|
98
|
+
languageCode: z2.union([z2.literal("en"), z2.string()]).nullish(),
|
|
115
99
|
/**
|
|
116
100
|
* Confidence threshold for language detection.
|
|
117
101
|
*/
|
|
118
|
-
languageConfidenceThreshold:
|
|
102
|
+
languageConfidenceThreshold: z2.number().nullish(),
|
|
119
103
|
/**
|
|
120
104
|
* Whether to enable language detection.
|
|
121
105
|
*/
|
|
122
|
-
languageDetection:
|
|
106
|
+
languageDetection: z2.boolean().nullish(),
|
|
123
107
|
/**
|
|
124
108
|
* Whether to process audio as multichannel.
|
|
125
109
|
*/
|
|
126
|
-
multichannel:
|
|
110
|
+
multichannel: z2.boolean().nullish(),
|
|
127
111
|
/**
|
|
128
112
|
* Whether to add punctuation to the transcription.
|
|
129
113
|
*/
|
|
130
|
-
punctuate:
|
|
114
|
+
punctuate: z2.boolean().nullish(),
|
|
131
115
|
/**
|
|
132
116
|
* Whether to redact personally identifiable information (PII).
|
|
133
117
|
*/
|
|
134
|
-
redactPii:
|
|
118
|
+
redactPii: z2.boolean().nullish(),
|
|
135
119
|
/**
|
|
136
120
|
* Whether to redact PII in the audio file.
|
|
137
121
|
*/
|
|
138
|
-
redactPiiAudio:
|
|
122
|
+
redactPiiAudio: z2.boolean().nullish(),
|
|
139
123
|
/**
|
|
140
124
|
* Audio format for PII redaction.
|
|
141
125
|
*/
|
|
142
|
-
redactPiiAudioQuality:
|
|
126
|
+
redactPiiAudioQuality: z2.string().nullish(),
|
|
143
127
|
/**
|
|
144
128
|
* List of PII types to redact.
|
|
145
129
|
*/
|
|
146
|
-
redactPiiPolicies:
|
|
130
|
+
redactPiiPolicies: z2.array(z2.string()).nullish(),
|
|
147
131
|
/**
|
|
148
132
|
* Substitution method for redacted PII.
|
|
149
133
|
*/
|
|
150
|
-
redactPiiSub:
|
|
134
|
+
redactPiiSub: z2.string().nullish(),
|
|
151
135
|
/**
|
|
152
136
|
* Whether to enable sentiment analysis.
|
|
153
137
|
*/
|
|
154
|
-
sentimentAnalysis:
|
|
138
|
+
sentimentAnalysis: z2.boolean().nullish(),
|
|
155
139
|
/**
|
|
156
140
|
* Whether to identify different speakers in the audio.
|
|
157
141
|
*/
|
|
158
|
-
speakerLabels:
|
|
142
|
+
speakerLabels: z2.boolean().nullish(),
|
|
159
143
|
/**
|
|
160
144
|
* Number of speakers expected in the audio.
|
|
161
145
|
*/
|
|
162
|
-
speakersExpected:
|
|
146
|
+
speakersExpected: z2.number().int().nullish(),
|
|
163
147
|
/**
|
|
164
148
|
* Threshold for speech detection (0-1).
|
|
165
149
|
*/
|
|
166
|
-
speechThreshold:
|
|
150
|
+
speechThreshold: z2.number().min(0).max(1).nullish(),
|
|
167
151
|
/**
|
|
168
152
|
* Whether to generate a summary of the transcription.
|
|
169
153
|
*/
|
|
170
|
-
summarization:
|
|
154
|
+
summarization: z2.boolean().nullish(),
|
|
171
155
|
/**
|
|
172
156
|
* Model to use for summarization.
|
|
173
157
|
*/
|
|
174
|
-
summaryModel:
|
|
158
|
+
summaryModel: z2.string().nullish(),
|
|
175
159
|
/**
|
|
176
160
|
* Type of summary to generate.
|
|
177
161
|
*/
|
|
178
|
-
summaryType:
|
|
162
|
+
summaryType: z2.string().nullish(),
|
|
179
163
|
/**
|
|
180
164
|
* Name of the authentication header for webhook requests.
|
|
181
165
|
*/
|
|
182
|
-
webhookAuthHeaderName:
|
|
166
|
+
webhookAuthHeaderName: z2.string().nullish(),
|
|
183
167
|
/**
|
|
184
168
|
* Value of the authentication header for webhook requests.
|
|
185
169
|
*/
|
|
186
|
-
webhookAuthHeaderValue:
|
|
170
|
+
webhookAuthHeaderValue: z2.string().nullish(),
|
|
187
171
|
/**
|
|
188
172
|
* URL to send webhook notifications to.
|
|
189
173
|
*/
|
|
190
|
-
webhookUrl:
|
|
174
|
+
webhookUrl: z2.string().nullish(),
|
|
191
175
|
/**
|
|
192
176
|
* List of words to boost recognition for.
|
|
193
177
|
*/
|
|
194
|
-
wordBoost:
|
|
178
|
+
wordBoost: z2.array(z2.string()).nullish()
|
|
195
179
|
});
|
|
196
180
|
var AssemblyAITranscriptionModel = class {
|
|
197
181
|
constructor(modelId, config) {
|
|
@@ -208,7 +192,7 @@ var AssemblyAITranscriptionModel = class {
|
|
|
208
192
|
}) {
|
|
209
193
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H;
|
|
210
194
|
const warnings = [];
|
|
211
|
-
const assemblyaiOptions = await
|
|
195
|
+
const assemblyaiOptions = await parseProviderOptions({
|
|
212
196
|
provider: "assemblyai",
|
|
213
197
|
providerOptions,
|
|
214
198
|
schema: assemblyaiTranscriptionModelOptionsSchema
|
|
@@ -276,7 +260,7 @@ var AssemblyAITranscriptionModel = class {
|
|
|
276
260
|
}),
|
|
277
261
|
{
|
|
278
262
|
method: "GET",
|
|
279
|
-
headers:
|
|
263
|
+
headers: combineHeaders(
|
|
280
264
|
this.config.headers(),
|
|
281
265
|
headers
|
|
282
266
|
),
|
|
@@ -299,7 +283,7 @@ var AssemblyAITranscriptionModel = class {
|
|
|
299
283
|
if (transcript.status === "completed") {
|
|
300
284
|
return {
|
|
301
285
|
transcript,
|
|
302
|
-
responseHeaders:
|
|
286
|
+
responseHeaders: extractResponseHeaders(response)
|
|
303
287
|
};
|
|
304
288
|
}
|
|
305
289
|
if (transcript.status === "error") {
|
|
@@ -313,39 +297,39 @@ var AssemblyAITranscriptionModel = class {
|
|
|
313
297
|
async doGenerate(options) {
|
|
314
298
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
315
299
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
316
|
-
const { value: uploadResponse } = await
|
|
300
|
+
const { value: uploadResponse } = await postToApi({
|
|
317
301
|
url: this.config.url({
|
|
318
302
|
path: "/v2/upload",
|
|
319
303
|
modelId: ""
|
|
320
304
|
}),
|
|
321
305
|
headers: {
|
|
322
306
|
"Content-Type": "application/octet-stream",
|
|
323
|
-
...
|
|
307
|
+
...combineHeaders(this.config.headers(), options.headers)
|
|
324
308
|
},
|
|
325
309
|
body: {
|
|
326
310
|
content: options.audio,
|
|
327
311
|
values: options.audio
|
|
328
312
|
},
|
|
329
313
|
failedResponseHandler: assemblyaiFailedResponseHandler,
|
|
330
|
-
successfulResponseHandler:
|
|
314
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
331
315
|
assemblyaiUploadResponseSchema
|
|
332
316
|
),
|
|
333
317
|
abortSignal: options.abortSignal,
|
|
334
318
|
fetch: this.config.fetch
|
|
335
319
|
});
|
|
336
320
|
const { body, warnings } = await this.getArgs(options);
|
|
337
|
-
const { value: submitResponse } = await
|
|
321
|
+
const { value: submitResponse } = await postJsonToApi({
|
|
338
322
|
url: this.config.url({
|
|
339
323
|
path: "/v2/transcript",
|
|
340
324
|
modelId: this.modelId
|
|
341
325
|
}),
|
|
342
|
-
headers:
|
|
326
|
+
headers: combineHeaders(this.config.headers(), options.headers),
|
|
343
327
|
body: {
|
|
344
328
|
...body,
|
|
345
329
|
audio_url: uploadResponse.upload_url
|
|
346
330
|
},
|
|
347
331
|
failedResponseHandler: assemblyaiFailedResponseHandler,
|
|
348
|
-
successfulResponseHandler:
|
|
332
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
349
333
|
assemblyaiSubmitResponseSchema
|
|
350
334
|
),
|
|
351
335
|
abortSignal: options.abortSignal,
|
|
@@ -377,37 +361,37 @@ var AssemblyAITranscriptionModel = class {
|
|
|
377
361
|
};
|
|
378
362
|
}
|
|
379
363
|
};
|
|
380
|
-
var assemblyaiUploadResponseSchema =
|
|
381
|
-
upload_url:
|
|
364
|
+
var assemblyaiUploadResponseSchema = z2.object({
|
|
365
|
+
upload_url: z2.string()
|
|
382
366
|
});
|
|
383
|
-
var assemblyaiSubmitResponseSchema =
|
|
384
|
-
id:
|
|
385
|
-
status:
|
|
367
|
+
var assemblyaiSubmitResponseSchema = z2.object({
|
|
368
|
+
id: z2.string(),
|
|
369
|
+
status: z2.enum(["queued", "processing", "completed", "error"])
|
|
386
370
|
});
|
|
387
|
-
var assemblyaiTranscriptionResponseSchema =
|
|
388
|
-
id:
|
|
389
|
-
status:
|
|
390
|
-
text:
|
|
391
|
-
language_code:
|
|
392
|
-
words:
|
|
393
|
-
|
|
394
|
-
start:
|
|
395
|
-
end:
|
|
396
|
-
text:
|
|
371
|
+
var assemblyaiTranscriptionResponseSchema = z2.object({
|
|
372
|
+
id: z2.string(),
|
|
373
|
+
status: z2.enum(["queued", "processing", "completed", "error"]),
|
|
374
|
+
text: z2.string().nullish(),
|
|
375
|
+
language_code: z2.string().nullish(),
|
|
376
|
+
words: z2.array(
|
|
377
|
+
z2.object({
|
|
378
|
+
start: z2.number(),
|
|
379
|
+
end: z2.number(),
|
|
380
|
+
text: z2.string()
|
|
397
381
|
})
|
|
398
382
|
).nullish(),
|
|
399
|
-
audio_duration:
|
|
400
|
-
error:
|
|
383
|
+
audio_duration: z2.number().nullish(),
|
|
384
|
+
error: z2.string().nullish()
|
|
401
385
|
});
|
|
402
386
|
|
|
403
387
|
// src/version.ts
|
|
404
|
-
var VERSION = true ? "3.0.0-beta.
|
|
388
|
+
var VERSION = true ? "3.0.0-beta.21" : "0.0.0-test";
|
|
405
389
|
|
|
406
390
|
// src/assemblyai-provider.ts
|
|
407
391
|
function createAssemblyAI(options = {}) {
|
|
408
|
-
const getHeaders = () =>
|
|
392
|
+
const getHeaders = () => withUserAgentSuffix(
|
|
409
393
|
{
|
|
410
|
-
authorization:
|
|
394
|
+
authorization: loadApiKey({
|
|
411
395
|
apiKey: options.apiKey,
|
|
412
396
|
environmentVariableName: "ASSEMBLYAI_API_KEY",
|
|
413
397
|
description: "AssemblyAI"
|
|
@@ -431,26 +415,25 @@ function createAssemblyAI(options = {}) {
|
|
|
431
415
|
provider.transcription = createTranscriptionModel;
|
|
432
416
|
provider.transcriptionModel = createTranscriptionModel;
|
|
433
417
|
provider.languageModel = () => {
|
|
434
|
-
throw new
|
|
418
|
+
throw new NoSuchModelError({
|
|
435
419
|
modelId: "unknown",
|
|
436
420
|
modelType: "languageModel",
|
|
437
421
|
message: "AssemblyAI does not provide language models"
|
|
438
422
|
});
|
|
439
423
|
};
|
|
440
424
|
provider.embeddingModel = (modelId) => {
|
|
441
|
-
throw new
|
|
425
|
+
throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
|
|
442
426
|
};
|
|
443
427
|
provider.textEmbeddingModel = provider.embeddingModel;
|
|
444
428
|
provider.imageModel = (modelId) => {
|
|
445
|
-
throw new
|
|
429
|
+
throw new NoSuchModelError({ modelId, modelType: "imageModel" });
|
|
446
430
|
};
|
|
447
431
|
return provider;
|
|
448
432
|
}
|
|
449
433
|
var assemblyai = createAssemblyAI();
|
|
450
|
-
|
|
451
|
-
0 && (module.exports = {
|
|
434
|
+
export {
|
|
452
435
|
VERSION,
|
|
453
436
|
assemblyai,
|
|
454
437
|
createAssemblyAI
|
|
455
|
-
}
|
|
438
|
+
};
|
|
456
439
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/assemblyai-provider.ts","../src/assemblyai-transcription-model.ts","../src/assemblyai-error.ts","../src/version.ts"],"sourcesContent":["export { createAssemblyAI, assemblyai } from './assemblyai-provider';\nexport type {\n AssemblyAIProvider,\n AssemblyAIProviderSettings,\n} from './assemblyai-provider';\nexport type { AssemblyAITranscriptionModelOptions } from './assemblyai-transcription-model';\nexport { VERSION } from './version';\n","import {\n TranscriptionModelV4,\n ProviderV4,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { AssemblyAITranscriptionModel } from './assemblyai-transcription-model';\nimport { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { VERSION } from './version';\n\nexport interface AssemblyAIProvider extends ProviderV4 {\n (\n modelId: 'best',\n settings?: {},\n ): {\n transcription: AssemblyAITranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: AssemblyAITranscriptionModelId): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface AssemblyAIProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create an AssemblyAI provider instance.\n */\nexport function createAssemblyAI(\n options: AssemblyAIProviderSettings = {},\n): AssemblyAIProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ASSEMBLYAI_API_KEY',\n description: 'AssemblyAI',\n }),\n ...options.headers,\n },\n `ai-sdk/assemblyai/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: AssemblyAITranscriptionModelId) =>\n new AssemblyAITranscriptionModel(modelId, {\n provider: `assemblyai.transcription`,\n url: ({ path }) => `https://api.assemblyai.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AssemblyAITranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'AssemblyAI does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as AssemblyAIProvider;\n}\n\n/**\n * Default AssemblyAI provider instance.\n */\nexport const assemblyai = createAssemblyAI();\n","import { TranscriptionModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n extractResponseHeaders,\n parseProviderOptions,\n postJsonToApi,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { AssemblyAIConfig } from './assemblyai-config';\nimport { assemblyaiFailedResponseHandler } from './assemblyai-error';\nimport { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { AssemblyAITranscriptionAPITypes } from './assemblyai-api-types';\n\n// https://www.assemblyai.com/docs/api-reference/transcripts/submit\nconst assemblyaiTranscriptionModelOptionsSchema = z.object({\n /**\n * End time of the audio in milliseconds.\n */\n audioEndAt: z.number().int().nullish(),\n /**\n * Start time of the audio in milliseconds.\n */\n audioStartFrom: z.number().int().nullish(),\n /**\n * Whether to automatically generate chapters for the transcription.\n */\n autoChapters: z.boolean().nullish(),\n /**\n * Whether to automatically generate highlights for the transcription.\n */\n autoHighlights: z.boolean().nullish(),\n /**\n * Boost parameter for the transcription.\n * Allowed values: 'low', 'default', 'high'.\n */\n boostParam: z.string().nullish(),\n /**\n * Whether to enable content safety filtering.\n */\n contentSafety: z.boolean().nullish(),\n /**\n * Confidence threshold for content safety filtering (25-100).\n */\n contentSafetyConfidence: z.number().int().min(25).max(100).nullish(),\n /**\n * Custom spelling rules for the transcription.\n */\n customSpelling: z\n .array(\n z.object({\n from: z.array(z.string()),\n to: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to include filler words (um, uh, etc.) in the transcription.\n */\n disfluencies: z.boolean().nullish(),\n /**\n * Whether to enable entity detection.\n */\n entityDetection: z.boolean().nullish(),\n /**\n * Whether to filter profanity from the transcription.\n */\n filterProfanity: z.boolean().nullish(),\n /**\n * Whether to format text with punctuation and capitalization.\n */\n formatText: z.boolean().nullish(),\n /**\n * Whether to enable IAB categories detection.\n */\n iabCategories: z.boolean().nullish(),\n /**\n * Language code for the transcription.\n */\n languageCode: z.union([z.literal('en'), z.string()]).nullish(),\n /**\n * Confidence threshold for language detection.\n */\n languageConfidenceThreshold: z.number().nullish(),\n /**\n * Whether to enable language detection.\n */\n languageDetection: z.boolean().nullish(),\n /**\n * Whether to process audio as multichannel.\n */\n multichannel: z.boolean().nullish(),\n /**\n * Whether to add punctuation to the transcription.\n */\n punctuate: z.boolean().nullish(),\n /**\n * Whether to redact personally identifiable information (PII).\n */\n redactPii: z.boolean().nullish(),\n /**\n * Whether to redact PII in the audio file.\n */\n redactPiiAudio: z.boolean().nullish(),\n /**\n * Audio format for PII redaction.\n */\n redactPiiAudioQuality: z.string().nullish(),\n /**\n * List of PII types to redact.\n */\n redactPiiPolicies: z.array(z.string()).nullish(),\n /**\n * Substitution method for redacted PII.\n */\n redactPiiSub: z.string().nullish(),\n /**\n * Whether to enable sentiment analysis.\n */\n sentimentAnalysis: z.boolean().nullish(),\n /**\n * Whether to identify different speakers in the audio.\n */\n speakerLabels: z.boolean().nullish(),\n /**\n * Number of speakers expected in the audio.\n */\n speakersExpected: z.number().int().nullish(),\n /**\n * Threshold for speech detection (0-1).\n */\n speechThreshold: z.number().min(0).max(1).nullish(),\n /**\n * Whether to generate a summary of the transcription.\n */\n summarization: z.boolean().nullish(),\n /**\n * Model to use for summarization.\n */\n summaryModel: z.string().nullish(),\n /**\n * Type of summary to generate.\n */\n summaryType: z.string().nullish(),\n /**\n * Name of the authentication header for webhook requests.\n */\n webhookAuthHeaderName: z.string().nullish(),\n /**\n * Value of the authentication header for webhook requests.\n */\n webhookAuthHeaderValue: z.string().nullish(),\n /**\n * URL to send webhook notifications to.\n */\n webhookUrl: z.string().nullish(),\n /**\n * List of words to boost recognition for.\n */\n wordBoost: z.array(z.string()).nullish(),\n});\n\nexport type AssemblyAITranscriptionModelOptions = z.infer<\n typeof assemblyaiTranscriptionModelOptionsSchema\n>;\n\ninterface AssemblyAITranscriptionModelConfig extends AssemblyAIConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n /**\n * The polling interval for checking transcript status in milliseconds.\n */\n pollingInterval?: number;\n}\n\nexport class AssemblyAITranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n private readonly POLLING_INTERVAL_MS = 3000;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: AssemblyAITranscriptionModelId,\n private readonly config: AssemblyAITranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const assemblyaiOptions = await parseProviderOptions({\n provider: 'assemblyai',\n providerOptions,\n schema: assemblyaiTranscriptionModelOptionsSchema,\n });\n\n const body: Omit<AssemblyAITranscriptionAPITypes, 'audio_url'> = {\n speech_model: this.modelId,\n };\n\n // Add provider-specific options\n if (assemblyaiOptions) {\n body.audio_end_at = assemblyaiOptions.audioEndAt ?? undefined;\n body.audio_start_from = assemblyaiOptions.audioStartFrom ?? undefined;\n body.auto_chapters = assemblyaiOptions.autoChapters ?? undefined;\n body.auto_highlights = assemblyaiOptions.autoHighlights ?? undefined;\n body.boost_param = (assemblyaiOptions.boostParam as never) ?? undefined;\n body.content_safety = assemblyaiOptions.contentSafety ?? undefined;\n body.content_safety_confidence =\n assemblyaiOptions.contentSafetyConfidence ?? undefined;\n body.custom_spelling =\n (assemblyaiOptions.customSpelling as never) ?? undefined;\n body.disfluencies = assemblyaiOptions.disfluencies ?? undefined;\n body.entity_detection = assemblyaiOptions.entityDetection ?? undefined;\n body.filter_profanity = assemblyaiOptions.filterProfanity ?? undefined;\n body.format_text = assemblyaiOptions.formatText ?? undefined;\n body.iab_categories = assemblyaiOptions.iabCategories ?? undefined;\n body.language_code =\n (assemblyaiOptions.languageCode as never) ?? undefined;\n body.language_confidence_threshold =\n assemblyaiOptions.languageConfidenceThreshold ?? undefined;\n body.language_detection =\n assemblyaiOptions.languageDetection ?? undefined;\n body.multichannel = assemblyaiOptions.multichannel ?? undefined;\n body.punctuate = assemblyaiOptions.punctuate ?? undefined;\n body.redact_pii = assemblyaiOptions.redactPii ?? undefined;\n body.redact_pii_audio = assemblyaiOptions.redactPiiAudio ?? undefined;\n body.redact_pii_audio_quality =\n (assemblyaiOptions.redactPiiAudioQuality as never) ?? undefined;\n body.redact_pii_policies =\n (assemblyaiOptions.redactPiiPolicies as never) ?? undefined;\n body.redact_pii_sub =\n (assemblyaiOptions.redactPiiSub as never) ?? undefined;\n body.sentiment_analysis =\n assemblyaiOptions.sentimentAnalysis ?? undefined;\n body.speaker_labels = assemblyaiOptions.speakerLabels ?? undefined;\n body.speakers_expected = assemblyaiOptions.speakersExpected ?? undefined;\n body.speech_threshold = assemblyaiOptions.speechThreshold ?? undefined;\n body.summarization = assemblyaiOptions.summarization ?? undefined;\n body.summary_model =\n (assemblyaiOptions.summaryModel as never) ?? undefined;\n body.summary_type = (assemblyaiOptions.summaryType as never) ?? undefined;\n body.webhook_auth_header_name =\n assemblyaiOptions.webhookAuthHeaderName ?? undefined;\n body.webhook_auth_header_value =\n assemblyaiOptions.webhookAuthHeaderValue ?? undefined;\n body.webhook_url = assemblyaiOptions.webhookUrl ?? undefined;\n body.word_boost = assemblyaiOptions.wordBoost ?? undefined;\n }\n\n return {\n body,\n warnings,\n };\n }\n\n /**\n * Polls the given transcript until we have a status other than `processing` or `queued`.\n *\n * @see https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file#step-33\n */\n private async waitForCompletion(\n transcriptId: string,\n headers: Record<string, string | undefined> | undefined,\n abortSignal?: AbortSignal,\n ): Promise<{\n transcript: z.infer<typeof assemblyaiTranscriptionResponseSchema>;\n responseHeaders: Record<string, string>;\n }> {\n const pollingInterval =\n this.config.pollingInterval ?? this.POLLING_INTERVAL_MS;\n\n while (true) {\n if (abortSignal?.aborted) {\n throw new Error('Transcription request was aborted');\n }\n\n const response = await fetch(\n this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n {\n method: 'GET',\n headers: combineHeaders(\n this.config.headers(),\n headers,\n ) as HeadersInit,\n signal: abortSignal,\n },\n );\n\n if (!response.ok) {\n throw await assemblyaiFailedResponseHandler({\n response,\n url: this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n requestBodyValues: {},\n });\n }\n\n const transcript = assemblyaiTranscriptionResponseSchema.parse(\n await response.json(),\n );\n\n if (transcript.status === 'completed') {\n return {\n transcript,\n responseHeaders: extractResponseHeaders(response),\n };\n }\n\n if (transcript.status === 'error') {\n throw new Error(\n `Transcription failed: ${transcript.error ?? 'Unknown error'}`,\n );\n }\n\n await new Promise(resolve => setTimeout(resolve, pollingInterval));\n }\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const { value: uploadResponse } = await postToApi({\n url: this.config.url({\n path: '/v2/upload',\n modelId: '',\n }),\n headers: {\n 'Content-Type': 'application/octet-stream',\n ...combineHeaders(this.config.headers(), options.headers),\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiUploadResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { body, warnings } = await this.getArgs(options);\n\n const { value: submitResponse } = await postJsonToApi({\n url: this.config.url({\n path: '/v2/transcript',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n audio_url: uploadResponse.upload_url,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiSubmitResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { transcript, responseHeaders } = await this.waitForCompletion(\n submitResponse.id,\n options.headers,\n options.abortSignal,\n );\n\n return {\n text: transcript.text ?? '',\n segments:\n transcript.words?.map(word => ({\n text: word.text,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: transcript.language_code ?? undefined,\n durationInSeconds:\n transcript.audio_duration ?? transcript.words?.at(-1)?.end ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders, // Headers from final GET request\n body: transcript, // Raw response from final GET request\n },\n };\n }\n}\n\nconst assemblyaiUploadResponseSchema = z.object({\n upload_url: z.string(),\n});\n\nconst assemblyaiSubmitResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n});\n\nconst assemblyaiTranscriptionResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n text: z.string().nullish(),\n language_code: z.string().nullish(),\n words: z\n .array(\n z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n }),\n )\n .nullish(),\n audio_duration: z.number().nullish(),\n error: z.string().nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const assemblyaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type AssemblyAIErrorData = z.infer<typeof assemblyaiErrorDataSchema>;\n\nexport const assemblyaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: assemblyaiErrorDataSchema,\n errorToMessage: data => data.error.message,\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":["import_provider_utils","import_provider_utils","import_v4"]}
|
|
1
|
+
{"version":3,"sources":["../src/assemblyai-provider.ts","../src/assemblyai-transcription-model.ts","../src/assemblyai-error.ts","../src/version.ts"],"sourcesContent":["import {\n TranscriptionModelV4,\n ProviderV4,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { AssemblyAITranscriptionModel } from './assemblyai-transcription-model';\nimport { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { VERSION } from './version';\n\nexport interface AssemblyAIProvider extends ProviderV4 {\n (\n modelId: 'best',\n settings?: {},\n ): {\n transcription: AssemblyAITranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: AssemblyAITranscriptionModelId): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface AssemblyAIProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create an AssemblyAI provider instance.\n */\nexport function createAssemblyAI(\n options: AssemblyAIProviderSettings = {},\n): AssemblyAIProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ASSEMBLYAI_API_KEY',\n description: 'AssemblyAI',\n }),\n ...options.headers,\n },\n `ai-sdk/assemblyai/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: AssemblyAITranscriptionModelId) =>\n new AssemblyAITranscriptionModel(modelId, {\n provider: `assemblyai.transcription`,\n url: ({ path }) => `https://api.assemblyai.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AssemblyAITranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'AssemblyAI does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as AssemblyAIProvider;\n}\n\n/**\n * Default AssemblyAI provider instance.\n */\nexport const assemblyai = createAssemblyAI();\n","import { TranscriptionModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n extractResponseHeaders,\n parseProviderOptions,\n postJsonToApi,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { AssemblyAIConfig } from './assemblyai-config';\nimport { assemblyaiFailedResponseHandler } from './assemblyai-error';\nimport { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { AssemblyAITranscriptionAPITypes } from './assemblyai-api-types';\n\n// https://www.assemblyai.com/docs/api-reference/transcripts/submit\nconst assemblyaiTranscriptionModelOptionsSchema = z.object({\n /**\n * End time of the audio in milliseconds.\n */\n audioEndAt: z.number().int().nullish(),\n /**\n * Start time of the audio in milliseconds.\n */\n audioStartFrom: z.number().int().nullish(),\n /**\n * Whether to automatically generate chapters for the transcription.\n */\n autoChapters: z.boolean().nullish(),\n /**\n * Whether to automatically generate highlights for the transcription.\n */\n autoHighlights: z.boolean().nullish(),\n /**\n * Boost parameter for the transcription.\n * Allowed values: 'low', 'default', 'high'.\n */\n boostParam: z.string().nullish(),\n /**\n * Whether to enable content safety filtering.\n */\n contentSafety: z.boolean().nullish(),\n /**\n * Confidence threshold for content safety filtering (25-100).\n */\n contentSafetyConfidence: z.number().int().min(25).max(100).nullish(),\n /**\n * Custom spelling rules for the transcription.\n */\n customSpelling: z\n .array(\n z.object({\n from: z.array(z.string()),\n to: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to include filler words (um, uh, etc.) in the transcription.\n */\n disfluencies: z.boolean().nullish(),\n /**\n * Whether to enable entity detection.\n */\n entityDetection: z.boolean().nullish(),\n /**\n * Whether to filter profanity from the transcription.\n */\n filterProfanity: z.boolean().nullish(),\n /**\n * Whether to format text with punctuation and capitalization.\n */\n formatText: z.boolean().nullish(),\n /**\n * Whether to enable IAB categories detection.\n */\n iabCategories: z.boolean().nullish(),\n /**\n * Language code for the transcription.\n */\n languageCode: z.union([z.literal('en'), z.string()]).nullish(),\n /**\n * Confidence threshold for language detection.\n */\n languageConfidenceThreshold: z.number().nullish(),\n /**\n * Whether to enable language detection.\n */\n languageDetection: z.boolean().nullish(),\n /**\n * Whether to process audio as multichannel.\n */\n multichannel: z.boolean().nullish(),\n /**\n * Whether to add punctuation to the transcription.\n */\n punctuate: z.boolean().nullish(),\n /**\n * Whether to redact personally identifiable information (PII).\n */\n redactPii: z.boolean().nullish(),\n /**\n * Whether to redact PII in the audio file.\n */\n redactPiiAudio: z.boolean().nullish(),\n /**\n * Audio format for PII redaction.\n */\n redactPiiAudioQuality: z.string().nullish(),\n /**\n * List of PII types to redact.\n */\n redactPiiPolicies: z.array(z.string()).nullish(),\n /**\n * Substitution method for redacted PII.\n */\n redactPiiSub: z.string().nullish(),\n /**\n * Whether to enable sentiment analysis.\n */\n sentimentAnalysis: z.boolean().nullish(),\n /**\n * Whether to identify different speakers in the audio.\n */\n speakerLabels: z.boolean().nullish(),\n /**\n * Number of speakers expected in the audio.\n */\n speakersExpected: z.number().int().nullish(),\n /**\n * Threshold for speech detection (0-1).\n */\n speechThreshold: z.number().min(0).max(1).nullish(),\n /**\n * Whether to generate a summary of the transcription.\n */\n summarization: z.boolean().nullish(),\n /**\n * Model to use for summarization.\n */\n summaryModel: z.string().nullish(),\n /**\n * Type of summary to generate.\n */\n summaryType: z.string().nullish(),\n /**\n * Name of the authentication header for webhook requests.\n */\n webhookAuthHeaderName: z.string().nullish(),\n /**\n * Value of the authentication header for webhook requests.\n */\n webhookAuthHeaderValue: z.string().nullish(),\n /**\n * URL to send webhook notifications to.\n */\n webhookUrl: z.string().nullish(),\n /**\n * List of words to boost recognition for.\n */\n wordBoost: z.array(z.string()).nullish(),\n});\n\nexport type AssemblyAITranscriptionModelOptions = z.infer<\n typeof assemblyaiTranscriptionModelOptionsSchema\n>;\n\ninterface AssemblyAITranscriptionModelConfig extends AssemblyAIConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n /**\n * The polling interval for checking transcript status in milliseconds.\n */\n pollingInterval?: number;\n}\n\nexport class AssemblyAITranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n private readonly POLLING_INTERVAL_MS = 3000;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: AssemblyAITranscriptionModelId,\n private readonly config: AssemblyAITranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const assemblyaiOptions = await parseProviderOptions({\n provider: 'assemblyai',\n providerOptions,\n schema: assemblyaiTranscriptionModelOptionsSchema,\n });\n\n const body: Omit<AssemblyAITranscriptionAPITypes, 'audio_url'> = {\n speech_model: this.modelId,\n };\n\n // Add provider-specific options\n if (assemblyaiOptions) {\n body.audio_end_at = assemblyaiOptions.audioEndAt ?? undefined;\n body.audio_start_from = assemblyaiOptions.audioStartFrom ?? undefined;\n body.auto_chapters = assemblyaiOptions.autoChapters ?? undefined;\n body.auto_highlights = assemblyaiOptions.autoHighlights ?? undefined;\n body.boost_param = (assemblyaiOptions.boostParam as never) ?? undefined;\n body.content_safety = assemblyaiOptions.contentSafety ?? undefined;\n body.content_safety_confidence =\n assemblyaiOptions.contentSafetyConfidence ?? undefined;\n body.custom_spelling =\n (assemblyaiOptions.customSpelling as never) ?? undefined;\n body.disfluencies = assemblyaiOptions.disfluencies ?? undefined;\n body.entity_detection = assemblyaiOptions.entityDetection ?? undefined;\n body.filter_profanity = assemblyaiOptions.filterProfanity ?? undefined;\n body.format_text = assemblyaiOptions.formatText ?? undefined;\n body.iab_categories = assemblyaiOptions.iabCategories ?? undefined;\n body.language_code =\n (assemblyaiOptions.languageCode as never) ?? undefined;\n body.language_confidence_threshold =\n assemblyaiOptions.languageConfidenceThreshold ?? undefined;\n body.language_detection =\n assemblyaiOptions.languageDetection ?? undefined;\n body.multichannel = assemblyaiOptions.multichannel ?? undefined;\n body.punctuate = assemblyaiOptions.punctuate ?? undefined;\n body.redact_pii = assemblyaiOptions.redactPii ?? undefined;\n body.redact_pii_audio = assemblyaiOptions.redactPiiAudio ?? undefined;\n body.redact_pii_audio_quality =\n (assemblyaiOptions.redactPiiAudioQuality as never) ?? undefined;\n body.redact_pii_policies =\n (assemblyaiOptions.redactPiiPolicies as never) ?? undefined;\n body.redact_pii_sub =\n (assemblyaiOptions.redactPiiSub as never) ?? undefined;\n body.sentiment_analysis =\n assemblyaiOptions.sentimentAnalysis ?? undefined;\n body.speaker_labels = assemblyaiOptions.speakerLabels ?? undefined;\n body.speakers_expected = assemblyaiOptions.speakersExpected ?? undefined;\n body.speech_threshold = assemblyaiOptions.speechThreshold ?? undefined;\n body.summarization = assemblyaiOptions.summarization ?? undefined;\n body.summary_model =\n (assemblyaiOptions.summaryModel as never) ?? undefined;\n body.summary_type = (assemblyaiOptions.summaryType as never) ?? undefined;\n body.webhook_auth_header_name =\n assemblyaiOptions.webhookAuthHeaderName ?? undefined;\n body.webhook_auth_header_value =\n assemblyaiOptions.webhookAuthHeaderValue ?? undefined;\n body.webhook_url = assemblyaiOptions.webhookUrl ?? undefined;\n body.word_boost = assemblyaiOptions.wordBoost ?? undefined;\n }\n\n return {\n body,\n warnings,\n };\n }\n\n /**\n * Polls the given transcript until we have a status other than `processing` or `queued`.\n *\n * @see https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file#step-33\n */\n private async waitForCompletion(\n transcriptId: string,\n headers: Record<string, string | undefined> | undefined,\n abortSignal?: AbortSignal,\n ): Promise<{\n transcript: z.infer<typeof assemblyaiTranscriptionResponseSchema>;\n responseHeaders: Record<string, string>;\n }> {\n const pollingInterval =\n this.config.pollingInterval ?? this.POLLING_INTERVAL_MS;\n\n while (true) {\n if (abortSignal?.aborted) {\n throw new Error('Transcription request was aborted');\n }\n\n const response = await fetch(\n this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n {\n method: 'GET',\n headers: combineHeaders(\n this.config.headers(),\n headers,\n ) as HeadersInit,\n signal: abortSignal,\n },\n );\n\n if (!response.ok) {\n throw await assemblyaiFailedResponseHandler({\n response,\n url: this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n requestBodyValues: {},\n });\n }\n\n const transcript = assemblyaiTranscriptionResponseSchema.parse(\n await response.json(),\n );\n\n if (transcript.status === 'completed') {\n return {\n transcript,\n responseHeaders: extractResponseHeaders(response),\n };\n }\n\n if (transcript.status === 'error') {\n throw new Error(\n `Transcription failed: ${transcript.error ?? 'Unknown error'}`,\n );\n }\n\n await new Promise(resolve => setTimeout(resolve, pollingInterval));\n }\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const { value: uploadResponse } = await postToApi({\n url: this.config.url({\n path: '/v2/upload',\n modelId: '',\n }),\n headers: {\n 'Content-Type': 'application/octet-stream',\n ...combineHeaders(this.config.headers(), options.headers),\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiUploadResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { body, warnings } = await this.getArgs(options);\n\n const { value: submitResponse } = await postJsonToApi({\n url: this.config.url({\n path: '/v2/transcript',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n audio_url: uploadResponse.upload_url,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiSubmitResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { transcript, responseHeaders } = await this.waitForCompletion(\n submitResponse.id,\n options.headers,\n options.abortSignal,\n );\n\n return {\n text: transcript.text ?? '',\n segments:\n transcript.words?.map(word => ({\n text: word.text,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: transcript.language_code ?? undefined,\n durationInSeconds:\n transcript.audio_duration ?? transcript.words?.at(-1)?.end ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders, // Headers from final GET request\n body: transcript, // Raw response from final GET request\n },\n };\n }\n}\n\nconst assemblyaiUploadResponseSchema = z.object({\n upload_url: z.string(),\n});\n\nconst assemblyaiSubmitResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n});\n\nconst assemblyaiTranscriptionResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n text: z.string().nullish(),\n language_code: z.string().nullish(),\n words: z\n .array(\n z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n }),\n )\n .nullish(),\n audio_duration: z.number().nullish(),\n error: z.string().nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const assemblyaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type AssemblyAIErrorData = z.infer<typeof assemblyaiErrorDataSchema>;\n\nexport const assemblyaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: assemblyaiErrorDataSchema,\n errorToMessage: data => data.error.message,\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"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/assemblyai",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.21",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"license": "Apache-2.0",
|
|
5
6
|
"sideEffects": false,
|
|
6
7
|
"main": "./dist/index.js",
|
|
7
|
-
"module": "./dist/index.mjs",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"files": [
|
|
10
10
|
"dist/**/*",
|
|
@@ -24,20 +24,20 @@
|
|
|
24
24
|
"./package.json": "./package.json",
|
|
25
25
|
".": {
|
|
26
26
|
"types": "./dist/index.d.ts",
|
|
27
|
-
"import": "./dist/index.
|
|
28
|
-
"
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/provider": "4.0.0-beta.
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.0-beta.
|
|
32
|
+
"@ai-sdk/provider": "4.0.0-beta.11",
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.0-beta.19"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "20.17.24",
|
|
37
37
|
"tsup": "^8",
|
|
38
38
|
"typescript": "5.6.3",
|
|
39
39
|
"zod": "3.25.76",
|
|
40
|
-
"@ai-sdk/test-server": "2.0.0-beta.
|
|
40
|
+
"@ai-sdk/test-server": "2.0.0-beta.1",
|
|
41
41
|
"@vercel/ai-tsconfig": "0.0.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
package/dist/index.d.mts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { TranscriptionModelV4, ProviderV4 } from '@ai-sdk/provider';
|
|
2
|
-
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
|
-
import { z } from 'zod/v4';
|
|
4
|
-
|
|
5
|
-
type AssemblyAIConfig = {
|
|
6
|
-
provider: string;
|
|
7
|
-
url: (options: {
|
|
8
|
-
modelId: string;
|
|
9
|
-
path: string;
|
|
10
|
-
}) => string;
|
|
11
|
-
headers: () => Record<string, string | undefined>;
|
|
12
|
-
fetch?: FetchFunction;
|
|
13
|
-
generateId?: () => string;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
type AssemblyAITranscriptionModelId = 'best' | 'nano';
|
|
17
|
-
|
|
18
|
-
declare const assemblyaiTranscriptionModelOptionsSchema: z.ZodObject<{
|
|
19
|
-
audioEndAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
20
|
-
audioStartFrom: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
21
|
-
autoChapters: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
22
|
-
autoHighlights: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
23
|
-
boostParam: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
24
|
-
contentSafety: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
25
|
-
contentSafetyConfidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
26
|
-
customSpelling: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
27
|
-
from: z.ZodArray<z.ZodString>;
|
|
28
|
-
to: z.ZodString;
|
|
29
|
-
}, z.core.$strip>>>>;
|
|
30
|
-
disfluencies: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
31
|
-
entityDetection: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
32
|
-
filterProfanity: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
33
|
-
formatText: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
34
|
-
iabCategories: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
35
|
-
languageCode: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodLiteral<"en">, z.ZodString]>>>;
|
|
36
|
-
languageConfidenceThreshold: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
37
|
-
languageDetection: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
38
|
-
multichannel: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
39
|
-
punctuate: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
40
|
-
redactPii: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
41
|
-
redactPiiAudio: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
42
|
-
redactPiiAudioQuality: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
43
|
-
redactPiiPolicies: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
44
|
-
redactPiiSub: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
45
|
-
sentimentAnalysis: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
46
|
-
speakerLabels: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
47
|
-
speakersExpected: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
48
|
-
speechThreshold: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
49
|
-
summarization: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
50
|
-
summaryModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
51
|
-
summaryType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
52
|
-
webhookAuthHeaderName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
53
|
-
webhookAuthHeaderValue: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
54
|
-
webhookUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
55
|
-
wordBoost: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
56
|
-
}, z.core.$strip>;
|
|
57
|
-
type AssemblyAITranscriptionModelOptions = z.infer<typeof assemblyaiTranscriptionModelOptionsSchema>;
|
|
58
|
-
interface AssemblyAITranscriptionModelConfig extends AssemblyAIConfig {
|
|
59
|
-
_internal?: {
|
|
60
|
-
currentDate?: () => Date;
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* The polling interval for checking transcript status in milliseconds.
|
|
64
|
-
*/
|
|
65
|
-
pollingInterval?: number;
|
|
66
|
-
}
|
|
67
|
-
declare class AssemblyAITranscriptionModel implements TranscriptionModelV4 {
|
|
68
|
-
readonly modelId: AssemblyAITranscriptionModelId;
|
|
69
|
-
private readonly config;
|
|
70
|
-
readonly specificationVersion = "v4";
|
|
71
|
-
private readonly POLLING_INTERVAL_MS;
|
|
72
|
-
get provider(): string;
|
|
73
|
-
constructor(modelId: AssemblyAITranscriptionModelId, config: AssemblyAITranscriptionModelConfig);
|
|
74
|
-
private getArgs;
|
|
75
|
-
/**
|
|
76
|
-
* Polls the given transcript until we have a status other than `processing` or `queued`.
|
|
77
|
-
*
|
|
78
|
-
* @see https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file#step-33
|
|
79
|
-
*/
|
|
80
|
-
private waitForCompletion;
|
|
81
|
-
doGenerate(options: Parameters<TranscriptionModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>>;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
interface AssemblyAIProvider extends ProviderV4 {
|
|
85
|
-
(modelId: 'best', settings?: {}): {
|
|
86
|
-
transcription: AssemblyAITranscriptionModel;
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* Creates a model for transcription.
|
|
90
|
-
*/
|
|
91
|
-
transcription(modelId: AssemblyAITranscriptionModelId): TranscriptionModelV4;
|
|
92
|
-
/**
|
|
93
|
-
* @deprecated Use `embeddingModel` instead.
|
|
94
|
-
*/
|
|
95
|
-
textEmbeddingModel(modelId: string): never;
|
|
96
|
-
}
|
|
97
|
-
interface AssemblyAIProviderSettings {
|
|
98
|
-
/**
|
|
99
|
-
* API key for authenticating requests.
|
|
100
|
-
*/
|
|
101
|
-
apiKey?: string;
|
|
102
|
-
/**
|
|
103
|
-
* Custom headers to include in the requests.
|
|
104
|
-
*/
|
|
105
|
-
headers?: Record<string, string>;
|
|
106
|
-
/**
|
|
107
|
-
* Custom fetch implementation. You can use it as a middleware to intercept requests,
|
|
108
|
-
* or to provide a custom fetch implementation for e.g. testing.
|
|
109
|
-
*/
|
|
110
|
-
fetch?: FetchFunction;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Create an AssemblyAI provider instance.
|
|
114
|
-
*/
|
|
115
|
-
declare function createAssemblyAI(options?: AssemblyAIProviderSettings): AssemblyAIProvider;
|
|
116
|
-
/**
|
|
117
|
-
* Default AssemblyAI provider instance.
|
|
118
|
-
*/
|
|
119
|
-
declare const assemblyai: AssemblyAIProvider;
|
|
120
|
-
|
|
121
|
-
declare const VERSION: string;
|
|
122
|
-
|
|
123
|
-
export { type AssemblyAIProvider, type AssemblyAIProviderSettings, type AssemblyAITranscriptionModelOptions, VERSION, assemblyai, createAssemblyAI };
|
package/dist/index.mjs
DELETED
|
@@ -1,439 +0,0 @@
|
|
|
1
|
-
// src/assemblyai-provider.ts
|
|
2
|
-
import {
|
|
3
|
-
NoSuchModelError
|
|
4
|
-
} from "@ai-sdk/provider";
|
|
5
|
-
import {
|
|
6
|
-
loadApiKey,
|
|
7
|
-
withUserAgentSuffix
|
|
8
|
-
} from "@ai-sdk/provider-utils";
|
|
9
|
-
|
|
10
|
-
// src/assemblyai-transcription-model.ts
|
|
11
|
-
import {
|
|
12
|
-
combineHeaders,
|
|
13
|
-
createJsonResponseHandler,
|
|
14
|
-
extractResponseHeaders,
|
|
15
|
-
parseProviderOptions,
|
|
16
|
-
postJsonToApi,
|
|
17
|
-
postToApi
|
|
18
|
-
} from "@ai-sdk/provider-utils";
|
|
19
|
-
import { z as z2 } from "zod/v4";
|
|
20
|
-
|
|
21
|
-
// src/assemblyai-error.ts
|
|
22
|
-
import { z } from "zod/v4";
|
|
23
|
-
import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
|
|
24
|
-
var assemblyaiErrorDataSchema = z.object({
|
|
25
|
-
error: z.object({
|
|
26
|
-
message: z.string(),
|
|
27
|
-
code: z.number()
|
|
28
|
-
})
|
|
29
|
-
});
|
|
30
|
-
var assemblyaiFailedResponseHandler = createJsonErrorResponseHandler({
|
|
31
|
-
errorSchema: assemblyaiErrorDataSchema,
|
|
32
|
-
errorToMessage: (data) => data.error.message
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
// src/assemblyai-transcription-model.ts
|
|
36
|
-
var assemblyaiTranscriptionModelOptionsSchema = z2.object({
|
|
37
|
-
/**
|
|
38
|
-
* End time of the audio in milliseconds.
|
|
39
|
-
*/
|
|
40
|
-
audioEndAt: z2.number().int().nullish(),
|
|
41
|
-
/**
|
|
42
|
-
* Start time of the audio in milliseconds.
|
|
43
|
-
*/
|
|
44
|
-
audioStartFrom: z2.number().int().nullish(),
|
|
45
|
-
/**
|
|
46
|
-
* Whether to automatically generate chapters for the transcription.
|
|
47
|
-
*/
|
|
48
|
-
autoChapters: z2.boolean().nullish(),
|
|
49
|
-
/**
|
|
50
|
-
* Whether to automatically generate highlights for the transcription.
|
|
51
|
-
*/
|
|
52
|
-
autoHighlights: z2.boolean().nullish(),
|
|
53
|
-
/**
|
|
54
|
-
* Boost parameter for the transcription.
|
|
55
|
-
* Allowed values: 'low', 'default', 'high'.
|
|
56
|
-
*/
|
|
57
|
-
boostParam: z2.string().nullish(),
|
|
58
|
-
/**
|
|
59
|
-
* Whether to enable content safety filtering.
|
|
60
|
-
*/
|
|
61
|
-
contentSafety: z2.boolean().nullish(),
|
|
62
|
-
/**
|
|
63
|
-
* Confidence threshold for content safety filtering (25-100).
|
|
64
|
-
*/
|
|
65
|
-
contentSafetyConfidence: z2.number().int().min(25).max(100).nullish(),
|
|
66
|
-
/**
|
|
67
|
-
* Custom spelling rules for the transcription.
|
|
68
|
-
*/
|
|
69
|
-
customSpelling: z2.array(
|
|
70
|
-
z2.object({
|
|
71
|
-
from: z2.array(z2.string()),
|
|
72
|
-
to: z2.string()
|
|
73
|
-
})
|
|
74
|
-
).nullish(),
|
|
75
|
-
/**
|
|
76
|
-
* Whether to include filler words (um, uh, etc.) in the transcription.
|
|
77
|
-
*/
|
|
78
|
-
disfluencies: z2.boolean().nullish(),
|
|
79
|
-
/**
|
|
80
|
-
* Whether to enable entity detection.
|
|
81
|
-
*/
|
|
82
|
-
entityDetection: z2.boolean().nullish(),
|
|
83
|
-
/**
|
|
84
|
-
* Whether to filter profanity from the transcription.
|
|
85
|
-
*/
|
|
86
|
-
filterProfanity: z2.boolean().nullish(),
|
|
87
|
-
/**
|
|
88
|
-
* Whether to format text with punctuation and capitalization.
|
|
89
|
-
*/
|
|
90
|
-
formatText: z2.boolean().nullish(),
|
|
91
|
-
/**
|
|
92
|
-
* Whether to enable IAB categories detection.
|
|
93
|
-
*/
|
|
94
|
-
iabCategories: z2.boolean().nullish(),
|
|
95
|
-
/**
|
|
96
|
-
* Language code for the transcription.
|
|
97
|
-
*/
|
|
98
|
-
languageCode: z2.union([z2.literal("en"), z2.string()]).nullish(),
|
|
99
|
-
/**
|
|
100
|
-
* Confidence threshold for language detection.
|
|
101
|
-
*/
|
|
102
|
-
languageConfidenceThreshold: z2.number().nullish(),
|
|
103
|
-
/**
|
|
104
|
-
* Whether to enable language detection.
|
|
105
|
-
*/
|
|
106
|
-
languageDetection: z2.boolean().nullish(),
|
|
107
|
-
/**
|
|
108
|
-
* Whether to process audio as multichannel.
|
|
109
|
-
*/
|
|
110
|
-
multichannel: z2.boolean().nullish(),
|
|
111
|
-
/**
|
|
112
|
-
* Whether to add punctuation to the transcription.
|
|
113
|
-
*/
|
|
114
|
-
punctuate: z2.boolean().nullish(),
|
|
115
|
-
/**
|
|
116
|
-
* Whether to redact personally identifiable information (PII).
|
|
117
|
-
*/
|
|
118
|
-
redactPii: z2.boolean().nullish(),
|
|
119
|
-
/**
|
|
120
|
-
* Whether to redact PII in the audio file.
|
|
121
|
-
*/
|
|
122
|
-
redactPiiAudio: z2.boolean().nullish(),
|
|
123
|
-
/**
|
|
124
|
-
* Audio format for PII redaction.
|
|
125
|
-
*/
|
|
126
|
-
redactPiiAudioQuality: z2.string().nullish(),
|
|
127
|
-
/**
|
|
128
|
-
* List of PII types to redact.
|
|
129
|
-
*/
|
|
130
|
-
redactPiiPolicies: z2.array(z2.string()).nullish(),
|
|
131
|
-
/**
|
|
132
|
-
* Substitution method for redacted PII.
|
|
133
|
-
*/
|
|
134
|
-
redactPiiSub: z2.string().nullish(),
|
|
135
|
-
/**
|
|
136
|
-
* Whether to enable sentiment analysis.
|
|
137
|
-
*/
|
|
138
|
-
sentimentAnalysis: z2.boolean().nullish(),
|
|
139
|
-
/**
|
|
140
|
-
* Whether to identify different speakers in the audio.
|
|
141
|
-
*/
|
|
142
|
-
speakerLabels: z2.boolean().nullish(),
|
|
143
|
-
/**
|
|
144
|
-
* Number of speakers expected in the audio.
|
|
145
|
-
*/
|
|
146
|
-
speakersExpected: z2.number().int().nullish(),
|
|
147
|
-
/**
|
|
148
|
-
* Threshold for speech detection (0-1).
|
|
149
|
-
*/
|
|
150
|
-
speechThreshold: z2.number().min(0).max(1).nullish(),
|
|
151
|
-
/**
|
|
152
|
-
* Whether to generate a summary of the transcription.
|
|
153
|
-
*/
|
|
154
|
-
summarization: z2.boolean().nullish(),
|
|
155
|
-
/**
|
|
156
|
-
* Model to use for summarization.
|
|
157
|
-
*/
|
|
158
|
-
summaryModel: z2.string().nullish(),
|
|
159
|
-
/**
|
|
160
|
-
* Type of summary to generate.
|
|
161
|
-
*/
|
|
162
|
-
summaryType: z2.string().nullish(),
|
|
163
|
-
/**
|
|
164
|
-
* Name of the authentication header for webhook requests.
|
|
165
|
-
*/
|
|
166
|
-
webhookAuthHeaderName: z2.string().nullish(),
|
|
167
|
-
/**
|
|
168
|
-
* Value of the authentication header for webhook requests.
|
|
169
|
-
*/
|
|
170
|
-
webhookAuthHeaderValue: z2.string().nullish(),
|
|
171
|
-
/**
|
|
172
|
-
* URL to send webhook notifications to.
|
|
173
|
-
*/
|
|
174
|
-
webhookUrl: z2.string().nullish(),
|
|
175
|
-
/**
|
|
176
|
-
* List of words to boost recognition for.
|
|
177
|
-
*/
|
|
178
|
-
wordBoost: z2.array(z2.string()).nullish()
|
|
179
|
-
});
|
|
180
|
-
var AssemblyAITranscriptionModel = class {
|
|
181
|
-
constructor(modelId, config) {
|
|
182
|
-
this.modelId = modelId;
|
|
183
|
-
this.config = config;
|
|
184
|
-
this.specificationVersion = "v4";
|
|
185
|
-
this.POLLING_INTERVAL_MS = 3e3;
|
|
186
|
-
}
|
|
187
|
-
get provider() {
|
|
188
|
-
return this.config.provider;
|
|
189
|
-
}
|
|
190
|
-
async getArgs({
|
|
191
|
-
providerOptions
|
|
192
|
-
}) {
|
|
193
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H;
|
|
194
|
-
const warnings = [];
|
|
195
|
-
const assemblyaiOptions = await parseProviderOptions({
|
|
196
|
-
provider: "assemblyai",
|
|
197
|
-
providerOptions,
|
|
198
|
-
schema: assemblyaiTranscriptionModelOptionsSchema
|
|
199
|
-
});
|
|
200
|
-
const body = {
|
|
201
|
-
speech_model: this.modelId
|
|
202
|
-
};
|
|
203
|
-
if (assemblyaiOptions) {
|
|
204
|
-
body.audio_end_at = (_a = assemblyaiOptions.audioEndAt) != null ? _a : void 0;
|
|
205
|
-
body.audio_start_from = (_b = assemblyaiOptions.audioStartFrom) != null ? _b : void 0;
|
|
206
|
-
body.auto_chapters = (_c = assemblyaiOptions.autoChapters) != null ? _c : void 0;
|
|
207
|
-
body.auto_highlights = (_d = assemblyaiOptions.autoHighlights) != null ? _d : void 0;
|
|
208
|
-
body.boost_param = (_e = assemblyaiOptions.boostParam) != null ? _e : void 0;
|
|
209
|
-
body.content_safety = (_f = assemblyaiOptions.contentSafety) != null ? _f : void 0;
|
|
210
|
-
body.content_safety_confidence = (_g = assemblyaiOptions.contentSafetyConfidence) != null ? _g : void 0;
|
|
211
|
-
body.custom_spelling = (_h = assemblyaiOptions.customSpelling) != null ? _h : void 0;
|
|
212
|
-
body.disfluencies = (_i = assemblyaiOptions.disfluencies) != null ? _i : void 0;
|
|
213
|
-
body.entity_detection = (_j = assemblyaiOptions.entityDetection) != null ? _j : void 0;
|
|
214
|
-
body.filter_profanity = (_k = assemblyaiOptions.filterProfanity) != null ? _k : void 0;
|
|
215
|
-
body.format_text = (_l = assemblyaiOptions.formatText) != null ? _l : void 0;
|
|
216
|
-
body.iab_categories = (_m = assemblyaiOptions.iabCategories) != null ? _m : void 0;
|
|
217
|
-
body.language_code = (_n = assemblyaiOptions.languageCode) != null ? _n : void 0;
|
|
218
|
-
body.language_confidence_threshold = (_o = assemblyaiOptions.languageConfidenceThreshold) != null ? _o : void 0;
|
|
219
|
-
body.language_detection = (_p = assemblyaiOptions.languageDetection) != null ? _p : void 0;
|
|
220
|
-
body.multichannel = (_q = assemblyaiOptions.multichannel) != null ? _q : void 0;
|
|
221
|
-
body.punctuate = (_r = assemblyaiOptions.punctuate) != null ? _r : void 0;
|
|
222
|
-
body.redact_pii = (_s = assemblyaiOptions.redactPii) != null ? _s : void 0;
|
|
223
|
-
body.redact_pii_audio = (_t = assemblyaiOptions.redactPiiAudio) != null ? _t : void 0;
|
|
224
|
-
body.redact_pii_audio_quality = (_u = assemblyaiOptions.redactPiiAudioQuality) != null ? _u : void 0;
|
|
225
|
-
body.redact_pii_policies = (_v = assemblyaiOptions.redactPiiPolicies) != null ? _v : void 0;
|
|
226
|
-
body.redact_pii_sub = (_w = assemblyaiOptions.redactPiiSub) != null ? _w : void 0;
|
|
227
|
-
body.sentiment_analysis = (_x = assemblyaiOptions.sentimentAnalysis) != null ? _x : void 0;
|
|
228
|
-
body.speaker_labels = (_y = assemblyaiOptions.speakerLabels) != null ? _y : void 0;
|
|
229
|
-
body.speakers_expected = (_z = assemblyaiOptions.speakersExpected) != null ? _z : void 0;
|
|
230
|
-
body.speech_threshold = (_A = assemblyaiOptions.speechThreshold) != null ? _A : void 0;
|
|
231
|
-
body.summarization = (_B = assemblyaiOptions.summarization) != null ? _B : void 0;
|
|
232
|
-
body.summary_model = (_C = assemblyaiOptions.summaryModel) != null ? _C : void 0;
|
|
233
|
-
body.summary_type = (_D = assemblyaiOptions.summaryType) != null ? _D : void 0;
|
|
234
|
-
body.webhook_auth_header_name = (_E = assemblyaiOptions.webhookAuthHeaderName) != null ? _E : void 0;
|
|
235
|
-
body.webhook_auth_header_value = (_F = assemblyaiOptions.webhookAuthHeaderValue) != null ? _F : void 0;
|
|
236
|
-
body.webhook_url = (_G = assemblyaiOptions.webhookUrl) != null ? _G : void 0;
|
|
237
|
-
body.word_boost = (_H = assemblyaiOptions.wordBoost) != null ? _H : void 0;
|
|
238
|
-
}
|
|
239
|
-
return {
|
|
240
|
-
body,
|
|
241
|
-
warnings
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Polls the given transcript until we have a status other than `processing` or `queued`.
|
|
246
|
-
*
|
|
247
|
-
* @see https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file#step-33
|
|
248
|
-
*/
|
|
249
|
-
async waitForCompletion(transcriptId, headers, abortSignal) {
|
|
250
|
-
var _a, _b;
|
|
251
|
-
const pollingInterval = (_a = this.config.pollingInterval) != null ? _a : this.POLLING_INTERVAL_MS;
|
|
252
|
-
while (true) {
|
|
253
|
-
if (abortSignal == null ? void 0 : abortSignal.aborted) {
|
|
254
|
-
throw new Error("Transcription request was aborted");
|
|
255
|
-
}
|
|
256
|
-
const response = await fetch(
|
|
257
|
-
this.config.url({
|
|
258
|
-
path: `/v2/transcript/${transcriptId}`,
|
|
259
|
-
modelId: this.modelId
|
|
260
|
-
}),
|
|
261
|
-
{
|
|
262
|
-
method: "GET",
|
|
263
|
-
headers: combineHeaders(
|
|
264
|
-
this.config.headers(),
|
|
265
|
-
headers
|
|
266
|
-
),
|
|
267
|
-
signal: abortSignal
|
|
268
|
-
}
|
|
269
|
-
);
|
|
270
|
-
if (!response.ok) {
|
|
271
|
-
throw await assemblyaiFailedResponseHandler({
|
|
272
|
-
response,
|
|
273
|
-
url: this.config.url({
|
|
274
|
-
path: `/v2/transcript/${transcriptId}`,
|
|
275
|
-
modelId: this.modelId
|
|
276
|
-
}),
|
|
277
|
-
requestBodyValues: {}
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
const transcript = assemblyaiTranscriptionResponseSchema.parse(
|
|
281
|
-
await response.json()
|
|
282
|
-
);
|
|
283
|
-
if (transcript.status === "completed") {
|
|
284
|
-
return {
|
|
285
|
-
transcript,
|
|
286
|
-
responseHeaders: extractResponseHeaders(response)
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
if (transcript.status === "error") {
|
|
290
|
-
throw new Error(
|
|
291
|
-
`Transcription failed: ${(_b = transcript.error) != null ? _b : "Unknown error"}`
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
await new Promise((resolve) => setTimeout(resolve, pollingInterval));
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
async doGenerate(options) {
|
|
298
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
299
|
-
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
300
|
-
const { value: uploadResponse } = await postToApi({
|
|
301
|
-
url: this.config.url({
|
|
302
|
-
path: "/v2/upload",
|
|
303
|
-
modelId: ""
|
|
304
|
-
}),
|
|
305
|
-
headers: {
|
|
306
|
-
"Content-Type": "application/octet-stream",
|
|
307
|
-
...combineHeaders(this.config.headers(), options.headers)
|
|
308
|
-
},
|
|
309
|
-
body: {
|
|
310
|
-
content: options.audio,
|
|
311
|
-
values: options.audio
|
|
312
|
-
},
|
|
313
|
-
failedResponseHandler: assemblyaiFailedResponseHandler,
|
|
314
|
-
successfulResponseHandler: createJsonResponseHandler(
|
|
315
|
-
assemblyaiUploadResponseSchema
|
|
316
|
-
),
|
|
317
|
-
abortSignal: options.abortSignal,
|
|
318
|
-
fetch: this.config.fetch
|
|
319
|
-
});
|
|
320
|
-
const { body, warnings } = await this.getArgs(options);
|
|
321
|
-
const { value: submitResponse } = await postJsonToApi({
|
|
322
|
-
url: this.config.url({
|
|
323
|
-
path: "/v2/transcript",
|
|
324
|
-
modelId: this.modelId
|
|
325
|
-
}),
|
|
326
|
-
headers: combineHeaders(this.config.headers(), options.headers),
|
|
327
|
-
body: {
|
|
328
|
-
...body,
|
|
329
|
-
audio_url: uploadResponse.upload_url
|
|
330
|
-
},
|
|
331
|
-
failedResponseHandler: assemblyaiFailedResponseHandler,
|
|
332
|
-
successfulResponseHandler: createJsonResponseHandler(
|
|
333
|
-
assemblyaiSubmitResponseSchema
|
|
334
|
-
),
|
|
335
|
-
abortSignal: options.abortSignal,
|
|
336
|
-
fetch: this.config.fetch
|
|
337
|
-
});
|
|
338
|
-
const { transcript, responseHeaders } = await this.waitForCompletion(
|
|
339
|
-
submitResponse.id,
|
|
340
|
-
options.headers,
|
|
341
|
-
options.abortSignal
|
|
342
|
-
);
|
|
343
|
-
return {
|
|
344
|
-
text: (_d = transcript.text) != null ? _d : "",
|
|
345
|
-
segments: (_f = (_e = transcript.words) == null ? void 0 : _e.map((word) => ({
|
|
346
|
-
text: word.text,
|
|
347
|
-
startSecond: word.start,
|
|
348
|
-
endSecond: word.end
|
|
349
|
-
}))) != null ? _f : [],
|
|
350
|
-
language: (_g = transcript.language_code) != null ? _g : void 0,
|
|
351
|
-
durationInSeconds: (_k = (_j = transcript.audio_duration) != null ? _j : (_i = (_h = transcript.words) == null ? void 0 : _h.at(-1)) == null ? void 0 : _i.end) != null ? _k : void 0,
|
|
352
|
-
warnings,
|
|
353
|
-
response: {
|
|
354
|
-
timestamp: currentDate,
|
|
355
|
-
modelId: this.modelId,
|
|
356
|
-
headers: responseHeaders,
|
|
357
|
-
// Headers from final GET request
|
|
358
|
-
body: transcript
|
|
359
|
-
// Raw response from final GET request
|
|
360
|
-
}
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
var assemblyaiUploadResponseSchema = z2.object({
|
|
365
|
-
upload_url: z2.string()
|
|
366
|
-
});
|
|
367
|
-
var assemblyaiSubmitResponseSchema = z2.object({
|
|
368
|
-
id: z2.string(),
|
|
369
|
-
status: z2.enum(["queued", "processing", "completed", "error"])
|
|
370
|
-
});
|
|
371
|
-
var assemblyaiTranscriptionResponseSchema = z2.object({
|
|
372
|
-
id: z2.string(),
|
|
373
|
-
status: z2.enum(["queued", "processing", "completed", "error"]),
|
|
374
|
-
text: z2.string().nullish(),
|
|
375
|
-
language_code: z2.string().nullish(),
|
|
376
|
-
words: z2.array(
|
|
377
|
-
z2.object({
|
|
378
|
-
start: z2.number(),
|
|
379
|
-
end: z2.number(),
|
|
380
|
-
text: z2.string()
|
|
381
|
-
})
|
|
382
|
-
).nullish(),
|
|
383
|
-
audio_duration: z2.number().nullish(),
|
|
384
|
-
error: z2.string().nullish()
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
// src/version.ts
|
|
388
|
-
var VERSION = true ? "3.0.0-beta.20" : "0.0.0-test";
|
|
389
|
-
|
|
390
|
-
// src/assemblyai-provider.ts
|
|
391
|
-
function createAssemblyAI(options = {}) {
|
|
392
|
-
const getHeaders = () => withUserAgentSuffix(
|
|
393
|
-
{
|
|
394
|
-
authorization: loadApiKey({
|
|
395
|
-
apiKey: options.apiKey,
|
|
396
|
-
environmentVariableName: "ASSEMBLYAI_API_KEY",
|
|
397
|
-
description: "AssemblyAI"
|
|
398
|
-
}),
|
|
399
|
-
...options.headers
|
|
400
|
-
},
|
|
401
|
-
`ai-sdk/assemblyai/${VERSION}`
|
|
402
|
-
);
|
|
403
|
-
const createTranscriptionModel = (modelId) => new AssemblyAITranscriptionModel(modelId, {
|
|
404
|
-
provider: `assemblyai.transcription`,
|
|
405
|
-
url: ({ path }) => `https://api.assemblyai.com${path}`,
|
|
406
|
-
headers: getHeaders,
|
|
407
|
-
fetch: options.fetch
|
|
408
|
-
});
|
|
409
|
-
const provider = function(modelId) {
|
|
410
|
-
return {
|
|
411
|
-
transcription: createTranscriptionModel(modelId)
|
|
412
|
-
};
|
|
413
|
-
};
|
|
414
|
-
provider.specificationVersion = "v4";
|
|
415
|
-
provider.transcription = createTranscriptionModel;
|
|
416
|
-
provider.transcriptionModel = createTranscriptionModel;
|
|
417
|
-
provider.languageModel = () => {
|
|
418
|
-
throw new NoSuchModelError({
|
|
419
|
-
modelId: "unknown",
|
|
420
|
-
modelType: "languageModel",
|
|
421
|
-
message: "AssemblyAI does not provide language models"
|
|
422
|
-
});
|
|
423
|
-
};
|
|
424
|
-
provider.embeddingModel = (modelId) => {
|
|
425
|
-
throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
|
|
426
|
-
};
|
|
427
|
-
provider.textEmbeddingModel = provider.embeddingModel;
|
|
428
|
-
provider.imageModel = (modelId) => {
|
|
429
|
-
throw new NoSuchModelError({ modelId, modelType: "imageModel" });
|
|
430
|
-
};
|
|
431
|
-
return provider;
|
|
432
|
-
}
|
|
433
|
-
var assemblyai = createAssemblyAI();
|
|
434
|
-
export {
|
|
435
|
-
VERSION,
|
|
436
|
-
assemblyai,
|
|
437
|
-
createAssemblyAI
|
|
438
|
-
};
|
|
439
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assemblyai-provider.ts","../src/assemblyai-transcription-model.ts","../src/assemblyai-error.ts","../src/version.ts"],"sourcesContent":["import {\n TranscriptionModelV4,\n ProviderV4,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { AssemblyAITranscriptionModel } from './assemblyai-transcription-model';\nimport { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { VERSION } from './version';\n\nexport interface AssemblyAIProvider extends ProviderV4 {\n (\n modelId: 'best',\n settings?: {},\n ): {\n transcription: AssemblyAITranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: AssemblyAITranscriptionModelId): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface AssemblyAIProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create an AssemblyAI provider instance.\n */\nexport function createAssemblyAI(\n options: AssemblyAIProviderSettings = {},\n): AssemblyAIProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ASSEMBLYAI_API_KEY',\n description: 'AssemblyAI',\n }),\n ...options.headers,\n },\n `ai-sdk/assemblyai/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: AssemblyAITranscriptionModelId) =>\n new AssemblyAITranscriptionModel(modelId, {\n provider: `assemblyai.transcription`,\n url: ({ path }) => `https://api.assemblyai.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AssemblyAITranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'AssemblyAI does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as AssemblyAIProvider;\n}\n\n/**\n * Default AssemblyAI provider instance.\n */\nexport const assemblyai = createAssemblyAI();\n","import { TranscriptionModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n extractResponseHeaders,\n parseProviderOptions,\n postJsonToApi,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { AssemblyAIConfig } from './assemblyai-config';\nimport { assemblyaiFailedResponseHandler } from './assemblyai-error';\nimport { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { AssemblyAITranscriptionAPITypes } from './assemblyai-api-types';\n\n// https://www.assemblyai.com/docs/api-reference/transcripts/submit\nconst assemblyaiTranscriptionModelOptionsSchema = z.object({\n /**\n * End time of the audio in milliseconds.\n */\n audioEndAt: z.number().int().nullish(),\n /**\n * Start time of the audio in milliseconds.\n */\n audioStartFrom: z.number().int().nullish(),\n /**\n * Whether to automatically generate chapters for the transcription.\n */\n autoChapters: z.boolean().nullish(),\n /**\n * Whether to automatically generate highlights for the transcription.\n */\n autoHighlights: z.boolean().nullish(),\n /**\n * Boost parameter for the transcription.\n * Allowed values: 'low', 'default', 'high'.\n */\n boostParam: z.string().nullish(),\n /**\n * Whether to enable content safety filtering.\n */\n contentSafety: z.boolean().nullish(),\n /**\n * Confidence threshold for content safety filtering (25-100).\n */\n contentSafetyConfidence: z.number().int().min(25).max(100).nullish(),\n /**\n * Custom spelling rules for the transcription.\n */\n customSpelling: z\n .array(\n z.object({\n from: z.array(z.string()),\n to: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to include filler words (um, uh, etc.) in the transcription.\n */\n disfluencies: z.boolean().nullish(),\n /**\n * Whether to enable entity detection.\n */\n entityDetection: z.boolean().nullish(),\n /**\n * Whether to filter profanity from the transcription.\n */\n filterProfanity: z.boolean().nullish(),\n /**\n * Whether to format text with punctuation and capitalization.\n */\n formatText: z.boolean().nullish(),\n /**\n * Whether to enable IAB categories detection.\n */\n iabCategories: z.boolean().nullish(),\n /**\n * Language code for the transcription.\n */\n languageCode: z.union([z.literal('en'), z.string()]).nullish(),\n /**\n * Confidence threshold for language detection.\n */\n languageConfidenceThreshold: z.number().nullish(),\n /**\n * Whether to enable language detection.\n */\n languageDetection: z.boolean().nullish(),\n /**\n * Whether to process audio as multichannel.\n */\n multichannel: z.boolean().nullish(),\n /**\n * Whether to add punctuation to the transcription.\n */\n punctuate: z.boolean().nullish(),\n /**\n * Whether to redact personally identifiable information (PII).\n */\n redactPii: z.boolean().nullish(),\n /**\n * Whether to redact PII in the audio file.\n */\n redactPiiAudio: z.boolean().nullish(),\n /**\n * Audio format for PII redaction.\n */\n redactPiiAudioQuality: z.string().nullish(),\n /**\n * List of PII types to redact.\n */\n redactPiiPolicies: z.array(z.string()).nullish(),\n /**\n * Substitution method for redacted PII.\n */\n redactPiiSub: z.string().nullish(),\n /**\n * Whether to enable sentiment analysis.\n */\n sentimentAnalysis: z.boolean().nullish(),\n /**\n * Whether to identify different speakers in the audio.\n */\n speakerLabels: z.boolean().nullish(),\n /**\n * Number of speakers expected in the audio.\n */\n speakersExpected: z.number().int().nullish(),\n /**\n * Threshold for speech detection (0-1).\n */\n speechThreshold: z.number().min(0).max(1).nullish(),\n /**\n * Whether to generate a summary of the transcription.\n */\n summarization: z.boolean().nullish(),\n /**\n * Model to use for summarization.\n */\n summaryModel: z.string().nullish(),\n /**\n * Type of summary to generate.\n */\n summaryType: z.string().nullish(),\n /**\n * Name of the authentication header for webhook requests.\n */\n webhookAuthHeaderName: z.string().nullish(),\n /**\n * Value of the authentication header for webhook requests.\n */\n webhookAuthHeaderValue: z.string().nullish(),\n /**\n * URL to send webhook notifications to.\n */\n webhookUrl: z.string().nullish(),\n /**\n * List of words to boost recognition for.\n */\n wordBoost: z.array(z.string()).nullish(),\n});\n\nexport type AssemblyAITranscriptionModelOptions = z.infer<\n typeof assemblyaiTranscriptionModelOptionsSchema\n>;\n\ninterface AssemblyAITranscriptionModelConfig extends AssemblyAIConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n /**\n * The polling interval for checking transcript status in milliseconds.\n */\n pollingInterval?: number;\n}\n\nexport class AssemblyAITranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n private readonly POLLING_INTERVAL_MS = 3000;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: AssemblyAITranscriptionModelId,\n private readonly config: AssemblyAITranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const assemblyaiOptions = await parseProviderOptions({\n provider: 'assemblyai',\n providerOptions,\n schema: assemblyaiTranscriptionModelOptionsSchema,\n });\n\n const body: Omit<AssemblyAITranscriptionAPITypes, 'audio_url'> = {\n speech_model: this.modelId,\n };\n\n // Add provider-specific options\n if (assemblyaiOptions) {\n body.audio_end_at = assemblyaiOptions.audioEndAt ?? undefined;\n body.audio_start_from = assemblyaiOptions.audioStartFrom ?? undefined;\n body.auto_chapters = assemblyaiOptions.autoChapters ?? undefined;\n body.auto_highlights = assemblyaiOptions.autoHighlights ?? undefined;\n body.boost_param = (assemblyaiOptions.boostParam as never) ?? undefined;\n body.content_safety = assemblyaiOptions.contentSafety ?? undefined;\n body.content_safety_confidence =\n assemblyaiOptions.contentSafetyConfidence ?? undefined;\n body.custom_spelling =\n (assemblyaiOptions.customSpelling as never) ?? undefined;\n body.disfluencies = assemblyaiOptions.disfluencies ?? undefined;\n body.entity_detection = assemblyaiOptions.entityDetection ?? undefined;\n body.filter_profanity = assemblyaiOptions.filterProfanity ?? undefined;\n body.format_text = assemblyaiOptions.formatText ?? undefined;\n body.iab_categories = assemblyaiOptions.iabCategories ?? undefined;\n body.language_code =\n (assemblyaiOptions.languageCode as never) ?? undefined;\n body.language_confidence_threshold =\n assemblyaiOptions.languageConfidenceThreshold ?? undefined;\n body.language_detection =\n assemblyaiOptions.languageDetection ?? undefined;\n body.multichannel = assemblyaiOptions.multichannel ?? undefined;\n body.punctuate = assemblyaiOptions.punctuate ?? undefined;\n body.redact_pii = assemblyaiOptions.redactPii ?? undefined;\n body.redact_pii_audio = assemblyaiOptions.redactPiiAudio ?? undefined;\n body.redact_pii_audio_quality =\n (assemblyaiOptions.redactPiiAudioQuality as never) ?? undefined;\n body.redact_pii_policies =\n (assemblyaiOptions.redactPiiPolicies as never) ?? undefined;\n body.redact_pii_sub =\n (assemblyaiOptions.redactPiiSub as never) ?? undefined;\n body.sentiment_analysis =\n assemblyaiOptions.sentimentAnalysis ?? undefined;\n body.speaker_labels = assemblyaiOptions.speakerLabels ?? undefined;\n body.speakers_expected = assemblyaiOptions.speakersExpected ?? undefined;\n body.speech_threshold = assemblyaiOptions.speechThreshold ?? undefined;\n body.summarization = assemblyaiOptions.summarization ?? undefined;\n body.summary_model =\n (assemblyaiOptions.summaryModel as never) ?? undefined;\n body.summary_type = (assemblyaiOptions.summaryType as never) ?? undefined;\n body.webhook_auth_header_name =\n assemblyaiOptions.webhookAuthHeaderName ?? undefined;\n body.webhook_auth_header_value =\n assemblyaiOptions.webhookAuthHeaderValue ?? undefined;\n body.webhook_url = assemblyaiOptions.webhookUrl ?? undefined;\n body.word_boost = assemblyaiOptions.wordBoost ?? undefined;\n }\n\n return {\n body,\n warnings,\n };\n }\n\n /**\n * Polls the given transcript until we have a status other than `processing` or `queued`.\n *\n * @see https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file#step-33\n */\n private async waitForCompletion(\n transcriptId: string,\n headers: Record<string, string | undefined> | undefined,\n abortSignal?: AbortSignal,\n ): Promise<{\n transcript: z.infer<typeof assemblyaiTranscriptionResponseSchema>;\n responseHeaders: Record<string, string>;\n }> {\n const pollingInterval =\n this.config.pollingInterval ?? this.POLLING_INTERVAL_MS;\n\n while (true) {\n if (abortSignal?.aborted) {\n throw new Error('Transcription request was aborted');\n }\n\n const response = await fetch(\n this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n {\n method: 'GET',\n headers: combineHeaders(\n this.config.headers(),\n headers,\n ) as HeadersInit,\n signal: abortSignal,\n },\n );\n\n if (!response.ok) {\n throw await assemblyaiFailedResponseHandler({\n response,\n url: this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n requestBodyValues: {},\n });\n }\n\n const transcript = assemblyaiTranscriptionResponseSchema.parse(\n await response.json(),\n );\n\n if (transcript.status === 'completed') {\n return {\n transcript,\n responseHeaders: extractResponseHeaders(response),\n };\n }\n\n if (transcript.status === 'error') {\n throw new Error(\n `Transcription failed: ${transcript.error ?? 'Unknown error'}`,\n );\n }\n\n await new Promise(resolve => setTimeout(resolve, pollingInterval));\n }\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const { value: uploadResponse } = await postToApi({\n url: this.config.url({\n path: '/v2/upload',\n modelId: '',\n }),\n headers: {\n 'Content-Type': 'application/octet-stream',\n ...combineHeaders(this.config.headers(), options.headers),\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiUploadResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { body, warnings } = await this.getArgs(options);\n\n const { value: submitResponse } = await postJsonToApi({\n url: this.config.url({\n path: '/v2/transcript',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n audio_url: uploadResponse.upload_url,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiSubmitResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { transcript, responseHeaders } = await this.waitForCompletion(\n submitResponse.id,\n options.headers,\n options.abortSignal,\n );\n\n return {\n text: transcript.text ?? '',\n segments:\n transcript.words?.map(word => ({\n text: word.text,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: transcript.language_code ?? undefined,\n durationInSeconds:\n transcript.audio_duration ?? transcript.words?.at(-1)?.end ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders, // Headers from final GET request\n body: transcript, // Raw response from final GET request\n },\n };\n }\n}\n\nconst assemblyaiUploadResponseSchema = z.object({\n upload_url: z.string(),\n});\n\nconst assemblyaiSubmitResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n});\n\nconst assemblyaiTranscriptionResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n text: z.string().nullish(),\n language_code: z.string().nullish(),\n words: z\n .array(\n z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n }),\n )\n .nullish(),\n audio_duration: z.number().nullish(),\n error: z.string().nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const assemblyaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type AssemblyAIErrorData = z.infer<typeof assemblyaiErrorDataSchema>;\n\nexport const assemblyaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: assemblyaiErrorDataSchema,\n errorToMessage: data => data.error.message,\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"]}
|