@ai-sdk/assemblyai 3.0.2 → 3.0.4
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 +37 -0
- package/README.md +1 -1
- package/dist/index.d.ts +36 -2
- package/dist/index.js +245 -26
- package/dist/index.js.map +1 -1
- package/docs/100-assemblyai.mdx +134 -9
- package/package.json +2 -2
- package/src/assemblyai-api-types.ts +84 -1
- package/src/assemblyai-provider.ts +1 -1
- package/src/assemblyai-transcription-model-options.ts +83 -1
- package/src/assemblyai-transcription-model.ts +244 -18
- package/src/assemblyai-transcription-settings.ts +15 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assemblyai-provider.ts","../src/assemblyai-transcription-model.ts","../src/assemblyai-error.ts","../src/assemblyai-transcription-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type TranscriptionModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AssemblyAITranscriptionModel } from './assemblyai-transcription-model';\nimport type { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { VERSION } from './version';\n\nexport interface AssemblyAIProvider extends ProviderV4 {\n (\n modelId: 'best',\n settings?: {},\n ): {\n transcription: AssemblyAITranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: AssemblyAITranscriptionModelId): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface AssemblyAIProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create an AssemblyAI provider instance.\n */\nexport function createAssemblyAI(\n options: AssemblyAIProviderSettings = {},\n): AssemblyAIProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ASSEMBLYAI_API_KEY',\n description: 'AssemblyAI',\n }),\n ...options.headers,\n },\n `ai-sdk/assemblyai/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: AssemblyAITranscriptionModelId) =>\n new AssemblyAITranscriptionModel(modelId, {\n provider: `assemblyai.transcription`,\n url: ({ path }) => `https://api.assemblyai.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AssemblyAITranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'AssemblyAI does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as AssemblyAIProvider;\n}\n\n/**\n * Default AssemblyAI provider instance.\n */\nexport const assemblyai = createAssemblyAI();\n","import type { TranscriptionModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n extractResponseHeaders,\n parseProviderOptions,\n postJsonToApi,\n postToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AssemblyAIConfig } from './assemblyai-config';\nimport { assemblyaiFailedResponseHandler } from './assemblyai-error';\nimport { assemblyaiTranscriptionModelOptionsSchema } from './assemblyai-transcription-model-options';\nimport type { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport type { AssemblyAITranscriptionAPITypes } from './assemblyai-api-types';\n\ninterface AssemblyAITranscriptionModelConfig extends AssemblyAIConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n /**\n * The polling interval for checking transcript status in milliseconds.\n */\n pollingInterval?: number;\n}\n\nexport class AssemblyAITranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n private readonly POLLING_INTERVAL_MS = 3000;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: AssemblyAITranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: AssemblyAITranscriptionModelId;\n config: AssemblyAITranscriptionModelConfig;\n }) {\n return new AssemblyAITranscriptionModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: AssemblyAITranscriptionModelId,\n private readonly config: AssemblyAITranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const assemblyaiOptions = await parseProviderOptions({\n provider: 'assemblyai',\n providerOptions,\n schema: assemblyaiTranscriptionModelOptionsSchema,\n });\n\n const body: Omit<AssemblyAITranscriptionAPITypes, 'audio_url'> = {\n speech_model: this.modelId as 'best' | 'nano',\n };\n\n // Add provider-specific options\n if (assemblyaiOptions) {\n body.audio_end_at = assemblyaiOptions.audioEndAt ?? undefined;\n body.audio_start_from = assemblyaiOptions.audioStartFrom ?? undefined;\n body.auto_chapters = assemblyaiOptions.autoChapters ?? undefined;\n body.auto_highlights = assemblyaiOptions.autoHighlights ?? undefined;\n body.boost_param = (assemblyaiOptions.boostParam as never) ?? undefined;\n body.content_safety = assemblyaiOptions.contentSafety ?? undefined;\n body.content_safety_confidence =\n assemblyaiOptions.contentSafetyConfidence ?? undefined;\n body.custom_spelling =\n (assemblyaiOptions.customSpelling as never) ?? undefined;\n body.disfluencies = assemblyaiOptions.disfluencies ?? undefined;\n body.entity_detection = assemblyaiOptions.entityDetection ?? undefined;\n body.filter_profanity = assemblyaiOptions.filterProfanity ?? undefined;\n body.format_text = assemblyaiOptions.formatText ?? undefined;\n body.iab_categories = assemblyaiOptions.iabCategories ?? undefined;\n body.language_code =\n (assemblyaiOptions.languageCode as never) ?? undefined;\n body.language_confidence_threshold =\n assemblyaiOptions.languageConfidenceThreshold ?? undefined;\n body.language_detection =\n assemblyaiOptions.languageDetection ?? undefined;\n body.multichannel = assemblyaiOptions.multichannel ?? undefined;\n body.punctuate = assemblyaiOptions.punctuate ?? undefined;\n body.redact_pii = assemblyaiOptions.redactPii ?? undefined;\n body.redact_pii_audio = assemblyaiOptions.redactPiiAudio ?? undefined;\n body.redact_pii_audio_quality =\n (assemblyaiOptions.redactPiiAudioQuality as never) ?? undefined;\n body.redact_pii_policies =\n (assemblyaiOptions.redactPiiPolicies as never) ?? undefined;\n body.redact_pii_sub =\n (assemblyaiOptions.redactPiiSub as never) ?? undefined;\n body.sentiment_analysis =\n assemblyaiOptions.sentimentAnalysis ?? undefined;\n body.speaker_labels = assemblyaiOptions.speakerLabels ?? undefined;\n body.speakers_expected = assemblyaiOptions.speakersExpected ?? undefined;\n body.speech_threshold = assemblyaiOptions.speechThreshold ?? undefined;\n body.summarization = assemblyaiOptions.summarization ?? undefined;\n body.summary_model =\n (assemblyaiOptions.summaryModel as never) ?? undefined;\n body.summary_type = (assemblyaiOptions.summaryType as never) ?? undefined;\n body.webhook_auth_header_name =\n assemblyaiOptions.webhookAuthHeaderName ?? undefined;\n body.webhook_auth_header_value =\n assemblyaiOptions.webhookAuthHeaderValue ?? undefined;\n body.webhook_url = assemblyaiOptions.webhookUrl ?? undefined;\n body.word_boost = assemblyaiOptions.wordBoost ?? undefined;\n }\n\n return {\n body,\n warnings,\n };\n }\n\n /**\n * Polls the given transcript until we have a status other than `processing` or `queued`.\n *\n * @see https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file#step-33\n */\n private async waitForCompletion(\n transcriptId: string,\n headers: Record<string, string | undefined> | undefined,\n abortSignal?: AbortSignal,\n ): Promise<{\n transcript: z.infer<typeof assemblyaiTranscriptionResponseSchema>;\n responseHeaders: Record<string, string>;\n }> {\n const pollingInterval =\n this.config.pollingInterval ?? this.POLLING_INTERVAL_MS;\n\n while (true) {\n if (abortSignal?.aborted) {\n throw new Error('Transcription request was aborted');\n }\n\n const response = await fetch(\n this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n {\n method: 'GET',\n headers: combineHeaders(\n this.config.headers?.(),\n headers,\n ) as HeadersInit,\n signal: abortSignal,\n },\n );\n\n if (!response.ok) {\n throw await assemblyaiFailedResponseHandler({\n response,\n url: this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n requestBodyValues: {},\n });\n }\n\n const transcript = assemblyaiTranscriptionResponseSchema.parse(\n await response.json(),\n );\n\n if (transcript.status === 'completed') {\n return {\n transcript,\n responseHeaders: extractResponseHeaders(response),\n };\n }\n\n if (transcript.status === 'error') {\n throw new Error(\n `Transcription failed: ${transcript.error ?? 'Unknown error'}`,\n );\n }\n\n await new Promise(resolve => setTimeout(resolve, pollingInterval));\n }\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const { value: uploadResponse } = await postToApi({\n url: this.config.url({\n path: '/v2/upload',\n modelId: '',\n }),\n headers: {\n 'Content-Type': 'application/octet-stream',\n ...combineHeaders(this.config.headers?.(), options.headers),\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiUploadResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { body, warnings } = await this.getArgs(options);\n\n const { value: submitResponse } = await postJsonToApi({\n url: this.config.url({\n path: '/v2/transcript',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: {\n ...body,\n audio_url: uploadResponse.upload_url,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiSubmitResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { transcript, responseHeaders } = await this.waitForCompletion(\n submitResponse.id,\n options.headers,\n options.abortSignal,\n );\n\n return {\n text: transcript.text ?? '',\n segments:\n transcript.words?.map(word => ({\n text: word.text,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: transcript.language_code ?? undefined,\n durationInSeconds:\n transcript.audio_duration ?? transcript.words?.at(-1)?.end ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders, // Headers from final GET request\n body: transcript, // Raw response from final GET request\n },\n };\n }\n}\n\nconst assemblyaiUploadResponseSchema = z.object({\n upload_url: z.string(),\n});\n\nconst assemblyaiSubmitResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n});\n\nconst assemblyaiTranscriptionResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n text: z.string().nullish(),\n language_code: z.string().nullish(),\n words: z\n .array(\n z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n }),\n )\n .nullish(),\n audio_duration: z.number().nullish(),\n error: z.string().nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const assemblyaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type AssemblyAIErrorData = z.infer<typeof assemblyaiErrorDataSchema>;\n\nexport const assemblyaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: assemblyaiErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { z } from 'zod/v4';\n\n// https://www.assemblyai.com/docs/api-reference/transcripts/submit\nexport const assemblyaiTranscriptionModelOptionsSchema = z.object({\n /**\n * End time of the audio in milliseconds.\n */\n audioEndAt: z.number().int().nullish(),\n /**\n * Start time of the audio in milliseconds.\n */\n audioStartFrom: z.number().int().nullish(),\n /**\n * Whether to automatically generate chapters for the transcription.\n */\n autoChapters: z.boolean().nullish(),\n /**\n * Whether to automatically generate highlights for the transcription.\n */\n autoHighlights: z.boolean().nullish(),\n /**\n * Boost parameter for the transcription.\n * Allowed values: 'low', 'default', 'high'.\n */\n boostParam: z.string().nullish(),\n /**\n * Whether to enable content safety filtering.\n */\n contentSafety: z.boolean().nullish(),\n /**\n * Confidence threshold for content safety filtering (25-100).\n */\n contentSafetyConfidence: z.number().int().min(25).max(100).nullish(),\n /**\n * Custom spelling rules for the transcription.\n */\n customSpelling: z\n .array(\n z.object({\n from: z.array(z.string()),\n to: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to include filler words (um, uh, etc.) in the transcription.\n */\n disfluencies: z.boolean().nullish(),\n /**\n * Whether to enable entity detection.\n */\n entityDetection: z.boolean().nullish(),\n /**\n * Whether to filter profanity from the transcription.\n */\n filterProfanity: z.boolean().nullish(),\n /**\n * Whether to format text with punctuation and capitalization.\n */\n formatText: z.boolean().nullish(),\n /**\n * Whether to enable IAB categories detection.\n */\n iabCategories: z.boolean().nullish(),\n /**\n * Language code for the transcription.\n */\n languageCode: z.union([z.literal('en'), z.string()]).nullish(),\n /**\n * Confidence threshold for language detection.\n */\n languageConfidenceThreshold: z.number().nullish(),\n /**\n * Whether to enable language detection.\n */\n languageDetection: z.boolean().nullish(),\n /**\n * Whether to process audio as multichannel.\n */\n multichannel: z.boolean().nullish(),\n /**\n * Whether to add punctuation to the transcription.\n */\n punctuate: z.boolean().nullish(),\n /**\n * Whether to redact personally identifiable information (PII).\n */\n redactPii: z.boolean().nullish(),\n /**\n * Whether to redact PII in the audio file.\n */\n redactPiiAudio: z.boolean().nullish(),\n /**\n * Audio format for PII redaction.\n */\n redactPiiAudioQuality: z.string().nullish(),\n /**\n * List of PII types to redact.\n */\n redactPiiPolicies: z.array(z.string()).nullish(),\n /**\n * Substitution method for redacted PII.\n */\n redactPiiSub: z.string().nullish(),\n /**\n * Whether to enable sentiment analysis.\n */\n sentimentAnalysis: z.boolean().nullish(),\n /**\n * Whether to identify different speakers in the audio.\n */\n speakerLabels: z.boolean().nullish(),\n /**\n * Number of speakers expected in the audio.\n */\n speakersExpected: z.number().int().nullish(),\n /**\n * Threshold for speech detection (0-1).\n */\n speechThreshold: z.number().min(0).max(1).nullish(),\n /**\n * Whether to generate a summary of the transcription.\n */\n summarization: z.boolean().nullish(),\n /**\n * Model to use for summarization.\n */\n summaryModel: z.string().nullish(),\n /**\n * Type of summary to generate.\n */\n summaryType: z.string().nullish(),\n /**\n * Name of the authentication header for webhook requests.\n */\n webhookAuthHeaderName: z.string().nullish(),\n /**\n * Value of the authentication header for webhook requests.\n */\n webhookAuthHeaderValue: z.string().nullish(),\n /**\n * URL to send webhook notifications to.\n */\n webhookUrl: z.string().nullish(),\n /**\n * List of words to boost recognition for.\n */\n wordBoost: z.array(z.string()).nullish(),\n});\n\nexport type AssemblyAITranscriptionModelOptions = z.infer<\n typeof assemblyaiTranscriptionModelOptionsSchema\n>;\n","// 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":";AAAA;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;;;ACRP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAAA,UAAS;;;ACZlB,SAAS,SAAS;AAClB,SAAS,sCAAsC;AAExC,IAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,OAAO,EAAE,OAAO;AAAA,IACd,SAAS,EAAE,OAAO;AAAA,IAClB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAIM,IAAM,kCAAkC,+BAA+B;AAAA,EAC5E,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK,MAAM;AACrC,CAAC;;;ACfD,SAAS,KAAAC,UAAS;AAGX,IAAM,4CAA4CA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAIhE,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIrC,gBAAgBA,GAAE,OAAO,EAAE,IAAI,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIzC,cAAcA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIlC,gBAAgBA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpC,YAAYA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI/B,eAAeA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAInC,yBAAyBA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAInE,gBAAgBA,GACb;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,MACxB,IAAIA,GAAE,OAAO;AAAA,IACf,CAAC;AAAA,EACH,EACC,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIX,cAAcA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIlC,iBAAiBA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIrC,iBAAiBA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIrC,YAAYA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIhC,eAAeA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAInC,cAAcA,GAAE,MAAM,CAACA,GAAE,QAAQ,IAAI,GAAGA,GAAE,OAAO,CAAC,CAAC,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI7D,6BAA6BA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIhD,mBAAmBA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIvC,cAAcA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIlC,WAAWA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI/B,WAAWA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI/B,gBAAgBA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIpC,uBAAuBA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI1C,mBAAmBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI/C,cAAcA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIjC,mBAAmBA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIvC,eAAeA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAInC,kBAAkBA,GAAE,OAAO,EAAE,IAAI,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI3C,iBAAiBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIlD,eAAeA,GAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAInC,cAAcA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIjC,aAAaA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIhC,uBAAuBA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI1C,wBAAwBA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI3C,YAAYA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI/B,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,QAAQ;AACzC,CAAC;;;AFvHM,IAAM,+BAAN,MAAM,8BAA6D;AAAA,EAsBxE,YACW,SACQ,QACjB;AAFS;AACQ;AAvBnB,SAAS,uBAAuB;AAChC,SAAiB,sBAAsB;AAAA,EAuBpC;AAAA,EArBH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQ,kBAAkB,EAAE,OAAqC;AAC/D,WAAO,sBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,oBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,8BAA6B,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACzE;AAAA,EAOA,MAAc,QAAQ;AAAA,IACpB;AAAA,EACF,GAAsD;AA1DxD;AA2DI,UAAM,WAA8B,CAAC;AAGrC,UAAM,oBAAoB,MAAM,qBAAqB;AAAA,MACnD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAA2D;AAAA,MAC/D,cAAc,KAAK;AAAA,IACrB;AAGA,QAAI,mBAAmB;AACrB,WAAK,gBAAe,uBAAkB,eAAlB,YAAgC;AACpD,WAAK,oBAAmB,uBAAkB,mBAAlB,YAAoC;AAC5D,WAAK,iBAAgB,uBAAkB,iBAAlB,YAAkC;AACvD,WAAK,mBAAkB,uBAAkB,mBAAlB,YAAoC;AAC3D,WAAK,eAAe,uBAAkB,eAAlB,YAA0C;AAC9D,WAAK,kBAAiB,uBAAkB,kBAAlB,YAAmC;AACzD,WAAK,6BACH,uBAAkB,4BAAlB,YAA6C;AAC/C,WAAK,mBACF,uBAAkB,mBAAlB,YAA8C;AACjD,WAAK,gBAAe,uBAAkB,iBAAlB,YAAkC;AACtD,WAAK,oBAAmB,uBAAkB,oBAAlB,YAAqC;AAC7D,WAAK,oBAAmB,uBAAkB,oBAAlB,YAAqC;AAC7D,WAAK,eAAc,uBAAkB,eAAlB,YAAgC;AACnD,WAAK,kBAAiB,uBAAkB,kBAAlB,YAAmC;AACzD,WAAK,iBACF,uBAAkB,iBAAlB,YAA4C;AAC/C,WAAK,iCACH,uBAAkB,gCAAlB,YAAiD;AACnD,WAAK,sBACH,uBAAkB,sBAAlB,YAAuC;AACzC,WAAK,gBAAe,uBAAkB,iBAAlB,YAAkC;AACtD,WAAK,aAAY,uBAAkB,cAAlB,YAA+B;AAChD,WAAK,cAAa,uBAAkB,cAAlB,YAA+B;AACjD,WAAK,oBAAmB,uBAAkB,mBAAlB,YAAoC;AAC5D,WAAK,4BACF,uBAAkB,0BAAlB,YAAqD;AACxD,WAAK,uBACF,uBAAkB,sBAAlB,YAAiD;AACpD,WAAK,kBACF,uBAAkB,iBAAlB,YAA4C;AAC/C,WAAK,sBACH,uBAAkB,sBAAlB,YAAuC;AACzC,WAAK,kBAAiB,uBAAkB,kBAAlB,YAAmC;AACzD,WAAK,qBAAoB,uBAAkB,qBAAlB,YAAsC;AAC/D,WAAK,oBAAmB,uBAAkB,oBAAlB,YAAqC;AAC7D,WAAK,iBAAgB,uBAAkB,kBAAlB,YAAmC;AACxD,WAAK,iBACF,uBAAkB,iBAAlB,YAA4C;AAC/C,WAAK,gBAAgB,uBAAkB,gBAAlB,YAA2C;AAChE,WAAK,4BACH,uBAAkB,0BAAlB,YAA2C;AAC7C,WAAK,6BACH,uBAAkB,2BAAlB,YAA4C;AAC9C,WAAK,eAAc,uBAAkB,eAAlB,YAAgC;AACnD,WAAK,cAAa,uBAAkB,cAAlB,YAA+B;AAAA,IACnD;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,kBACZ,cACA,SACA,aAIC;AA5IL;AA6II,UAAM,mBACJ,UAAK,OAAO,oBAAZ,YAA+B,KAAK;AAEtC,WAAO,MAAM;AACX,UAAI,2CAAa,SAAS;AACxB,cAAM,IAAI,MAAM,mCAAmC;AAAA,MACrD;AAEA,YAAM,WAAW,MAAM;AAAA,QACrB,KAAK,OAAO,IAAI;AAAA,UACd,MAAM,kBAAkB,YAAY;AAAA,UACpC,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,aACP,gBAAK,QAAO,YAAZ;AAAA,YACA;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,MACF;AAEA,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,MAAM,gCAAgC;AAAA,UAC1C;AAAA,UACA,KAAK,KAAK,OAAO,IAAI;AAAA,YACnB,MAAM,kBAAkB,YAAY;AAAA,YACpC,SAAS,KAAK;AAAA,UAChB,CAAC;AAAA,UACD,mBAAmB,CAAC;AAAA,QACtB,CAAC;AAAA,MACH;AAEA,YAAM,aAAa,sCAAsC;AAAA,QACvD,MAAM,SAAS,KAAK;AAAA,MACtB;AAEA,UAAI,WAAW,WAAW,aAAa;AACrC,eAAO;AAAA,UACL;AAAA,UACA,iBAAiB,uBAAuB,QAAQ;AAAA,QAClD;AAAA,MACF;AAEA,UAAI,WAAW,WAAW,SAAS;AACjC,cAAM,IAAI;AAAA,UACR,0BAAyB,gBAAW,UAAX,YAAoB,eAAe;AAAA,QAC9D;AAAA,MACF;AAEA,YAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,eAAe,CAAC;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACkE;AAtMtE;AAuMI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AAEvE,UAAM,EAAE,OAAO,eAAe,IAAI,MAAM,UAAU;AAAA,MAChD,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,MACD,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAG,gBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAC5D;AAAA,MACA,MAAM;AAAA,QACJ,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAErD,UAAM,EAAE,OAAO,eAAe,IAAI,MAAM,cAAc;AAAA,MACpD,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,SAAS,gBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,WAAW,eAAe;AAAA,MAC5B;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,YAAY,gBAAgB,IAAI,MAAM,KAAK;AAAA,MACjD,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAEA,WAAO;AAAA,MACL,OAAM,gBAAW,SAAX,YAAmB;AAAA,MACzB,WACE,sBAAW,UAAX,mBAAkB,IAAI,WAAS;AAAA,QAC7B,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,WAAW,KAAK;AAAA,MAClB,QAJA,YAIO,CAAC;AAAA,MACV,WAAU,gBAAW,kBAAX,YAA4B;AAAA,MACtC,oBACE,sBAAW,mBAAX,aAA6B,sBAAW,UAAX,mBAAkB,GAAG,QAArB,mBAA0B,QAAvD,YAA8D;AAAA,MAChE;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA;AAAA,QACT,MAAM;AAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,iCAAiCC,GAAE,OAAO;AAAA,EAC9C,YAAYA,GAAE,OAAO;AACvB,CAAC;AAED,IAAM,iCAAiCA,GAAE,OAAO;AAAA,EAC9C,IAAIA,GAAE,OAAO;AAAA,EACb,QAAQA,GAAE,KAAK,CAAC,UAAU,cAAc,aAAa,OAAO,CAAC;AAC/D,CAAC;AAED,IAAM,wCAAwCA,GAAE,OAAO;AAAA,EACrD,IAAIA,GAAE,OAAO;AAAA,EACb,QAAQA,GAAE,KAAK,CAAC,UAAU,cAAc,aAAa,OAAO,CAAC;AAAA,EAC7D,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACzB,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAClC,OAAOA,GACJ;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,OAAOA,GAAE,OAAO;AAAA,MAChB,KAAKA,GAAE,OAAO;AAAA,MACd,MAAMA,GAAE,OAAO;AAAA,IACjB,CAAC;AAAA,EACH,EACC,QAAQ;AAAA,EACX,gBAAgBA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACnC,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAC5B,CAAC;;;AGrSM,IAAM,UACX,OACI,UACA;;;AJiDC,SAAS,iBACd,UAAsC,CAAC,GACnB;AACpB,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,eAAe,WAAW;AAAA,QACxB,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC;AAAA,MACD,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,qBAAqB,OAAO;AAAA,EAC9B;AAEF,QAAM,2BAA2B,CAAC,YAChC,IAAI,6BAA6B,SAAS;AAAA,IACxC,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,6BAA6B,IAAI;AAAA,IACpD,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,SAAU,SAAyC;AAClE,WAAO;AAAA,MACL,eAAe,yBAAyB,OAAO;AAAA,IACjD;AAAA,EACF;AAEA,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAE9B,WAAS,gBAAgB,MAAM;AAC7B,UAAM,IAAI,iBAAiB;AAAA,MACzB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,WAAS,qBAAqB,SAAS;AAEvC,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAKO,IAAM,aAAa,iBAAiB;","names":["z","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/assemblyai-provider.ts","../src/assemblyai-transcription-model.ts","../src/assemblyai-error.ts","../src/assemblyai-transcription-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type TranscriptionModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AssemblyAITranscriptionModel } from './assemblyai-transcription-model';\nimport type { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport { VERSION } from './version';\n\nexport interface AssemblyAIProvider extends ProviderV4 {\n (\n modelId: AssemblyAITranscriptionModelId,\n settings?: {},\n ): {\n transcription: AssemblyAITranscriptionModel;\n };\n\n /**\n * Creates a model for transcription.\n */\n transcription(modelId: AssemblyAITranscriptionModelId): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface AssemblyAIProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create an AssemblyAI provider instance.\n */\nexport function createAssemblyAI(\n options: AssemblyAIProviderSettings = {},\n): AssemblyAIProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ASSEMBLYAI_API_KEY',\n description: 'AssemblyAI',\n }),\n ...options.headers,\n },\n `ai-sdk/assemblyai/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: AssemblyAITranscriptionModelId) =>\n new AssemblyAITranscriptionModel(modelId, {\n provider: `assemblyai.transcription`,\n url: ({ path }) => `https://api.assemblyai.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AssemblyAITranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'AssemblyAI does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as AssemblyAIProvider;\n}\n\n/**\n * Default AssemblyAI provider instance.\n */\nexport const assemblyai = createAssemblyAI();\n","import type {\n TranscriptionModelV4,\n SharedV4Warning,\n SharedV4ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n extractResponseHeaders,\n parseProviderOptions,\n postJsonToApi,\n postToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AssemblyAIConfig } from './assemblyai-config';\nimport { assemblyaiFailedResponseHandler } from './assemblyai-error';\nimport { assemblyaiTranscriptionModelOptionsSchema } from './assemblyai-transcription-model-options';\nimport type { AssemblyAITranscriptionModelId } from './assemblyai-transcription-settings';\nimport type { AssemblyAITranscriptionAPITypes } from './assemblyai-api-types';\n\ninterface AssemblyAITranscriptionModelConfig extends AssemblyAIConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n /**\n * The polling interval for checking transcript status in milliseconds.\n */\n pollingInterval?: number;\n}\n\nexport class AssemblyAITranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n private readonly POLLING_INTERVAL_MS = 3000;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: AssemblyAITranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: AssemblyAITranscriptionModelId;\n config: AssemblyAITranscriptionModelConfig;\n }) {\n return new AssemblyAITranscriptionModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: AssemblyAITranscriptionModelId,\n private readonly config: AssemblyAITranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const assemblyaiOptions = await parseProviderOptions({\n provider: 'assemblyai',\n providerOptions,\n schema: assemblyaiTranscriptionModelOptionsSchema,\n });\n\n const body: Omit<AssemblyAITranscriptionAPITypes, 'audio_url'> = {};\n\n // The legacy `best` model is selected via the deprecated singular\n // `speech_model` parameter. All other models (e.g. `universal-2`,\n // `universal-3-pro`, `universal-3-5-pro`) are only accessible via the\n // `speech_models` array and are rejected by `speech_model`.\n // See https://www.assemblyai.com/docs/pre-recorded-audio/select-the-speech-model\n if (this.modelId === 'best') {\n body.speech_model = this.modelId as 'best';\n warnings.push({\n type: 'deprecated',\n setting: `model '${this.modelId}'`,\n message:\n \"The 'best' model is a legacy AssemblyAI model. Use 'universal-3-5-pro' instead. See documentation: https://www.assemblyai.com/docs/pre-recorded-audio/select-the-speech-model\",\n });\n } else {\n body.speech_models = [this.modelId];\n\n // Forward-looking nudge: universal-3-5-pro is AssemblyAI's latest\n // flagship and is set to replace universal-3-pro. Not a deprecation —\n // both models still work — so this is an informational warning only.\n if (\n this.modelId === 'universal-3-pro' ||\n this.modelId === 'universal-2'\n ) {\n const docsUrl =\n 'https://www.assemblyai.com/docs/pre-recorded-audio/select-the-speech-model';\n warnings.push({\n type: 'other',\n message:\n this.modelId === 'universal-3-pro'\n ? `'universal-3-5-pro' is AssemblyAI's latest flagship model and is set to replace 'universal-3-pro'. See ${docsUrl}`\n : `'universal-3-5-pro' is AssemblyAI's latest flagship model. See ${docsUrl}`,\n });\n }\n }\n\n // Add provider-specific options\n if (assemblyaiOptions) {\n body.audio_end_at = assemblyaiOptions.audioEndAt ?? undefined;\n body.audio_start_from = assemblyaiOptions.audioStartFrom ?? undefined;\n body.auto_chapters = assemblyaiOptions.autoChapters ?? undefined;\n body.auto_highlights = assemblyaiOptions.autoHighlights ?? undefined;\n body.boost_param = (assemblyaiOptions.boostParam as never) ?? undefined;\n body.content_safety = assemblyaiOptions.contentSafety ?? undefined;\n body.content_safety_confidence =\n assemblyaiOptions.contentSafetyConfidence ?? undefined;\n body.custom_spelling =\n (assemblyaiOptions.customSpelling as never) ?? undefined;\n body.disfluencies = assemblyaiOptions.disfluencies ?? undefined;\n body.entity_detection = assemblyaiOptions.entityDetection ?? undefined;\n body.filter_profanity = assemblyaiOptions.filterProfanity ?? undefined;\n body.format_text = assemblyaiOptions.formatText ?? undefined;\n body.iab_categories = assemblyaiOptions.iabCategories ?? undefined;\n body.language_code =\n (assemblyaiOptions.languageCode as never) ?? undefined;\n body.language_confidence_threshold =\n assemblyaiOptions.languageConfidenceThreshold ?? undefined;\n body.language_detection =\n assemblyaiOptions.languageDetection ?? undefined;\n body.multichannel = assemblyaiOptions.multichannel ?? undefined;\n body.punctuate = assemblyaiOptions.punctuate ?? undefined;\n body.redact_pii = assemblyaiOptions.redactPii ?? undefined;\n body.redact_pii_audio = assemblyaiOptions.redactPiiAudio ?? undefined;\n body.redact_pii_audio_quality =\n (assemblyaiOptions.redactPiiAudioQuality as never) ?? undefined;\n body.redact_pii_policies =\n (assemblyaiOptions.redactPiiPolicies as never) ?? undefined;\n body.redact_pii_sub =\n (assemblyaiOptions.redactPiiSub as never) ?? undefined;\n body.sentiment_analysis =\n assemblyaiOptions.sentimentAnalysis ?? undefined;\n body.speaker_labels = assemblyaiOptions.speakerLabels ?? undefined;\n body.speakers_expected = assemblyaiOptions.speakersExpected ?? undefined;\n body.speech_threshold = assemblyaiOptions.speechThreshold ?? undefined;\n body.summarization = assemblyaiOptions.summarization ?? undefined;\n body.summary_model =\n (assemblyaiOptions.summaryModel as never) ?? undefined;\n body.summary_type = (assemblyaiOptions.summaryType as never) ?? undefined;\n body.webhook_auth_header_name =\n assemblyaiOptions.webhookAuthHeaderName ?? undefined;\n body.webhook_auth_header_value =\n assemblyaiOptions.webhookAuthHeaderValue ?? undefined;\n body.webhook_url = assemblyaiOptions.webhookUrl ?? undefined;\n body.word_boost = assemblyaiOptions.wordBoost ?? undefined;\n body.keyterms_prompt = assemblyaiOptions.keytermsPrompt ?? undefined;\n body.prompt = assemblyaiOptions.prompt ?? undefined;\n body.temperature = assemblyaiOptions.temperature ?? undefined;\n body.remove_audio_tags = assemblyaiOptions.removeAudioTags ?? undefined;\n body.domain = assemblyaiOptions.domain ?? undefined;\n body.redact_pii_return_unredacted =\n assemblyaiOptions.redactPiiReturnUnredacted ?? undefined;\n body.redact_static_entities =\n assemblyaiOptions.redactStaticEntities ?? undefined;\n\n if (assemblyaiOptions.speakerOptions) {\n body.speaker_options = {\n min_speakers_expected:\n assemblyaiOptions.speakerOptions.minSpeakersExpected ?? undefined,\n max_speakers_expected:\n assemblyaiOptions.speakerOptions.maxSpeakersExpected ?? undefined,\n };\n }\n\n if (assemblyaiOptions.languageDetectionOptions) {\n body.language_detection_options = {\n expected_languages:\n assemblyaiOptions.languageDetectionOptions.expectedLanguages ??\n undefined,\n fallback_language:\n assemblyaiOptions.languageDetectionOptions.fallbackLanguage ??\n undefined,\n code_switching:\n assemblyaiOptions.languageDetectionOptions.codeSwitching ??\n undefined,\n code_switching_confidence_threshold:\n assemblyaiOptions.languageDetectionOptions\n .codeSwitchingConfidenceThreshold ?? undefined,\n };\n }\n\n if (assemblyaiOptions.redactPiiAudioOptions) {\n body.redact_pii_audio_options = {\n return_redacted_no_speech_audio:\n assemblyaiOptions.redactPiiAudioOptions\n .returnRedactedNoSpeechAudio ?? undefined,\n override_audio_redaction_method:\n assemblyaiOptions.redactPiiAudioOptions\n .overrideAudioRedactionMethod ?? undefined,\n };\n }\n\n const deprecatedBoostOptions: string[] = [];\n if (assemblyaiOptions.wordBoost != null) {\n deprecatedBoostOptions.push('wordBoost');\n }\n if (assemblyaiOptions.boostParam != null) {\n deprecatedBoostOptions.push('boostParam');\n }\n if (deprecatedBoostOptions.length > 0) {\n warnings.push({\n type: 'deprecated',\n setting: deprecatedBoostOptions.join(', '),\n message:\n \"'wordBoost' and 'boostParam' are deprecated and are rejected by 'universal-3-pro' / 'universal-3-5-pro' and 'slam-1'. Use 'keytermsPrompt' instead.\",\n });\n }\n\n // The following options only take effect alongside a prerequisite\n // option; without it AssemblyAI either rejects the request (400) or\n // silently ignores the option. Warn rather than mutate user input.\n if (\n (assemblyaiOptions.redactPiiReturnUnredacted != null ||\n assemblyaiOptions.redactStaticEntities != null) &&\n !assemblyaiOptions.redactPii\n ) {\n warnings.push({\n type: 'other',\n message:\n \"'redactPiiReturnUnredacted' and 'redactStaticEntities' require 'redactPii' to be enabled; AssemblyAI rejects the request otherwise.\",\n });\n }\n if (\n assemblyaiOptions.redactPiiAudioOptions != null &&\n !assemblyaiOptions.redactPiiAudio\n ) {\n warnings.push({\n type: 'other',\n message:\n \"'redactPiiAudioOptions' only applies when 'redactPiiAudio' is enabled; it is otherwise ignored.\",\n });\n }\n if (\n assemblyaiOptions.languageCode != null &&\n assemblyaiOptions.languageDetection\n ) {\n warnings.push({\n type: 'other',\n message:\n \"'languageDetection' cannot be combined with an explicit 'languageCode'; AssemblyAI rejects requests that set both.\",\n });\n }\n }\n\n return {\n body,\n warnings,\n };\n }\n\n /**\n * Polls the given transcript until we have a status other than `processing` or `queued`.\n *\n * @see https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file#step-33\n */\n private async waitForCompletion(\n transcriptId: string,\n headers: Record<string, string | undefined> | undefined,\n abortSignal?: AbortSignal,\n ): Promise<{\n transcript: z.infer<typeof assemblyaiTranscriptionResponseSchema>;\n rawTranscript: unknown;\n responseHeaders: Record<string, string>;\n }> {\n const pollingInterval =\n this.config.pollingInterval ?? this.POLLING_INTERVAL_MS;\n\n // Honor a caller-provided fetch (proxy, auth injection, tests) for the\n // polling GETs, matching the upload/submit calls that use config.fetch.\n const fetchImpl = this.config.fetch ?? globalThis.fetch;\n\n while (true) {\n if (abortSignal?.aborted) {\n throw new Error('Transcription request was aborted');\n }\n\n const response = await fetchImpl(\n this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n {\n method: 'GET',\n headers: combineHeaders(\n this.config.headers?.(),\n headers,\n ) as HeadersInit,\n signal: abortSignal,\n },\n );\n\n if (!response.ok) {\n throw await assemblyaiFailedResponseHandler({\n response,\n url: this.config.url({\n path: `/v2/transcript/${transcriptId}`,\n modelId: this.modelId,\n }),\n requestBodyValues: {},\n });\n }\n\n const rawTranscript = await response.json();\n const transcript =\n assemblyaiTranscriptionResponseSchema.parse(rawTranscript);\n\n if (transcript.status === 'completed') {\n return {\n transcript,\n rawTranscript,\n responseHeaders: extractResponseHeaders(response),\n };\n }\n\n if (transcript.status === 'error') {\n throw new Error(\n `Transcription failed: ${transcript.error ?? 'Unknown error'}`,\n );\n }\n\n await new Promise(resolve => setTimeout(resolve, pollingInterval));\n }\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const { value: uploadResponse } = await postToApi({\n url: this.config.url({\n path: '/v2/upload',\n modelId: '',\n }),\n headers: {\n 'Content-Type': 'application/octet-stream',\n ...combineHeaders(this.config.headers?.(), options.headers),\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiUploadResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { body, warnings } = await this.getArgs(options);\n\n const { value: submitResponse } = await postJsonToApi({\n url: this.config.url({\n path: '/v2/transcript',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: {\n ...body,\n audio_url: uploadResponse.upload_url,\n },\n failedResponseHandler: assemblyaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n assemblyaiSubmitResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { transcript, rawTranscript, responseHeaders } =\n await this.waitForCompletion(\n submitResponse.id,\n options.headers,\n options.abortSignal,\n );\n\n // Surface diarization and audio-intelligence results that the AI SDK's\n // `segments` shape can't represent, keyed under `assemblyai`. Presence is\n // gated on the parsed transcript, but values are taken from the raw\n // response so no fields are stripped by the schema.\n //\n // NOTE: timings inside these objects (e.g. `utterances[].start`) are in\n // milliseconds, matching the AssemblyAI API — unlike the top-level\n // `segments`, whose `startSecond`/`endSecond` are in seconds.\n const raw = (rawTranscript ?? {}) as Record<string, unknown>;\n const assemblyaiMetadata: Record<string, unknown> = {};\n if (transcript.utterances != null) {\n assemblyaiMetadata.utterances = raw.utterances;\n }\n if (transcript.sentiment_analysis_results != null) {\n assemblyaiMetadata.sentimentAnalysisResults =\n raw.sentiment_analysis_results;\n }\n if (transcript.entities != null) {\n assemblyaiMetadata.entities = raw.entities;\n }\n if (transcript.content_safety_labels != null) {\n assemblyaiMetadata.contentSafetyLabels = raw.content_safety_labels;\n }\n if (transcript.iab_categories_result != null) {\n assemblyaiMetadata.iabCategoriesResult = raw.iab_categories_result;\n }\n if (transcript.auto_highlights_result != null) {\n assemblyaiMetadata.autoHighlightsResult = raw.auto_highlights_result;\n }\n\n const lastWordEndMs = transcript.words?.at(-1)?.end;\n\n return {\n text: transcript.text ?? '',\n // AssemblyAI returns word timings in milliseconds; the AI SDK reports\n // segment timings in seconds.\n segments:\n transcript.words?.map(word => ({\n text: word.text,\n startSecond: word.start / 1000,\n endSecond: word.end / 1000,\n })) ?? [],\n language: transcript.language_code ?? undefined,\n durationInSeconds:\n transcript.audio_duration ??\n (lastWordEndMs != null ? lastWordEndMs / 1000 : undefined),\n warnings,\n ...(Object.keys(assemblyaiMetadata).length > 0 && {\n providerMetadata: {\n assemblyai: assemblyaiMetadata,\n } as SharedV4ProviderMetadata,\n }),\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders, // Headers from final GET request\n body: rawTranscript, // Full raw response from final GET request\n },\n };\n }\n}\n\nconst assemblyaiUploadResponseSchema = z.object({\n upload_url: z.string(),\n});\n\nconst assemblyaiSubmitResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n});\n\nconst assemblyaiWordSchema = z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n confidence: z.number().nullish(),\n // Speaker label (e.g. 'A', 'B') when speaker diarization is enabled, else null.\n speaker: z.string().nullish(),\n channel: z.string().nullish(),\n});\n\nconst assemblyaiTranscriptionResponseSchema = z.object({\n id: z.string(),\n status: z.enum(['queued', 'processing', 'completed', 'error']),\n text: z.string().nullish(),\n language_code: z.string().nullish(),\n speech_model_used: z.string().nullish(),\n words: z.array(assemblyaiWordSchema).nullish(),\n // Speaker-diarized utterances (present when `speaker_labels` is enabled).\n utterances: z\n .array(\n z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n confidence: z.number().nullish(),\n speaker: z.string().nullish(),\n channel: z.string().nullish(),\n words: z.array(assemblyaiWordSchema).nullish(),\n }),\n )\n .nullish(),\n // Audio-intelligence results, present only when the matching feature is\n // enabled. Kept intentionally permissive (the full structures are also\n // available on the raw `response.body`).\n sentiment_analysis_results: z\n .array(\n z.object({\n text: z.string(),\n start: z.number().nullish(),\n end: z.number().nullish(),\n sentiment: z.string(),\n confidence: z.number().nullish(),\n speaker: z.string().nullish(),\n }),\n )\n .nullish(),\n entities: z\n .array(\n z.object({\n entity_type: z.string(),\n text: z.string(),\n start: z.number().nullish(),\n end: z.number().nullish(),\n }),\n )\n .nullish(),\n content_safety_labels: z.record(z.string(), z.any()).nullish(),\n iab_categories_result: z.record(z.string(), z.any()).nullish(),\n auto_highlights_result: z.record(z.string(), z.any()).nullish(),\n audio_duration: z.number().nullish(),\n error: z.string().nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const assemblyaiErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type AssemblyAIErrorData = z.infer<typeof assemblyaiErrorDataSchema>;\n\nexport const assemblyaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: assemblyaiErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { z } from 'zod/v4';\n\n// https://www.assemblyai.com/docs/api-reference/transcripts/submit\nexport const assemblyaiTranscriptionModelOptionsSchema = z.object({\n /**\n * End time of the audio in milliseconds.\n */\n audioEndAt: z.number().int().nullish(),\n /**\n * Start time of the audio in milliseconds.\n */\n audioStartFrom: z.number().int().nullish(),\n /**\n * Whether to automatically generate chapters for the transcription.\n */\n autoChapters: z.boolean().nullish(),\n /**\n * Whether to automatically generate highlights for the transcription.\n */\n autoHighlights: z.boolean().nullish(),\n /**\n * Boost parameter for word boost (used with `wordBoost`).\n * Allowed values: 'low', 'default', 'high'.\n *\n * @deprecated Only applies to the deprecated `wordBoost` option. Use\n * `keytermsPrompt` instead, which works with the recommended `universal-*`\n * models.\n */\n boostParam: z.string().nullish(),\n /**\n * Whether to enable content safety filtering.\n */\n contentSafety: z.boolean().nullish(),\n /**\n * Confidence threshold for content safety filtering (25-100).\n */\n contentSafetyConfidence: z.number().int().min(25).max(100).nullish(),\n /**\n * Custom spelling rules for the transcription.\n */\n customSpelling: z\n .array(\n z.object({\n from: z.array(z.string()),\n to: z.string(),\n }),\n )\n .nullish(),\n /**\n * Whether to include filler words (um, uh, etc.) in the transcription.\n */\n disfluencies: z.boolean().nullish(),\n /**\n * Enable a domain-specific model to improve accuracy for specialized\n * terminology. Currently supports `'medical-v1'` (Medical Mode).\n */\n domain: z.string().nullish(),\n /**\n * Whether to enable entity detection.\n */\n entityDetection: z.boolean().nullish(),\n /**\n * Whether to filter profanity from the transcription.\n */\n filterProfanity: z.boolean().nullish(),\n /**\n * Whether to format text with punctuation and capitalization.\n */\n formatText: z.boolean().nullish(),\n /**\n * Whether to enable IAB categories detection.\n */\n iabCategories: z.boolean().nullish(),\n /**\n * Domain-specific keyterms to boost recognition for (max 6 words per phrase).\n * Replaces `wordBoost` for newer models: supported by `universal-3-pro` /\n * `universal-3-5-pro` and `slam-1` (and `universal-2` when metaphone is\n * enabled for the account).\n */\n keytermsPrompt: z.array(z.string()).nullish(),\n /**\n * Language code for the transcription.\n */\n languageCode: z.union([z.literal('en'), z.string()]).nullish(),\n /**\n * Confidence threshold for language detection.\n */\n languageConfidenceThreshold: z.number().nullish(),\n /**\n * Whether to enable language detection.\n */\n languageDetection: z.boolean().nullish(),\n /**\n * Options for automatic language detection.\n */\n languageDetectionOptions: z\n .object({\n /** List of languages expected in the audio file. */\n expectedLanguages: z.array(z.string()).nullish(),\n /** Fallback language if the detected language is not expected. */\n fallbackLanguage: z.string().nullish(),\n /** Whether code switching should be detected. */\n codeSwitching: z.boolean().nullish(),\n /** Confidence threshold for code switching detection (0-1). */\n codeSwitchingConfidenceThreshold: z.number().min(0).max(1).nullish(),\n })\n .nullish(),\n /**\n * Whether to process audio as multichannel.\n */\n multichannel: z.boolean().nullish(),\n /**\n * Provide natural-language context (up to 1,500 words) to steer the model.\n * Only supported by `universal-3-pro` / `universal-3-5-pro` and `slam-1`.\n */\n prompt: z.string().nullish(),\n /**\n * Whether to add punctuation to the transcription.\n */\n punctuate: z.boolean().nullish(),\n /**\n * Whether to redact personally identifiable information (PII).\n */\n redactPii: z.boolean().nullish(),\n /**\n * Whether to redact PII in the audio file.\n */\n redactPiiAudio: z.boolean().nullish(),\n /**\n * Options for PII-redacted audio files. Requires `redactPiiAudio`.\n */\n redactPiiAudioOptions: z\n .object({\n /** Return redacted audio even for files without detected speech. */\n returnRedactedNoSpeechAudio: z.boolean().nullish(),\n /** Redaction method; set to `'silence'` to replace PII with silence. */\n overrideAudioRedactionMethod: z.enum(['silence']).nullish(),\n })\n .nullish(),\n /**\n * Audio format for PII redaction.\n */\n redactPiiAudioQuality: z.string().nullish(),\n /**\n * List of PII types to redact.\n */\n redactPiiPolicies: z.array(z.string()).nullish(),\n /**\n * Return the original unredacted transcript alongside the redacted one.\n * Requires `redactPii`.\n */\n redactPiiReturnUnredacted: z.boolean().nullish(),\n /**\n * Substitution method for redacted PII.\n */\n redactPiiSub: z.string().nullish(),\n /**\n * Map of user-defined labels to exact terms to redact, e.g.\n * `{ INTERNAL_TOOL: ['Bearclaw'] }`. Applied on top of standard PII redaction\n * using `redactPiiSub`. Requires `redactPii`.\n */\n redactStaticEntities: z.record(z.string(), z.array(z.string())).nullish(),\n /**\n * Remove inline annotations from rich transcripts. `'all'` removes all inline\n * annotations; `'speaker'` removes only speaker cues. Universal-3 Pro models.\n */\n removeAudioTags: z.enum(['all', 'speaker']).nullish(),\n /**\n * Whether to enable sentiment analysis.\n */\n sentimentAnalysis: z.boolean().nullish(),\n /**\n * Whether to identify different speakers in the audio.\n */\n speakerLabels: z.boolean().nullish(),\n /**\n * Options for speaker diarization, e.g. a range of possible speakers.\n */\n speakerOptions: z\n .object({\n /** Minimum number of speakers expected in the audio file. */\n minSpeakersExpected: z.number().int().nullish(),\n /** Maximum number of speakers expected in the audio file. */\n maxSpeakersExpected: z.number().int().nullish(),\n })\n .nullish(),\n /**\n * Number of speakers expected in the audio.\n */\n speakersExpected: z.number().int().nullish(),\n /**\n * Threshold for speech detection (0-1).\n */\n speechThreshold: z.number().min(0).max(1).nullish(),\n /**\n * Whether to generate a summary of the transcription.\n */\n summarization: z.boolean().nullish(),\n /**\n * Model to use for summarization.\n */\n summaryModel: z.string().nullish(),\n /**\n * Type of summary to generate.\n */\n summaryType: z.string().nullish(),\n /**\n * Sampling temperature (0-1) controlling randomness. Universal-3 Pro models.\n */\n temperature: z.number().min(0).max(1).nullish(),\n /**\n * Name of the authentication header for webhook requests.\n */\n webhookAuthHeaderName: z.string().nullish(),\n /**\n * Value of the authentication header for webhook requests.\n */\n webhookAuthHeaderValue: z.string().nullish(),\n /**\n * URL to send webhook notifications to.\n */\n webhookUrl: z.string().nullish(),\n /**\n * List of words to boost recognition for.\n *\n * @deprecated `wordBoost` is rejected by `universal-3-pro` /\n * `universal-3-5-pro` and `slam-1` (it only works on `universal-2`/`best`).\n * Use `keytermsPrompt` instead.\n */\n wordBoost: z.array(z.string()).nullish(),\n});\n\nexport type AssemblyAITranscriptionModelOptions = z.infer<\n typeof assemblyaiTranscriptionModelOptionsSchema\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","z"]}
|
package/docs/100-assemblyai.mdx
CHANGED
|
@@ -5,7 +5,7 @@ description: Learn how to use the AssemblyAI provider for the AI SDK.
|
|
|
5
5
|
|
|
6
6
|
# AssemblyAI Provider
|
|
7
7
|
|
|
8
|
-
The [AssemblyAI](https://assemblyai.com/) provider contains
|
|
8
|
+
The [AssemblyAI](https://assemblyai.com/) provider contains transcription model support for the AssemblyAI transcription API.
|
|
9
9
|
|
|
10
10
|
## Setup
|
|
11
11
|
|
|
@@ -69,12 +69,23 @@ You can use the following optional settings to customize the AssemblyAI provider
|
|
|
69
69
|
You can create models that call the [AssemblyAI transcription API](https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file/typescript)
|
|
70
70
|
using the `.transcription()` factory method.
|
|
71
71
|
|
|
72
|
-
The first argument is the model id e.g. `
|
|
72
|
+
The first argument is the model id, e.g. `universal-3-5-pro`.
|
|
73
73
|
|
|
74
74
|
```ts
|
|
75
|
-
const model = assemblyai.transcription('
|
|
75
|
+
const model = assemblyai.transcription('universal-3-5-pro');
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
+
The `best` model is a **deprecated** legacy model, sent using AssemblyAI's
|
|
79
|
+
deprecated `speech_model` request parameter. It still works, but using it emits a
|
|
80
|
+
deprecation warning — prefer `universal-3-5-pro`. The older `nano` model has been
|
|
81
|
+
removed by AssemblyAI and is no longer available. All newer models are sent using
|
|
82
|
+
the [`speech_models`](https://www.assemblyai.com/docs/pre-recorded-audio/select-the-speech-model)
|
|
83
|
+
request parameter, which the provider selects automatically based on the model id.
|
|
84
|
+
|
|
85
|
+
`universal-3-pro` and `universal-2` are fully supported and continue to work, but
|
|
86
|
+
using them emits an informational warning (not a deprecation) suggesting
|
|
87
|
+
`universal-3-5-pro`, AssemblyAI's latest flagship model.
|
|
88
|
+
|
|
78
89
|
You can also pass additional provider-specific options using the `providerOptions` argument. For example, supplying the `contentSafety` option will enable content safety filtering.
|
|
79
90
|
|
|
80
91
|
```ts highlight="7"
|
|
@@ -84,7 +95,7 @@ import { type AssemblyAITranscriptionModelOptions } from '@ai-sdk/assemblyai';
|
|
|
84
95
|
import { readFile } from 'fs/promises';
|
|
85
96
|
|
|
86
97
|
const result = await transcribe({
|
|
87
|
-
model: assemblyai.transcription('
|
|
98
|
+
model: assemblyai.transcription('universal-3-5-pro'),
|
|
88
99
|
audio: await readFile('audio.mp3'),
|
|
89
100
|
providerOptions: {
|
|
90
101
|
assemblyai: {
|
|
@@ -118,8 +129,9 @@ The following provider options are available:
|
|
|
118
129
|
|
|
119
130
|
- **boostParam** _enum_
|
|
120
131
|
|
|
121
|
-
Boost parameter for
|
|
132
|
+
Boost parameter for `wordBoost`.
|
|
122
133
|
Allowed values: `'low'`, `'default'`, `'high'`.
|
|
134
|
+
**Deprecated** — only applies to the deprecated `wordBoost`; use `keytermsPrompt` instead.
|
|
123
135
|
Optional.
|
|
124
136
|
|
|
125
137
|
- **contentSafety** _boolean_
|
|
@@ -143,6 +155,12 @@ The following provider options are available:
|
|
|
143
155
|
Whether to include disfluencies (um, uh, etc.) in the transcription.
|
|
144
156
|
Optional.
|
|
145
157
|
|
|
158
|
+
- **domain** _string_
|
|
159
|
+
|
|
160
|
+
Enable a domain-specific model for specialized terminology.
|
|
161
|
+
Currently supports `'medical-v1'` (Medical Mode).
|
|
162
|
+
Optional.
|
|
163
|
+
|
|
146
164
|
- **entityDetection** _boolean_
|
|
147
165
|
|
|
148
166
|
Whether to detect entities in the transcription.
|
|
@@ -163,6 +181,13 @@ The following provider options are available:
|
|
|
163
181
|
Whether to include IAB categories in the transcription.
|
|
164
182
|
Optional.
|
|
165
183
|
|
|
184
|
+
- **keytermsPrompt** _array of strings_
|
|
185
|
+
|
|
186
|
+
Domain-specific keyterms to boost recognition for (max 6 words per phrase).
|
|
187
|
+
Replaces `wordBoost` for newer models — supported by `universal-3-pro`,
|
|
188
|
+
`universal-3-5-pro`, and `slam-1` (and `universal-2` when enabled).
|
|
189
|
+
Optional.
|
|
190
|
+
|
|
166
191
|
- **languageCode** _string_
|
|
167
192
|
|
|
168
193
|
Language code for the audio.
|
|
@@ -179,11 +204,24 @@ The following provider options are available:
|
|
|
179
204
|
Whether to enable language detection.
|
|
180
205
|
Optional.
|
|
181
206
|
|
|
207
|
+
- **languageDetectionOptions** _object_
|
|
208
|
+
|
|
209
|
+
Options for automatic language detection: `expectedLanguages` (array of
|
|
210
|
+
strings), `fallbackLanguage` (string), `codeSwitching` (boolean),
|
|
211
|
+
`codeSwitchingConfidenceThreshold` (number, 0-1).
|
|
212
|
+
Optional.
|
|
213
|
+
|
|
182
214
|
- **multichannel** _boolean_
|
|
183
215
|
|
|
184
216
|
Whether to process multiple audio channels separately.
|
|
185
217
|
Optional.
|
|
186
218
|
|
|
219
|
+
- **prompt** _string_
|
|
220
|
+
|
|
221
|
+
Natural-language context (up to 1,500 words) to steer the model.
|
|
222
|
+
Only supported by `universal-3-pro`, `universal-3-5-pro`, and `slam-1`.
|
|
223
|
+
Optional.
|
|
224
|
+
|
|
187
225
|
- **punctuate** _boolean_
|
|
188
226
|
|
|
189
227
|
Whether to add punctuation to the transcription.
|
|
@@ -199,6 +237,12 @@ The following provider options are available:
|
|
|
199
237
|
Whether to redact PII in the audio file.
|
|
200
238
|
Optional.
|
|
201
239
|
|
|
240
|
+
- **redactPiiAudioOptions** _object_
|
|
241
|
+
|
|
242
|
+
Options for PII-redacted audio: `returnRedactedNoSpeechAudio` (boolean),
|
|
243
|
+
`overrideAudioRedactionMethod` (`'silence'`). Requires `redactPiiAudio`.
|
|
244
|
+
Optional.
|
|
245
|
+
|
|
202
246
|
- **redactPiiAudioQuality** _enum_
|
|
203
247
|
|
|
204
248
|
Quality of the redacted audio file.
|
|
@@ -211,12 +255,32 @@ The following provider options are available:
|
|
|
211
255
|
Supports numerous types like `'person_name'`, `'phone_number'`, etc.
|
|
212
256
|
Optional.
|
|
213
257
|
|
|
258
|
+
- **redactPiiReturnUnredacted** _boolean_
|
|
259
|
+
|
|
260
|
+
Return the original unredacted transcript alongside the redacted one.
|
|
261
|
+
Requires `redactPii`.
|
|
262
|
+
Optional.
|
|
263
|
+
|
|
214
264
|
- **redactPiiSub** _enum_
|
|
215
265
|
|
|
216
266
|
Substitution method for redacted PII.
|
|
217
267
|
Allowed values: `'entity_name'`, `'hash'`.
|
|
218
268
|
Optional.
|
|
219
269
|
|
|
270
|
+
- **redactStaticEntities** _object_
|
|
271
|
+
|
|
272
|
+
Map of user-defined labels to exact terms to redact, e.g.
|
|
273
|
+
`{ INTERNAL_TOOL: ['Bearclaw'] }`. Applied on top of standard PII redaction.
|
|
274
|
+
Requires `redactPii`.
|
|
275
|
+
Optional.
|
|
276
|
+
|
|
277
|
+
- **removeAudioTags** _enum_
|
|
278
|
+
|
|
279
|
+
Remove inline annotations from rich transcripts.
|
|
280
|
+
Allowed values: `'all'` (all annotations), `'speaker'` (speaker cues only).
|
|
281
|
+
Universal-3 Pro models.
|
|
282
|
+
Optional.
|
|
283
|
+
|
|
220
284
|
- **sentimentAnalysis** _boolean_
|
|
221
285
|
|
|
222
286
|
Whether to perform sentiment analysis on the transcription.
|
|
@@ -227,6 +291,12 @@ The following provider options are available:
|
|
|
227
291
|
Whether to label different speakers in the transcription.
|
|
228
292
|
Optional.
|
|
229
293
|
|
|
294
|
+
- **speakerOptions** _object_
|
|
295
|
+
|
|
296
|
+
Options for speaker diarization: `minSpeakersExpected` (number),
|
|
297
|
+
`maxSpeakersExpected` (number).
|
|
298
|
+
Optional.
|
|
299
|
+
|
|
230
300
|
- **speakersExpected** _number_
|
|
231
301
|
|
|
232
302
|
Expected number of speakers in the audio.
|
|
@@ -254,6 +324,12 @@ The following provider options are available:
|
|
|
254
324
|
Allowed values: `'bullets'`, `'bullets_verbose'`, `'gist'`, `'headline'`, `'paragraph'`.
|
|
255
325
|
Optional.
|
|
256
326
|
|
|
327
|
+
- **temperature** _number_
|
|
328
|
+
|
|
329
|
+
Sampling temperature (0-1) controlling randomness.
|
|
330
|
+
Universal-3 Pro models.
|
|
331
|
+
Optional.
|
|
332
|
+
|
|
257
333
|
- **webhookAuthHeaderName** _string_
|
|
258
334
|
|
|
259
335
|
Name of the authentication header for webhook requests.
|
|
@@ -272,11 +348,60 @@ The following provider options are available:
|
|
|
272
348
|
- **wordBoost** _array of strings_
|
|
273
349
|
|
|
274
350
|
List of words to boost in the transcription.
|
|
351
|
+
**Deprecated** — rejected by `universal-3-pro`, `universal-3-5-pro`, and `slam-1`
|
|
352
|
+
(works only on `universal-2`/`best`); use `keytermsPrompt` instead.
|
|
275
353
|
Optional.
|
|
276
354
|
|
|
355
|
+
### Speaker diarization and audio-intelligence results
|
|
356
|
+
|
|
357
|
+
The AI SDK's `transcribe` result exposes `text`, `segments`, `language`, and
|
|
358
|
+
`durationInSeconds`. AssemblyAI's richer results — speaker diarization and
|
|
359
|
+
audio-intelligence features — don't fit that shape, so they are surfaced in two
|
|
360
|
+
places:
|
|
361
|
+
|
|
362
|
+
- **`providerMetadata.assemblyai`** — structured results for the features you
|
|
363
|
+
enabled: `utterances` (speaker-diarized segments, when `speakerLabels` is set),
|
|
364
|
+
`entities`, `sentimentAnalysisResults`, `contentSafetyLabels`,
|
|
365
|
+
`iabCategoriesResult`, and `autoHighlightsResult`.
|
|
366
|
+
- **`response.body`** — the complete, raw AssemblyAI transcript response, so any
|
|
367
|
+
field not surfaced above (e.g. `chapters`, word-level `speaker` labels) is
|
|
368
|
+
still available.
|
|
369
|
+
|
|
370
|
+
Note: timings inside `providerMetadata` and `response.body` (e.g.
|
|
371
|
+
`utterances[].start`) are in **milliseconds**, matching the AssemblyAI API —
|
|
372
|
+
whereas the top-level `segments` use **seconds**.
|
|
373
|
+
|
|
374
|
+
```ts
|
|
375
|
+
import { transcribe } from 'ai';
|
|
376
|
+
import { assemblyai } from '@ai-sdk/assemblyai';
|
|
377
|
+
import { readFile } from 'fs/promises';
|
|
378
|
+
|
|
379
|
+
const result = await transcribe({
|
|
380
|
+
model: assemblyai.transcription('universal-3-5-pro'),
|
|
381
|
+
audio: await readFile('audio.mp3'),
|
|
382
|
+
providerOptions: {
|
|
383
|
+
assemblyai: {
|
|
384
|
+
speakerLabels: true,
|
|
385
|
+
entityDetection: true,
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
const { utterances, entities } = result.providerMetadata?.assemblyai ?? {};
|
|
391
|
+
// utterances: [{ speaker: 'A', text: '…', start, end, … }, …] (start/end in ms)
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
The following AssemblyAI features are **deprecated** by the API and not surfaced
|
|
395
|
+
in `providerMetadata` (their output remains on the raw `response.body` if
|
|
396
|
+
enabled): Summarization, Auto Chapters, and Custom Topics. Note also that some
|
|
397
|
+
features are language-gated (e.g. sentiment analysis is English-centric); see
|
|
398
|
+
AssemblyAI's documentation for per-language availability.
|
|
399
|
+
|
|
277
400
|
### Model Capabilities
|
|
278
401
|
|
|
279
|
-
| Model
|
|
280
|
-
|
|
|
281
|
-
| `
|
|
282
|
-
| `
|
|
402
|
+
| Model | Transcription | Duration | Segments | Language |
|
|
403
|
+
| ------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
|
|
404
|
+
| `universal-3-5-pro` | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
|
|
405
|
+
| `universal-3-pro` | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
|
|
406
|
+
| `universal-2` | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
|
|
407
|
+
| `best` | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/assemblyai",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@ai-sdk/provider": "4.0.1",
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.4"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "22.19.19",
|
|
@@ -28,6 +28,7 @@ export type AssemblyAITranscriptionAPITypes = {
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* How much to boost specified words
|
|
31
|
+
* @deprecated Only used with the deprecated `word_boost`. Use `keyterms_prompt`.
|
|
31
32
|
*/
|
|
32
33
|
boost_param?: 'low' | 'default' | 'high';
|
|
33
34
|
|
|
@@ -207,6 +208,16 @@ export type AssemblyAITranscriptionAPITypes = {
|
|
|
207
208
|
*/
|
|
208
209
|
language_detection?: boolean;
|
|
209
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Options for automatic language detection.
|
|
213
|
+
*/
|
|
214
|
+
language_detection_options?: {
|
|
215
|
+
expected_languages?: string[];
|
|
216
|
+
fallback_language?: string;
|
|
217
|
+
code_switching?: boolean;
|
|
218
|
+
code_switching_confidence_threshold?: number;
|
|
219
|
+
};
|
|
220
|
+
|
|
210
221
|
/**
|
|
211
222
|
* Enable Multichannel transcription, can be true or false.
|
|
212
223
|
* @default false
|
|
@@ -231,6 +242,14 @@ export type AssemblyAITranscriptionAPITypes = {
|
|
|
231
242
|
*/
|
|
232
243
|
redact_pii_audio?: boolean;
|
|
233
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Options for PII-redacted audio files. Requires redact_pii.
|
|
247
|
+
*/
|
|
248
|
+
redact_pii_audio_options?: {
|
|
249
|
+
return_redacted_no_speech_audio?: boolean;
|
|
250
|
+
override_audio_redaction_method?: 'silence';
|
|
251
|
+
};
|
|
252
|
+
|
|
234
253
|
/**
|
|
235
254
|
* Controls the filetype of the audio created by redact_pii_audio. Currently supports mp3 (default) and wav.
|
|
236
255
|
*/
|
|
@@ -286,11 +305,23 @@ export type AssemblyAITranscriptionAPITypes = {
|
|
|
286
305
|
| 'zodiac_sign'
|
|
287
306
|
>;
|
|
288
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Return the original unredacted transcript alongside the redacted one.
|
|
310
|
+
* Requires redact_pii.
|
|
311
|
+
*/
|
|
312
|
+
redact_pii_return_unredacted?: boolean;
|
|
313
|
+
|
|
289
314
|
/**
|
|
290
315
|
* The replacement logic for detected PII, can be "entity_name" or "hash".
|
|
291
316
|
*/
|
|
292
317
|
redact_pii_sub?: 'entity_name' | 'hash';
|
|
293
318
|
|
|
319
|
+
/**
|
|
320
|
+
* Map of user-defined labels to exact terms to redact, applied on top of
|
|
321
|
+
* standard PII redaction. Requires redact_pii.
|
|
322
|
+
*/
|
|
323
|
+
redact_static_entities?: Record<string, string[]>;
|
|
324
|
+
|
|
294
325
|
/**
|
|
295
326
|
* Enable Sentiment Analysis, can be true or false
|
|
296
327
|
* @default false
|
|
@@ -303,6 +334,14 @@ export type AssemblyAITranscriptionAPITypes = {
|
|
|
303
334
|
*/
|
|
304
335
|
speaker_labels?: boolean;
|
|
305
336
|
|
|
337
|
+
/**
|
|
338
|
+
* Options for speaker diarization, e.g. a range of possible speakers.
|
|
339
|
+
*/
|
|
340
|
+
speaker_options?: {
|
|
341
|
+
min_speakers_expected?: number;
|
|
342
|
+
max_speakers_expected?: number;
|
|
343
|
+
};
|
|
344
|
+
|
|
306
345
|
/**
|
|
307
346
|
* Tells the speaker label model how many speakers it should attempt to identify, up to 10.
|
|
308
347
|
*/
|
|
@@ -310,8 +349,21 @@ export type AssemblyAITranscriptionAPITypes = {
|
|
|
310
349
|
|
|
311
350
|
/**
|
|
312
351
|
* The speech model to use for the transcription.
|
|
352
|
+
*
|
|
353
|
+
* @deprecated This parameter has been replaced with `speech_models`. It only
|
|
354
|
+
* supports the legacy `best` model. Use `speech_models` for `universal-2`,
|
|
355
|
+
* `universal-3-pro`, `universal-3-5-pro`, etc.
|
|
356
|
+
* @see https://www.assemblyai.com/docs/pre-recorded-audio/select-the-speech-model
|
|
313
357
|
*/
|
|
314
|
-
speech_model?: 'best'
|
|
358
|
+
speech_model?: 'best';
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* List of speech models in priority order, allowing the system to
|
|
362
|
+
* automatically route the audio to the best available option. When omitted,
|
|
363
|
+
* the API defaults to `['universal-3-pro', 'universal-2']`.
|
|
364
|
+
* @see https://www.assemblyai.com/docs/pre-recorded-audio/select-the-speech-model
|
|
365
|
+
*/
|
|
366
|
+
speech_models?: string[];
|
|
315
367
|
|
|
316
368
|
/**
|
|
317
369
|
* Reject audio files that contain less than this fraction of speech. Valid values are in the range [0, 1] inclusive.
|
|
@@ -357,6 +409,37 @@ export type AssemblyAITranscriptionAPITypes = {
|
|
|
357
409
|
|
|
358
410
|
/**
|
|
359
411
|
* The list of custom vocabulary to boost transcription probability for
|
|
412
|
+
* @deprecated Rejected by `universal-3-pro` / `universal-3-5-pro` and
|
|
413
|
+
* `slam-1` (works only on `universal-2`/`best`). Use `keyterms_prompt`.
|
|
360
414
|
*/
|
|
361
415
|
word_boost?: string[];
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Domain-specific keyterms to boost (max 6 words per phrase). Replaces
|
|
419
|
+
* `word_boost` for `universal-3-pro` / `universal-3-5-pro` and `slam-1`.
|
|
420
|
+
*/
|
|
421
|
+
keyterms_prompt?: string[];
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Natural-language context (up to 1,500 words) to steer the model.
|
|
425
|
+
* Only supported by `universal-3-pro` / `universal-3-5-pro` and `slam-1`.
|
|
426
|
+
*/
|
|
427
|
+
prompt?: string;
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Sampling temperature (0-1) controlling randomness. Universal-3 Pro models.
|
|
431
|
+
*/
|
|
432
|
+
temperature?: number;
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Remove inline annotations from rich transcripts: `'all'` removes all
|
|
436
|
+
* annotations, `'speaker'` removes only speaker cues. Universal-3 Pro models.
|
|
437
|
+
*/
|
|
438
|
+
remove_audio_tags?: 'all' | 'speaker';
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Enable a domain-specific model to improve accuracy for specialized
|
|
442
|
+
* terminology, e.g. `'medical-v1'` for Medical Mode.
|
|
443
|
+
*/
|
|
444
|
+
domain?: string;
|
|
362
445
|
};
|