@ai-sdk/revai 3.0.0-beta.1 → 3.0.0-beta.3
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 +14 -0
- package/dist/index.d.mts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/revai-provider.ts +5 -5
- package/src/revai-transcription-model.ts +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ai-sdk/revai
|
|
2
2
|
|
|
3
|
+
## 3.0.0-beta.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [5c2a5a2]
|
|
8
|
+
- @ai-sdk/provider@4.0.0-beta.1
|
|
9
|
+
- @ai-sdk/provider-utils@5.0.0-beta.2
|
|
10
|
+
|
|
11
|
+
## 3.0.0-beta.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- f7f458b: chore(provider/revai): update provider to use v4 types
|
|
16
|
+
|
|
3
17
|
## 3.0.0-beta.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TranscriptionModelV4, ProviderV4 } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
import { z } from 'zod/v4';
|
|
4
4
|
|
|
@@ -96,24 +96,24 @@ interface RevaiTranscriptionModelConfig extends RevaiConfig {
|
|
|
96
96
|
currentDate?: () => Date;
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
|
-
declare class RevaiTranscriptionModel implements
|
|
99
|
+
declare class RevaiTranscriptionModel implements TranscriptionModelV4 {
|
|
100
100
|
readonly modelId: RevaiTranscriptionModelId;
|
|
101
101
|
private readonly config;
|
|
102
|
-
readonly specificationVersion = "
|
|
102
|
+
readonly specificationVersion = "v4";
|
|
103
103
|
get provider(): string;
|
|
104
104
|
constructor(modelId: RevaiTranscriptionModelId, config: RevaiTranscriptionModelConfig);
|
|
105
105
|
private getArgs;
|
|
106
|
-
doGenerate(options: Parameters<
|
|
106
|
+
doGenerate(options: Parameters<TranscriptionModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>>;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
interface RevaiProvider extends
|
|
109
|
+
interface RevaiProvider extends ProviderV4 {
|
|
110
110
|
(modelId: 'machine', settings?: {}): {
|
|
111
111
|
transcription: RevaiTranscriptionModel;
|
|
112
112
|
};
|
|
113
113
|
/**
|
|
114
114
|
* Creates a model for transcription.
|
|
115
115
|
*/
|
|
116
|
-
transcription(modelId: RevaiTranscriptionModelId):
|
|
116
|
+
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV4;
|
|
117
117
|
/**
|
|
118
118
|
* @deprecated Use `embeddingModel` instead.
|
|
119
119
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TranscriptionModelV4, ProviderV4 } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
import { z } from 'zod/v4';
|
|
4
4
|
|
|
@@ -96,24 +96,24 @@ interface RevaiTranscriptionModelConfig extends RevaiConfig {
|
|
|
96
96
|
currentDate?: () => Date;
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
|
-
declare class RevaiTranscriptionModel implements
|
|
99
|
+
declare class RevaiTranscriptionModel implements TranscriptionModelV4 {
|
|
100
100
|
readonly modelId: RevaiTranscriptionModelId;
|
|
101
101
|
private readonly config;
|
|
102
|
-
readonly specificationVersion = "
|
|
102
|
+
readonly specificationVersion = "v4";
|
|
103
103
|
get provider(): string;
|
|
104
104
|
constructor(modelId: RevaiTranscriptionModelId, config: RevaiTranscriptionModelConfig);
|
|
105
105
|
private getArgs;
|
|
106
|
-
doGenerate(options: Parameters<
|
|
106
|
+
doGenerate(options: Parameters<TranscriptionModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>>;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
interface RevaiProvider extends
|
|
109
|
+
interface RevaiProvider extends ProviderV4 {
|
|
110
110
|
(modelId: 'machine', settings?: {}): {
|
|
111
111
|
transcription: RevaiTranscriptionModel;
|
|
112
112
|
};
|
|
113
113
|
/**
|
|
114
114
|
* Creates a model for transcription.
|
|
115
115
|
*/
|
|
116
|
-
transcription(modelId: RevaiTranscriptionModelId):
|
|
116
|
+
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV4;
|
|
117
117
|
/**
|
|
118
118
|
* @deprecated Use `embeddingModel` instead.
|
|
119
119
|
*/
|
package/dist/index.js
CHANGED
|
@@ -18,13 +18,13 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
20
|
// src/index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
23
|
VERSION: () => VERSION,
|
|
24
24
|
createRevai: () => createRevai,
|
|
25
25
|
revai: () => revai
|
|
26
26
|
});
|
|
27
|
-
module.exports = __toCommonJS(
|
|
27
|
+
module.exports = __toCommonJS(index_exports);
|
|
28
28
|
|
|
29
29
|
// src/revai-provider.ts
|
|
30
30
|
var import_provider2 = require("@ai-sdk/provider");
|
|
@@ -228,7 +228,7 @@ var RevaiTranscriptionModel = class {
|
|
|
228
228
|
constructor(modelId, config) {
|
|
229
229
|
this.modelId = modelId;
|
|
230
230
|
this.config = config;
|
|
231
|
-
this.specificationVersion = "
|
|
231
|
+
this.specificationVersion = "v4";
|
|
232
232
|
}
|
|
233
233
|
get provider() {
|
|
234
234
|
return this.config.provider;
|
|
@@ -455,7 +455,7 @@ var revaiTranscriptionResponseSchema = import_v42.z.object({
|
|
|
455
455
|
});
|
|
456
456
|
|
|
457
457
|
// src/version.ts
|
|
458
|
-
var VERSION = true ? "3.0.0-beta.
|
|
458
|
+
var VERSION = true ? "3.0.0-beta.3" : "0.0.0-test";
|
|
459
459
|
|
|
460
460
|
// src/revai-provider.ts
|
|
461
461
|
function createRevai(options = {}) {
|
|
@@ -481,7 +481,7 @@ function createRevai(options = {}) {
|
|
|
481
481
|
transcription: createTranscriptionModel(modelId)
|
|
482
482
|
};
|
|
483
483
|
};
|
|
484
|
-
provider.specificationVersion = "
|
|
484
|
+
provider.specificationVersion = "v4";
|
|
485
485
|
provider.transcription = createTranscriptionModel;
|
|
486
486
|
provider.transcriptionModel = createTranscriptionModel;
|
|
487
487
|
provider.languageModel = () => {
|
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 type { RevaiTranscriptionModelOptions } from './revai-transcription-model';\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 /**\n * Creates 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 /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create 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/**\n * Default 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 revaiTranscriptionModelOptionsSchema = 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 RevaiTranscriptionModelOptions = z.infer<\n typeof revaiTranscriptionModelOptionsSchema\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: revaiTranscriptionModelOptionsSchema,\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 type { RevaiTranscriptionModelOptions } from './revai-transcription-model';\nexport { VERSION } from './version';\n","import {\n TranscriptionModelV4,\n ProviderV4,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { RevaiTranscriptionModel } from './revai-transcription-model';\nimport { RevaiTranscriptionModelId } from './revai-transcription-options';\nimport { VERSION } from './version';\n\nexport interface RevaiProvider extends ProviderV4 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface RevaiProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create 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 = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: '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/**\n * Default Rev.ai provider instance.\n */\nexport const revai = createRevai();\n","import {\n AISDKError,\n TranscriptionModelV4,\n SharedV4Warning,\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 revaiTranscriptionModelOptionsSchema = 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 RevaiTranscriptionModelOptions = z.infer<\n typeof revaiTranscriptionModelOptionsSchema\n>;\n\ninterface RevaiTranscriptionModelConfig extends RevaiConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class RevaiTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\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<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const revaiOptions = await parseProviderOptions({\n provider: 'revai',\n providerOptions,\n schema: revaiTranscriptionModelOptionsSchema,\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<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['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
|
@@ -216,7 +216,7 @@ var RevaiTranscriptionModel = class {
|
|
|
216
216
|
constructor(modelId, config) {
|
|
217
217
|
this.modelId = modelId;
|
|
218
218
|
this.config = config;
|
|
219
|
-
this.specificationVersion = "
|
|
219
|
+
this.specificationVersion = "v4";
|
|
220
220
|
}
|
|
221
221
|
get provider() {
|
|
222
222
|
return this.config.provider;
|
|
@@ -443,7 +443,7 @@ var revaiTranscriptionResponseSchema = z2.object({
|
|
|
443
443
|
});
|
|
444
444
|
|
|
445
445
|
// src/version.ts
|
|
446
|
-
var VERSION = true ? "3.0.0-beta.
|
|
446
|
+
var VERSION = true ? "3.0.0-beta.3" : "0.0.0-test";
|
|
447
447
|
|
|
448
448
|
// src/revai-provider.ts
|
|
449
449
|
function createRevai(options = {}) {
|
|
@@ -469,7 +469,7 @@ function createRevai(options = {}) {
|
|
|
469
469
|
transcription: createTranscriptionModel(modelId)
|
|
470
470
|
};
|
|
471
471
|
};
|
|
472
|
-
provider.specificationVersion = "
|
|
472
|
+
provider.specificationVersion = "v4";
|
|
473
473
|
provider.transcription = createTranscriptionModel;
|
|
474
474
|
provider.transcriptionModel = createTranscriptionModel;
|
|
475
475
|
provider.languageModel = () => {
|
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 /**\n * Creates 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 /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create 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/**\n * Default 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 revaiTranscriptionModelOptionsSchema = 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 RevaiTranscriptionModelOptions = z.infer<\n typeof revaiTranscriptionModelOptionsSchema\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: revaiTranscriptionModelOptionsSchema,\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 TranscriptionModelV4,\n ProviderV4,\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 ProviderV4 {\n (\n modelId: 'machine',\n settings?: {},\n ): {\n transcription: RevaiTranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface RevaiProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create 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 = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: '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/**\n * Default Rev.ai provider instance.\n */\nexport const revai = createRevai();\n","import {\n AISDKError,\n TranscriptionModelV4,\n SharedV4Warning,\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 revaiTranscriptionModelOptionsSchema = 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 RevaiTranscriptionModelOptions = z.infer<\n typeof revaiTranscriptionModelOptionsSchema\n>;\n\ninterface RevaiTranscriptionModelConfig extends RevaiConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class RevaiTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\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<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const revaiOptions = await parseProviderOptions({\n provider: 'revai',\n providerOptions,\n schema: revaiTranscriptionModelOptionsSchema,\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<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['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": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.3",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/provider": "4.0.0-beta.
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.0-beta.
|
|
32
|
+
"@ai-sdk/provider": "4.0.0-beta.1",
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.0-beta.2"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "20.17.24",
|
package/src/revai-provider.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
TranscriptionModelV4,
|
|
3
|
+
ProviderV4,
|
|
4
4
|
NoSuchModelError,
|
|
5
5
|
} from '@ai-sdk/provider';
|
|
6
6
|
import {
|
|
@@ -12,7 +12,7 @@ import { RevaiTranscriptionModel } from './revai-transcription-model';
|
|
|
12
12
|
import { RevaiTranscriptionModelId } from './revai-transcription-options';
|
|
13
13
|
import { VERSION } from './version';
|
|
14
14
|
|
|
15
|
-
export interface RevaiProvider extends
|
|
15
|
+
export interface RevaiProvider extends ProviderV4 {
|
|
16
16
|
(
|
|
17
17
|
modelId: 'machine',
|
|
18
18
|
settings?: {},
|
|
@@ -23,7 +23,7 @@ export interface RevaiProvider extends ProviderV3 {
|
|
|
23
23
|
/**
|
|
24
24
|
* Creates a model for transcription.
|
|
25
25
|
*/
|
|
26
|
-
transcription(modelId: RevaiTranscriptionModelId):
|
|
26
|
+
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV4;
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* @deprecated Use `embeddingModel` instead.
|
|
@@ -82,7 +82,7 @@ export function createRevai(
|
|
|
82
82
|
};
|
|
83
83
|
};
|
|
84
84
|
|
|
85
|
-
provider.specificationVersion = '
|
|
85
|
+
provider.specificationVersion = 'v4' as const;
|
|
86
86
|
provider.transcription = createTranscriptionModel;
|
|
87
87
|
provider.transcriptionModel = createTranscriptionModel;
|
|
88
88
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AISDKError,
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
TranscriptionModelV4,
|
|
4
|
+
SharedV4Warning,
|
|
5
5
|
} from '@ai-sdk/provider';
|
|
6
6
|
import {
|
|
7
7
|
combineHeaders,
|
|
@@ -220,8 +220,8 @@ interface RevaiTranscriptionModelConfig extends RevaiConfig {
|
|
|
220
220
|
};
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
export class RevaiTranscriptionModel implements
|
|
224
|
-
readonly specificationVersion = '
|
|
223
|
+
export class RevaiTranscriptionModel implements TranscriptionModelV4 {
|
|
224
|
+
readonly specificationVersion = 'v4';
|
|
225
225
|
|
|
226
226
|
get provider(): string {
|
|
227
227
|
return this.config.provider;
|
|
@@ -236,8 +236,8 @@ export class RevaiTranscriptionModel implements TranscriptionModelV3 {
|
|
|
236
236
|
audio,
|
|
237
237
|
mediaType,
|
|
238
238
|
providerOptions,
|
|
239
|
-
}: Parameters<
|
|
240
|
-
const warnings:
|
|
239
|
+
}: Parameters<TranscriptionModelV4['doGenerate']>[0]) {
|
|
240
|
+
const warnings: SharedV4Warning[] = [];
|
|
241
241
|
|
|
242
242
|
// Parse provider options
|
|
243
243
|
const revaiOptions = await parseProviderOptions({
|
|
@@ -314,8 +314,8 @@ export class RevaiTranscriptionModel implements TranscriptionModelV3 {
|
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
async doGenerate(
|
|
317
|
-
options: Parameters<
|
|
318
|
-
): Promise<Awaited<ReturnType<
|
|
317
|
+
options: Parameters<TranscriptionModelV4['doGenerate']>[0],
|
|
318
|
+
): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {
|
|
319
319
|
const currentDate = this.config._internal?.currentDate?.() ?? new Date();
|
|
320
320
|
const { formData, warnings } = await this.getArgs(options);
|
|
321
321
|
|