@ai-sdk/revai 2.0.0-beta.59 → 2.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 +65 -159
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# @ai-sdk/revai
|
|
2
2
|
|
|
3
|
+
## 2.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [29264a3]
|
|
8
|
+
- @ai-sdk/provider-utils@4.0.1
|
|
9
|
+
|
|
10
|
+
## 2.0.0
|
|
11
|
+
|
|
12
|
+
### Major Changes
|
|
13
|
+
|
|
14
|
+
- dee8b05: ai SDK 6 beta
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- 78928cb: release: start 5.1 beta
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- 0c3b58b: fix(provider): add specificationVersion to ProviderV3
|
|
23
|
+
- 8d9e8ad: chore(provider): remove generics from EmbeddingModelV3
|
|
24
|
+
|
|
25
|
+
Before
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
model.textEmbeddingModel('my-model-id');
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
After
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
model.embeddingModel('my-model-id');
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- 95f65c2: chore: use import \* from zod/v4
|
|
38
|
+
- ed329cb: feat: `Provider-V3`
|
|
39
|
+
- 1cad0ab: feat: add provider version to user-agent header
|
|
40
|
+
- 457318b: chore(provider,ai): switch to SharedV3Warning and unified warnings
|
|
41
|
+
- 366f50b: chore(provider): add deprecated textEmbeddingModel and textEmbedding aliases
|
|
42
|
+
- 4616b86: chore: update zod peer depenedency version
|
|
43
|
+
- 21e20c0: feat(provider): transcription model v3 spec
|
|
44
|
+
- 10c1322: fix: moved dependency `@ai-sdk/test-server` to devDependencies
|
|
45
|
+
- Updated dependencies
|
|
46
|
+
- @ai-sdk/provider@3.0.0
|
|
47
|
+
- @ai-sdk/provider-utils@4.0.0
|
|
48
|
+
|
|
3
49
|
## 2.0.0-beta.59
|
|
4
50
|
|
|
5
51
|
### Patch Changes
|
|
@@ -384,8 +430,7 @@
|
|
|
384
430
|
### Patch Changes
|
|
385
431
|
|
|
386
432
|
- 95f65c2: chore: use import \* from zod/v4
|
|
387
|
-
- Updated dependencies
|
|
388
|
-
- Updated dependencies [95f65c2]
|
|
433
|
+
- Updated dependencies
|
|
389
434
|
- @ai-sdk/provider-utils@4.0.0-beta.11
|
|
390
435
|
|
|
391
436
|
## 2.0.0-beta.10
|
|
@@ -419,8 +464,7 @@
|
|
|
419
464
|
### Patch Changes
|
|
420
465
|
|
|
421
466
|
- 21e20c0: feat(provider): transcription model v3 spec
|
|
422
|
-
- Updated dependencies
|
|
423
|
-
- Updated dependencies [e8109d3]
|
|
467
|
+
- Updated dependencies
|
|
424
468
|
- @ai-sdk/provider@2.1.0-beta.5
|
|
425
469
|
- @ai-sdk/provider-utils@3.1.0-beta.7
|
|
426
470
|
|
|
@@ -428,8 +472,7 @@
|
|
|
428
472
|
|
|
429
473
|
### Patch Changes
|
|
430
474
|
|
|
431
|
-
- Updated dependencies
|
|
432
|
-
- Updated dependencies [2b0caef]
|
|
475
|
+
- Updated dependencies
|
|
433
476
|
- @ai-sdk/provider-utils@3.1.0-beta.6
|
|
434
477
|
- @ai-sdk/provider@2.1.0-beta.4
|
|
435
478
|
|
|
@@ -455,8 +498,7 @@
|
|
|
455
498
|
### Patch Changes
|
|
456
499
|
|
|
457
500
|
- ed329cb: feat: `Provider-V3`
|
|
458
|
-
- Updated dependencies
|
|
459
|
-
- Updated dependencies [522f6b8]
|
|
501
|
+
- Updated dependencies
|
|
460
502
|
- @ai-sdk/provider@2.1.0-beta.2
|
|
461
503
|
- @ai-sdk/provider-utils@3.1.0-beta.3
|
|
462
504
|
|
|
@@ -473,8 +515,7 @@
|
|
|
473
515
|
|
|
474
516
|
### Patch Changes
|
|
475
517
|
|
|
476
|
-
- Updated dependencies
|
|
477
|
-
- Updated dependencies [cbb1d35]
|
|
518
|
+
- Updated dependencies
|
|
478
519
|
- @ai-sdk/test-server@1.0.0-beta.0
|
|
479
520
|
- @ai-sdk/provider-utils@3.1.0-beta.1
|
|
480
521
|
|
|
@@ -537,8 +578,7 @@
|
|
|
537
578
|
|
|
538
579
|
### Patch Changes
|
|
539
580
|
|
|
540
|
-
- Updated dependencies
|
|
541
|
-
- Updated dependencies [f25040d]
|
|
581
|
+
- Updated dependencies
|
|
542
582
|
- @ai-sdk/provider-utils@3.0.3
|
|
543
583
|
|
|
544
584
|
## 1.0.2
|
|
@@ -563,108 +603,7 @@
|
|
|
563
603
|
- cb68df0: feat: add transcription and speech model support to provider registry
|
|
564
604
|
- d1a034f: feature: using Zod 4 for internal stuff
|
|
565
605
|
- 205077b: fix: improve Zod compatibility
|
|
566
|
-
- Updated dependencies
|
|
567
|
-
- Updated dependencies [742b7be]
|
|
568
|
-
- Updated dependencies [e7fcc86]
|
|
569
|
-
- Updated dependencies [7cddb72]
|
|
570
|
-
- Updated dependencies [ccce59b]
|
|
571
|
-
- Updated dependencies [e2b9e4b]
|
|
572
|
-
- Updated dependencies [95857aa]
|
|
573
|
-
- Updated dependencies [45c1ea2]
|
|
574
|
-
- Updated dependencies [6f6bb89]
|
|
575
|
-
- Updated dependencies [060370c]
|
|
576
|
-
- Updated dependencies [dc714f3]
|
|
577
|
-
- Updated dependencies [b5da06a]
|
|
578
|
-
- Updated dependencies [d1a1aa1]
|
|
579
|
-
- Updated dependencies [63f9e9b]
|
|
580
|
-
- Updated dependencies [5d142ab]
|
|
581
|
-
- Updated dependencies [d5f588f]
|
|
582
|
-
- Updated dependencies [e025824]
|
|
583
|
-
- Updated dependencies [0571b98]
|
|
584
|
-
- Updated dependencies [b6b43c7]
|
|
585
|
-
- Updated dependencies [4fef487]
|
|
586
|
-
- Updated dependencies [48d257a]
|
|
587
|
-
- Updated dependencies [0c0c0b3]
|
|
588
|
-
- Updated dependencies [0d2c085]
|
|
589
|
-
- Updated dependencies [40acf9b]
|
|
590
|
-
- Updated dependencies [9222aeb]
|
|
591
|
-
- Updated dependencies [e2aceaf]
|
|
592
|
-
- Updated dependencies [411e483]
|
|
593
|
-
- Updated dependencies [8ba77a7]
|
|
594
|
-
- Updated dependencies [7b3ae3f]
|
|
595
|
-
- Updated dependencies [a166433]
|
|
596
|
-
- Updated dependencies [26735b5]
|
|
597
|
-
- Updated dependencies [443d8ec]
|
|
598
|
-
- Updated dependencies [a8c8bd5]
|
|
599
|
-
- Updated dependencies [abf9a79]
|
|
600
|
-
- Updated dependencies [14c9410]
|
|
601
|
-
- Updated dependencies [e86be6f]
|
|
602
|
-
- Updated dependencies [9bf7291]
|
|
603
|
-
- Updated dependencies [2e13791]
|
|
604
|
-
- Updated dependencies [9f95b35]
|
|
605
|
-
- Updated dependencies [66962ed]
|
|
606
|
-
- Updated dependencies [0d06df6]
|
|
607
|
-
- Updated dependencies [472524a]
|
|
608
|
-
- Updated dependencies [dd3ff01]
|
|
609
|
-
- Updated dependencies [d9c98f4]
|
|
610
|
-
- Updated dependencies [05d2819]
|
|
611
|
-
- Updated dependencies [9301f86]
|
|
612
|
-
- Updated dependencies [0a87932]
|
|
613
|
-
- Updated dependencies [c4a2fec]
|
|
614
|
-
- Updated dependencies [957b739]
|
|
615
|
-
- Updated dependencies [79457bd]
|
|
616
|
-
- Updated dependencies [a3f768e]
|
|
617
|
-
- Updated dependencies [7435eb5]
|
|
618
|
-
- Updated dependencies [8aa9e20]
|
|
619
|
-
- Updated dependencies [4617fab]
|
|
620
|
-
- Updated dependencies [ac34802]
|
|
621
|
-
- Updated dependencies [0054544]
|
|
622
|
-
- Updated dependencies [cb68df0]
|
|
623
|
-
- Updated dependencies [ad80501]
|
|
624
|
-
- Updated dependencies [68ecf2f]
|
|
625
|
-
- Updated dependencies [9e9c809]
|
|
626
|
-
- Updated dependencies [32831c6]
|
|
627
|
-
- Updated dependencies [6dc848c]
|
|
628
|
-
- Updated dependencies [6b98118]
|
|
629
|
-
- Updated dependencies [d0f9495]
|
|
630
|
-
- Updated dependencies [63d791d]
|
|
631
|
-
- Updated dependencies [87b828f]
|
|
632
|
-
- Updated dependencies [3f2f00c]
|
|
633
|
-
- Updated dependencies [bfdca8d]
|
|
634
|
-
- Updated dependencies [0ff02bb]
|
|
635
|
-
- Updated dependencies [7979f7f]
|
|
636
|
-
- Updated dependencies [39a4fab]
|
|
637
|
-
- Updated dependencies [44f4aba]
|
|
638
|
-
- Updated dependencies [9bd5ab5]
|
|
639
|
-
- Updated dependencies [57edfcb]
|
|
640
|
-
- Updated dependencies [faf8446]
|
|
641
|
-
- Updated dependencies [7ea4132]
|
|
642
|
-
- Updated dependencies [d1a034f]
|
|
643
|
-
- Updated dependencies [5c56081]
|
|
644
|
-
- Updated dependencies [fd65bc6]
|
|
645
|
-
- Updated dependencies [023ba40]
|
|
646
|
-
- Updated dependencies [ea7a7c9]
|
|
647
|
-
- Updated dependencies [26535e0]
|
|
648
|
-
- Updated dependencies [e030615]
|
|
649
|
-
- Updated dependencies [5e57fae]
|
|
650
|
-
- Updated dependencies [393138b]
|
|
651
|
-
- Updated dependencies [c57e248]
|
|
652
|
-
- Updated dependencies [88a8ee5]
|
|
653
|
-
- Updated dependencies [41fa418]
|
|
654
|
-
- Updated dependencies [205077b]
|
|
655
|
-
- Updated dependencies [71f938d]
|
|
656
|
-
- Updated dependencies [3795467]
|
|
657
|
-
- Updated dependencies [28a5ed5]
|
|
658
|
-
- Updated dependencies [7182d14]
|
|
659
|
-
- Updated dependencies [c1e6647]
|
|
660
|
-
- Updated dependencies [1766ede]
|
|
661
|
-
- Updated dependencies [811dff3]
|
|
662
|
-
- Updated dependencies [f10304b]
|
|
663
|
-
- Updated dependencies [dd5fd43]
|
|
664
|
-
- Updated dependencies [33f4a6a]
|
|
665
|
-
- Updated dependencies [383cbfa]
|
|
666
|
-
- Updated dependencies [27deb4d]
|
|
667
|
-
- Updated dependencies [c4df419]
|
|
606
|
+
- Updated dependencies
|
|
668
607
|
- @ai-sdk/provider-utils@3.0.0
|
|
669
608
|
- @ai-sdk/provider@2.0.0
|
|
670
609
|
|
|
@@ -708,8 +647,7 @@
|
|
|
708
647
|
|
|
709
648
|
### Patch Changes
|
|
710
649
|
|
|
711
|
-
- Updated dependencies
|
|
712
|
-
- Updated dependencies [383cbfa]
|
|
650
|
+
- Updated dependencies
|
|
713
651
|
- @ai-sdk/provider-utils@3.0.0-beta.5
|
|
714
652
|
|
|
715
653
|
## 1.0.0-beta.4
|
|
@@ -732,9 +670,7 @@
|
|
|
732
670
|
### Patch Changes
|
|
733
671
|
|
|
734
672
|
- d1a034f: feature: using Zod 4 for internal stuff
|
|
735
|
-
- Updated dependencies
|
|
736
|
-
- Updated dependencies [39a4fab]
|
|
737
|
-
- Updated dependencies [d1a034f]
|
|
673
|
+
- Updated dependencies
|
|
738
674
|
- @ai-sdk/provider-utils@3.0.0-beta.2
|
|
739
675
|
|
|
740
676
|
## 1.0.0-beta.1
|
|
@@ -742,23 +678,7 @@
|
|
|
742
678
|
### Patch Changes
|
|
743
679
|
|
|
744
680
|
- cb68df0: feat: add transcription and speech model support to provider registry
|
|
745
|
-
- Updated dependencies
|
|
746
|
-
- Updated dependencies [7cddb72]
|
|
747
|
-
- Updated dependencies [ccce59b]
|
|
748
|
-
- Updated dependencies [e2b9e4b]
|
|
749
|
-
- Updated dependencies [45c1ea2]
|
|
750
|
-
- Updated dependencies [e025824]
|
|
751
|
-
- Updated dependencies [0d06df6]
|
|
752
|
-
- Updated dependencies [472524a]
|
|
753
|
-
- Updated dependencies [dd3ff01]
|
|
754
|
-
- Updated dependencies [7435eb5]
|
|
755
|
-
- Updated dependencies [cb68df0]
|
|
756
|
-
- Updated dependencies [bfdca8d]
|
|
757
|
-
- Updated dependencies [44f4aba]
|
|
758
|
-
- Updated dependencies [023ba40]
|
|
759
|
-
- Updated dependencies [5e57fae]
|
|
760
|
-
- Updated dependencies [71f938d]
|
|
761
|
-
- Updated dependencies [28a5ed5]
|
|
681
|
+
- Updated dependencies
|
|
762
682
|
- @ai-sdk/provider@2.0.0-beta.1
|
|
763
683
|
- @ai-sdk/provider-utils@3.0.0-beta.1
|
|
764
684
|
|
|
@@ -766,8 +686,7 @@
|
|
|
766
686
|
|
|
767
687
|
### Patch Changes
|
|
768
688
|
|
|
769
|
-
- Updated dependencies
|
|
770
|
-
- Updated dependencies [8ba77a7]
|
|
689
|
+
- Updated dependencies
|
|
771
690
|
- @ai-sdk/provider@2.0.0-alpha.15
|
|
772
691
|
- @ai-sdk/provider-utils@3.0.0-alpha.15
|
|
773
692
|
|
|
@@ -775,9 +694,7 @@
|
|
|
775
694
|
|
|
776
695
|
### Patch Changes
|
|
777
696
|
|
|
778
|
-
- Updated dependencies
|
|
779
|
-
- Updated dependencies [63f9e9b]
|
|
780
|
-
- Updated dependencies [2e13791]
|
|
697
|
+
- Updated dependencies
|
|
781
698
|
- @ai-sdk/provider@2.0.0-alpha.14
|
|
782
699
|
- @ai-sdk/provider-utils@3.0.0-alpha.14
|
|
783
700
|
|
|
@@ -825,8 +742,7 @@
|
|
|
825
742
|
|
|
826
743
|
### Patch Changes
|
|
827
744
|
|
|
828
|
-
- Updated dependencies
|
|
829
|
-
- Updated dependencies [9222aeb]
|
|
745
|
+
- Updated dependencies
|
|
830
746
|
- @ai-sdk/provider-utils@3.0.0-alpha.8
|
|
831
747
|
- @ai-sdk/provider@2.0.0-alpha.8
|
|
832
748
|
|
|
@@ -910,10 +826,7 @@
|
|
|
910
826
|
|
|
911
827
|
### Patch Changes
|
|
912
828
|
|
|
913
|
-
- Updated dependencies
|
|
914
|
-
- Updated dependencies [a8c8bd5]
|
|
915
|
-
- Updated dependencies [7979f7f]
|
|
916
|
-
- Updated dependencies [41fa418]
|
|
829
|
+
- Updated dependencies
|
|
917
830
|
- @ai-sdk/provider-utils@3.0.0-canary.15
|
|
918
831
|
- @ai-sdk/provider@2.0.0-canary.14
|
|
919
832
|
|
|
@@ -921,8 +834,7 @@
|
|
|
921
834
|
|
|
922
835
|
### Patch Changes
|
|
923
836
|
|
|
924
|
-
- Updated dependencies
|
|
925
|
-
- Updated dependencies [9bd5ab5]
|
|
837
|
+
- Updated dependencies
|
|
926
838
|
- @ai-sdk/provider-utils@3.0.0-canary.14
|
|
927
839
|
- @ai-sdk/provider@2.0.0-canary.13
|
|
928
840
|
|
|
@@ -930,8 +842,7 @@
|
|
|
930
842
|
|
|
931
843
|
### Patch Changes
|
|
932
844
|
|
|
933
|
-
- Updated dependencies
|
|
934
|
-
- Updated dependencies [0ff02bb]
|
|
845
|
+
- Updated dependencies
|
|
935
846
|
- @ai-sdk/provider@2.0.0-canary.12
|
|
936
847
|
- @ai-sdk/provider-utils@3.0.0-canary.13
|
|
937
848
|
|
|
@@ -939,9 +850,7 @@
|
|
|
939
850
|
|
|
940
851
|
### Patch Changes
|
|
941
852
|
|
|
942
|
-
- Updated dependencies
|
|
943
|
-
- Updated dependencies [4617fab]
|
|
944
|
-
- Updated dependencies [e030615]
|
|
853
|
+
- Updated dependencies
|
|
945
854
|
- @ai-sdk/provider@2.0.0-canary.11
|
|
946
855
|
- @ai-sdk/provider-utils@3.0.0-canary.12
|
|
947
856
|
|
|
@@ -949,9 +858,7 @@
|
|
|
949
858
|
|
|
950
859
|
### Patch Changes
|
|
951
860
|
|
|
952
|
-
- Updated dependencies
|
|
953
|
-
- Updated dependencies [9301f86]
|
|
954
|
-
- Updated dependencies [a3f768e]
|
|
861
|
+
- Updated dependencies
|
|
955
862
|
- @ai-sdk/provider-utils@3.0.0-canary.11
|
|
956
863
|
- @ai-sdk/provider@2.0.0-canary.10
|
|
957
864
|
|
|
@@ -967,8 +874,7 @@
|
|
|
967
874
|
|
|
968
875
|
### Patch Changes
|
|
969
876
|
|
|
970
|
-
- Updated dependencies
|
|
971
|
-
- Updated dependencies [7ea4132]
|
|
877
|
+
- Updated dependencies
|
|
972
878
|
- @ai-sdk/provider@2.0.0-canary.8
|
|
973
879
|
- @ai-sdk/provider-utils@3.0.0-canary.9
|
|
974
880
|
|
package/dist/index.js
CHANGED
|
@@ -455,7 +455,7 @@ var revaiTranscriptionResponseSchema = import_v42.z.object({
|
|
|
455
455
|
});
|
|
456
456
|
|
|
457
457
|
// src/version.ts
|
|
458
|
-
var VERSION = true ? "2.0.
|
|
458
|
+
var VERSION = true ? "2.0.1" : "0.0.0-test";
|
|
459
459
|
|
|
460
460
|
// src/revai-provider.ts
|
|
461
461
|
function createRevai(options = {}) {
|
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","../src/version.ts"],"sourcesContent":["export { createRevai, revai } from './revai-provider';\nexport type { RevaiProvider, RevaiProviderSettings } from './revai-provider';\nexport { VERSION } from './version';\n","import {\n TranscriptionModelV3,\n ProviderV3,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { VERSION } from './version';\n\nexport interface RevaiProvider extends ProviderV3 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\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 withUserAgentSuffix(\n {\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n },\n `ai-sdk/revai/${VERSION}`,\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.specificationVersion = 'v3' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Rev.ai does not provide language models',\n });\n };\n\n provider.embeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'embeddingModel',\n message: 'Rev.ai does not provide text embedding models',\n });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 TranscriptionModelV3,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\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 TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\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<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\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 const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n 'media',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\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<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['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","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider_utils","import_v4","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/revai-provider.ts","../src/revai-transcription-model.ts","../src/revai-error.ts","../src/version.ts"],"sourcesContent":["export { createRevai, revai } from './revai-provider';\nexport type { RevaiProvider, RevaiProviderSettings } from './revai-provider';\nexport { VERSION } from './version';\n","import {\n TranscriptionModelV3,\n ProviderV3,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { VERSION } from './version';\n\nexport interface RevaiProvider extends ProviderV3 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\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 withUserAgentSuffix(\n {\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n },\n `ai-sdk/revai/${VERSION}`,\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.specificationVersion = 'v3' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Rev.ai does not provide language models',\n });\n };\n\n provider.embeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'embeddingModel',\n message: 'Rev.ai does not provide text embedding models',\n });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 TranscriptionModelV3,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\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 TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\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<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\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 const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n 'media',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\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<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['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","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider_utils","import_v4","_a"]}
|
package/dist/index.mjs
CHANGED
|
@@ -443,7 +443,7 @@ var revaiTranscriptionResponseSchema = z2.object({
|
|
|
443
443
|
});
|
|
444
444
|
|
|
445
445
|
// src/version.ts
|
|
446
|
-
var VERSION = true ? "2.0.
|
|
446
|
+
var VERSION = true ? "2.0.1" : "0.0.0-test";
|
|
447
447
|
|
|
448
448
|
// src/revai-provider.ts
|
|
449
449
|
function createRevai(options = {}) {
|
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","../src/version.ts"],"sourcesContent":["import {\n TranscriptionModelV3,\n ProviderV3,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { VERSION } from './version';\n\nexport interface RevaiProvider extends ProviderV3 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\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 withUserAgentSuffix(\n {\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n },\n `ai-sdk/revai/${VERSION}`,\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.specificationVersion = 'v3' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Rev.ai does not provide language models',\n });\n };\n\n provider.embeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'embeddingModel',\n message: 'Rev.ai does not provide text embedding models',\n });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 TranscriptionModelV3,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\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 TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\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<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\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 const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n 'media',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\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<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['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","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/revai-provider.ts","../src/revai-transcription-model.ts","../src/revai-error.ts","../src/version.ts"],"sourcesContent":["import {\n TranscriptionModelV3,\n ProviderV3,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { VERSION } from './version';\n\nexport interface RevaiProvider extends ProviderV3 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\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 withUserAgentSuffix(\n {\n authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'REVAI_API_KEY',\n description: 'Rev.ai',\n })}`,\n ...options.headers,\n },\n `ai-sdk/revai/${VERSION}`,\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.specificationVersion = 'v3' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Rev.ai does not provide language models',\n });\n };\n\n provider.embeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'embeddingModel',\n message: 'Rev.ai does not provide text embedding models',\n });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 TranscriptionModelV3,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\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 TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\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<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\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 const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n 'media',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${fileExtension}`,\n );\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<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['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","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","_a"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/revai",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@ai-sdk/provider": "3.0.0
|
|
24
|
-
"@ai-sdk/provider-utils": "4.0.
|
|
23
|
+
"@ai-sdk/provider": "3.0.0",
|
|
24
|
+
"@ai-sdk/provider-utils": "4.0.1"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "20.17.24",
|
|
28
28
|
"tsup": "^8",
|
|
29
29
|
"typescript": "5.6.3",
|
|
30
30
|
"zod": "3.25.76",
|
|
31
|
-
"@ai-sdk/test-server": "1.0.0
|
|
31
|
+
"@ai-sdk/test-server": "1.0.0",
|
|
32
32
|
"@vercel/ai-tsconfig": "0.0.0"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|