@ai-sdk/revai 2.0.12 → 2.0.13
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 +6 -0
- package/dist/index.d.mts +10 -10
- package/dist/index.d.ts +10 -10
- 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/docs/160-revai.mdx +46 -28
- package/package.json +1 -1
- package/src/revai-provider.ts +10 -10
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -34,7 +34,7 @@ interface RevaiProvider extends ProviderV3 {
|
|
|
34
34
|
transcription: RevaiTranscriptionModel;
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
|
-
|
|
37
|
+
* Creates a model for transcription.
|
|
38
38
|
*/
|
|
39
39
|
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV3;
|
|
40
40
|
/**
|
|
@@ -44,25 +44,25 @@ interface RevaiProvider extends ProviderV3 {
|
|
|
44
44
|
}
|
|
45
45
|
interface RevaiProviderSettings {
|
|
46
46
|
/**
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
* API key for authenticating requests.
|
|
48
|
+
*/
|
|
49
49
|
apiKey?: string;
|
|
50
50
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
* Custom headers to include in the requests.
|
|
52
|
+
*/
|
|
53
53
|
headers?: Record<string, string>;
|
|
54
54
|
/**
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
* Custom fetch implementation. You can use it as a middleware to intercept requests,
|
|
56
|
+
* or to provide a custom fetch implementation for e.g. testing.
|
|
57
|
+
*/
|
|
58
58
|
fetch?: FetchFunction;
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
|
-
Create a Rev.ai provider instance.
|
|
61
|
+
* Create a Rev.ai provider instance.
|
|
62
62
|
*/
|
|
63
63
|
declare function createRevai(options?: RevaiProviderSettings): RevaiProvider;
|
|
64
64
|
/**
|
|
65
|
-
Default Rev.ai provider instance.
|
|
65
|
+
* Default Rev.ai provider instance.
|
|
66
66
|
*/
|
|
67
67
|
declare const revai: RevaiProvider;
|
|
68
68
|
|
package/dist/index.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ interface RevaiProvider extends ProviderV3 {
|
|
|
34
34
|
transcription: RevaiTranscriptionModel;
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
|
-
|
|
37
|
+
* Creates a model for transcription.
|
|
38
38
|
*/
|
|
39
39
|
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV3;
|
|
40
40
|
/**
|
|
@@ -44,25 +44,25 @@ interface RevaiProvider extends ProviderV3 {
|
|
|
44
44
|
}
|
|
45
45
|
interface RevaiProviderSettings {
|
|
46
46
|
/**
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
* API key for authenticating requests.
|
|
48
|
+
*/
|
|
49
49
|
apiKey?: string;
|
|
50
50
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
* Custom headers to include in the requests.
|
|
52
|
+
*/
|
|
53
53
|
headers?: Record<string, string>;
|
|
54
54
|
/**
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
* Custom fetch implementation. You can use it as a middleware to intercept requests,
|
|
56
|
+
* or to provide a custom fetch implementation for e.g. testing.
|
|
57
|
+
*/
|
|
58
58
|
fetch?: FetchFunction;
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
|
-
Create a Rev.ai provider instance.
|
|
61
|
+
* Create a Rev.ai provider instance.
|
|
62
62
|
*/
|
|
63
63
|
declare function createRevai(options?: RevaiProviderSettings): RevaiProvider;
|
|
64
64
|
/**
|
|
65
|
-
Default Rev.ai provider instance.
|
|
65
|
+
* Default Rev.ai provider instance.
|
|
66
66
|
*/
|
|
67
67
|
declare const revai: RevaiProvider;
|
|
68
68
|
|
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.13" : "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 /**\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 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.13" : "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 /**\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 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/docs/160-revai.mdx
CHANGED
|
@@ -93,98 +93,116 @@ The following provider options are available:
|
|
|
93
93
|
|
|
94
94
|
- **metadata** _string_
|
|
95
95
|
|
|
96
|
-
Optional metadata
|
|
96
|
+
Optional metadata string to associate with the transcription job.
|
|
97
97
|
|
|
98
98
|
- **notification_config** _object_
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
Configuration for webhook notifications when job is complete.
|
|
101
101
|
|
|
102
|
-
- **url** _string_ -
|
|
103
|
-
- **auth_headers** _object_ - Optional authorization headers
|
|
102
|
+
- **url** _string_ - URL to send the notification to.
|
|
103
|
+
- **auth_headers** _object_ - Optional authorization headers for the notification request.
|
|
104
104
|
- **Authorization** _string_ - Authorization header value.
|
|
105
105
|
|
|
106
106
|
- **delete_after_seconds** _integer_
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
Number of seconds after which the job will be automatically deleted.
|
|
109
109
|
|
|
110
110
|
- **verbatim** _boolean_
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
Whether to include filler words and false starts in the transcription.
|
|
113
113
|
|
|
114
114
|
- **rush** _boolean_
|
|
115
115
|
|
|
116
|
-
[HIPAA Unsupported]
|
|
116
|
+
[HIPAA Unsupported] Whether to prioritize the job for faster processing. Only available for human transcriber option.
|
|
117
|
+
|
|
118
|
+
- **test_mode** _boolean_
|
|
119
|
+
|
|
120
|
+
Whether to run the job in test mode. Default is `false`.
|
|
121
|
+
|
|
122
|
+
- **segments_to_transcribe** _Array_
|
|
123
|
+
|
|
124
|
+
Specific segments of the audio to transcribe.
|
|
125
|
+
|
|
126
|
+
- **start** _number_ - Start time of the segment in seconds.
|
|
127
|
+
- **end** _number_ - End time of the segment in seconds.
|
|
128
|
+
|
|
129
|
+
- **speaker_names** _Array_
|
|
130
|
+
|
|
131
|
+
Names to assign to speakers in the transcription.
|
|
132
|
+
|
|
133
|
+
- **display_name** _string_ - Display name for the speaker.
|
|
117
134
|
|
|
118
135
|
- **skip_diarization** _boolean_
|
|
119
136
|
|
|
120
|
-
|
|
137
|
+
Whether to skip speaker diarization. Default is `false`.
|
|
121
138
|
|
|
122
139
|
- **skip_postprocessing** _boolean_
|
|
123
140
|
|
|
124
|
-
Only available for English and Spanish languages.
|
|
141
|
+
Whether to skip post-processing steps. Only available for English and Spanish languages. Default is `false`.
|
|
125
142
|
|
|
126
143
|
- **skip_punctuation** _boolean_
|
|
127
144
|
|
|
128
|
-
|
|
145
|
+
Whether to skip adding punctuation to the transcription. Default is `false`.
|
|
129
146
|
|
|
130
147
|
- **remove_disfluencies** _boolean_
|
|
131
148
|
|
|
132
|
-
|
|
149
|
+
Whether to remove disfluencies (um, uh, etc.) from the transcription. Default is `false`.
|
|
133
150
|
|
|
134
151
|
- **remove_atmospherics** _boolean_
|
|
135
152
|
|
|
136
|
-
|
|
153
|
+
Whether to remove atmospheric sounds (like `<laugh>`, `<affirmative>`) from the transcription. Default is `false`.
|
|
137
154
|
|
|
138
155
|
- **filter_profanity** _boolean_
|
|
139
156
|
|
|
140
|
-
|
|
157
|
+
Whether to filter profanity from the transcription by replacing characters with asterisks except for the first and last. Default is `false`.
|
|
141
158
|
|
|
142
159
|
- **speaker_channels_count** _integer_
|
|
143
160
|
|
|
144
|
-
Only available for English, Spanish and French languages.
|
|
161
|
+
Number of speaker channels in the audio. Only available for English, Spanish and French languages.
|
|
145
162
|
|
|
146
163
|
- **speakers_count** _integer_
|
|
147
164
|
|
|
148
|
-
Only available for English, Spanish and French languages.
|
|
165
|
+
Expected number of speakers in the audio. Only available for English, Spanish and French languages.
|
|
149
166
|
|
|
150
167
|
- **diarization_type** _string_
|
|
151
168
|
|
|
152
|
-
|
|
169
|
+
Type of diarization to use. Possible values: "standard" (default), "premium".
|
|
153
170
|
|
|
154
171
|
- **custom_vocabulary_id** _string_
|
|
155
172
|
|
|
156
|
-
|
|
173
|
+
ID of a custom vocabulary to use for the transcription, submitted through the Custom Vocabularies API.
|
|
157
174
|
|
|
158
175
|
- **custom_vocabularies** _Array_
|
|
159
176
|
|
|
160
|
-
|
|
177
|
+
Custom vocabularies to use for the transcription.
|
|
161
178
|
|
|
162
179
|
- **strict_custom_vocabulary** _boolean_
|
|
163
180
|
|
|
164
|
-
|
|
181
|
+
Whether to strictly enforce custom vocabulary.
|
|
165
182
|
|
|
166
183
|
- **summarization_config** _object_
|
|
167
184
|
|
|
168
|
-
|
|
185
|
+
Configuration for generating a summary of the transcription.
|
|
169
186
|
|
|
170
|
-
- **model** _string_ - Model
|
|
171
|
-
- **type** _string_ -
|
|
172
|
-
- **prompt** _string_ - Custom prompt for
|
|
187
|
+
- **model** _string_ - Model to use for summarization. Possible values: "standard" (default), "premium".
|
|
188
|
+
- **type** _string_ - Format of the summary. Possible values: "paragraph" (default), "bullets".
|
|
189
|
+
- **prompt** _string_ - Custom prompt for the summarization (mutually exclusive with type).
|
|
173
190
|
|
|
174
191
|
- **translation_config** _object_
|
|
175
192
|
|
|
176
|
-
|
|
193
|
+
Configuration for translating the transcription.
|
|
177
194
|
|
|
178
|
-
- **target_languages** _Array_ -
|
|
179
|
-
|
|
195
|
+
- **target_languages** _Array_ - Target languages for translation. Each item is an object with:
|
|
196
|
+
- **language** _string_ - Language code. Possible values: "en", "en-us", "en-gb", "ar", "pt", "pt-br", "pt-pt", "fr", "fr-ca", "es", "es-es", "es-la", "it", "ja", "ko", "de", "ru".
|
|
197
|
+
- **model** _string_ - Model to use for translation. Possible values: "standard" (default), "premium".
|
|
180
198
|
|
|
181
199
|
- **language** _string_
|
|
182
200
|
|
|
183
|
-
Language
|
|
201
|
+
Language of the audio content, provided as an ISO 639-1 language code. Default is "en".
|
|
184
202
|
|
|
185
203
|
- **forced_alignment** _boolean_
|
|
186
204
|
|
|
187
|
-
|
|
205
|
+
Whether to perform forced alignment, which provides improved accuracy for per-word timestamps.
|
|
188
206
|
Default is `false`.
|
|
189
207
|
|
|
190
208
|
Currently supported languages:
|
package/package.json
CHANGED
package/src/revai-provider.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface RevaiProvider extends ProviderV3 {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
Creates a model for transcription.
|
|
24
|
+
* Creates a model for transcription.
|
|
25
25
|
*/
|
|
26
26
|
transcription(modelId: RevaiTranscriptionModelId): TranscriptionModelV3;
|
|
27
27
|
|
|
@@ -33,24 +33,24 @@ Creates a model for transcription.
|
|
|
33
33
|
|
|
34
34
|
export interface RevaiProviderSettings {
|
|
35
35
|
/**
|
|
36
|
-
API key for authenticating requests.
|
|
37
|
-
|
|
36
|
+
* API key for authenticating requests.
|
|
37
|
+
*/
|
|
38
38
|
apiKey?: string;
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
Custom headers to include in the requests.
|
|
42
|
-
|
|
41
|
+
* Custom headers to include in the requests.
|
|
42
|
+
*/
|
|
43
43
|
headers?: Record<string, string>;
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
|
-
Custom fetch implementation. You can use it as a middleware to intercept requests,
|
|
47
|
-
or to provide a custom fetch implementation for e.g. testing.
|
|
48
|
-
|
|
46
|
+
* Custom fetch implementation. You can use it as a middleware to intercept requests,
|
|
47
|
+
* or to provide a custom fetch implementation for e.g. testing.
|
|
48
|
+
*/
|
|
49
49
|
fetch?: FetchFunction;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
Create a Rev.ai provider instance.
|
|
53
|
+
* Create a Rev.ai provider instance.
|
|
54
54
|
*/
|
|
55
55
|
export function createRevai(
|
|
56
56
|
options: RevaiProviderSettings = {},
|
|
@@ -115,6 +115,6 @@ export function createRevai(
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
/**
|
|
118
|
-
Default Rev.ai provider instance.
|
|
118
|
+
* Default Rev.ai provider instance.
|
|
119
119
|
*/
|
|
120
120
|
export const revai = createRevai();
|