@ai-sdk/revai 1.0.0-canary.9 → 1.0.1
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 +351 -0
- package/dist/index.d.mts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +82 -60
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +27 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,356 @@
|
|
|
1
1
|
# @ai-sdk/revai
|
|
2
2
|
|
|
3
|
+
## 1.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [90d212f]
|
|
8
|
+
- @ai-sdk/provider-utils@3.0.1
|
|
9
|
+
|
|
10
|
+
## 1.0.0
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 4ac442e: feat(providers/revai): add transcribe
|
|
15
|
+
- cb68df0: feat: add transcription and speech model support to provider registry
|
|
16
|
+
- d1a034f: feature: using Zod 4 for internal stuff
|
|
17
|
+
- 205077b: fix: improve Zod compatibility
|
|
18
|
+
- Updated dependencies [a571d6e]
|
|
19
|
+
- Updated dependencies [742b7be]
|
|
20
|
+
- Updated dependencies [e7fcc86]
|
|
21
|
+
- Updated dependencies [7cddb72]
|
|
22
|
+
- Updated dependencies [ccce59b]
|
|
23
|
+
- Updated dependencies [e2b9e4b]
|
|
24
|
+
- Updated dependencies [95857aa]
|
|
25
|
+
- Updated dependencies [45c1ea2]
|
|
26
|
+
- Updated dependencies [6f6bb89]
|
|
27
|
+
- Updated dependencies [060370c]
|
|
28
|
+
- Updated dependencies [dc714f3]
|
|
29
|
+
- Updated dependencies [b5da06a]
|
|
30
|
+
- Updated dependencies [d1a1aa1]
|
|
31
|
+
- Updated dependencies [63f9e9b]
|
|
32
|
+
- Updated dependencies [5d142ab]
|
|
33
|
+
- Updated dependencies [d5f588f]
|
|
34
|
+
- Updated dependencies [e025824]
|
|
35
|
+
- Updated dependencies [0571b98]
|
|
36
|
+
- Updated dependencies [b6b43c7]
|
|
37
|
+
- Updated dependencies [4fef487]
|
|
38
|
+
- Updated dependencies [48d257a]
|
|
39
|
+
- Updated dependencies [0c0c0b3]
|
|
40
|
+
- Updated dependencies [0d2c085]
|
|
41
|
+
- Updated dependencies [40acf9b]
|
|
42
|
+
- Updated dependencies [9222aeb]
|
|
43
|
+
- Updated dependencies [e2aceaf]
|
|
44
|
+
- Updated dependencies [411e483]
|
|
45
|
+
- Updated dependencies [8ba77a7]
|
|
46
|
+
- Updated dependencies [7b3ae3f]
|
|
47
|
+
- Updated dependencies [a166433]
|
|
48
|
+
- Updated dependencies [26735b5]
|
|
49
|
+
- Updated dependencies [443d8ec]
|
|
50
|
+
- Updated dependencies [a8c8bd5]
|
|
51
|
+
- Updated dependencies [abf9a79]
|
|
52
|
+
- Updated dependencies [14c9410]
|
|
53
|
+
- Updated dependencies [e86be6f]
|
|
54
|
+
- Updated dependencies [9bf7291]
|
|
55
|
+
- Updated dependencies [2e13791]
|
|
56
|
+
- Updated dependencies [9f95b35]
|
|
57
|
+
- Updated dependencies [66962ed]
|
|
58
|
+
- Updated dependencies [0d06df6]
|
|
59
|
+
- Updated dependencies [472524a]
|
|
60
|
+
- Updated dependencies [dd3ff01]
|
|
61
|
+
- Updated dependencies [d9c98f4]
|
|
62
|
+
- Updated dependencies [05d2819]
|
|
63
|
+
- Updated dependencies [9301f86]
|
|
64
|
+
- Updated dependencies [0a87932]
|
|
65
|
+
- Updated dependencies [c4a2fec]
|
|
66
|
+
- Updated dependencies [957b739]
|
|
67
|
+
- Updated dependencies [79457bd]
|
|
68
|
+
- Updated dependencies [a3f768e]
|
|
69
|
+
- Updated dependencies [7435eb5]
|
|
70
|
+
- Updated dependencies [8aa9e20]
|
|
71
|
+
- Updated dependencies [4617fab]
|
|
72
|
+
- Updated dependencies [ac34802]
|
|
73
|
+
- Updated dependencies [0054544]
|
|
74
|
+
- Updated dependencies [cb68df0]
|
|
75
|
+
- Updated dependencies [ad80501]
|
|
76
|
+
- Updated dependencies [68ecf2f]
|
|
77
|
+
- Updated dependencies [9e9c809]
|
|
78
|
+
- Updated dependencies [32831c6]
|
|
79
|
+
- Updated dependencies [6dc848c]
|
|
80
|
+
- Updated dependencies [6b98118]
|
|
81
|
+
- Updated dependencies [d0f9495]
|
|
82
|
+
- Updated dependencies [63d791d]
|
|
83
|
+
- Updated dependencies [87b828f]
|
|
84
|
+
- Updated dependencies [3f2f00c]
|
|
85
|
+
- Updated dependencies [bfdca8d]
|
|
86
|
+
- Updated dependencies [0ff02bb]
|
|
87
|
+
- Updated dependencies [7979f7f]
|
|
88
|
+
- Updated dependencies [39a4fab]
|
|
89
|
+
- Updated dependencies [44f4aba]
|
|
90
|
+
- Updated dependencies [9bd5ab5]
|
|
91
|
+
- Updated dependencies [57edfcb]
|
|
92
|
+
- Updated dependencies [faf8446]
|
|
93
|
+
- Updated dependencies [7ea4132]
|
|
94
|
+
- Updated dependencies [d1a034f]
|
|
95
|
+
- Updated dependencies [5c56081]
|
|
96
|
+
- Updated dependencies [fd65bc6]
|
|
97
|
+
- Updated dependencies [023ba40]
|
|
98
|
+
- Updated dependencies [ea7a7c9]
|
|
99
|
+
- Updated dependencies [26535e0]
|
|
100
|
+
- Updated dependencies [e030615]
|
|
101
|
+
- Updated dependencies [5e57fae]
|
|
102
|
+
- Updated dependencies [393138b]
|
|
103
|
+
- Updated dependencies [c57e248]
|
|
104
|
+
- Updated dependencies [88a8ee5]
|
|
105
|
+
- Updated dependencies [41fa418]
|
|
106
|
+
- Updated dependencies [205077b]
|
|
107
|
+
- Updated dependencies [71f938d]
|
|
108
|
+
- Updated dependencies [3795467]
|
|
109
|
+
- Updated dependencies [28a5ed5]
|
|
110
|
+
- Updated dependencies [7182d14]
|
|
111
|
+
- Updated dependencies [c1e6647]
|
|
112
|
+
- Updated dependencies [1766ede]
|
|
113
|
+
- Updated dependencies [811dff3]
|
|
114
|
+
- Updated dependencies [f10304b]
|
|
115
|
+
- Updated dependencies [dd5fd43]
|
|
116
|
+
- Updated dependencies [33f4a6a]
|
|
117
|
+
- Updated dependencies [383cbfa]
|
|
118
|
+
- Updated dependencies [27deb4d]
|
|
119
|
+
- Updated dependencies [c4df419]
|
|
120
|
+
- @ai-sdk/provider-utils@3.0.0
|
|
121
|
+
- @ai-sdk/provider@2.0.0
|
|
122
|
+
|
|
123
|
+
## 1.0.0-beta.10
|
|
124
|
+
|
|
125
|
+
### Patch Changes
|
|
126
|
+
|
|
127
|
+
- Updated dependencies [88a8ee5]
|
|
128
|
+
- @ai-sdk/provider-utils@3.0.0-beta.10
|
|
129
|
+
|
|
130
|
+
## 1.0.0-beta.9
|
|
131
|
+
|
|
132
|
+
### Patch Changes
|
|
133
|
+
|
|
134
|
+
- Updated dependencies [27deb4d]
|
|
135
|
+
- @ai-sdk/provider@2.0.0-beta.2
|
|
136
|
+
- @ai-sdk/provider-utils@3.0.0-beta.9
|
|
137
|
+
|
|
138
|
+
## 1.0.0-beta.8
|
|
139
|
+
|
|
140
|
+
### Patch Changes
|
|
141
|
+
|
|
142
|
+
- Updated dependencies [dd5fd43]
|
|
143
|
+
- @ai-sdk/provider-utils@3.0.0-beta.8
|
|
144
|
+
|
|
145
|
+
## 1.0.0-beta.7
|
|
146
|
+
|
|
147
|
+
### Patch Changes
|
|
148
|
+
|
|
149
|
+
- Updated dependencies [e7fcc86]
|
|
150
|
+
- @ai-sdk/provider-utils@3.0.0-beta.7
|
|
151
|
+
|
|
152
|
+
## 1.0.0-beta.6
|
|
153
|
+
|
|
154
|
+
### Patch Changes
|
|
155
|
+
|
|
156
|
+
- Updated dependencies [ac34802]
|
|
157
|
+
- @ai-sdk/provider-utils@3.0.0-beta.6
|
|
158
|
+
|
|
159
|
+
## 1.0.0-beta.5
|
|
160
|
+
|
|
161
|
+
### Patch Changes
|
|
162
|
+
|
|
163
|
+
- Updated dependencies [57edfcb]
|
|
164
|
+
- Updated dependencies [383cbfa]
|
|
165
|
+
- @ai-sdk/provider-utils@3.0.0-beta.5
|
|
166
|
+
|
|
167
|
+
## 1.0.0-beta.4
|
|
168
|
+
|
|
169
|
+
### Patch Changes
|
|
170
|
+
|
|
171
|
+
- 205077b: fix: improve Zod compatibility
|
|
172
|
+
- Updated dependencies [205077b]
|
|
173
|
+
- @ai-sdk/provider-utils@3.0.0-beta.4
|
|
174
|
+
|
|
175
|
+
## 1.0.0-beta.3
|
|
176
|
+
|
|
177
|
+
### Patch Changes
|
|
178
|
+
|
|
179
|
+
- Updated dependencies [05d2819]
|
|
180
|
+
- @ai-sdk/provider-utils@3.0.0-beta.3
|
|
181
|
+
|
|
182
|
+
## 1.0.0-beta.2
|
|
183
|
+
|
|
184
|
+
### Patch Changes
|
|
185
|
+
|
|
186
|
+
- d1a034f: feature: using Zod 4 for internal stuff
|
|
187
|
+
- Updated dependencies [0571b98]
|
|
188
|
+
- Updated dependencies [39a4fab]
|
|
189
|
+
- Updated dependencies [d1a034f]
|
|
190
|
+
- @ai-sdk/provider-utils@3.0.0-beta.2
|
|
191
|
+
|
|
192
|
+
## 1.0.0-beta.1
|
|
193
|
+
|
|
194
|
+
### Patch Changes
|
|
195
|
+
|
|
196
|
+
- cb68df0: feat: add transcription and speech model support to provider registry
|
|
197
|
+
- Updated dependencies [742b7be]
|
|
198
|
+
- Updated dependencies [7cddb72]
|
|
199
|
+
- Updated dependencies [ccce59b]
|
|
200
|
+
- Updated dependencies [e2b9e4b]
|
|
201
|
+
- Updated dependencies [45c1ea2]
|
|
202
|
+
- Updated dependencies [e025824]
|
|
203
|
+
- Updated dependencies [0d06df6]
|
|
204
|
+
- Updated dependencies [472524a]
|
|
205
|
+
- Updated dependencies [dd3ff01]
|
|
206
|
+
- Updated dependencies [7435eb5]
|
|
207
|
+
- Updated dependencies [cb68df0]
|
|
208
|
+
- Updated dependencies [bfdca8d]
|
|
209
|
+
- Updated dependencies [44f4aba]
|
|
210
|
+
- Updated dependencies [023ba40]
|
|
211
|
+
- Updated dependencies [5e57fae]
|
|
212
|
+
- Updated dependencies [71f938d]
|
|
213
|
+
- Updated dependencies [28a5ed5]
|
|
214
|
+
- @ai-sdk/provider@2.0.0-beta.1
|
|
215
|
+
- @ai-sdk/provider-utils@3.0.0-beta.1
|
|
216
|
+
|
|
217
|
+
## 1.0.0-alpha.15
|
|
218
|
+
|
|
219
|
+
### Patch Changes
|
|
220
|
+
|
|
221
|
+
- Updated dependencies [48d257a]
|
|
222
|
+
- Updated dependencies [8ba77a7]
|
|
223
|
+
- @ai-sdk/provider@2.0.0-alpha.15
|
|
224
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.15
|
|
225
|
+
|
|
226
|
+
## 1.0.0-alpha.14
|
|
227
|
+
|
|
228
|
+
### Patch Changes
|
|
229
|
+
|
|
230
|
+
- Updated dependencies [b5da06a]
|
|
231
|
+
- Updated dependencies [63f9e9b]
|
|
232
|
+
- Updated dependencies [2e13791]
|
|
233
|
+
- @ai-sdk/provider@2.0.0-alpha.14
|
|
234
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.14
|
|
235
|
+
|
|
236
|
+
## 1.0.0-alpha.13
|
|
237
|
+
|
|
238
|
+
### Patch Changes
|
|
239
|
+
|
|
240
|
+
- Updated dependencies [68ecf2f]
|
|
241
|
+
- @ai-sdk/provider@2.0.0-alpha.13
|
|
242
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.13
|
|
243
|
+
|
|
244
|
+
## 1.0.0-alpha.12
|
|
245
|
+
|
|
246
|
+
### Patch Changes
|
|
247
|
+
|
|
248
|
+
- Updated dependencies [e2aceaf]
|
|
249
|
+
- @ai-sdk/provider@2.0.0-alpha.12
|
|
250
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.12
|
|
251
|
+
|
|
252
|
+
## 1.0.0-alpha.11
|
|
253
|
+
|
|
254
|
+
### Patch Changes
|
|
255
|
+
|
|
256
|
+
- Updated dependencies [c1e6647]
|
|
257
|
+
- @ai-sdk/provider@2.0.0-alpha.11
|
|
258
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.11
|
|
259
|
+
|
|
260
|
+
## 1.0.0-alpha.10
|
|
261
|
+
|
|
262
|
+
### Patch Changes
|
|
263
|
+
|
|
264
|
+
- Updated dependencies [c4df419]
|
|
265
|
+
- @ai-sdk/provider@2.0.0-alpha.10
|
|
266
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.10
|
|
267
|
+
|
|
268
|
+
## 1.0.0-alpha.9
|
|
269
|
+
|
|
270
|
+
### Patch Changes
|
|
271
|
+
|
|
272
|
+
- Updated dependencies [811dff3]
|
|
273
|
+
- @ai-sdk/provider@2.0.0-alpha.9
|
|
274
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.9
|
|
275
|
+
|
|
276
|
+
## 1.0.0-alpha.8
|
|
277
|
+
|
|
278
|
+
### Patch Changes
|
|
279
|
+
|
|
280
|
+
- Updated dependencies [4fef487]
|
|
281
|
+
- Updated dependencies [9222aeb]
|
|
282
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.8
|
|
283
|
+
- @ai-sdk/provider@2.0.0-alpha.8
|
|
284
|
+
|
|
285
|
+
## 1.0.0-alpha.7
|
|
286
|
+
|
|
287
|
+
### Patch Changes
|
|
288
|
+
|
|
289
|
+
- Updated dependencies [5c56081]
|
|
290
|
+
- @ai-sdk/provider@2.0.0-alpha.7
|
|
291
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.7
|
|
292
|
+
|
|
293
|
+
## 1.0.0-alpha.6
|
|
294
|
+
|
|
295
|
+
### Patch Changes
|
|
296
|
+
|
|
297
|
+
- Updated dependencies [0d2c085]
|
|
298
|
+
- @ai-sdk/provider@2.0.0-alpha.6
|
|
299
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.6
|
|
300
|
+
|
|
301
|
+
## 1.0.0-alpha.4
|
|
302
|
+
|
|
303
|
+
### Patch Changes
|
|
304
|
+
|
|
305
|
+
- Updated dependencies [dc714f3]
|
|
306
|
+
- @ai-sdk/provider@2.0.0-alpha.4
|
|
307
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.4
|
|
308
|
+
|
|
309
|
+
## 1.0.0-alpha.3
|
|
310
|
+
|
|
311
|
+
### Patch Changes
|
|
312
|
+
|
|
313
|
+
- Updated dependencies [6b98118]
|
|
314
|
+
- @ai-sdk/provider@2.0.0-alpha.3
|
|
315
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.3
|
|
316
|
+
|
|
317
|
+
## 1.0.0-alpha.2
|
|
318
|
+
|
|
319
|
+
### Patch Changes
|
|
320
|
+
|
|
321
|
+
- Updated dependencies [26535e0]
|
|
322
|
+
- @ai-sdk/provider@2.0.0-alpha.2
|
|
323
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.2
|
|
324
|
+
|
|
325
|
+
## 1.0.0-alpha.1
|
|
326
|
+
|
|
327
|
+
### Patch Changes
|
|
328
|
+
|
|
329
|
+
- Updated dependencies [3f2f00c]
|
|
330
|
+
- @ai-sdk/provider@2.0.0-alpha.1
|
|
331
|
+
- @ai-sdk/provider-utils@3.0.0-alpha.1
|
|
332
|
+
|
|
333
|
+
## 1.0.0-canary.12
|
|
334
|
+
|
|
335
|
+
### Patch Changes
|
|
336
|
+
|
|
337
|
+
- Updated dependencies [faf8446]
|
|
338
|
+
- @ai-sdk/provider-utils@3.0.0-canary.19
|
|
339
|
+
|
|
340
|
+
## 1.0.0-canary.11
|
|
341
|
+
|
|
342
|
+
### Patch Changes
|
|
343
|
+
|
|
344
|
+
- Updated dependencies [40acf9b]
|
|
345
|
+
- @ai-sdk/provider-utils@3.0.0-canary.18
|
|
346
|
+
|
|
347
|
+
## 1.0.0-canary.10
|
|
348
|
+
|
|
349
|
+
### Patch Changes
|
|
350
|
+
|
|
351
|
+
- Updated dependencies [ea7a7c9]
|
|
352
|
+
- @ai-sdk/provider-utils@3.0.0-canary.17
|
|
353
|
+
|
|
3
354
|
## 1.0.0-canary.9
|
|
4
355
|
|
|
5
356
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TranscriptionModelV2, ProviderV2 } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
|
|
4
4
|
type RevaiConfig = {
|
|
@@ -19,24 +19,24 @@ interface RevaiTranscriptionModelConfig extends RevaiConfig {
|
|
|
19
19
|
currentDate?: () => Date;
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
declare class RevaiTranscriptionModel implements
|
|
22
|
+
declare class RevaiTranscriptionModel implements TranscriptionModelV2 {
|
|
23
23
|
readonly modelId: RevaiTranscriptionModelId;
|
|
24
24
|
private readonly config;
|
|
25
|
-
readonly specificationVersion = "
|
|
25
|
+
readonly specificationVersion = "v2";
|
|
26
26
|
get provider(): string;
|
|
27
27
|
constructor(modelId: RevaiTranscriptionModelId, config: RevaiTranscriptionModelConfig);
|
|
28
28
|
private getArgs;
|
|
29
|
-
doGenerate(options: Parameters<
|
|
29
|
+
doGenerate(options: Parameters<TranscriptionModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>>;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
interface RevaiProvider extends
|
|
32
|
+
interface RevaiProvider extends ProviderV2 {
|
|
33
33
|
(modelId: 'machine', settings?: {}): {
|
|
34
34
|
transcription: RevaiTranscriptionModel;
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
37
|
Creates a model for transcription.
|
|
38
38
|
*/
|
|
39
|
-
transcription(modelId: RevaiTranscriptionModelId):
|
|
39
|
+
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV2;
|
|
40
40
|
}
|
|
41
41
|
interface RevaiProviderSettings {
|
|
42
42
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TranscriptionModelV2, ProviderV2 } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
|
|
4
4
|
type RevaiConfig = {
|
|
@@ -19,24 +19,24 @@ interface RevaiTranscriptionModelConfig extends RevaiConfig {
|
|
|
19
19
|
currentDate?: () => Date;
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
declare class RevaiTranscriptionModel implements
|
|
22
|
+
declare class RevaiTranscriptionModel implements TranscriptionModelV2 {
|
|
23
23
|
readonly modelId: RevaiTranscriptionModelId;
|
|
24
24
|
private readonly config;
|
|
25
|
-
readonly specificationVersion = "
|
|
25
|
+
readonly specificationVersion = "v2";
|
|
26
26
|
get provider(): string;
|
|
27
27
|
constructor(modelId: RevaiTranscriptionModelId, config: RevaiTranscriptionModelConfig);
|
|
28
28
|
private getArgs;
|
|
29
|
-
doGenerate(options: Parameters<
|
|
29
|
+
doGenerate(options: Parameters<TranscriptionModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>>;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
interface RevaiProvider extends
|
|
32
|
+
interface RevaiProvider extends ProviderV2 {
|
|
33
33
|
(modelId: 'machine', settings?: {}): {
|
|
34
34
|
transcription: RevaiTranscriptionModel;
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
37
|
Creates a model for transcription.
|
|
38
38
|
*/
|
|
39
|
-
transcription(modelId: RevaiTranscriptionModelId):
|
|
39
|
+
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV2;
|
|
40
40
|
}
|
|
41
41
|
interface RevaiProviderSettings {
|
|
42
42
|
/**
|
package/dist/index.js
CHANGED
|
@@ -26,20 +26,21 @@ __export(src_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(src_exports);
|
|
27
27
|
|
|
28
28
|
// src/revai-provider.ts
|
|
29
|
+
var import_provider2 = require("@ai-sdk/provider");
|
|
29
30
|
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
30
31
|
|
|
31
32
|
// src/revai-transcription-model.ts
|
|
32
33
|
var import_provider = require("@ai-sdk/provider");
|
|
33
34
|
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
|
34
|
-
var
|
|
35
|
+
var import_v42 = require("zod/v4");
|
|
35
36
|
|
|
36
37
|
// src/revai-error.ts
|
|
37
|
-
var
|
|
38
|
+
var import_v4 = require("zod/v4");
|
|
38
39
|
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
39
|
-
var revaiErrorDataSchema =
|
|
40
|
-
error:
|
|
41
|
-
message:
|
|
42
|
-
code:
|
|
40
|
+
var revaiErrorDataSchema = import_v4.z.object({
|
|
41
|
+
error: import_v4.z.object({
|
|
42
|
+
message: import_v4.z.string(),
|
|
43
|
+
code: import_v4.z.number()
|
|
43
44
|
})
|
|
44
45
|
});
|
|
45
46
|
var revaiFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)({
|
|
@@ -48,146 +49,146 @@ var revaiFailedResponseHandler = (0, import_provider_utils.createJsonErrorRespon
|
|
|
48
49
|
});
|
|
49
50
|
|
|
50
51
|
// src/revai-transcription-model.ts
|
|
51
|
-
var revaiProviderOptionsSchema =
|
|
52
|
+
var revaiProviderOptionsSchema = import_v42.z.object({
|
|
52
53
|
/**
|
|
53
54
|
* Optional metadata string to associate with the transcription job.
|
|
54
55
|
*/
|
|
55
|
-
metadata:
|
|
56
|
+
metadata: import_v42.z.string().nullish(),
|
|
56
57
|
/**
|
|
57
58
|
* Configuration for webhook notifications when job is complete.
|
|
58
59
|
*/
|
|
59
|
-
notification_config:
|
|
60
|
+
notification_config: import_v42.z.object({
|
|
60
61
|
/**
|
|
61
62
|
* URL to send the notification to.
|
|
62
63
|
*/
|
|
63
|
-
url:
|
|
64
|
+
url: import_v42.z.string(),
|
|
64
65
|
/**
|
|
65
66
|
* Optional authorization headers for the notification request.
|
|
66
67
|
*/
|
|
67
|
-
auth_headers:
|
|
68
|
-
Authorization:
|
|
68
|
+
auth_headers: import_v42.z.object({
|
|
69
|
+
Authorization: import_v42.z.string()
|
|
69
70
|
}).nullish()
|
|
70
71
|
}).nullish(),
|
|
71
72
|
/**
|
|
72
73
|
* Number of seconds after which the job will be automatically deleted.
|
|
73
74
|
*/
|
|
74
|
-
delete_after_seconds:
|
|
75
|
+
delete_after_seconds: import_v42.z.number().nullish(),
|
|
75
76
|
/**
|
|
76
77
|
* Whether to include filler words and false starts in the transcription.
|
|
77
78
|
*/
|
|
78
|
-
verbatim:
|
|
79
|
+
verbatim: import_v42.z.boolean().optional(),
|
|
79
80
|
/**
|
|
80
81
|
* Whether to prioritize the job for faster processing.
|
|
81
82
|
*/
|
|
82
|
-
rush:
|
|
83
|
+
rush: import_v42.z.boolean().nullish().default(false),
|
|
83
84
|
/**
|
|
84
85
|
* Whether to run the job in test mode.
|
|
85
86
|
*/
|
|
86
|
-
test_mode:
|
|
87
|
+
test_mode: import_v42.z.boolean().nullish().default(false),
|
|
87
88
|
/**
|
|
88
89
|
* Specific segments of the audio to transcribe.
|
|
89
90
|
*/
|
|
90
|
-
segments_to_transcribe:
|
|
91
|
-
|
|
91
|
+
segments_to_transcribe: import_v42.z.array(
|
|
92
|
+
import_v42.z.object({
|
|
92
93
|
/**
|
|
93
94
|
* Start time of the segment in seconds.
|
|
94
95
|
*/
|
|
95
|
-
start:
|
|
96
|
+
start: import_v42.z.number(),
|
|
96
97
|
/**
|
|
97
98
|
* End time of the segment in seconds.
|
|
98
99
|
*/
|
|
99
|
-
end:
|
|
100
|
+
end: import_v42.z.number()
|
|
100
101
|
})
|
|
101
102
|
).nullish(),
|
|
102
103
|
/**
|
|
103
104
|
* Names to assign to speakers in the transcription.
|
|
104
105
|
*/
|
|
105
|
-
speaker_names:
|
|
106
|
-
|
|
106
|
+
speaker_names: import_v42.z.array(
|
|
107
|
+
import_v42.z.object({
|
|
107
108
|
/**
|
|
108
109
|
* Display name for the speaker.
|
|
109
110
|
*/
|
|
110
|
-
display_name:
|
|
111
|
+
display_name: import_v42.z.string()
|
|
111
112
|
})
|
|
112
113
|
).nullish(),
|
|
113
114
|
/**
|
|
114
115
|
* Whether to skip speaker diarization.
|
|
115
116
|
*/
|
|
116
|
-
skip_diarization:
|
|
117
|
+
skip_diarization: import_v42.z.boolean().nullish().default(false),
|
|
117
118
|
/**
|
|
118
119
|
* Whether to skip post-processing steps.
|
|
119
120
|
*/
|
|
120
|
-
skip_postprocessing:
|
|
121
|
+
skip_postprocessing: import_v42.z.boolean().nullish().default(false),
|
|
121
122
|
/**
|
|
122
123
|
* Whether to skip adding punctuation to the transcription.
|
|
123
124
|
*/
|
|
124
|
-
skip_punctuation:
|
|
125
|
+
skip_punctuation: import_v42.z.boolean().nullish().default(false),
|
|
125
126
|
/**
|
|
126
127
|
* Whether to remove disfluencies (um, uh, etc.) from the transcription.
|
|
127
128
|
*/
|
|
128
|
-
remove_disfluencies:
|
|
129
|
+
remove_disfluencies: import_v42.z.boolean().nullish().default(false),
|
|
129
130
|
/**
|
|
130
131
|
* Whether to remove atmospheric sounds from the transcription.
|
|
131
132
|
*/
|
|
132
|
-
remove_atmospherics:
|
|
133
|
+
remove_atmospherics: import_v42.z.boolean().nullish().default(false),
|
|
133
134
|
/**
|
|
134
135
|
* Whether to filter profanity from the transcription.
|
|
135
136
|
*/
|
|
136
|
-
filter_profanity:
|
|
137
|
+
filter_profanity: import_v42.z.boolean().nullish().default(false),
|
|
137
138
|
/**
|
|
138
139
|
* Number of speaker channels in the audio.
|
|
139
140
|
*/
|
|
140
|
-
speaker_channels_count:
|
|
141
|
+
speaker_channels_count: import_v42.z.number().nullish(),
|
|
141
142
|
/**
|
|
142
143
|
* Expected number of speakers in the audio.
|
|
143
144
|
*/
|
|
144
|
-
speakers_count:
|
|
145
|
+
speakers_count: import_v42.z.number().nullish(),
|
|
145
146
|
/**
|
|
146
147
|
* Type of diarization to use.
|
|
147
148
|
*/
|
|
148
|
-
diarization_type:
|
|
149
|
+
diarization_type: import_v42.z.enum(["standard", "premium"]).nullish().default("standard"),
|
|
149
150
|
/**
|
|
150
151
|
* ID of a custom vocabulary to use for the transcription.
|
|
151
152
|
*/
|
|
152
|
-
custom_vocabulary_id:
|
|
153
|
+
custom_vocabulary_id: import_v42.z.string().nullish(),
|
|
153
154
|
/**
|
|
154
155
|
* Custom vocabularies to use for the transcription.
|
|
155
156
|
*/
|
|
156
|
-
custom_vocabularies:
|
|
157
|
+
custom_vocabularies: import_v42.z.array(import_v42.z.object({})).optional(),
|
|
157
158
|
/**
|
|
158
159
|
* Whether to strictly enforce custom vocabulary.
|
|
159
160
|
*/
|
|
160
|
-
strict_custom_vocabulary:
|
|
161
|
+
strict_custom_vocabulary: import_v42.z.boolean().optional(),
|
|
161
162
|
/**
|
|
162
163
|
* Configuration for generating a summary of the transcription.
|
|
163
164
|
*/
|
|
164
|
-
summarization_config:
|
|
165
|
+
summarization_config: import_v42.z.object({
|
|
165
166
|
/**
|
|
166
167
|
* Model to use for summarization.
|
|
167
168
|
*/
|
|
168
|
-
model:
|
|
169
|
+
model: import_v42.z.enum(["standard", "premium"]).nullish().default("standard"),
|
|
169
170
|
/**
|
|
170
171
|
* Format of the summary.
|
|
171
172
|
*/
|
|
172
|
-
type:
|
|
173
|
+
type: import_v42.z.enum(["paragraph", "bullets"]).nullish().default("paragraph"),
|
|
173
174
|
/**
|
|
174
175
|
* Custom prompt for the summarization.
|
|
175
176
|
*/
|
|
176
|
-
prompt:
|
|
177
|
+
prompt: import_v42.z.string().nullish()
|
|
177
178
|
}).nullish(),
|
|
178
179
|
/**
|
|
179
180
|
* Configuration for translating the transcription.
|
|
180
181
|
*/
|
|
181
|
-
translation_config:
|
|
182
|
+
translation_config: import_v42.z.object({
|
|
182
183
|
/**
|
|
183
184
|
* Target languages for translation.
|
|
184
185
|
*/
|
|
185
|
-
target_languages:
|
|
186
|
-
|
|
186
|
+
target_languages: import_v42.z.array(
|
|
187
|
+
import_v42.z.object({
|
|
187
188
|
/**
|
|
188
189
|
* Language code for translation target.
|
|
189
190
|
*/
|
|
190
|
-
language:
|
|
191
|
+
language: import_v42.z.enum([
|
|
191
192
|
"en",
|
|
192
193
|
"en-us",
|
|
193
194
|
"en-gb",
|
|
@@ -211,22 +212,22 @@ var revaiProviderOptionsSchema = import_zod2.z.object({
|
|
|
211
212
|
/**
|
|
212
213
|
* Model to use for translation.
|
|
213
214
|
*/
|
|
214
|
-
model:
|
|
215
|
+
model: import_v42.z.enum(["standard", "premium"]).nullish().default("standard")
|
|
215
216
|
}).nullish(),
|
|
216
217
|
/**
|
|
217
218
|
* Language of the audio content.
|
|
218
219
|
*/
|
|
219
|
-
language:
|
|
220
|
+
language: import_v42.z.string().nullish().default("en"),
|
|
220
221
|
/**
|
|
221
222
|
* Whether to perform forced alignment.
|
|
222
223
|
*/
|
|
223
|
-
forced_alignment:
|
|
224
|
+
forced_alignment: import_v42.z.boolean().nullish().default(false)
|
|
224
225
|
});
|
|
225
226
|
var RevaiTranscriptionModel = class {
|
|
226
227
|
constructor(modelId, config) {
|
|
227
228
|
this.modelId = modelId;
|
|
228
229
|
this.config = config;
|
|
229
|
-
this.specificationVersion = "
|
|
230
|
+
this.specificationVersion = "v2";
|
|
230
231
|
}
|
|
231
232
|
get provider() {
|
|
232
233
|
return this.config.provider;
|
|
@@ -427,20 +428,20 @@ var RevaiTranscriptionModel = class {
|
|
|
427
428
|
};
|
|
428
429
|
}
|
|
429
430
|
};
|
|
430
|
-
var revaiTranscriptionJobResponseSchema =
|
|
431
|
-
id:
|
|
432
|
-
status:
|
|
433
|
-
language:
|
|
431
|
+
var revaiTranscriptionJobResponseSchema = import_v42.z.object({
|
|
432
|
+
id: import_v42.z.string().nullish(),
|
|
433
|
+
status: import_v42.z.string().nullish(),
|
|
434
|
+
language: import_v42.z.string().nullish()
|
|
434
435
|
});
|
|
435
|
-
var revaiTranscriptionResponseSchema =
|
|
436
|
-
monologues:
|
|
437
|
-
|
|
438
|
-
elements:
|
|
439
|
-
|
|
440
|
-
type:
|
|
441
|
-
value:
|
|
442
|
-
ts:
|
|
443
|
-
end_ts:
|
|
436
|
+
var revaiTranscriptionResponseSchema = import_v42.z.object({
|
|
437
|
+
monologues: import_v42.z.array(
|
|
438
|
+
import_v42.z.object({
|
|
439
|
+
elements: import_v42.z.array(
|
|
440
|
+
import_v42.z.object({
|
|
441
|
+
type: import_v42.z.string().nullish(),
|
|
442
|
+
value: import_v42.z.string().nullish(),
|
|
443
|
+
ts: import_v42.z.number().nullish(),
|
|
444
|
+
end_ts: import_v42.z.number().nullish()
|
|
444
445
|
})
|
|
445
446
|
).nullish()
|
|
446
447
|
})
|
|
@@ -470,6 +471,27 @@ function createRevai(options = {}) {
|
|
|
470
471
|
};
|
|
471
472
|
provider.transcription = createTranscriptionModel;
|
|
472
473
|
provider.transcriptionModel = createTranscriptionModel;
|
|
474
|
+
provider.languageModel = () => {
|
|
475
|
+
throw new import_provider2.NoSuchModelError({
|
|
476
|
+
modelId: "unknown",
|
|
477
|
+
modelType: "languageModel",
|
|
478
|
+
message: "Rev.ai does not provide language models"
|
|
479
|
+
});
|
|
480
|
+
};
|
|
481
|
+
provider.textEmbeddingModel = () => {
|
|
482
|
+
throw new import_provider2.NoSuchModelError({
|
|
483
|
+
modelId: "unknown",
|
|
484
|
+
modelType: "textEmbeddingModel",
|
|
485
|
+
message: "Rev.ai does not provide text embedding models"
|
|
486
|
+
});
|
|
487
|
+
};
|
|
488
|
+
provider.imageModel = () => {
|
|
489
|
+
throw new import_provider2.NoSuchModelError({
|
|
490
|
+
modelId: "unknown",
|
|
491
|
+
modelType: "imageModel",
|
|
492
|
+
message: "Rev.ai does not provide image models"
|
|
493
|
+
});
|
|
494
|
+
};
|
|
473
495
|
return provider;
|
|
474
496
|
}
|
|
475
497
|
var revai = createRevai();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/revai-provider.ts","../src/revai-transcription-model.ts","../src/revai-error.ts"],"sourcesContent":["export { createRevai, revai } from './revai-provider';\nexport type { RevaiProvider, RevaiProviderSettings } from './revai-provider';\n","import { TranscriptionModelV1, ProviderV1 } from '@ai-sdk/provider';\nimport { FetchFunction, loadApiKey } from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\n\nexport interface RevaiProvider extends Pick<ProviderV1, 'transcriptionModel'> {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV1;\n}\n\nexport interface RevaiProviderSettings {\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\nCreate a Rev.ai provider instance.\n */\nexport function createRevai(\n options: RevaiProviderSettings = {},\n): RevaiProvider {\n const getHeaders = () => ({\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n });\n\n const createTranscriptionModel = (modelId: RevaiTranscriptionModelId) =>\n new RevaiTranscriptionModel(modelId, {\n provider: `revai.transcription`,\n url: ({ path }) => `https://api.rev.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: RevaiTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n return provider as RevaiProvider;\n}\n\n/**\nDefault Rev.ai provider instance.\n */\nexport const revai = createRevai();\n","import {\n AISDKError,\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postFormDataToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { RevaiConfig } from './revai-config';\nimport { revaiFailedResponseHandler } from './revai-error';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { RevaiTranscriptionAPITypes } from './revai-api-types';\n\n// https://docs.rev.ai/api/asynchronous/reference/#operation/SubmitTranscriptionJob\nconst revaiProviderOptionsSchema = z.object({\n /**\n * Optional metadata string to associate with the transcription job.\n */\n metadata: z.string().nullish(),\n /**\n * Configuration for webhook notifications when job is complete.\n */\n notification_config: z\n .object({\n /**\n * URL to send the notification to.\n */\n url: z.string(),\n /**\n * Optional authorization headers for the notification request.\n */\n auth_headers: z\n .object({\n Authorization: z.string(),\n })\n .nullish(),\n })\n .nullish(),\n /**\n * Number of seconds after which the job will be automatically deleted.\n */\n delete_after_seconds: z.number().nullish(),\n /**\n * Whether to include filler words and false starts in the transcription.\n */\n verbatim: z.boolean().optional(),\n /**\n * Whether to prioritize the job for faster processing.\n */\n rush: z.boolean().nullish().default(false),\n /**\n * Whether to run the job in test mode.\n */\n test_mode: z.boolean().nullish().default(false),\n /**\n * Specific segments of the audio to transcribe.\n */\n segments_to_transcribe: z\n .array(\n z.object({\n /**\n * Start time of the segment in seconds.\n */\n start: z.number(),\n /**\n * End time of the segment in seconds.\n */\n end: z.number(),\n }),\n )\n .nullish(),\n /**\n * Names to assign to speakers in the transcription.\n */\n speaker_names: z\n .array(\n z.object({\n /**\n * Display name for the speaker.\n */\n display_name: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to skip speaker diarization.\n */\n skip_diarization: z.boolean().nullish().default(false),\n /**\n * Whether to skip post-processing steps.\n */\n skip_postprocessing: z.boolean().nullish().default(false),\n /**\n * Whether to skip adding punctuation to the transcription.\n */\n skip_punctuation: z.boolean().nullish().default(false),\n /**\n * Whether to remove disfluencies (um, uh, etc.) from the transcription.\n */\n remove_disfluencies: z.boolean().nullish().default(false),\n /**\n * Whether to remove atmospheric sounds from the transcription.\n */\n remove_atmospherics: z.boolean().nullish().default(false),\n /**\n * Whether to filter profanity from the transcription.\n */\n filter_profanity: z.boolean().nullish().default(false),\n /**\n * Number of speaker channels in the audio.\n */\n speaker_channels_count: z.number().nullish(),\n /**\n * Expected number of speakers in the audio.\n */\n speakers_count: z.number().nullish(),\n /**\n * Type of diarization to use.\n */\n diarization_type: z\n .enum(['standard', 'premium'])\n .nullish()\n .default('standard'),\n /**\n * ID of a custom vocabulary to use for the transcription.\n */\n custom_vocabulary_id: z.string().nullish(),\n /**\n * Custom vocabularies to use for the transcription.\n */\n custom_vocabularies: z.array(z.object({})).optional(),\n /**\n * Whether to strictly enforce custom vocabulary.\n */\n strict_custom_vocabulary: z.boolean().optional(),\n /**\n * Configuration for generating a summary of the transcription.\n */\n summarization_config: z\n .object({\n /**\n * Model to use for summarization.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n /**\n * Format of the summary.\n */\n type: z.enum(['paragraph', 'bullets']).nullish().default('paragraph'),\n /**\n * Custom prompt for the summarization.\n */\n prompt: z.string().nullish(),\n })\n .nullish(),\n /**\n * Configuration for translating the transcription.\n */\n translation_config: z\n .object({\n /**\n * Target languages for translation.\n */\n target_languages: z.array(\n z.object({\n /**\n * Language code for translation target.\n */\n language: z.enum([\n 'en',\n 'en-us',\n 'en-gb',\n 'ar',\n 'pt',\n 'pt-br',\n 'pt-pt',\n 'fr',\n 'fr-ca',\n 'es',\n 'es-es',\n 'es-la',\n 'it',\n 'ja',\n 'ko',\n 'de',\n 'ru',\n ]),\n }),\n ),\n /**\n * Model to use for translation.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n })\n .nullish(),\n /**\n * Language of the audio content.\n */\n language: z.string().nullish().default('en'),\n /**\n * Whether to perform forced alignment.\n */\n forced_alignment: z.boolean().nullish().default(false),\n});\n\nexport type RevaiTranscriptionCallOptions = z.infer<\n typeof revaiProviderOptionsSchema\n>;\n\ninterface RevaiTranscriptionModelConfig extends RevaiConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class RevaiTranscriptionModel implements TranscriptionModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: RevaiTranscriptionModelId,\n private readonly config: RevaiTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1['doGenerate']>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n // Parse provider options\n const revaiOptions = await parseProviderOptions({\n provider: 'revai',\n providerOptions,\n schema: revaiProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('media', new File([blob], 'audio', { type: mediaType }));\n const transcriptionModelOptions: RevaiTranscriptionAPITypes = {\n transcriber: this.modelId,\n };\n\n // Add provider-specific options\n if (revaiOptions) {\n const formDataConfig: RevaiTranscriptionAPITypes = {\n metadata: revaiOptions.metadata ?? undefined,\n notification_config: revaiOptions.notification_config ?? undefined,\n delete_after_seconds: revaiOptions.delete_after_seconds ?? undefined,\n verbatim: revaiOptions.verbatim ?? undefined,\n rush: revaiOptions.rush ?? undefined,\n test_mode: revaiOptions.test_mode ?? undefined,\n segments_to_transcribe:\n revaiOptions.segments_to_transcribe ?? undefined,\n speaker_names: revaiOptions.speaker_names ?? undefined,\n skip_diarization: revaiOptions.skip_diarization ?? undefined,\n skip_postprocessing: revaiOptions.skip_postprocessing ?? undefined,\n skip_punctuation: revaiOptions.skip_punctuation ?? undefined,\n remove_disfluencies: revaiOptions.remove_disfluencies ?? undefined,\n remove_atmospherics: revaiOptions.remove_atmospherics ?? undefined,\n filter_profanity: revaiOptions.filter_profanity ?? undefined,\n speaker_channels_count:\n revaiOptions.speaker_channels_count ?? undefined,\n speakers_count: revaiOptions.speakers_count ?? undefined,\n diarization_type: revaiOptions.diarization_type ?? undefined,\n custom_vocabulary_id: revaiOptions.custom_vocabulary_id ?? undefined,\n custom_vocabularies: revaiOptions.custom_vocabularies ?? undefined,\n strict_custom_vocabulary:\n revaiOptions.strict_custom_vocabulary ?? undefined,\n summarization_config: revaiOptions.summarization_config ?? undefined,\n translation_config: revaiOptions.translation_config ?? undefined,\n language: revaiOptions.language ?? undefined,\n forced_alignment: revaiOptions.forced_alignment ?? undefined,\n };\n\n for (const key in formDataConfig) {\n const value = formDataConfig[key as keyof RevaiTranscriptionAPITypes];\n if (value !== undefined) {\n (transcriptionModelOptions as Record<string, unknown>)[\n key as keyof RevaiTranscriptionAPITypes\n ] = value;\n }\n }\n }\n\n formData.append('config', JSON.stringify(transcriptionModelOptions));\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const { value: submissionResponse } = await postFormDataToApi({\n url: this.config.url({\n path: '/speechtotext/v1/jobs',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (submissionResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Failed to submit transcription job to Rev.ai',\n name: 'TranscriptionJobSubmissionFailed',\n cause: submissionResponse,\n });\n }\n\n const jobId = submissionResponse.id;\n const timeoutMs = 60 * 1000; // 60 seconds timeout\n const startTime = Date.now();\n const pollingInterval = 1000;\n let jobResponse = submissionResponse;\n\n while (jobResponse.status !== 'transcribed') {\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription job polling timed out',\n name: 'TranscriptionJobPollingTimedOut',\n cause: submissionResponse,\n });\n }\n\n // Poll for job status\n const pollingResult = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n jobResponse = pollingResult.value;\n\n if (jobResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Transcription job failed',\n name: 'TranscriptionJobFailed',\n cause: jobResponse,\n });\n }\n\n // Wait before polling again (only if we need to continue polling)\n if (jobResponse.status !== 'transcribed') {\n await delay(pollingInterval);\n }\n }\n\n const {\n value: transcriptionResult,\n responseHeaders,\n rawValue: rawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}/transcript`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let durationInSeconds = 0;\n const segments: {\n text: string;\n startSecond: number;\n endSecond: number;\n }[] = [];\n\n for (const monologue of transcriptionResult.monologues ?? []) {\n // Process each monologue to extract segments with timing information\n let currentSegmentText = '';\n let segmentStartSecond = 0;\n let hasStartedSegment = false;\n\n for (const element of monologue?.elements ?? []) {\n // Add the element value to the current segment text\n currentSegmentText += element.value;\n\n // For text elements, track timing information\n if (element.type === 'text') {\n // Update the overall duration if this is the latest timestamp\n if (element.end_ts && element.end_ts > durationInSeconds) {\n durationInSeconds = element.end_ts;\n }\n\n // If this is the first text element in a segment, mark the start time\n if (!hasStartedSegment && typeof element.ts === 'number') {\n segmentStartSecond = element.ts;\n hasStartedSegment = true;\n }\n\n // If we have an end timestamp, we can complete a segment\n if (typeof element.end_ts === 'number' && hasStartedSegment) {\n // Only add non-empty segments\n if (currentSegmentText.trim()) {\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: element.end_ts,\n });\n }\n\n // Reset for the next segment\n currentSegmentText = '';\n hasStartedSegment = false;\n }\n }\n }\n\n // Handle any remaining segment text that wasn't added\n if (hasStartedSegment && currentSegmentText.trim()) {\n const endSecond =\n durationInSeconds > segmentStartSecond\n ? durationInSeconds\n : segmentStartSecond + 1;\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: endSecond,\n });\n }\n }\n\n return {\n text:\n transcriptionResult.monologues\n ?.map(monologue =>\n monologue?.elements?.map(element => element.value).join(''),\n )\n .join(' ') ?? '',\n segments,\n language: submissionResponse.language ?? undefined,\n durationInSeconds,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst revaiTranscriptionJobResponseSchema = z.object({\n id: z.string().nullish(),\n status: z.string().nullish(),\n language: z.string().nullish(),\n});\n\nconst revaiTranscriptionResponseSchema = z.object({\n monologues: z\n .array(\n z.object({\n elements: z\n .array(\n z.object({\n type: z.string().nullish(),\n value: z.string().nullish(),\n ts: z.number().nullish(),\n end_ts: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","import { z } from 'zod';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const revaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type RevaiErrorData = z.infer<typeof revaiErrorDataSchema>;\n\nexport const revaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: revaiErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/revai-provider.ts","../src/revai-transcription-model.ts","../src/revai-error.ts"],"sourcesContent":["export { createRevai, revai } from './revai-provider';\nexport type { RevaiProvider, RevaiProviderSettings } from './revai-provider';\n","import {\n TranscriptionModelV2,\n ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport { FetchFunction, loadApiKey } from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\n\nexport interface RevaiProvider extends ProviderV2 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV2;\n}\n\nexport interface RevaiProviderSettings {\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\nCreate a Rev.ai provider instance.\n */\nexport function createRevai(\n options: RevaiProviderSettings = {},\n): RevaiProvider {\n const getHeaders = () => ({\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n });\n\n const createTranscriptionModel = (modelId: RevaiTranscriptionModelId) =>\n new RevaiTranscriptionModel(modelId, {\n provider: `revai.transcription`,\n url: ({ path }) => `https://api.rev.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: RevaiTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Rev.ai does not provide language models',\n });\n };\n\n provider.textEmbeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'textEmbeddingModel',\n message: 'Rev.ai does not provide text embedding models',\n });\n };\n\n provider.imageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'imageModel',\n message: 'Rev.ai does not provide image models',\n });\n };\n\n return provider as RevaiProvider;\n}\n\n/**\nDefault Rev.ai provider instance.\n */\nexport const revai = createRevai();\n","import {\n AISDKError,\n TranscriptionModelV2,\n TranscriptionModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postFormDataToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { RevaiConfig } from './revai-config';\nimport { revaiFailedResponseHandler } from './revai-error';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { RevaiTranscriptionAPITypes } from './revai-api-types';\n\n// https://docs.rev.ai/api/asynchronous/reference/#operation/SubmitTranscriptionJob\nconst revaiProviderOptionsSchema = z.object({\n /**\n * Optional metadata string to associate with the transcription job.\n */\n metadata: z.string().nullish(),\n /**\n * Configuration for webhook notifications when job is complete.\n */\n notification_config: z\n .object({\n /**\n * URL to send the notification to.\n */\n url: z.string(),\n /**\n * Optional authorization headers for the notification request.\n */\n auth_headers: z\n .object({\n Authorization: z.string(),\n })\n .nullish(),\n })\n .nullish(),\n /**\n * Number of seconds after which the job will be automatically deleted.\n */\n delete_after_seconds: z.number().nullish(),\n /**\n * Whether to include filler words and false starts in the transcription.\n */\n verbatim: z.boolean().optional(),\n /**\n * Whether to prioritize the job for faster processing.\n */\n rush: z.boolean().nullish().default(false),\n /**\n * Whether to run the job in test mode.\n */\n test_mode: z.boolean().nullish().default(false),\n /**\n * Specific segments of the audio to transcribe.\n */\n segments_to_transcribe: z\n .array(\n z.object({\n /**\n * Start time of the segment in seconds.\n */\n start: z.number(),\n /**\n * End time of the segment in seconds.\n */\n end: z.number(),\n }),\n )\n .nullish(),\n /**\n * Names to assign to speakers in the transcription.\n */\n speaker_names: z\n .array(\n z.object({\n /**\n * Display name for the speaker.\n */\n display_name: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to skip speaker diarization.\n */\n skip_diarization: z.boolean().nullish().default(false),\n /**\n * Whether to skip post-processing steps.\n */\n skip_postprocessing: z.boolean().nullish().default(false),\n /**\n * Whether to skip adding punctuation to the transcription.\n */\n skip_punctuation: z.boolean().nullish().default(false),\n /**\n * Whether to remove disfluencies (um, uh, etc.) from the transcription.\n */\n remove_disfluencies: z.boolean().nullish().default(false),\n /**\n * Whether to remove atmospheric sounds from the transcription.\n */\n remove_atmospherics: z.boolean().nullish().default(false),\n /**\n * Whether to filter profanity from the transcription.\n */\n filter_profanity: z.boolean().nullish().default(false),\n /**\n * Number of speaker channels in the audio.\n */\n speaker_channels_count: z.number().nullish(),\n /**\n * Expected number of speakers in the audio.\n */\n speakers_count: z.number().nullish(),\n /**\n * Type of diarization to use.\n */\n diarization_type: z\n .enum(['standard', 'premium'])\n .nullish()\n .default('standard'),\n /**\n * ID of a custom vocabulary to use for the transcription.\n */\n custom_vocabulary_id: z.string().nullish(),\n /**\n * Custom vocabularies to use for the transcription.\n */\n custom_vocabularies: z.array(z.object({})).optional(),\n /**\n * Whether to strictly enforce custom vocabulary.\n */\n strict_custom_vocabulary: z.boolean().optional(),\n /**\n * Configuration for generating a summary of the transcription.\n */\n summarization_config: z\n .object({\n /**\n * Model to use for summarization.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n /**\n * Format of the summary.\n */\n type: z.enum(['paragraph', 'bullets']).nullish().default('paragraph'),\n /**\n * Custom prompt for the summarization.\n */\n prompt: z.string().nullish(),\n })\n .nullish(),\n /**\n * Configuration for translating the transcription.\n */\n translation_config: z\n .object({\n /**\n * Target languages for translation.\n */\n target_languages: z.array(\n z.object({\n /**\n * Language code for translation target.\n */\n language: z.enum([\n 'en',\n 'en-us',\n 'en-gb',\n 'ar',\n 'pt',\n 'pt-br',\n 'pt-pt',\n 'fr',\n 'fr-ca',\n 'es',\n 'es-es',\n 'es-la',\n 'it',\n 'ja',\n 'ko',\n 'de',\n 'ru',\n ]),\n }),\n ),\n /**\n * Model to use for translation.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n })\n .nullish(),\n /**\n * Language of the audio content.\n */\n language: z.string().nullish().default('en'),\n /**\n * Whether to perform forced alignment.\n */\n forced_alignment: z.boolean().nullish().default(false),\n});\n\nexport type RevaiTranscriptionCallOptions = z.infer<\n typeof revaiProviderOptionsSchema\n>;\n\ninterface RevaiTranscriptionModelConfig extends RevaiConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class RevaiTranscriptionModel implements TranscriptionModelV2 {\n readonly specificationVersion = 'v2';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: RevaiTranscriptionModelId,\n private readonly config: RevaiTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV2['doGenerate']>[0]) {\n const warnings: TranscriptionModelV2CallWarning[] = [];\n\n // Parse provider options\n const revaiOptions = await parseProviderOptions({\n provider: 'revai',\n providerOptions,\n schema: revaiProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('media', new File([blob], 'audio', { type: mediaType }));\n const transcriptionModelOptions: RevaiTranscriptionAPITypes = {\n transcriber: this.modelId,\n };\n\n // Add provider-specific options\n if (revaiOptions) {\n const formDataConfig: RevaiTranscriptionAPITypes = {\n metadata: revaiOptions.metadata ?? undefined,\n notification_config: revaiOptions.notification_config ?? undefined,\n delete_after_seconds: revaiOptions.delete_after_seconds ?? undefined,\n verbatim: revaiOptions.verbatim ?? undefined,\n rush: revaiOptions.rush ?? undefined,\n test_mode: revaiOptions.test_mode ?? undefined,\n segments_to_transcribe:\n revaiOptions.segments_to_transcribe ?? undefined,\n speaker_names: revaiOptions.speaker_names ?? undefined,\n skip_diarization: revaiOptions.skip_diarization ?? undefined,\n skip_postprocessing: revaiOptions.skip_postprocessing ?? undefined,\n skip_punctuation: revaiOptions.skip_punctuation ?? undefined,\n remove_disfluencies: revaiOptions.remove_disfluencies ?? undefined,\n remove_atmospherics: revaiOptions.remove_atmospherics ?? undefined,\n filter_profanity: revaiOptions.filter_profanity ?? undefined,\n speaker_channels_count:\n revaiOptions.speaker_channels_count ?? undefined,\n speakers_count: revaiOptions.speakers_count ?? undefined,\n diarization_type: revaiOptions.diarization_type ?? undefined,\n custom_vocabulary_id: revaiOptions.custom_vocabulary_id ?? undefined,\n custom_vocabularies: revaiOptions.custom_vocabularies ?? undefined,\n strict_custom_vocabulary:\n revaiOptions.strict_custom_vocabulary ?? undefined,\n summarization_config: revaiOptions.summarization_config ?? undefined,\n translation_config: revaiOptions.translation_config ?? undefined,\n language: revaiOptions.language ?? undefined,\n forced_alignment: revaiOptions.forced_alignment ?? undefined,\n };\n\n for (const key in formDataConfig) {\n const value = formDataConfig[key as keyof RevaiTranscriptionAPITypes];\n if (value !== undefined) {\n (transcriptionModelOptions as Record<string, unknown>)[\n key as keyof RevaiTranscriptionAPITypes\n ] = value;\n }\n }\n }\n\n formData.append('config', JSON.stringify(transcriptionModelOptions));\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const { value: submissionResponse } = await postFormDataToApi({\n url: this.config.url({\n path: '/speechtotext/v1/jobs',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (submissionResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Failed to submit transcription job to Rev.ai',\n name: 'TranscriptionJobSubmissionFailed',\n cause: submissionResponse,\n });\n }\n\n const jobId = submissionResponse.id;\n const timeoutMs = 60 * 1000; // 60 seconds timeout\n const startTime = Date.now();\n const pollingInterval = 1000;\n let jobResponse = submissionResponse;\n\n while (jobResponse.status !== 'transcribed') {\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription job polling timed out',\n name: 'TranscriptionJobPollingTimedOut',\n cause: submissionResponse,\n });\n }\n\n // Poll for job status\n const pollingResult = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n jobResponse = pollingResult.value;\n\n if (jobResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Transcription job failed',\n name: 'TranscriptionJobFailed',\n cause: jobResponse,\n });\n }\n\n // Wait before polling again (only if we need to continue polling)\n if (jobResponse.status !== 'transcribed') {\n await delay(pollingInterval);\n }\n }\n\n const {\n value: transcriptionResult,\n responseHeaders,\n rawValue: rawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}/transcript`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let durationInSeconds = 0;\n const segments: {\n text: string;\n startSecond: number;\n endSecond: number;\n }[] = [];\n\n for (const monologue of transcriptionResult.monologues ?? []) {\n // Process each monologue to extract segments with timing information\n let currentSegmentText = '';\n let segmentStartSecond = 0;\n let hasStartedSegment = false;\n\n for (const element of monologue?.elements ?? []) {\n // Add the element value to the current segment text\n currentSegmentText += element.value;\n\n // For text elements, track timing information\n if (element.type === 'text') {\n // Update the overall duration if this is the latest timestamp\n if (element.end_ts && element.end_ts > durationInSeconds) {\n durationInSeconds = element.end_ts;\n }\n\n // If this is the first text element in a segment, mark the start time\n if (!hasStartedSegment && typeof element.ts === 'number') {\n segmentStartSecond = element.ts;\n hasStartedSegment = true;\n }\n\n // If we have an end timestamp, we can complete a segment\n if (typeof element.end_ts === 'number' && hasStartedSegment) {\n // Only add non-empty segments\n if (currentSegmentText.trim()) {\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: element.end_ts,\n });\n }\n\n // Reset for the next segment\n currentSegmentText = '';\n hasStartedSegment = false;\n }\n }\n }\n\n // Handle any remaining segment text that wasn't added\n if (hasStartedSegment && currentSegmentText.trim()) {\n const endSecond =\n durationInSeconds > segmentStartSecond\n ? durationInSeconds\n : segmentStartSecond + 1;\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: endSecond,\n });\n }\n }\n\n return {\n text:\n transcriptionResult.monologues\n ?.map(monologue =>\n monologue?.elements?.map(element => element.value).join(''),\n )\n .join(' ') ?? '',\n segments,\n language: submissionResponse.language ?? undefined,\n durationInSeconds,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst revaiTranscriptionJobResponseSchema = z.object({\n id: z.string().nullish(),\n status: z.string().nullish(),\n language: z.string().nullish(),\n});\n\nconst revaiTranscriptionResponseSchema = z.object({\n monologues: z\n .array(\n z.object({\n elements: z\n .array(\n z.object({\n type: z.string().nullish(),\n value: z.string().nullish(),\n ts: z.number().nullish(),\n end_ts: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const revaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type RevaiErrorData = z.infer<typeof revaiErrorDataSchema>;\n\nexport const revaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: revaiErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider_utils","import_v4","_a"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
// src/revai-provider.ts
|
|
2
|
+
import {
|
|
3
|
+
NoSuchModelError
|
|
4
|
+
} from "@ai-sdk/provider";
|
|
2
5
|
import { loadApiKey } from "@ai-sdk/provider-utils";
|
|
3
6
|
|
|
4
7
|
// src/revai-transcription-model.ts
|
|
@@ -14,10 +17,10 @@ import {
|
|
|
14
17
|
parseProviderOptions,
|
|
15
18
|
postFormDataToApi
|
|
16
19
|
} from "@ai-sdk/provider-utils";
|
|
17
|
-
import { z as z2 } from "zod";
|
|
20
|
+
import { z as z2 } from "zod/v4";
|
|
18
21
|
|
|
19
22
|
// src/revai-error.ts
|
|
20
|
-
import { z } from "zod";
|
|
23
|
+
import { z } from "zod/v4";
|
|
21
24
|
import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
|
|
22
25
|
var revaiErrorDataSchema = z.object({
|
|
23
26
|
error: z.object({
|
|
@@ -209,7 +212,7 @@ var RevaiTranscriptionModel = class {
|
|
|
209
212
|
constructor(modelId, config) {
|
|
210
213
|
this.modelId = modelId;
|
|
211
214
|
this.config = config;
|
|
212
|
-
this.specificationVersion = "
|
|
215
|
+
this.specificationVersion = "v2";
|
|
213
216
|
}
|
|
214
217
|
get provider() {
|
|
215
218
|
return this.config.provider;
|
|
@@ -453,6 +456,27 @@ function createRevai(options = {}) {
|
|
|
453
456
|
};
|
|
454
457
|
provider.transcription = createTranscriptionModel;
|
|
455
458
|
provider.transcriptionModel = createTranscriptionModel;
|
|
459
|
+
provider.languageModel = () => {
|
|
460
|
+
throw new NoSuchModelError({
|
|
461
|
+
modelId: "unknown",
|
|
462
|
+
modelType: "languageModel",
|
|
463
|
+
message: "Rev.ai does not provide language models"
|
|
464
|
+
});
|
|
465
|
+
};
|
|
466
|
+
provider.textEmbeddingModel = () => {
|
|
467
|
+
throw new NoSuchModelError({
|
|
468
|
+
modelId: "unknown",
|
|
469
|
+
modelType: "textEmbeddingModel",
|
|
470
|
+
message: "Rev.ai does not provide text embedding models"
|
|
471
|
+
});
|
|
472
|
+
};
|
|
473
|
+
provider.imageModel = () => {
|
|
474
|
+
throw new NoSuchModelError({
|
|
475
|
+
modelId: "unknown",
|
|
476
|
+
modelType: "imageModel",
|
|
477
|
+
message: "Rev.ai does not provide image models"
|
|
478
|
+
});
|
|
479
|
+
};
|
|
456
480
|
return provider;
|
|
457
481
|
}
|
|
458
482
|
var revai = createRevai();
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/revai-provider.ts","../src/revai-transcription-model.ts","../src/revai-error.ts"],"sourcesContent":["import { TranscriptionModelV1, ProviderV1 } from '@ai-sdk/provider';\nimport { FetchFunction, loadApiKey } from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\n\nexport interface RevaiProvider extends Pick<ProviderV1, 'transcriptionModel'> {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV1;\n}\n\nexport interface RevaiProviderSettings {\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\nCreate a Rev.ai provider instance.\n */\nexport function createRevai(\n options: RevaiProviderSettings = {},\n): RevaiProvider {\n const getHeaders = () => ({\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n });\n\n const createTranscriptionModel = (modelId: RevaiTranscriptionModelId) =>\n new RevaiTranscriptionModel(modelId, {\n provider: `revai.transcription`,\n url: ({ path }) => `https://api.rev.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: RevaiTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n return provider as RevaiProvider;\n}\n\n/**\nDefault Rev.ai provider instance.\n */\nexport const revai = createRevai();\n","import {\n AISDKError,\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postFormDataToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { RevaiConfig } from './revai-config';\nimport { revaiFailedResponseHandler } from './revai-error';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { RevaiTranscriptionAPITypes } from './revai-api-types';\n\n// https://docs.rev.ai/api/asynchronous/reference/#operation/SubmitTranscriptionJob\nconst revaiProviderOptionsSchema = z.object({\n /**\n * Optional metadata string to associate with the transcription job.\n */\n metadata: z.string().nullish(),\n /**\n * Configuration for webhook notifications when job is complete.\n */\n notification_config: z\n .object({\n /**\n * URL to send the notification to.\n */\n url: z.string(),\n /**\n * Optional authorization headers for the notification request.\n */\n auth_headers: z\n .object({\n Authorization: z.string(),\n })\n .nullish(),\n })\n .nullish(),\n /**\n * Number of seconds after which the job will be automatically deleted.\n */\n delete_after_seconds: z.number().nullish(),\n /**\n * Whether to include filler words and false starts in the transcription.\n */\n verbatim: z.boolean().optional(),\n /**\n * Whether to prioritize the job for faster processing.\n */\n rush: z.boolean().nullish().default(false),\n /**\n * Whether to run the job in test mode.\n */\n test_mode: z.boolean().nullish().default(false),\n /**\n * Specific segments of the audio to transcribe.\n */\n segments_to_transcribe: z\n .array(\n z.object({\n /**\n * Start time of the segment in seconds.\n */\n start: z.number(),\n /**\n * End time of the segment in seconds.\n */\n end: z.number(),\n }),\n )\n .nullish(),\n /**\n * Names to assign to speakers in the transcription.\n */\n speaker_names: z\n .array(\n z.object({\n /**\n * Display name for the speaker.\n */\n display_name: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to skip speaker diarization.\n */\n skip_diarization: z.boolean().nullish().default(false),\n /**\n * Whether to skip post-processing steps.\n */\n skip_postprocessing: z.boolean().nullish().default(false),\n /**\n * Whether to skip adding punctuation to the transcription.\n */\n skip_punctuation: z.boolean().nullish().default(false),\n /**\n * Whether to remove disfluencies (um, uh, etc.) from the transcription.\n */\n remove_disfluencies: z.boolean().nullish().default(false),\n /**\n * Whether to remove atmospheric sounds from the transcription.\n */\n remove_atmospherics: z.boolean().nullish().default(false),\n /**\n * Whether to filter profanity from the transcription.\n */\n filter_profanity: z.boolean().nullish().default(false),\n /**\n * Number of speaker channels in the audio.\n */\n speaker_channels_count: z.number().nullish(),\n /**\n * Expected number of speakers in the audio.\n */\n speakers_count: z.number().nullish(),\n /**\n * Type of diarization to use.\n */\n diarization_type: z\n .enum(['standard', 'premium'])\n .nullish()\n .default('standard'),\n /**\n * ID of a custom vocabulary to use for the transcription.\n */\n custom_vocabulary_id: z.string().nullish(),\n /**\n * Custom vocabularies to use for the transcription.\n */\n custom_vocabularies: z.array(z.object({})).optional(),\n /**\n * Whether to strictly enforce custom vocabulary.\n */\n strict_custom_vocabulary: z.boolean().optional(),\n /**\n * Configuration for generating a summary of the transcription.\n */\n summarization_config: z\n .object({\n /**\n * Model to use for summarization.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n /**\n * Format of the summary.\n */\n type: z.enum(['paragraph', 'bullets']).nullish().default('paragraph'),\n /**\n * Custom prompt for the summarization.\n */\n prompt: z.string().nullish(),\n })\n .nullish(),\n /**\n * Configuration for translating the transcription.\n */\n translation_config: z\n .object({\n /**\n * Target languages for translation.\n */\n target_languages: z.array(\n z.object({\n /**\n * Language code for translation target.\n */\n language: z.enum([\n 'en',\n 'en-us',\n 'en-gb',\n 'ar',\n 'pt',\n 'pt-br',\n 'pt-pt',\n 'fr',\n 'fr-ca',\n 'es',\n 'es-es',\n 'es-la',\n 'it',\n 'ja',\n 'ko',\n 'de',\n 'ru',\n ]),\n }),\n ),\n /**\n * Model to use for translation.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n })\n .nullish(),\n /**\n * Language of the audio content.\n */\n language: z.string().nullish().default('en'),\n /**\n * Whether to perform forced alignment.\n */\n forced_alignment: z.boolean().nullish().default(false),\n});\n\nexport type RevaiTranscriptionCallOptions = z.infer<\n typeof revaiProviderOptionsSchema\n>;\n\ninterface RevaiTranscriptionModelConfig extends RevaiConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class RevaiTranscriptionModel implements TranscriptionModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: RevaiTranscriptionModelId,\n private readonly config: RevaiTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1['doGenerate']>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n // Parse provider options\n const revaiOptions = await parseProviderOptions({\n provider: 'revai',\n providerOptions,\n schema: revaiProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('media', new File([blob], 'audio', { type: mediaType }));\n const transcriptionModelOptions: RevaiTranscriptionAPITypes = {\n transcriber: this.modelId,\n };\n\n // Add provider-specific options\n if (revaiOptions) {\n const formDataConfig: RevaiTranscriptionAPITypes = {\n metadata: revaiOptions.metadata ?? undefined,\n notification_config: revaiOptions.notification_config ?? undefined,\n delete_after_seconds: revaiOptions.delete_after_seconds ?? undefined,\n verbatim: revaiOptions.verbatim ?? undefined,\n rush: revaiOptions.rush ?? undefined,\n test_mode: revaiOptions.test_mode ?? undefined,\n segments_to_transcribe:\n revaiOptions.segments_to_transcribe ?? undefined,\n speaker_names: revaiOptions.speaker_names ?? undefined,\n skip_diarization: revaiOptions.skip_diarization ?? undefined,\n skip_postprocessing: revaiOptions.skip_postprocessing ?? undefined,\n skip_punctuation: revaiOptions.skip_punctuation ?? undefined,\n remove_disfluencies: revaiOptions.remove_disfluencies ?? undefined,\n remove_atmospherics: revaiOptions.remove_atmospherics ?? undefined,\n filter_profanity: revaiOptions.filter_profanity ?? undefined,\n speaker_channels_count:\n revaiOptions.speaker_channels_count ?? undefined,\n speakers_count: revaiOptions.speakers_count ?? undefined,\n diarization_type: revaiOptions.diarization_type ?? undefined,\n custom_vocabulary_id: revaiOptions.custom_vocabulary_id ?? undefined,\n custom_vocabularies: revaiOptions.custom_vocabularies ?? undefined,\n strict_custom_vocabulary:\n revaiOptions.strict_custom_vocabulary ?? undefined,\n summarization_config: revaiOptions.summarization_config ?? undefined,\n translation_config: revaiOptions.translation_config ?? undefined,\n language: revaiOptions.language ?? undefined,\n forced_alignment: revaiOptions.forced_alignment ?? undefined,\n };\n\n for (const key in formDataConfig) {\n const value = formDataConfig[key as keyof RevaiTranscriptionAPITypes];\n if (value !== undefined) {\n (transcriptionModelOptions as Record<string, unknown>)[\n key as keyof RevaiTranscriptionAPITypes\n ] = value;\n }\n }\n }\n\n formData.append('config', JSON.stringify(transcriptionModelOptions));\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const { value: submissionResponse } = await postFormDataToApi({\n url: this.config.url({\n path: '/speechtotext/v1/jobs',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (submissionResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Failed to submit transcription job to Rev.ai',\n name: 'TranscriptionJobSubmissionFailed',\n cause: submissionResponse,\n });\n }\n\n const jobId = submissionResponse.id;\n const timeoutMs = 60 * 1000; // 60 seconds timeout\n const startTime = Date.now();\n const pollingInterval = 1000;\n let jobResponse = submissionResponse;\n\n while (jobResponse.status !== 'transcribed') {\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription job polling timed out',\n name: 'TranscriptionJobPollingTimedOut',\n cause: submissionResponse,\n });\n }\n\n // Poll for job status\n const pollingResult = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n jobResponse = pollingResult.value;\n\n if (jobResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Transcription job failed',\n name: 'TranscriptionJobFailed',\n cause: jobResponse,\n });\n }\n\n // Wait before polling again (only if we need to continue polling)\n if (jobResponse.status !== 'transcribed') {\n await delay(pollingInterval);\n }\n }\n\n const {\n value: transcriptionResult,\n responseHeaders,\n rawValue: rawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}/transcript`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let durationInSeconds = 0;\n const segments: {\n text: string;\n startSecond: number;\n endSecond: number;\n }[] = [];\n\n for (const monologue of transcriptionResult.monologues ?? []) {\n // Process each monologue to extract segments with timing information\n let currentSegmentText = '';\n let segmentStartSecond = 0;\n let hasStartedSegment = false;\n\n for (const element of monologue?.elements ?? []) {\n // Add the element value to the current segment text\n currentSegmentText += element.value;\n\n // For text elements, track timing information\n if (element.type === 'text') {\n // Update the overall duration if this is the latest timestamp\n if (element.end_ts && element.end_ts > durationInSeconds) {\n durationInSeconds = element.end_ts;\n }\n\n // If this is the first text element in a segment, mark the start time\n if (!hasStartedSegment && typeof element.ts === 'number') {\n segmentStartSecond = element.ts;\n hasStartedSegment = true;\n }\n\n // If we have an end timestamp, we can complete a segment\n if (typeof element.end_ts === 'number' && hasStartedSegment) {\n // Only add non-empty segments\n if (currentSegmentText.trim()) {\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: element.end_ts,\n });\n }\n\n // Reset for the next segment\n currentSegmentText = '';\n hasStartedSegment = false;\n }\n }\n }\n\n // Handle any remaining segment text that wasn't added\n if (hasStartedSegment && currentSegmentText.trim()) {\n const endSecond =\n durationInSeconds > segmentStartSecond\n ? durationInSeconds\n : segmentStartSecond + 1;\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: endSecond,\n });\n }\n }\n\n return {\n text:\n transcriptionResult.monologues\n ?.map(monologue =>\n monologue?.elements?.map(element => element.value).join(''),\n )\n .join(' ') ?? '',\n segments,\n language: submissionResponse.language ?? undefined,\n durationInSeconds,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst revaiTranscriptionJobResponseSchema = z.object({\n id: z.string().nullish(),\n status: z.string().nullish(),\n language: z.string().nullish(),\n});\n\nconst revaiTranscriptionResponseSchema = z.object({\n monologues: z\n .array(\n z.object({\n elements: z\n .array(\n z.object({\n type: z.string().nullish(),\n value: z.string().nullish(),\n ts: z.number().nullish(),\n end_ts: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","import { z } from 'zod';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const revaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type RevaiErrorData = z.infer<typeof revaiErrorDataSchema>;\n\nexport const revaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: revaiErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n"],"mappings":"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","names":["z","z","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/revai-provider.ts","../src/revai-transcription-model.ts","../src/revai-error.ts"],"sourcesContent":["import {\n TranscriptionModelV2,\n ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport { FetchFunction, loadApiKey } from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\n\nexport interface RevaiProvider extends ProviderV2 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV2;\n}\n\nexport interface RevaiProviderSettings {\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\nCreate a Rev.ai provider instance.\n */\nexport function createRevai(\n options: RevaiProviderSettings = {},\n): RevaiProvider {\n const getHeaders = () => ({\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n });\n\n const createTranscriptionModel = (modelId: RevaiTranscriptionModelId) =>\n new RevaiTranscriptionModel(modelId, {\n provider: `revai.transcription`,\n url: ({ path }) => `https://api.rev.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: RevaiTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Rev.ai does not provide language models',\n });\n };\n\n provider.textEmbeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'textEmbeddingModel',\n message: 'Rev.ai does not provide text embedding models',\n });\n };\n\n provider.imageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'imageModel',\n message: 'Rev.ai does not provide image models',\n });\n };\n\n return provider as RevaiProvider;\n}\n\n/**\nDefault Rev.ai provider instance.\n */\nexport const revai = createRevai();\n","import {\n AISDKError,\n TranscriptionModelV2,\n TranscriptionModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postFormDataToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { RevaiConfig } from './revai-config';\nimport { revaiFailedResponseHandler } from './revai-error';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { RevaiTranscriptionAPITypes } from './revai-api-types';\n\n// https://docs.rev.ai/api/asynchronous/reference/#operation/SubmitTranscriptionJob\nconst revaiProviderOptionsSchema = z.object({\n /**\n * Optional metadata string to associate with the transcription job.\n */\n metadata: z.string().nullish(),\n /**\n * Configuration for webhook notifications when job is complete.\n */\n notification_config: z\n .object({\n /**\n * URL to send the notification to.\n */\n url: z.string(),\n /**\n * Optional authorization headers for the notification request.\n */\n auth_headers: z\n .object({\n Authorization: z.string(),\n })\n .nullish(),\n })\n .nullish(),\n /**\n * Number of seconds after which the job will be automatically deleted.\n */\n delete_after_seconds: z.number().nullish(),\n /**\n * Whether to include filler words and false starts in the transcription.\n */\n verbatim: z.boolean().optional(),\n /**\n * Whether to prioritize the job for faster processing.\n */\n rush: z.boolean().nullish().default(false),\n /**\n * Whether to run the job in test mode.\n */\n test_mode: z.boolean().nullish().default(false),\n /**\n * Specific segments of the audio to transcribe.\n */\n segments_to_transcribe: z\n .array(\n z.object({\n /**\n * Start time of the segment in seconds.\n */\n start: z.number(),\n /**\n * End time of the segment in seconds.\n */\n end: z.number(),\n }),\n )\n .nullish(),\n /**\n * Names to assign to speakers in the transcription.\n */\n speaker_names: z\n .array(\n z.object({\n /**\n * Display name for the speaker.\n */\n display_name: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to skip speaker diarization.\n */\n skip_diarization: z.boolean().nullish().default(false),\n /**\n * Whether to skip post-processing steps.\n */\n skip_postprocessing: z.boolean().nullish().default(false),\n /**\n * Whether to skip adding punctuation to the transcription.\n */\n skip_punctuation: z.boolean().nullish().default(false),\n /**\n * Whether to remove disfluencies (um, uh, etc.) from the transcription.\n */\n remove_disfluencies: z.boolean().nullish().default(false),\n /**\n * Whether to remove atmospheric sounds from the transcription.\n */\n remove_atmospherics: z.boolean().nullish().default(false),\n /**\n * Whether to filter profanity from the transcription.\n */\n filter_profanity: z.boolean().nullish().default(false),\n /**\n * Number of speaker channels in the audio.\n */\n speaker_channels_count: z.number().nullish(),\n /**\n * Expected number of speakers in the audio.\n */\n speakers_count: z.number().nullish(),\n /**\n * Type of diarization to use.\n */\n diarization_type: z\n .enum(['standard', 'premium'])\n .nullish()\n .default('standard'),\n /**\n * ID of a custom vocabulary to use for the transcription.\n */\n custom_vocabulary_id: z.string().nullish(),\n /**\n * Custom vocabularies to use for the transcription.\n */\n custom_vocabularies: z.array(z.object({})).optional(),\n /**\n * Whether to strictly enforce custom vocabulary.\n */\n strict_custom_vocabulary: z.boolean().optional(),\n /**\n * Configuration for generating a summary of the transcription.\n */\n summarization_config: z\n .object({\n /**\n * Model to use for summarization.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n /**\n * Format of the summary.\n */\n type: z.enum(['paragraph', 'bullets']).nullish().default('paragraph'),\n /**\n * Custom prompt for the summarization.\n */\n prompt: z.string().nullish(),\n })\n .nullish(),\n /**\n * Configuration for translating the transcription.\n */\n translation_config: z\n .object({\n /**\n * Target languages for translation.\n */\n target_languages: z.array(\n z.object({\n /**\n * Language code for translation target.\n */\n language: z.enum([\n 'en',\n 'en-us',\n 'en-gb',\n 'ar',\n 'pt',\n 'pt-br',\n 'pt-pt',\n 'fr',\n 'fr-ca',\n 'es',\n 'es-es',\n 'es-la',\n 'it',\n 'ja',\n 'ko',\n 'de',\n 'ru',\n ]),\n }),\n ),\n /**\n * Model to use for translation.\n */\n model: z.enum(['standard', 'premium']).nullish().default('standard'),\n })\n .nullish(),\n /**\n * Language of the audio content.\n */\n language: z.string().nullish().default('en'),\n /**\n * Whether to perform forced alignment.\n */\n forced_alignment: z.boolean().nullish().default(false),\n});\n\nexport type RevaiTranscriptionCallOptions = z.infer<\n typeof revaiProviderOptionsSchema\n>;\n\ninterface RevaiTranscriptionModelConfig extends RevaiConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class RevaiTranscriptionModel implements TranscriptionModelV2 {\n readonly specificationVersion = 'v2';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: RevaiTranscriptionModelId,\n private readonly config: RevaiTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV2['doGenerate']>[0]) {\n const warnings: TranscriptionModelV2CallWarning[] = [];\n\n // Parse provider options\n const revaiOptions = await parseProviderOptions({\n provider: 'revai',\n providerOptions,\n schema: revaiProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('media', new File([blob], 'audio', { type: mediaType }));\n const transcriptionModelOptions: RevaiTranscriptionAPITypes = {\n transcriber: this.modelId,\n };\n\n // Add provider-specific options\n if (revaiOptions) {\n const formDataConfig: RevaiTranscriptionAPITypes = {\n metadata: revaiOptions.metadata ?? undefined,\n notification_config: revaiOptions.notification_config ?? undefined,\n delete_after_seconds: revaiOptions.delete_after_seconds ?? undefined,\n verbatim: revaiOptions.verbatim ?? undefined,\n rush: revaiOptions.rush ?? undefined,\n test_mode: revaiOptions.test_mode ?? undefined,\n segments_to_transcribe:\n revaiOptions.segments_to_transcribe ?? undefined,\n speaker_names: revaiOptions.speaker_names ?? undefined,\n skip_diarization: revaiOptions.skip_diarization ?? undefined,\n skip_postprocessing: revaiOptions.skip_postprocessing ?? undefined,\n skip_punctuation: revaiOptions.skip_punctuation ?? undefined,\n remove_disfluencies: revaiOptions.remove_disfluencies ?? undefined,\n remove_atmospherics: revaiOptions.remove_atmospherics ?? undefined,\n filter_profanity: revaiOptions.filter_profanity ?? undefined,\n speaker_channels_count:\n revaiOptions.speaker_channels_count ?? undefined,\n speakers_count: revaiOptions.speakers_count ?? undefined,\n diarization_type: revaiOptions.diarization_type ?? undefined,\n custom_vocabulary_id: revaiOptions.custom_vocabulary_id ?? undefined,\n custom_vocabularies: revaiOptions.custom_vocabularies ?? undefined,\n strict_custom_vocabulary:\n revaiOptions.strict_custom_vocabulary ?? undefined,\n summarization_config: revaiOptions.summarization_config ?? undefined,\n translation_config: revaiOptions.translation_config ?? undefined,\n language: revaiOptions.language ?? undefined,\n forced_alignment: revaiOptions.forced_alignment ?? undefined,\n };\n\n for (const key in formDataConfig) {\n const value = formDataConfig[key as keyof RevaiTranscriptionAPITypes];\n if (value !== undefined) {\n (transcriptionModelOptions as Record<string, unknown>)[\n key as keyof RevaiTranscriptionAPITypes\n ] = value;\n }\n }\n }\n\n formData.append('config', JSON.stringify(transcriptionModelOptions));\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const { value: submissionResponse } = await postFormDataToApi({\n url: this.config.url({\n path: '/speechtotext/v1/jobs',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (submissionResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Failed to submit transcription job to Rev.ai',\n name: 'TranscriptionJobSubmissionFailed',\n cause: submissionResponse,\n });\n }\n\n const jobId = submissionResponse.id;\n const timeoutMs = 60 * 1000; // 60 seconds timeout\n const startTime = Date.now();\n const pollingInterval = 1000;\n let jobResponse = submissionResponse;\n\n while (jobResponse.status !== 'transcribed') {\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription job polling timed out',\n name: 'TranscriptionJobPollingTimedOut',\n cause: submissionResponse,\n });\n }\n\n // Poll for job status\n const pollingResult = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionJobResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n jobResponse = pollingResult.value;\n\n if (jobResponse.status === 'failed') {\n throw new AISDKError({\n message: 'Transcription job failed',\n name: 'TranscriptionJobFailed',\n cause: jobResponse,\n });\n }\n\n // Wait before polling again (only if we need to continue polling)\n if (jobResponse.status !== 'transcribed') {\n await delay(pollingInterval);\n }\n }\n\n const {\n value: transcriptionResult,\n responseHeaders,\n rawValue: rawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `/speechtotext/v1/jobs/${jobId}/transcript`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: revaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n revaiTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let durationInSeconds = 0;\n const segments: {\n text: string;\n startSecond: number;\n endSecond: number;\n }[] = [];\n\n for (const monologue of transcriptionResult.monologues ?? []) {\n // Process each monologue to extract segments with timing information\n let currentSegmentText = '';\n let segmentStartSecond = 0;\n let hasStartedSegment = false;\n\n for (const element of monologue?.elements ?? []) {\n // Add the element value to the current segment text\n currentSegmentText += element.value;\n\n // For text elements, track timing information\n if (element.type === 'text') {\n // Update the overall duration if this is the latest timestamp\n if (element.end_ts && element.end_ts > durationInSeconds) {\n durationInSeconds = element.end_ts;\n }\n\n // If this is the first text element in a segment, mark the start time\n if (!hasStartedSegment && typeof element.ts === 'number') {\n segmentStartSecond = element.ts;\n hasStartedSegment = true;\n }\n\n // If we have an end timestamp, we can complete a segment\n if (typeof element.end_ts === 'number' && hasStartedSegment) {\n // Only add non-empty segments\n if (currentSegmentText.trim()) {\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: element.end_ts,\n });\n }\n\n // Reset for the next segment\n currentSegmentText = '';\n hasStartedSegment = false;\n }\n }\n }\n\n // Handle any remaining segment text that wasn't added\n if (hasStartedSegment && currentSegmentText.trim()) {\n const endSecond =\n durationInSeconds > segmentStartSecond\n ? durationInSeconds\n : segmentStartSecond + 1;\n segments.push({\n text: currentSegmentText.trim(),\n startSecond: segmentStartSecond,\n endSecond: endSecond,\n });\n }\n }\n\n return {\n text:\n transcriptionResult.monologues\n ?.map(monologue =>\n monologue?.elements?.map(element => element.value).join(''),\n )\n .join(' ') ?? '',\n segments,\n language: submissionResponse.language ?? undefined,\n durationInSeconds,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst revaiTranscriptionJobResponseSchema = z.object({\n id: z.string().nullish(),\n status: z.string().nullish(),\n language: z.string().nullish(),\n});\n\nconst revaiTranscriptionResponseSchema = z.object({\n monologues: z\n .array(\n z.object({\n elements: z\n .array(\n z.object({\n type: z.string().nullish(),\n value: z.string().nullish(),\n ts: z.number().nullish(),\n end_ts: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const revaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type RevaiErrorData = z.infer<typeof revaiErrorDataSchema>;\n\nexport const revaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: revaiErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n"],"mappings":"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","names":["z","z","_a"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/revai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,18 +19,18 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ai-sdk/provider": "2.0.0
|
|
23
|
-
"@ai-sdk/provider-utils": "3.0.
|
|
22
|
+
"@ai-sdk/provider": "2.0.0",
|
|
23
|
+
"@ai-sdk/provider-utils": "3.0.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "20.17.24",
|
|
27
27
|
"tsup": "^8",
|
|
28
28
|
"typescript": "5.6.3",
|
|
29
|
-
"zod": "3.
|
|
29
|
+
"zod": "3.25.76",
|
|
30
30
|
"@vercel/ai-tsconfig": "0.0.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"zod": "^3.
|
|
33
|
+
"zod": "^3.25.76 || ^4"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
36
|
"node": ">=18"
|