@ai-sdk/deepgram 1.0.12 → 1.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 CHANGED
@@ -1,5 +1,12 @@
1
1
  # @ai-sdk/deepgram
2
2
 
3
+ ## 1.0.13
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [17f9872]
8
+ - @ai-sdk/provider-utils@3.0.12
9
+
3
10
  ## 1.0.12
4
11
 
5
12
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
 
30
20
  // src/index.ts
@@ -42,15 +32,15 @@ var import_provider_utils3 = require("@ai-sdk/provider-utils");
42
32
 
43
33
  // src/deepgram-transcription-model.ts
44
34
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
45
- var z2 = __toESM(require("zod/v4"));
35
+ var import_v42 = require("zod/v4");
46
36
 
47
37
  // src/deepgram-error.ts
48
- var z = __toESM(require("zod/v4"));
38
+ var import_v4 = require("zod/v4");
49
39
  var import_provider_utils = require("@ai-sdk/provider-utils");
50
- var deepgramErrorDataSchema = z.object({
51
- error: z.object({
52
- message: z.string(),
53
- code: z.number()
40
+ var deepgramErrorDataSchema = import_v4.z.object({
41
+ error: import_v4.z.object({
42
+ message: import_v4.z.string(),
43
+ code: import_v4.z.number()
54
44
  })
55
45
  });
56
46
  var deepgramFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)({
@@ -59,41 +49,41 @@ var deepgramFailedResponseHandler = (0, import_provider_utils.createJsonErrorRes
59
49
  });
60
50
 
61
51
  // src/deepgram-transcription-model.ts
62
- var deepgramProviderOptionsSchema = z2.object({
52
+ var deepgramProviderOptionsSchema = import_v42.z.object({
63
53
  /** Language to use for transcription. If not specified, Deepgram will auto-detect the language. */
64
- language: z2.string().nullish(),
54
+ language: import_v42.z.string().nullish(),
65
55
  /** Whether to use smart formatting, which formats written-out numbers, dates, times, etc. */
66
- smartFormat: z2.boolean().nullish(),
56
+ smartFormat: import_v42.z.boolean().nullish(),
67
57
  /** Whether to add punctuation to the transcript. */
68
- punctuate: z2.boolean().nullish(),
58
+ punctuate: import_v42.z.boolean().nullish(),
69
59
  /** Whether to format the transcript into paragraphs. */
70
- paragraphs: z2.boolean().nullish(),
60
+ paragraphs: import_v42.z.boolean().nullish(),
71
61
  /** Whether to generate a summary of the transcript. Use 'v2' for the latest version or false to disable. */
72
- summarize: z2.union([z2.literal("v2"), z2.literal(false)]).nullish(),
62
+ summarize: import_v42.z.union([import_v42.z.literal("v2"), import_v42.z.literal(false)]).nullish(),
73
63
  /** Whether to identify topics in the transcript. */
74
- topics: z2.boolean().nullish(),
64
+ topics: import_v42.z.boolean().nullish(),
75
65
  /** Whether to identify intents in the transcript. */
76
- intents: z2.boolean().nullish(),
66
+ intents: import_v42.z.boolean().nullish(),
77
67
  /** Whether to analyze sentiment in the transcript. */
78
- sentiment: z2.boolean().nullish(),
68
+ sentiment: import_v42.z.boolean().nullish(),
79
69
  /** Whether to detect and tag named entities in the transcript. */
80
- detectEntities: z2.boolean().nullish(),
70
+ detectEntities: import_v42.z.boolean().nullish(),
81
71
  /** Specify terms or patterns to redact from the transcript. Can be a string or array of strings. */
82
- redact: z2.union([z2.string(), z2.array(z2.string())]).nullish(),
72
+ redact: import_v42.z.union([import_v42.z.string(), import_v42.z.array(import_v42.z.string())]).nullish(),
83
73
  /** String to replace redacted content with. */
84
- replace: z2.string().nullish(),
74
+ replace: import_v42.z.string().nullish(),
85
75
  /** Term or phrase to search for in the transcript. */
86
- search: z2.string().nullish(),
76
+ search: import_v42.z.string().nullish(),
87
77
  /** Key term to identify in the transcript. */
88
- keyterm: z2.string().nullish(),
78
+ keyterm: import_v42.z.string().nullish(),
89
79
  /** Whether to identify different speakers in the audio. */
90
- diarize: z2.boolean().nullish(),
80
+ diarize: import_v42.z.boolean().nullish(),
91
81
  /** Whether to segment the transcript into utterances. */
92
- utterances: z2.boolean().nullish(),
82
+ utterances: import_v42.z.boolean().nullish(),
93
83
  /** Minimum duration of silence (in seconds) to trigger a new utterance. */
94
- uttSplit: z2.number().nullish(),
84
+ uttSplit: import_v42.z.number().nullish(),
95
85
  /** Whether to include filler words (um, uh, etc.) in the transcript. */
96
- fillerWords: z2.boolean().nullish()
86
+ fillerWords: import_v42.z.boolean().nullish()
97
87
  });
98
88
  var DeepgramTranscriptionModel = class {
99
89
  constructor(modelId, config) {
@@ -192,21 +182,21 @@ var DeepgramTranscriptionModel = class {
192
182
  };
193
183
  }
194
184
  };
195
- var deepgramTranscriptionResponseSchema = z2.object({
196
- metadata: z2.object({
197
- duration: z2.number()
185
+ var deepgramTranscriptionResponseSchema = import_v42.z.object({
186
+ metadata: import_v42.z.object({
187
+ duration: import_v42.z.number()
198
188
  }).nullish(),
199
- results: z2.object({
200
- channels: z2.array(
201
- z2.object({
202
- alternatives: z2.array(
203
- z2.object({
204
- transcript: z2.string(),
205
- words: z2.array(
206
- z2.object({
207
- word: z2.string(),
208
- start: z2.number(),
209
- end: z2.number()
189
+ results: import_v42.z.object({
190
+ channels: import_v42.z.array(
191
+ import_v42.z.object({
192
+ alternatives: import_v42.z.array(
193
+ import_v42.z.object({
194
+ transcript: import_v42.z.string(),
195
+ words: import_v42.z.array(
196
+ import_v42.z.object({
197
+ word: import_v42.z.string(),
198
+ start: import_v42.z.number(),
199
+ end: import_v42.z.number()
210
200
  })
211
201
  )
212
202
  })
@@ -217,7 +207,7 @@ var deepgramTranscriptionResponseSchema = z2.object({
217
207
  });
218
208
 
219
209
  // src/version.ts
220
- var VERSION = true ? "1.0.12" : "0.0.0-test";
210
+ var VERSION = true ? "1.0.13" : "0.0.0-test";
221
211
 
222
212
  // src/deepgram-provider.ts
223
213
  function createDeepgram(options = {}) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/deepgram-provider.ts","../src/deepgram-transcription-model.ts","../src/deepgram-error.ts","../src/version.ts"],"sourcesContent":["export { createDeepgram, deepgram } from './deepgram-provider';\nexport type {\n DeepgramProvider,\n DeepgramProviderSettings,\n} from './deepgram-provider';\nexport { VERSION } from './version';\n","import {\n TranscriptionModelV2,\n ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { DeepgramTranscriptionModel } from './deepgram-transcription-model';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { VERSION } from './version';\n\nexport interface DeepgramProvider extends ProviderV2 {\n (\n modelId: 'nova-3',\n settings?: {},\n ): {\n transcription: DeepgramTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: DeepgramTranscriptionModelId): TranscriptionModelV2;\n}\n\nexport interface DeepgramProviderSettings {\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 an Deepgram provider instance.\n */\nexport function createDeepgram(\n options: DeepgramProviderSettings = {},\n): DeepgramProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: `Token ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPGRAM_API_KEY',\n description: 'Deepgram',\n })}`,\n ...options.headers,\n },\n `ai-sdk/deepgram/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: DeepgramTranscriptionModelId) =>\n new DeepgramTranscriptionModel(modelId, {\n provider: `deepgram.transcription`,\n url: ({ path }) => `https://api.deepgram.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: DeepgramTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n // Required ProviderV2 methods that are not supported\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Deepgram does not provide language models',\n });\n };\n\n provider.textEmbeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'textEmbeddingModel',\n message: 'Deepgram does not provide text embedding models',\n });\n };\n\n provider.imageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'imageModel',\n message: 'Deepgram does not provide image models',\n });\n };\n\n return provider as DeepgramProvider;\n}\n\n/**\nDefault Deepgram provider instance.\n */\nexport const deepgram = createDeepgram();\n","import {\n TranscriptionModelV2,\n TranscriptionModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n parseProviderOptions,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { DeepgramConfig } from './deepgram-config';\nimport { deepgramFailedResponseHandler } from './deepgram-error';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { DeepgramTranscriptionAPITypes } from './deepgram-api-types';\n\n// https://developers.deepgram.com/docs/pre-recorded-audio#results\nconst deepgramProviderOptionsSchema = z.object({\n /** Language to use for transcription. If not specified, Deepgram will auto-detect the language. */\n language: z.string().nullish(),\n /** Whether to use smart formatting, which formats written-out numbers, dates, times, etc. */\n smartFormat: z.boolean().nullish(),\n /** Whether to add punctuation to the transcript. */\n punctuate: z.boolean().nullish(),\n /** Whether to format the transcript into paragraphs. */\n paragraphs: z.boolean().nullish(),\n /** Whether to generate a summary of the transcript. Use 'v2' for the latest version or false to disable. */\n summarize: z.union([z.literal('v2'), z.literal(false)]).nullish(),\n /** Whether to identify topics in the transcript. */\n topics: z.boolean().nullish(),\n /** Whether to identify intents in the transcript. */\n intents: z.boolean().nullish(),\n /** Whether to analyze sentiment in the transcript. */\n sentiment: z.boolean().nullish(),\n /** Whether to detect and tag named entities in the transcript. */\n detectEntities: z.boolean().nullish(),\n /** Specify terms or patterns to redact from the transcript. Can be a string or array of strings. */\n redact: z.union([z.string(), z.array(z.string())]).nullish(),\n /** String to replace redacted content with. */\n replace: z.string().nullish(),\n /** Term or phrase to search for in the transcript. */\n search: z.string().nullish(),\n /** Key term to identify in the transcript. */\n keyterm: z.string().nullish(),\n /** Whether to identify different speakers in the audio. */\n diarize: z.boolean().nullish(),\n /** Whether to segment the transcript into utterances. */\n utterances: z.boolean().nullish(),\n /** Minimum duration of silence (in seconds) to trigger a new utterance. */\n uttSplit: z.number().nullish(),\n /** Whether to include filler words (um, uh, etc.) in the transcript. */\n fillerWords: z.boolean().nullish(),\n});\n\nexport type DeepgramTranscriptionCallOptions = z.infer<\n typeof deepgramProviderOptionsSchema\n>;\n\ninterface DeepgramTranscriptionModelConfig extends DeepgramConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class DeepgramTranscriptionModel implements TranscriptionModelV2 {\n readonly specificationVersion = 'v2';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: DeepgramTranscriptionModelId,\n private readonly config: DeepgramTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV2['doGenerate']>[0]) {\n const warnings: TranscriptionModelV2CallWarning[] = [];\n\n // Parse provider options\n const deepgramOptions = await parseProviderOptions({\n provider: 'deepgram',\n providerOptions,\n schema: deepgramProviderOptionsSchema,\n });\n\n const body: DeepgramTranscriptionAPITypes = {\n model: this.modelId,\n diarize: true,\n };\n\n // Add provider-specific options\n if (deepgramOptions) {\n body.detect_entities = deepgramOptions.detectEntities ?? undefined;\n body.filler_words = deepgramOptions.fillerWords ?? undefined;\n body.language = deepgramOptions.language ?? undefined;\n body.punctuate = deepgramOptions.punctuate ?? undefined;\n body.redact = deepgramOptions.redact ?? undefined;\n body.search = deepgramOptions.search ?? undefined;\n body.smart_format = deepgramOptions.smartFormat ?? undefined;\n body.summarize = deepgramOptions.summarize ?? undefined;\n body.topics = deepgramOptions.topics ?? undefined;\n body.utterances = deepgramOptions.utterances ?? undefined;\n body.utt_split = deepgramOptions.uttSplit ?? undefined;\n\n if (typeof deepgramOptions.diarize === 'boolean') {\n body.diarize = deepgramOptions.diarize;\n }\n }\n\n // Convert body to URL query parameters\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined) {\n queryParams.append(key, String(value));\n }\n }\n\n return {\n queryParams,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { queryParams, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postToApi({\n url:\n this.config.url({\n path: '/v1/listen',\n modelId: this.modelId,\n }) +\n '?' +\n queryParams.toString(),\n headers: {\n ...combineHeaders(this.config.headers(), options.headers),\n 'Content-Type': options.mediaType,\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: deepgramFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n deepgramTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text:\n response.results?.channels.at(0)?.alternatives.at(0)?.transcript ?? '',\n segments:\n response.results?.channels[0].alternatives[0].words?.map(word => ({\n text: word.word,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: undefined,\n durationInSeconds: response.metadata?.duration ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst deepgramTranscriptionResponseSchema = z.object({\n metadata: z\n .object({\n duration: z.number(),\n })\n .nullish(),\n results: z\n .object({\n channels: z.array(\n z.object({\n alternatives: z.array(\n z.object({\n transcript: z.string(),\n words: z.array(\n z.object({\n word: z.string(),\n start: z.number(),\n end: z.number(),\n }),\n ),\n }),\n ),\n }),\n ),\n })\n .nullish(),\n});\n","import * as z from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const deepgramErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type DeepgramErrorData = z.infer<typeof deepgramErrorDataSchema>;\n\nexport const deepgramFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: deepgramErrorDataSchema,\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_utils","import_provider_utils","z"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/deepgram-provider.ts","../src/deepgram-transcription-model.ts","../src/deepgram-error.ts","../src/version.ts"],"sourcesContent":["export { createDeepgram, deepgram } from './deepgram-provider';\nexport type {\n DeepgramProvider,\n DeepgramProviderSettings,\n} from './deepgram-provider';\nexport { VERSION } from './version';\n","import {\n TranscriptionModelV2,\n ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { DeepgramTranscriptionModel } from './deepgram-transcription-model';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { VERSION } from './version';\n\nexport interface DeepgramProvider extends ProviderV2 {\n (\n modelId: 'nova-3',\n settings?: {},\n ): {\n transcription: DeepgramTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: DeepgramTranscriptionModelId): TranscriptionModelV2;\n}\n\nexport interface DeepgramProviderSettings {\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 an Deepgram provider instance.\n */\nexport function createDeepgram(\n options: DeepgramProviderSettings = {},\n): DeepgramProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: `Token ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPGRAM_API_KEY',\n description: 'Deepgram',\n })}`,\n ...options.headers,\n },\n `ai-sdk/deepgram/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: DeepgramTranscriptionModelId) =>\n new DeepgramTranscriptionModel(modelId, {\n provider: `deepgram.transcription`,\n url: ({ path }) => `https://api.deepgram.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: DeepgramTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n // Required ProviderV2 methods that are not supported\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Deepgram does not provide language models',\n });\n };\n\n provider.textEmbeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'textEmbeddingModel',\n message: 'Deepgram does not provide text embedding models',\n });\n };\n\n provider.imageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'imageModel',\n message: 'Deepgram does not provide image models',\n });\n };\n\n return provider as DeepgramProvider;\n}\n\n/**\nDefault Deepgram provider instance.\n */\nexport const deepgram = createDeepgram();\n","import {\n TranscriptionModelV2,\n TranscriptionModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n parseProviderOptions,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { DeepgramConfig } from './deepgram-config';\nimport { deepgramFailedResponseHandler } from './deepgram-error';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { DeepgramTranscriptionAPITypes } from './deepgram-api-types';\n\n// https://developers.deepgram.com/docs/pre-recorded-audio#results\nconst deepgramProviderOptionsSchema = z.object({\n /** Language to use for transcription. If not specified, Deepgram will auto-detect the language. */\n language: z.string().nullish(),\n /** Whether to use smart formatting, which formats written-out numbers, dates, times, etc. */\n smartFormat: z.boolean().nullish(),\n /** Whether to add punctuation to the transcript. */\n punctuate: z.boolean().nullish(),\n /** Whether to format the transcript into paragraphs. */\n paragraphs: z.boolean().nullish(),\n /** Whether to generate a summary of the transcript. Use 'v2' for the latest version or false to disable. */\n summarize: z.union([z.literal('v2'), z.literal(false)]).nullish(),\n /** Whether to identify topics in the transcript. */\n topics: z.boolean().nullish(),\n /** Whether to identify intents in the transcript. */\n intents: z.boolean().nullish(),\n /** Whether to analyze sentiment in the transcript. */\n sentiment: z.boolean().nullish(),\n /** Whether to detect and tag named entities in the transcript. */\n detectEntities: z.boolean().nullish(),\n /** Specify terms or patterns to redact from the transcript. Can be a string or array of strings. */\n redact: z.union([z.string(), z.array(z.string())]).nullish(),\n /** String to replace redacted content with. */\n replace: z.string().nullish(),\n /** Term or phrase to search for in the transcript. */\n search: z.string().nullish(),\n /** Key term to identify in the transcript. */\n keyterm: z.string().nullish(),\n /** Whether to identify different speakers in the audio. */\n diarize: z.boolean().nullish(),\n /** Whether to segment the transcript into utterances. */\n utterances: z.boolean().nullish(),\n /** Minimum duration of silence (in seconds) to trigger a new utterance. */\n uttSplit: z.number().nullish(),\n /** Whether to include filler words (um, uh, etc.) in the transcript. */\n fillerWords: z.boolean().nullish(),\n});\n\nexport type DeepgramTranscriptionCallOptions = z.infer<\n typeof deepgramProviderOptionsSchema\n>;\n\ninterface DeepgramTranscriptionModelConfig extends DeepgramConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class DeepgramTranscriptionModel implements TranscriptionModelV2 {\n readonly specificationVersion = 'v2';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: DeepgramTranscriptionModelId,\n private readonly config: DeepgramTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV2['doGenerate']>[0]) {\n const warnings: TranscriptionModelV2CallWarning[] = [];\n\n // Parse provider options\n const deepgramOptions = await parseProviderOptions({\n provider: 'deepgram',\n providerOptions,\n schema: deepgramProviderOptionsSchema,\n });\n\n const body: DeepgramTranscriptionAPITypes = {\n model: this.modelId,\n diarize: true,\n };\n\n // Add provider-specific options\n if (deepgramOptions) {\n body.detect_entities = deepgramOptions.detectEntities ?? undefined;\n body.filler_words = deepgramOptions.fillerWords ?? undefined;\n body.language = deepgramOptions.language ?? undefined;\n body.punctuate = deepgramOptions.punctuate ?? undefined;\n body.redact = deepgramOptions.redact ?? undefined;\n body.search = deepgramOptions.search ?? undefined;\n body.smart_format = deepgramOptions.smartFormat ?? undefined;\n body.summarize = deepgramOptions.summarize ?? undefined;\n body.topics = deepgramOptions.topics ?? undefined;\n body.utterances = deepgramOptions.utterances ?? undefined;\n body.utt_split = deepgramOptions.uttSplit ?? undefined;\n\n if (typeof deepgramOptions.diarize === 'boolean') {\n body.diarize = deepgramOptions.diarize;\n }\n }\n\n // Convert body to URL query parameters\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined) {\n queryParams.append(key, String(value));\n }\n }\n\n return {\n queryParams,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { queryParams, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postToApi({\n url:\n this.config.url({\n path: '/v1/listen',\n modelId: this.modelId,\n }) +\n '?' +\n queryParams.toString(),\n headers: {\n ...combineHeaders(this.config.headers(), options.headers),\n 'Content-Type': options.mediaType,\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: deepgramFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n deepgramTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text:\n response.results?.channels.at(0)?.alternatives.at(0)?.transcript ?? '',\n segments:\n response.results?.channels[0].alternatives[0].words?.map(word => ({\n text: word.word,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: undefined,\n durationInSeconds: response.metadata?.duration ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst deepgramTranscriptionResponseSchema = z.object({\n metadata: z\n .object({\n duration: z.number(),\n })\n .nullish(),\n results: z\n .object({\n channels: z.array(\n z.object({\n alternatives: z.array(\n z.object({\n transcript: z.string(),\n words: z.array(\n z.object({\n word: z.string(),\n start: z.number(),\n end: z.number(),\n }),\n ),\n }),\n ),\n }),\n ),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const deepgramErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type DeepgramErrorData = z.infer<typeof deepgramErrorDataSchema>;\n\nexport const deepgramFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: deepgramErrorDataSchema,\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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,sBAIO;AACP,IAAAA,yBAIO;;;ACLP,IAAAC,yBAMO;AACP,IAAAC,aAAkB;;;ACXlB,gBAAkB;AAClB,4BAA+C;AAExC,IAAM,0BAA0B,YAAE,OAAO;AAAA,EAC9C,OAAO,YAAE,OAAO;AAAA,IACd,SAAS,YAAE,OAAO;AAAA,IAClB,MAAM,YAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAIM,IAAM,oCAAgC,sDAA+B;AAAA,EAC1E,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK,MAAM;AACrC,CAAC;;;ADGD,IAAM,gCAAgC,aAAE,OAAO;AAAA;AAAA,EAE7C,UAAU,aAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,EAE7B,aAAa,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAEjC,WAAW,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAE/B,YAAY,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAEhC,WAAW,aAAE,MAAM,CAAC,aAAE,QAAQ,IAAI,GAAG,aAAE,QAAQ,KAAK,CAAC,CAAC,EAAE,QAAQ;AAAA;AAAA,EAEhE,QAAQ,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAE5B,SAAS,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAE7B,WAAW,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAE/B,gBAAgB,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAEpC,QAAQ,aAAE,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,MAAM,aAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ;AAAA;AAAA,EAE3D,SAAS,aAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,EAE5B,QAAQ,aAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,EAE3B,SAAS,aAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,EAE5B,SAAS,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAE7B,YAAY,aAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAEhC,UAAU,aAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,EAE7B,aAAa,aAAE,QAAQ,EAAE,QAAQ;AACnC,CAAC;AAYM,IAAM,6BAAN,MAAiE;AAAA,EAOtE,YACW,SACQ,QACjB;AAFS;AACQ;AARnB,SAAS,uBAAuB;AAAA,EAS7B;AAAA,EAPH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAc,QAAQ;AAAA,IACpB;AAAA,EACF,GAAsD;AA/ExD;AAgFI,UAAM,WAA8C,CAAC;AAGrD,UAAM,kBAAkB,UAAM,6CAAqB;AAAA,MACjD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAsC;AAAA,MAC1C,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IACX;AAGA,QAAI,iBAAiB;AACnB,WAAK,mBAAkB,qBAAgB,mBAAhB,YAAkC;AACzD,WAAK,gBAAe,qBAAgB,gBAAhB,YAA+B;AACnD,WAAK,YAAW,qBAAgB,aAAhB,YAA4B;AAC5C,WAAK,aAAY,qBAAgB,cAAhB,YAA6B;AAC9C,WAAK,UAAS,qBAAgB,WAAhB,YAA0B;AACxC,WAAK,UAAS,qBAAgB,WAAhB,YAA0B;AACxC,WAAK,gBAAe,qBAAgB,gBAAhB,YAA+B;AACnD,WAAK,aAAY,qBAAgB,cAAhB,YAA6B;AAC9C,WAAK,UAAS,qBAAgB,WAAhB,YAA0B;AACxC,WAAK,cAAa,qBAAgB,eAAhB,YAA8B;AAChD,WAAK,aAAY,qBAAgB,aAAhB,YAA4B;AAE7C,UAAI,OAAO,gBAAgB,YAAY,WAAW;AAChD,aAAK,UAAU,gBAAgB;AAAA,MACjC;AAAA,IACF;AAGA,UAAM,cAAc,IAAI,gBAAgB;AACxC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,UAAI,UAAU,QAAW;AACvB,oBAAY,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MACvC;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACkE;AAjItE;AAkII,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,aAAa,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAE5D,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,UAAM,kCAAU;AAAA,MAClB,KACE,KAAK,OAAO,IAAI;AAAA,QACd,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC,IACD,MACA,YAAY,SAAS;AAAA,MACvB,SAAS;AAAA,QACP,OAAG,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,QACxD,gBAAgB,QAAQ;AAAA,MAC1B;AAAA,MACA,MAAM;AAAA,QACJ,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,OACE,gCAAS,YAAT,mBAAkB,SAAS,GAAG,OAA9B,mBAAkC,aAAa,GAAG,OAAlD,mBAAsD,eAAtD,YAAoE;AAAA,MACtE,WACE,0BAAS,YAAT,mBAAkB,SAAS,GAAG,aAAa,GAAG,UAA9C,mBAAqD,IAAI,WAAS;AAAA,QAChE,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,WAAW,KAAK;AAAA,MAClB,QAJA,YAIO,CAAC;AAAA,MACV,UAAU;AAAA,MACV,oBAAmB,oBAAS,aAAT,mBAAmB,aAAnB,YAA+B;AAAA,MAClD;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,sCAAsC,aAAE,OAAO;AAAA,EACnD,UAAU,aACP,OAAO;AAAA,IACN,UAAU,aAAE,OAAO;AAAA,EACrB,CAAC,EACA,QAAQ;AAAA,EACX,SAAS,aACN,OAAO;AAAA,IACN,UAAU,aAAE;AAAA,MACV,aAAE,OAAO;AAAA,QACP,cAAc,aAAE;AAAA,UACd,aAAE,OAAO;AAAA,YACP,YAAY,aAAE,OAAO;AAAA,YACrB,OAAO,aAAE;AAAA,cACP,aAAE,OAAO;AAAA,gBACP,MAAM,aAAE,OAAO;AAAA,gBACf,OAAO,aAAE,OAAO;AAAA,gBAChB,KAAK,aAAE,OAAO;AAAA,cAChB,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC,EACA,QAAQ;AACb,CAAC;;;AE/MM,IAAM,UACX,OACI,WACA;;;AH4CC,SAAS,eACd,UAAoC,CAAC,GACnB;AAClB,QAAM,aAAa,UACjB;AAAA,IACE;AAAA,MACE,eAAe,aAAS,mCAAW;AAAA,QACjC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,mBAAmB,OAAO;AAAA,EAC5B;AAEF,QAAM,2BAA2B,CAAC,YAChC,IAAI,2BAA2B,SAAS;AAAA,IACtC,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,2BAA2B,IAAI;AAAA,IAClD,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,SAAU,SAAuC;AAChE,WAAO;AAAA,MACL,eAAe,yBAAyB,OAAO;AAAA,IACjD;AAAA,EACF;AAEA,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAG9B,WAAS,gBAAgB,MAAM;AAC7B,UAAM,IAAI,iCAAiB;AAAA,MACzB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,WAAS,qBAAqB,MAAM;AAClC,UAAM,IAAI,iCAAiB;AAAA,MACzB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,WAAS,aAAa,MAAM;AAC1B,UAAM,IAAI,iCAAiB;AAAA,MACzB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAKO,IAAM,WAAW,eAAe;","names":["import_provider_utils","import_provider_utils","import_v4"]}
package/dist/index.mjs CHANGED
@@ -14,10 +14,10 @@ import {
14
14
  parseProviderOptions,
15
15
  postToApi
16
16
  } from "@ai-sdk/provider-utils";
17
- import * as z2 from "zod/v4";
17
+ import { z as z2 } from "zod/v4";
18
18
 
19
19
  // src/deepgram-error.ts
20
- import * as z from "zod/v4";
20
+ import { z } from "zod/v4";
21
21
  import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
22
22
  var deepgramErrorDataSchema = z.object({
23
23
  error: z.object({
@@ -189,7 +189,7 @@ var deepgramTranscriptionResponseSchema = z2.object({
189
189
  });
190
190
 
191
191
  // src/version.ts
192
- var VERSION = true ? "1.0.12" : "0.0.0-test";
192
+ var VERSION = true ? "1.0.13" : "0.0.0-test";
193
193
 
194
194
  // src/deepgram-provider.ts
195
195
  function createDeepgram(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/deepgram-provider.ts","../src/deepgram-transcription-model.ts","../src/deepgram-error.ts","../src/version.ts"],"sourcesContent":["import {\n TranscriptionModelV2,\n ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { DeepgramTranscriptionModel } from './deepgram-transcription-model';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { VERSION } from './version';\n\nexport interface DeepgramProvider extends ProviderV2 {\n (\n modelId: 'nova-3',\n settings?: {},\n ): {\n transcription: DeepgramTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: DeepgramTranscriptionModelId): TranscriptionModelV2;\n}\n\nexport interface DeepgramProviderSettings {\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 an Deepgram provider instance.\n */\nexport function createDeepgram(\n options: DeepgramProviderSettings = {},\n): DeepgramProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: `Token ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPGRAM_API_KEY',\n description: 'Deepgram',\n })}`,\n ...options.headers,\n },\n `ai-sdk/deepgram/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: DeepgramTranscriptionModelId) =>\n new DeepgramTranscriptionModel(modelId, {\n provider: `deepgram.transcription`,\n url: ({ path }) => `https://api.deepgram.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: DeepgramTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n // Required ProviderV2 methods that are not supported\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Deepgram does not provide language models',\n });\n };\n\n provider.textEmbeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'textEmbeddingModel',\n message: 'Deepgram does not provide text embedding models',\n });\n };\n\n provider.imageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'imageModel',\n message: 'Deepgram does not provide image models',\n });\n };\n\n return provider as DeepgramProvider;\n}\n\n/**\nDefault Deepgram provider instance.\n */\nexport const deepgram = createDeepgram();\n","import {\n TranscriptionModelV2,\n TranscriptionModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n parseProviderOptions,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { DeepgramConfig } from './deepgram-config';\nimport { deepgramFailedResponseHandler } from './deepgram-error';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { DeepgramTranscriptionAPITypes } from './deepgram-api-types';\n\n// https://developers.deepgram.com/docs/pre-recorded-audio#results\nconst deepgramProviderOptionsSchema = z.object({\n /** Language to use for transcription. If not specified, Deepgram will auto-detect the language. */\n language: z.string().nullish(),\n /** Whether to use smart formatting, which formats written-out numbers, dates, times, etc. */\n smartFormat: z.boolean().nullish(),\n /** Whether to add punctuation to the transcript. */\n punctuate: z.boolean().nullish(),\n /** Whether to format the transcript into paragraphs. */\n paragraphs: z.boolean().nullish(),\n /** Whether to generate a summary of the transcript. Use 'v2' for the latest version or false to disable. */\n summarize: z.union([z.literal('v2'), z.literal(false)]).nullish(),\n /** Whether to identify topics in the transcript. */\n topics: z.boolean().nullish(),\n /** Whether to identify intents in the transcript. */\n intents: z.boolean().nullish(),\n /** Whether to analyze sentiment in the transcript. */\n sentiment: z.boolean().nullish(),\n /** Whether to detect and tag named entities in the transcript. */\n detectEntities: z.boolean().nullish(),\n /** Specify terms or patterns to redact from the transcript. Can be a string or array of strings. */\n redact: z.union([z.string(), z.array(z.string())]).nullish(),\n /** String to replace redacted content with. */\n replace: z.string().nullish(),\n /** Term or phrase to search for in the transcript. */\n search: z.string().nullish(),\n /** Key term to identify in the transcript. */\n keyterm: z.string().nullish(),\n /** Whether to identify different speakers in the audio. */\n diarize: z.boolean().nullish(),\n /** Whether to segment the transcript into utterances. */\n utterances: z.boolean().nullish(),\n /** Minimum duration of silence (in seconds) to trigger a new utterance. */\n uttSplit: z.number().nullish(),\n /** Whether to include filler words (um, uh, etc.) in the transcript. */\n fillerWords: z.boolean().nullish(),\n});\n\nexport type DeepgramTranscriptionCallOptions = z.infer<\n typeof deepgramProviderOptionsSchema\n>;\n\ninterface DeepgramTranscriptionModelConfig extends DeepgramConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class DeepgramTranscriptionModel implements TranscriptionModelV2 {\n readonly specificationVersion = 'v2';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: DeepgramTranscriptionModelId,\n private readonly config: DeepgramTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV2['doGenerate']>[0]) {\n const warnings: TranscriptionModelV2CallWarning[] = [];\n\n // Parse provider options\n const deepgramOptions = await parseProviderOptions({\n provider: 'deepgram',\n providerOptions,\n schema: deepgramProviderOptionsSchema,\n });\n\n const body: DeepgramTranscriptionAPITypes = {\n model: this.modelId,\n diarize: true,\n };\n\n // Add provider-specific options\n if (deepgramOptions) {\n body.detect_entities = deepgramOptions.detectEntities ?? undefined;\n body.filler_words = deepgramOptions.fillerWords ?? undefined;\n body.language = deepgramOptions.language ?? undefined;\n body.punctuate = deepgramOptions.punctuate ?? undefined;\n body.redact = deepgramOptions.redact ?? undefined;\n body.search = deepgramOptions.search ?? undefined;\n body.smart_format = deepgramOptions.smartFormat ?? undefined;\n body.summarize = deepgramOptions.summarize ?? undefined;\n body.topics = deepgramOptions.topics ?? undefined;\n body.utterances = deepgramOptions.utterances ?? undefined;\n body.utt_split = deepgramOptions.uttSplit ?? undefined;\n\n if (typeof deepgramOptions.diarize === 'boolean') {\n body.diarize = deepgramOptions.diarize;\n }\n }\n\n // Convert body to URL query parameters\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined) {\n queryParams.append(key, String(value));\n }\n }\n\n return {\n queryParams,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { queryParams, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postToApi({\n url:\n this.config.url({\n path: '/v1/listen',\n modelId: this.modelId,\n }) +\n '?' +\n queryParams.toString(),\n headers: {\n ...combineHeaders(this.config.headers(), options.headers),\n 'Content-Type': options.mediaType,\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: deepgramFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n deepgramTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text:\n response.results?.channels.at(0)?.alternatives.at(0)?.transcript ?? '',\n segments:\n response.results?.channels[0].alternatives[0].words?.map(word => ({\n text: word.word,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: undefined,\n durationInSeconds: response.metadata?.duration ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst deepgramTranscriptionResponseSchema = z.object({\n metadata: z\n .object({\n duration: z.number(),\n })\n .nullish(),\n results: z\n .object({\n channels: z.array(\n z.object({\n alternatives: z.array(\n z.object({\n transcript: z.string(),\n words: z.array(\n z.object({\n word: z.string(),\n start: z.number(),\n end: z.number(),\n }),\n ),\n }),\n ),\n }),\n ),\n })\n .nullish(),\n});\n","import * as z from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const deepgramErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type DeepgramErrorData = z.infer<typeof deepgramErrorDataSchema>;\n\nexport const deepgramFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: deepgramErrorDataSchema,\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"]}
1
+ {"version":3,"sources":["../src/deepgram-provider.ts","../src/deepgram-transcription-model.ts","../src/deepgram-error.ts","../src/version.ts"],"sourcesContent":["import {\n TranscriptionModelV2,\n ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { DeepgramTranscriptionModel } from './deepgram-transcription-model';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { VERSION } from './version';\n\nexport interface DeepgramProvider extends ProviderV2 {\n (\n modelId: 'nova-3',\n settings?: {},\n ): {\n transcription: DeepgramTranscriptionModel;\n };\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: DeepgramTranscriptionModelId): TranscriptionModelV2;\n}\n\nexport interface DeepgramProviderSettings {\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 an Deepgram provider instance.\n */\nexport function createDeepgram(\n options: DeepgramProviderSettings = {},\n): DeepgramProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n authorization: `Token ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPGRAM_API_KEY',\n description: 'Deepgram',\n })}`,\n ...options.headers,\n },\n `ai-sdk/deepgram/${VERSION}`,\n );\n\n const createTranscriptionModel = (modelId: DeepgramTranscriptionModelId) =>\n new DeepgramTranscriptionModel(modelId, {\n provider: `deepgram.transcription`,\n url: ({ path }) => `https://api.deepgram.com${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: DeepgramTranscriptionModelId) {\n return {\n transcription: createTranscriptionModel(modelId),\n };\n };\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n // Required ProviderV2 methods that are not supported\n provider.languageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'languageModel',\n message: 'Deepgram does not provide language models',\n });\n };\n\n provider.textEmbeddingModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'textEmbeddingModel',\n message: 'Deepgram does not provide text embedding models',\n });\n };\n\n provider.imageModel = () => {\n throw new NoSuchModelError({\n modelId: 'unknown',\n modelType: 'imageModel',\n message: 'Deepgram does not provide image models',\n });\n };\n\n return provider as DeepgramProvider;\n}\n\n/**\nDefault Deepgram provider instance.\n */\nexport const deepgram = createDeepgram();\n","import {\n TranscriptionModelV2,\n TranscriptionModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n parseProviderOptions,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { DeepgramConfig } from './deepgram-config';\nimport { deepgramFailedResponseHandler } from './deepgram-error';\nimport { DeepgramTranscriptionModelId } from './deepgram-transcription-options';\nimport { DeepgramTranscriptionAPITypes } from './deepgram-api-types';\n\n// https://developers.deepgram.com/docs/pre-recorded-audio#results\nconst deepgramProviderOptionsSchema = z.object({\n /** Language to use for transcription. If not specified, Deepgram will auto-detect the language. */\n language: z.string().nullish(),\n /** Whether to use smart formatting, which formats written-out numbers, dates, times, etc. */\n smartFormat: z.boolean().nullish(),\n /** Whether to add punctuation to the transcript. */\n punctuate: z.boolean().nullish(),\n /** Whether to format the transcript into paragraphs. */\n paragraphs: z.boolean().nullish(),\n /** Whether to generate a summary of the transcript. Use 'v2' for the latest version or false to disable. */\n summarize: z.union([z.literal('v2'), z.literal(false)]).nullish(),\n /** Whether to identify topics in the transcript. */\n topics: z.boolean().nullish(),\n /** Whether to identify intents in the transcript. */\n intents: z.boolean().nullish(),\n /** Whether to analyze sentiment in the transcript. */\n sentiment: z.boolean().nullish(),\n /** Whether to detect and tag named entities in the transcript. */\n detectEntities: z.boolean().nullish(),\n /** Specify terms or patterns to redact from the transcript. Can be a string or array of strings. */\n redact: z.union([z.string(), z.array(z.string())]).nullish(),\n /** String to replace redacted content with. */\n replace: z.string().nullish(),\n /** Term or phrase to search for in the transcript. */\n search: z.string().nullish(),\n /** Key term to identify in the transcript. */\n keyterm: z.string().nullish(),\n /** Whether to identify different speakers in the audio. */\n diarize: z.boolean().nullish(),\n /** Whether to segment the transcript into utterances. */\n utterances: z.boolean().nullish(),\n /** Minimum duration of silence (in seconds) to trigger a new utterance. */\n uttSplit: z.number().nullish(),\n /** Whether to include filler words (um, uh, etc.) in the transcript. */\n fillerWords: z.boolean().nullish(),\n});\n\nexport type DeepgramTranscriptionCallOptions = z.infer<\n typeof deepgramProviderOptionsSchema\n>;\n\ninterface DeepgramTranscriptionModelConfig extends DeepgramConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class DeepgramTranscriptionModel implements TranscriptionModelV2 {\n readonly specificationVersion = 'v2';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: DeepgramTranscriptionModelId,\n private readonly config: DeepgramTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV2['doGenerate']>[0]) {\n const warnings: TranscriptionModelV2CallWarning[] = [];\n\n // Parse provider options\n const deepgramOptions = await parseProviderOptions({\n provider: 'deepgram',\n providerOptions,\n schema: deepgramProviderOptionsSchema,\n });\n\n const body: DeepgramTranscriptionAPITypes = {\n model: this.modelId,\n diarize: true,\n };\n\n // Add provider-specific options\n if (deepgramOptions) {\n body.detect_entities = deepgramOptions.detectEntities ?? undefined;\n body.filler_words = deepgramOptions.fillerWords ?? undefined;\n body.language = deepgramOptions.language ?? undefined;\n body.punctuate = deepgramOptions.punctuate ?? undefined;\n body.redact = deepgramOptions.redact ?? undefined;\n body.search = deepgramOptions.search ?? undefined;\n body.smart_format = deepgramOptions.smartFormat ?? undefined;\n body.summarize = deepgramOptions.summarize ?? undefined;\n body.topics = deepgramOptions.topics ?? undefined;\n body.utterances = deepgramOptions.utterances ?? undefined;\n body.utt_split = deepgramOptions.uttSplit ?? undefined;\n\n if (typeof deepgramOptions.diarize === 'boolean') {\n body.diarize = deepgramOptions.diarize;\n }\n }\n\n // Convert body to URL query parameters\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined) {\n queryParams.append(key, String(value));\n }\n }\n\n return {\n queryParams,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { queryParams, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postToApi({\n url:\n this.config.url({\n path: '/v1/listen',\n modelId: this.modelId,\n }) +\n '?' +\n queryParams.toString(),\n headers: {\n ...combineHeaders(this.config.headers(), options.headers),\n 'Content-Type': options.mediaType,\n },\n body: {\n content: options.audio,\n values: options.audio,\n },\n failedResponseHandler: deepgramFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n deepgramTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text:\n response.results?.channels.at(0)?.alternatives.at(0)?.transcript ?? '',\n segments:\n response.results?.channels[0].alternatives[0].words?.map(word => ({\n text: word.word,\n startSecond: word.start,\n endSecond: word.end,\n })) ?? [],\n language: undefined,\n durationInSeconds: response.metadata?.duration ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst deepgramTranscriptionResponseSchema = z.object({\n metadata: z\n .object({\n duration: z.number(),\n })\n .nullish(),\n results: z\n .object({\n channels: z.array(\n z.object({\n alternatives: z.array(\n z.object({\n transcript: z.string(),\n words: z.array(\n z.object({\n word: z.string(),\n start: z.number(),\n end: z.number(),\n }),\n ),\n }),\n ),\n }),\n ),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const deepgramErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type DeepgramErrorData = z.infer<typeof deepgramErrorDataSchema>;\n\nexport const deepgramFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: deepgramErrorDataSchema,\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/deepgram",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@ai-sdk/provider": "2.0.0",
23
- "@ai-sdk/provider-utils": "3.0.11"
23
+ "@ai-sdk/provider-utils": "3.0.12"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "20.17.24",