@ai-sdk/hume 3.0.0-beta.2 → 3.0.0-beta.20

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,147 @@
1
1
  # @ai-sdk/hume
2
2
 
3
+ ## 3.0.0-beta.20
4
+
5
+ ### Major Changes
6
+
7
+ - ef992f8: Remove CommonJS exports from all packages. All packages are now ESM-only (`"type": "module"`). Consumers using `require()` must switch to ESM `import` syntax.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [ef992f8]
12
+ - @ai-sdk/provider@4.0.0-beta.11
13
+ - @ai-sdk/provider-utils@5.0.0-beta.19
14
+
15
+ ## 3.0.0-beta.19
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies [90e2d8a]
20
+ - @ai-sdk/provider-utils@5.0.0-beta.18
21
+
22
+ ## 3.0.0-beta.18
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies [3ae1786]
27
+ - @ai-sdk/provider-utils@5.0.0-beta.17
28
+
29
+ ## 3.0.0-beta.17
30
+
31
+ ### Patch Changes
32
+
33
+ - Updated dependencies [176466a]
34
+ - @ai-sdk/provider@4.0.0-beta.10
35
+ - @ai-sdk/provider-utils@5.0.0-beta.16
36
+
37
+ ## 3.0.0-beta.16
38
+
39
+ ### Patch Changes
40
+
41
+ - Updated dependencies [e311194]
42
+ - @ai-sdk/provider@4.0.0-beta.9
43
+ - @ai-sdk/provider-utils@5.0.0-beta.15
44
+
45
+ ## 3.0.0-beta.15
46
+
47
+ ### Patch Changes
48
+
49
+ - Updated dependencies [34bd95d]
50
+ - Updated dependencies [008271d]
51
+ - @ai-sdk/provider@4.0.0-beta.8
52
+ - @ai-sdk/provider-utils@5.0.0-beta.14
53
+
54
+ ## 3.0.0-beta.14
55
+
56
+ ### Patch Changes
57
+
58
+ - Updated dependencies [b0c2869]
59
+ - Updated dependencies [7e26e81]
60
+ - @ai-sdk/provider-utils@5.0.0-beta.13
61
+
62
+ ## 3.0.0-beta.13
63
+
64
+ ### Patch Changes
65
+
66
+ - Updated dependencies [46d1149]
67
+ - @ai-sdk/provider-utils@5.0.0-beta.12
68
+
69
+ ## 3.0.0-beta.12
70
+
71
+ ### Patch Changes
72
+
73
+ - Updated dependencies [6fd51c0]
74
+ - @ai-sdk/provider-utils@5.0.0-beta.11
75
+ - @ai-sdk/provider@4.0.0-beta.7
76
+
77
+ ## 3.0.0-beta.11
78
+
79
+ ### Patch Changes
80
+
81
+ - Updated dependencies [c29a26f]
82
+ - @ai-sdk/provider-utils@5.0.0-beta.10
83
+ - @ai-sdk/provider@4.0.0-beta.6
84
+
85
+ ## 3.0.0-beta.10
86
+
87
+ ### Patch Changes
88
+
89
+ - 38fc777: Add AI Gateway hint to provider READMEs
90
+
91
+ ## 3.0.0-beta.9
92
+
93
+ ### Patch Changes
94
+
95
+ - Updated dependencies [2e17091]
96
+ - @ai-sdk/provider-utils@5.0.0-beta.9
97
+
98
+ ## 3.0.0-beta.8
99
+
100
+ ### Patch Changes
101
+
102
+ - Updated dependencies [986c6fd]
103
+ - Updated dependencies [493295c]
104
+ - @ai-sdk/provider-utils@5.0.0-beta.8
105
+
106
+ ## 3.0.0-beta.7
107
+
108
+ ### Patch Changes
109
+
110
+ - Updated dependencies [1f509d4]
111
+ - @ai-sdk/provider-utils@5.0.0-beta.7
112
+ - @ai-sdk/provider@4.0.0-beta.5
113
+
114
+ ## 3.0.0-beta.6
115
+
116
+ ### Patch Changes
117
+
118
+ - Updated dependencies [3887c70]
119
+ - @ai-sdk/provider-utils@5.0.0-beta.6
120
+ - @ai-sdk/provider@4.0.0-beta.4
121
+
122
+ ## 3.0.0-beta.5
123
+
124
+ ### Patch Changes
125
+
126
+ - Updated dependencies [776b617]
127
+ - @ai-sdk/provider-utils@5.0.0-beta.5
128
+ - @ai-sdk/provider@4.0.0-beta.3
129
+
130
+ ## 3.0.0-beta.4
131
+
132
+ ### Patch Changes
133
+
134
+ - Updated dependencies [61753c3]
135
+ - @ai-sdk/provider-utils@5.0.0-beta.4
136
+
137
+ ## 3.0.0-beta.3
138
+
139
+ ### Patch Changes
140
+
141
+ - Updated dependencies [f7d4f01]
142
+ - @ai-sdk/provider-utils@5.0.0-beta.3
143
+ - @ai-sdk/provider@4.0.0-beta.2
144
+
3
145
  ## 3.0.0-beta.2
4
146
 
5
147
  ### Patch Changes
package/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  The **[Hume provider](https://ai-sdk.dev/providers/ai-sdk-providers/hume)** for the [AI SDK](https://ai-sdk.dev/docs)
4
4
  contains support for the Hume API.
5
5
 
6
+ > **Deploying to Vercel?** With Vercel's AI Gateway you can access Hume (and hundreds of models from other providers) — no additional packages, API keys, or extra cost. [Get started with AI Gateway](https://vercel.com/ai-gateway).
7
+
6
8
  ## Setup
7
9
 
8
10
  The Hume provider is available in the `@ai-sdk/hume` module. You can install it with
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { SpeechModelV3, ProviderV3 } from '@ai-sdk/provider';
1
+ import { SpeechModelV4, ProviderV4 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
  import { z } from 'zod/v4';
4
4
 
@@ -44,24 +44,24 @@ interface HumeSpeechModelConfig extends HumeConfig {
44
44
  currentDate?: () => Date;
45
45
  };
46
46
  }
47
- declare class HumeSpeechModel implements SpeechModelV3 {
47
+ declare class HumeSpeechModel implements SpeechModelV4 {
48
48
  readonly modelId: '';
49
49
  private readonly config;
50
- readonly specificationVersion = "v3";
50
+ readonly specificationVersion = "v4";
51
51
  get provider(): string;
52
52
  constructor(modelId: '', config: HumeSpeechModelConfig);
53
53
  private getArgs;
54
- doGenerate(options: Parameters<SpeechModelV3['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>>;
54
+ doGenerate(options: Parameters<SpeechModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>>;
55
55
  }
56
56
 
57
- interface HumeProvider extends Pick<ProviderV3, 'speechModel'> {
57
+ interface HumeProvider extends Pick<ProviderV4, 'speechModel'> {
58
58
  (settings?: {}): {
59
59
  speech: HumeSpeechModel;
60
60
  };
61
61
  /**
62
62
  * Creates a model for speech synthesis.
63
63
  */
64
- speech(): SpeechModelV3;
64
+ speech(): SpeechModelV4;
65
65
  }
66
66
  interface HumeProviderSettings {
67
67
  /**
package/dist/index.js CHANGED
@@ -1,110 +1,90 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var index_exports = {};
22
- __export(index_exports, {
23
- VERSION: () => VERSION,
24
- createHume: () => createHume,
25
- hume: () => hume
26
- });
27
- module.exports = __toCommonJS(index_exports);
28
-
29
1
  // src/hume-provider.ts
30
- var import_provider_utils3 = require("@ai-sdk/provider-utils");
2
+ import {
3
+ loadApiKey,
4
+ withUserAgentSuffix
5
+ } from "@ai-sdk/provider-utils";
31
6
 
32
7
  // src/hume-speech-model.ts
33
- var import_provider_utils2 = require("@ai-sdk/provider-utils");
34
- var import_v42 = require("zod/v4");
8
+ import {
9
+ combineHeaders,
10
+ createBinaryResponseHandler,
11
+ parseProviderOptions,
12
+ postJsonToApi
13
+ } from "@ai-sdk/provider-utils";
14
+ import { z as z2 } from "zod/v4";
35
15
 
36
16
  // src/hume-error.ts
37
- var import_v4 = require("zod/v4");
38
- var import_provider_utils = require("@ai-sdk/provider-utils");
39
- var humeErrorDataSchema = import_v4.z.object({
40
- error: import_v4.z.object({
41
- message: import_v4.z.string(),
42
- code: import_v4.z.number()
17
+ import { z } from "zod/v4";
18
+ import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
19
+ var humeErrorDataSchema = z.object({
20
+ error: z.object({
21
+ message: z.string(),
22
+ code: z.number()
43
23
  })
44
24
  });
45
- var humeFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)({
25
+ var humeFailedResponseHandler = createJsonErrorResponseHandler({
46
26
  errorSchema: humeErrorDataSchema,
47
27
  errorToMessage: (data) => data.error.message
48
28
  });
49
29
 
50
30
  // src/hume-speech-model.ts
51
- var humeSpeechModelOptionsSchema = import_v42.z.object({
31
+ var humeSpeechModelOptionsSchema = z2.object({
52
32
  /**
53
33
  * Context for the speech synthesis request.
54
34
  * Can be either a generationId for retrieving a previous generation,
55
35
  * or a list of utterances to synthesize.
56
36
  */
57
- context: import_v42.z.object({
37
+ context: z2.object({
58
38
  /**
59
39
  * ID of a previously generated speech synthesis to retrieve.
60
40
  */
61
- generationId: import_v42.z.string()
41
+ generationId: z2.string()
62
42
  }).or(
63
- import_v42.z.object({
43
+ z2.object({
64
44
  /**
65
45
  * List of utterances to synthesize into speech.
66
46
  */
67
- utterances: import_v42.z.array(
68
- import_v42.z.object({
47
+ utterances: z2.array(
48
+ z2.object({
69
49
  /**
70
50
  * The text content to convert to speech.
71
51
  */
72
- text: import_v42.z.string(),
52
+ text: z2.string(),
73
53
  /**
74
54
  * Optional description or instructions for how the text should be spoken.
75
55
  */
76
- description: import_v42.z.string().optional(),
56
+ description: z2.string().optional(),
77
57
  /**
78
58
  * Optional speech rate multiplier.
79
59
  */
80
- speed: import_v42.z.number().optional(),
60
+ speed: z2.number().optional(),
81
61
  /**
82
62
  * Optional duration of silence to add after the utterance in seconds.
83
63
  */
84
- trailingSilence: import_v42.z.number().optional(),
64
+ trailingSilence: z2.number().optional(),
85
65
  /**
86
66
  * Voice configuration for the utterance.
87
67
  * Can be specified by ID or name.
88
68
  */
89
- voice: import_v42.z.object({
69
+ voice: z2.object({
90
70
  /**
91
71
  * ID of the voice to use.
92
72
  */
93
- id: import_v42.z.string(),
73
+ id: z2.string(),
94
74
  /**
95
75
  * Provider of the voice, either Hume's built-in voices or a custom voice.
96
76
  */
97
- provider: import_v42.z.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
77
+ provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
98
78
  }).or(
99
- import_v42.z.object({
79
+ z2.object({
100
80
  /**
101
81
  * Name of the voice to use.
102
82
  */
103
- name: import_v42.z.string(),
83
+ name: z2.string(),
104
84
  /**
105
85
  * Provider of the voice, either Hume's built-in voices or a custom voice.
106
86
  */
107
- provider: import_v42.z.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
87
+ provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
108
88
  })
109
89
  ).optional()
110
90
  })
@@ -116,7 +96,7 @@ var HumeSpeechModel = class {
116
96
  constructor(modelId, config) {
117
97
  this.modelId = modelId;
118
98
  this.config = config;
119
- this.specificationVersion = "v3";
99
+ this.specificationVersion = "v4";
120
100
  }
121
101
  get provider() {
122
102
  return this.config.provider;
@@ -131,7 +111,7 @@ var HumeSpeechModel = class {
131
111
  providerOptions
132
112
  }) {
133
113
  const warnings = [];
134
- const humeOptions = await (0, import_provider_utils2.parseProviderOptions)({
114
+ const humeOptions = await parseProviderOptions({
135
115
  provider: "hume",
136
116
  providerOptions,
137
117
  schema: humeSpeechModelOptionsSchema
@@ -207,15 +187,15 @@ var HumeSpeechModel = class {
207
187
  value: audio,
208
188
  responseHeaders,
209
189
  rawValue: rawResponse
210
- } = await (0, import_provider_utils2.postJsonToApi)({
190
+ } = await postJsonToApi({
211
191
  url: this.config.url({
212
192
  path: "/v0/tts/file",
213
193
  modelId: this.modelId
214
194
  }),
215
- headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
195
+ headers: combineHeaders(this.config.headers(), options.headers),
216
196
  body: requestBody,
217
197
  failedResponseHandler: humeFailedResponseHandler,
218
- successfulResponseHandler: (0, import_provider_utils2.createBinaryResponseHandler)(),
198
+ successfulResponseHandler: createBinaryResponseHandler(),
219
199
  abortSignal: options.abortSignal,
220
200
  fetch: this.config.fetch
221
201
  });
@@ -236,13 +216,13 @@ var HumeSpeechModel = class {
236
216
  };
237
217
 
238
218
  // src/version.ts
239
- var VERSION = true ? "3.0.0-beta.2" : "0.0.0-test";
219
+ var VERSION = true ? "3.0.0-beta.20" : "0.0.0-test";
240
220
 
241
221
  // src/hume-provider.ts
242
222
  function createHume(options = {}) {
243
- const getHeaders = () => (0, import_provider_utils3.withUserAgentSuffix)(
223
+ const getHeaders = () => withUserAgentSuffix(
244
224
  {
245
- "X-Hume-Api-Key": (0, import_provider_utils3.loadApiKey)({
225
+ "X-Hume-Api-Key": loadApiKey({
246
226
  apiKey: options.apiKey,
247
227
  environmentVariableName: "HUME_API_KEY",
248
228
  description: "Hume"
@@ -267,10 +247,9 @@ function createHume(options = {}) {
267
247
  return provider;
268
248
  }
269
249
  var hume = createHume();
270
- // Annotate the CommonJS export names for ESM import in node:
271
- 0 && (module.exports = {
250
+ export {
272
251
  VERSION,
273
252
  createHume,
274
253
  hume
275
- });
254
+ };
276
255
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/hume-provider.ts","../src/hume-speech-model.ts","../src/hume-error.ts","../src/version.ts"],"sourcesContent":["export { createHume, hume } from './hume-provider';\nexport type { HumeProvider, HumeProviderSettings } from './hume-provider';\nexport type { HumeSpeechModelOptions } from './hume-speech-model';\nexport { VERSION } from './version';\n","import { SpeechModelV3, ProviderV3 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { HumeSpeechModel } from './hume-speech-model';\nimport { VERSION } from './version';\n\nexport interface HumeProvider extends Pick<ProviderV3, 'speechModel'> {\n (settings?: {}): {\n speech: HumeSpeechModel;\n };\n\n /**\n * Creates a model for speech synthesis.\n */\n speech(): SpeechModelV3;\n}\n\nexport interface HumeProviderSettings {\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 Hume provider instance.\n */\nexport function createHume(options: HumeProviderSettings = {}): HumeProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'X-Hume-Api-Key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'HUME_API_KEY',\n description: 'Hume',\n }),\n ...options.headers,\n },\n `ai-sdk/hume/${VERSION}`,\n );\n\n const createSpeechModel = () =>\n new HumeSpeechModel('', {\n provider: `hume.speech`,\n url: ({ path }) => `https://api.hume.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function () {\n return {\n speech: createSpeechModel(),\n };\n };\n\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n return provider satisfies HumeProvider;\n}\n\n/**\n * Default Hume provider instance.\n */\nexport const hume = createHume();\n","import { SpeechModelV3, SharedV3Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { HumeConfig } from './hume-config';\nimport { humeFailedResponseHandler } from './hume-error';\nimport { HumeSpeechAPITypes } from './hume-api-types';\n\n// https://dev.hume.ai/reference/text-to-speech-tts/synthesize-file\nconst humeSpeechModelOptionsSchema = z.object({\n /**\n * Context for the speech synthesis request.\n * Can be either a generationId for retrieving a previous generation,\n * or a list of utterances to synthesize.\n */\n context: z\n .object({\n /**\n * ID of a previously generated speech synthesis to retrieve.\n */\n generationId: z.string(),\n })\n .or(\n z.object({\n /**\n * List of utterances to synthesize into speech.\n */\n utterances: z.array(\n z.object({\n /**\n * The text content to convert to speech.\n */\n text: z.string(),\n /**\n * Optional description or instructions for how the text should be spoken.\n */\n description: z.string().optional(),\n /**\n * Optional speech rate multiplier.\n */\n speed: z.number().optional(),\n /**\n * Optional duration of silence to add after the utterance in seconds.\n */\n trailingSilence: z.number().optional(),\n /**\n * Voice configuration for the utterance.\n * Can be specified by ID or name.\n */\n voice: z\n .object({\n /**\n * ID of the voice to use.\n */\n id: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n })\n .or(\n z.object({\n /**\n * Name of the voice to use.\n */\n name: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n }),\n )\n .optional(),\n }),\n ),\n }),\n )\n .nullish(),\n});\n\nexport type HumeSpeechModelOptions = z.infer<\n typeof humeSpeechModelOptionsSchema\n>;\n\ninterface HumeSpeechModelConfig extends HumeConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class HumeSpeechModel implements SpeechModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: '',\n private readonly config: HumeSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice = 'd8ab67c6-953d-4bd8-9370-8fa53a0f1453',\n outputFormat = 'mp3',\n speed,\n instructions,\n language,\n providerOptions,\n }: Parameters<SpeechModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Parse provider options\n const humeOptions = await parseProviderOptions({\n provider: 'hume',\n providerOptions,\n schema: humeSpeechModelOptionsSchema,\n });\n\n // Create request body\n const requestBody: HumeSpeechAPITypes = {\n utterances: [\n {\n text,\n speed,\n description: instructions,\n voice: {\n id: voice,\n provider: 'HUME_AI',\n },\n },\n ],\n format: { type: 'mp3' },\n };\n\n if (outputFormat) {\n if (['mp3', 'pcm', 'wav'].includes(outputFormat)) {\n requestBody.format = { type: outputFormat as 'mp3' | 'pcm' | 'wav' };\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (humeOptions) {\n const speechModelOptions: Omit<\n HumeSpeechAPITypes,\n 'utterances' | 'format'\n > = {};\n\n if (humeOptions.context) {\n if ('generationId' in humeOptions.context) {\n speechModelOptions.context = {\n generation_id: humeOptions.context.generationId,\n };\n } else {\n speechModelOptions.context = {\n utterances: humeOptions.context.utterances.map(utterance => ({\n text: utterance.text,\n description: utterance.description,\n speed: utterance.speed,\n trailing_silence: utterance.trailingSilence,\n voice: utterance.voice,\n })),\n };\n }\n }\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[\n key as keyof Omit<HumeSpeechAPITypes, 'utterances' | 'format'>\n ];\n if (value !== undefined) {\n (requestBody as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n if (language) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details: `Hume speech models do not support language selection. Language parameter \"${language}\" was ignored.`,\n });\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/v0/tts/file',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: humeFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const humeErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type HumeErrorData = z.infer<typeof humeErrorDataSchema>;\n\nexport const humeFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: humeErrorDataSchema,\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","import_v4"]}
1
+ {"version":3,"sources":["../src/hume-provider.ts","../src/hume-speech-model.ts","../src/hume-error.ts","../src/version.ts"],"sourcesContent":["import { SpeechModelV4, ProviderV4 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { HumeSpeechModel } from './hume-speech-model';\nimport { VERSION } from './version';\n\nexport interface HumeProvider extends Pick<ProviderV4, 'speechModel'> {\n (settings?: {}): {\n speech: HumeSpeechModel;\n };\n\n /**\n * Creates a model for speech synthesis.\n */\n speech(): SpeechModelV4;\n}\n\nexport interface HumeProviderSettings {\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 Hume provider instance.\n */\nexport function createHume(options: HumeProviderSettings = {}): HumeProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'X-Hume-Api-Key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'HUME_API_KEY',\n description: 'Hume',\n }),\n ...options.headers,\n },\n `ai-sdk/hume/${VERSION}`,\n );\n\n const createSpeechModel = () =>\n new HumeSpeechModel('', {\n provider: `hume.speech`,\n url: ({ path }) => `https://api.hume.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function () {\n return {\n speech: createSpeechModel(),\n };\n };\n\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n return provider satisfies HumeProvider;\n}\n\n/**\n * Default Hume provider instance.\n */\nexport const hume = createHume();\n","import { SpeechModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { HumeConfig } from './hume-config';\nimport { humeFailedResponseHandler } from './hume-error';\nimport { HumeSpeechAPITypes } from './hume-api-types';\n\n// https://dev.hume.ai/reference/text-to-speech-tts/synthesize-file\nconst humeSpeechModelOptionsSchema = z.object({\n /**\n * Context for the speech synthesis request.\n * Can be either a generationId for retrieving a previous generation,\n * or a list of utterances to synthesize.\n */\n context: z\n .object({\n /**\n * ID of a previously generated speech synthesis to retrieve.\n */\n generationId: z.string(),\n })\n .or(\n z.object({\n /**\n * List of utterances to synthesize into speech.\n */\n utterances: z.array(\n z.object({\n /**\n * The text content to convert to speech.\n */\n text: z.string(),\n /**\n * Optional description or instructions for how the text should be spoken.\n */\n description: z.string().optional(),\n /**\n * Optional speech rate multiplier.\n */\n speed: z.number().optional(),\n /**\n * Optional duration of silence to add after the utterance in seconds.\n */\n trailingSilence: z.number().optional(),\n /**\n * Voice configuration for the utterance.\n * Can be specified by ID or name.\n */\n voice: z\n .object({\n /**\n * ID of the voice to use.\n */\n id: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n })\n .or(\n z.object({\n /**\n * Name of the voice to use.\n */\n name: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n }),\n )\n .optional(),\n }),\n ),\n }),\n )\n .nullish(),\n});\n\nexport type HumeSpeechModelOptions = z.infer<\n typeof humeSpeechModelOptionsSchema\n>;\n\ninterface HumeSpeechModelConfig extends HumeConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class HumeSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: '',\n private readonly config: HumeSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice = 'd8ab67c6-953d-4bd8-9370-8fa53a0f1453',\n outputFormat = 'mp3',\n speed,\n instructions,\n language,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const humeOptions = await parseProviderOptions({\n provider: 'hume',\n providerOptions,\n schema: humeSpeechModelOptionsSchema,\n });\n\n // Create request body\n const requestBody: HumeSpeechAPITypes = {\n utterances: [\n {\n text,\n speed,\n description: instructions,\n voice: {\n id: voice,\n provider: 'HUME_AI',\n },\n },\n ],\n format: { type: 'mp3' },\n };\n\n if (outputFormat) {\n if (['mp3', 'pcm', 'wav'].includes(outputFormat)) {\n requestBody.format = { type: outputFormat as 'mp3' | 'pcm' | 'wav' };\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (humeOptions) {\n const speechModelOptions: Omit<\n HumeSpeechAPITypes,\n 'utterances' | 'format'\n > = {};\n\n if (humeOptions.context) {\n if ('generationId' in humeOptions.context) {\n speechModelOptions.context = {\n generation_id: humeOptions.context.generationId,\n };\n } else {\n speechModelOptions.context = {\n utterances: humeOptions.context.utterances.map(utterance => ({\n text: utterance.text,\n description: utterance.description,\n speed: utterance.speed,\n trailing_silence: utterance.trailingSilence,\n voice: utterance.voice,\n })),\n };\n }\n }\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[\n key as keyof Omit<HumeSpeechAPITypes, 'utterances' | 'format'>\n ];\n if (value !== undefined) {\n (requestBody as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n if (language) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details: `Hume speech models do not support language selection. Language parameter \"${language}\" was ignored.`,\n });\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/v0/tts/file',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: humeFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const humeErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type HumeErrorData = z.infer<typeof humeErrorDataSchema>;\n\nexport const humeFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: humeErrorDataSchema,\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,10 +1,10 @@
1
1
  {
2
2
  "name": "@ai-sdk/hume",
3
- "version": "3.0.0-beta.2",
3
+ "version": "3.0.0-beta.20",
4
+ "type": "module",
4
5
  "license": "Apache-2.0",
5
6
  "sideEffects": false,
6
7
  "main": "./dist/index.js",
7
- "module": "./dist/index.mjs",
8
8
  "types": "./dist/index.d.ts",
9
9
  "files": [
10
10
  "dist/**/*",
@@ -24,20 +24,20 @@
24
24
  "./package.json": "./package.json",
25
25
  ".": {
26
26
  "types": "./dist/index.d.ts",
27
- "import": "./dist/index.mjs",
28
- "require": "./dist/index.js"
27
+ "import": "./dist/index.js",
28
+ "default": "./dist/index.js"
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@ai-sdk/provider": "4.0.0-beta.1",
33
- "@ai-sdk/provider-utils": "5.0.0-beta.2"
32
+ "@ai-sdk/provider": "4.0.0-beta.11",
33
+ "@ai-sdk/provider-utils": "5.0.0-beta.19"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "20.17.24",
37
37
  "tsup": "^8",
38
38
  "typescript": "5.6.3",
39
39
  "zod": "3.25.76",
40
- "@ai-sdk/test-server": "2.0.0-beta.0",
40
+ "@ai-sdk/test-server": "2.0.0-beta.1",
41
41
  "@vercel/ai-tsconfig": "0.0.0"
42
42
  },
43
43
  "peerDependencies": {
@@ -64,9 +64,7 @@
64
64
  "build": "tsup --tsconfig tsconfig.build.json",
65
65
  "build:watch": "tsup --tsconfig tsconfig.build.json --watch",
66
66
  "clean": "del-cli dist docs",
67
- "lint": "eslint \"./**/*.ts*\"",
68
67
  "type-check": "tsc --noEmit",
69
- "prettier-check": "prettier --check \"./**/*.ts*\"",
70
68
  "test": "pnpm test:node && pnpm test:edge",
71
69
  "test:watch": "vitest --config vitest.node.config.js --watch",
72
70
  "test:edge": "vitest --config vitest.edge.config.js --run",
@@ -1,4 +1,4 @@
1
- import { SpeechModelV3, ProviderV3 } from '@ai-sdk/provider';
1
+ import { SpeechModelV4, ProviderV4 } from '@ai-sdk/provider';
2
2
  import {
3
3
  FetchFunction,
4
4
  loadApiKey,
@@ -7,7 +7,7 @@ import {
7
7
  import { HumeSpeechModel } from './hume-speech-model';
8
8
  import { VERSION } from './version';
9
9
 
10
- export interface HumeProvider extends Pick<ProviderV3, 'speechModel'> {
10
+ export interface HumeProvider extends Pick<ProviderV4, 'speechModel'> {
11
11
  (settings?: {}): {
12
12
  speech: HumeSpeechModel;
13
13
  };
@@ -15,7 +15,7 @@ export interface HumeProvider extends Pick<ProviderV3, 'speechModel'> {
15
15
  /**
16
16
  * Creates a model for speech synthesis.
17
17
  */
18
- speech(): SpeechModelV3;
18
+ speech(): SpeechModelV4;
19
19
  }
20
20
 
21
21
  export interface HumeProviderSettings {
@@ -1,4 +1,4 @@
1
- import { SpeechModelV3, SharedV3Warning } from '@ai-sdk/provider';
1
+ import { SpeechModelV4, SharedV4Warning } from '@ai-sdk/provider';
2
2
  import {
3
3
  combineHeaders,
4
4
  createBinaryResponseHandler,
@@ -92,8 +92,8 @@ interface HumeSpeechModelConfig extends HumeConfig {
92
92
  };
93
93
  }
94
94
 
95
- export class HumeSpeechModel implements SpeechModelV3 {
96
- readonly specificationVersion = 'v3';
95
+ export class HumeSpeechModel implements SpeechModelV4 {
96
+ readonly specificationVersion = 'v4';
97
97
 
98
98
  get provider(): string {
99
99
  return this.config.provider;
@@ -112,8 +112,8 @@ export class HumeSpeechModel implements SpeechModelV3 {
112
112
  instructions,
113
113
  language,
114
114
  providerOptions,
115
- }: Parameters<SpeechModelV3['doGenerate']>[0]) {
116
- const warnings: SharedV3Warning[] = [];
115
+ }: Parameters<SpeechModelV4['doGenerate']>[0]) {
116
+ const warnings: SharedV4Warning[] = [];
117
117
 
118
118
  // Parse provider options
119
119
  const humeOptions = await parseProviderOptions({
@@ -201,8 +201,8 @@ export class HumeSpeechModel implements SpeechModelV3 {
201
201
  }
202
202
 
203
203
  async doGenerate(
204
- options: Parameters<SpeechModelV3['doGenerate']>[0],
205
- ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {
204
+ options: Parameters<SpeechModelV4['doGenerate']>[0],
205
+ ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {
206
206
  const currentDate = this.config._internal?.currentDate?.() ?? new Date();
207
207
  const { requestBody, warnings } = await this.getArgs(options);
208
208
 
package/dist/index.d.mts DELETED
@@ -1,92 +0,0 @@
1
- import { SpeechModelV3, ProviderV3 } from '@ai-sdk/provider';
2
- import { FetchFunction } from '@ai-sdk/provider-utils';
3
- import { z } from 'zod/v4';
4
-
5
- type HumeConfig = {
6
- provider: string;
7
- url: (options: {
8
- modelId: string;
9
- path: string;
10
- }) => string;
11
- headers: () => Record<string, string | undefined>;
12
- fetch?: FetchFunction;
13
- generateId?: () => string;
14
- };
15
-
16
- declare const humeSpeechModelOptionsSchema: z.ZodObject<{
17
- context: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodObject<{
18
- generationId: z.ZodString;
19
- }, z.core.$strip>, z.ZodObject<{
20
- utterances: z.ZodArray<z.ZodObject<{
21
- text: z.ZodString;
22
- description: z.ZodOptional<z.ZodString>;
23
- speed: z.ZodOptional<z.ZodNumber>;
24
- trailingSilence: z.ZodOptional<z.ZodNumber>;
25
- voice: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
26
- id: z.ZodString;
27
- provider: z.ZodOptional<z.ZodEnum<{
28
- HUME_AI: "HUME_AI";
29
- CUSTOM_VOICE: "CUSTOM_VOICE";
30
- }>>;
31
- }, z.core.$strip>, z.ZodObject<{
32
- name: z.ZodString;
33
- provider: z.ZodOptional<z.ZodEnum<{
34
- HUME_AI: "HUME_AI";
35
- CUSTOM_VOICE: "CUSTOM_VOICE";
36
- }>>;
37
- }, z.core.$strip>]>>;
38
- }, z.core.$strip>>;
39
- }, z.core.$strip>]>>>;
40
- }, z.core.$strip>;
41
- type HumeSpeechModelOptions = z.infer<typeof humeSpeechModelOptionsSchema>;
42
- interface HumeSpeechModelConfig extends HumeConfig {
43
- _internal?: {
44
- currentDate?: () => Date;
45
- };
46
- }
47
- declare class HumeSpeechModel implements SpeechModelV3 {
48
- readonly modelId: '';
49
- private readonly config;
50
- readonly specificationVersion = "v3";
51
- get provider(): string;
52
- constructor(modelId: '', config: HumeSpeechModelConfig);
53
- private getArgs;
54
- doGenerate(options: Parameters<SpeechModelV3['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>>;
55
- }
56
-
57
- interface HumeProvider extends Pick<ProviderV3, 'speechModel'> {
58
- (settings?: {}): {
59
- speech: HumeSpeechModel;
60
- };
61
- /**
62
- * Creates a model for speech synthesis.
63
- */
64
- speech(): SpeechModelV3;
65
- }
66
- interface HumeProviderSettings {
67
- /**
68
- * API key for authenticating requests.
69
- */
70
- apiKey?: string;
71
- /**
72
- * Custom headers to include in the requests.
73
- */
74
- headers?: Record<string, string>;
75
- /**
76
- * Custom fetch implementation. You can use it as a middleware to intercept requests,
77
- * or to provide a custom fetch implementation for e.g. testing.
78
- */
79
- fetch?: FetchFunction;
80
- }
81
- /**
82
- * Create an Hume provider instance.
83
- */
84
- declare function createHume(options?: HumeProviderSettings): HumeProvider;
85
- /**
86
- * Default Hume provider instance.
87
- */
88
- declare const hume: HumeProvider;
89
-
90
- declare const VERSION: string;
91
-
92
- export { type HumeProvider, type HumeProviderSettings, type HumeSpeechModelOptions, VERSION, createHume, hume };
package/dist/index.mjs DELETED
@@ -1,255 +0,0 @@
1
- // src/hume-provider.ts
2
- import {
3
- loadApiKey,
4
- withUserAgentSuffix
5
- } from "@ai-sdk/provider-utils";
6
-
7
- // src/hume-speech-model.ts
8
- import {
9
- combineHeaders,
10
- createBinaryResponseHandler,
11
- parseProviderOptions,
12
- postJsonToApi
13
- } from "@ai-sdk/provider-utils";
14
- import { z as z2 } from "zod/v4";
15
-
16
- // src/hume-error.ts
17
- import { z } from "zod/v4";
18
- import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
19
- var humeErrorDataSchema = z.object({
20
- error: z.object({
21
- message: z.string(),
22
- code: z.number()
23
- })
24
- });
25
- var humeFailedResponseHandler = createJsonErrorResponseHandler({
26
- errorSchema: humeErrorDataSchema,
27
- errorToMessage: (data) => data.error.message
28
- });
29
-
30
- // src/hume-speech-model.ts
31
- var humeSpeechModelOptionsSchema = z2.object({
32
- /**
33
- * Context for the speech synthesis request.
34
- * Can be either a generationId for retrieving a previous generation,
35
- * or a list of utterances to synthesize.
36
- */
37
- context: z2.object({
38
- /**
39
- * ID of a previously generated speech synthesis to retrieve.
40
- */
41
- generationId: z2.string()
42
- }).or(
43
- z2.object({
44
- /**
45
- * List of utterances to synthesize into speech.
46
- */
47
- utterances: z2.array(
48
- z2.object({
49
- /**
50
- * The text content to convert to speech.
51
- */
52
- text: z2.string(),
53
- /**
54
- * Optional description or instructions for how the text should be spoken.
55
- */
56
- description: z2.string().optional(),
57
- /**
58
- * Optional speech rate multiplier.
59
- */
60
- speed: z2.number().optional(),
61
- /**
62
- * Optional duration of silence to add after the utterance in seconds.
63
- */
64
- trailingSilence: z2.number().optional(),
65
- /**
66
- * Voice configuration for the utterance.
67
- * Can be specified by ID or name.
68
- */
69
- voice: z2.object({
70
- /**
71
- * ID of the voice to use.
72
- */
73
- id: z2.string(),
74
- /**
75
- * Provider of the voice, either Hume's built-in voices or a custom voice.
76
- */
77
- provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
78
- }).or(
79
- z2.object({
80
- /**
81
- * Name of the voice to use.
82
- */
83
- name: z2.string(),
84
- /**
85
- * Provider of the voice, either Hume's built-in voices or a custom voice.
86
- */
87
- provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
88
- })
89
- ).optional()
90
- })
91
- )
92
- })
93
- ).nullish()
94
- });
95
- var HumeSpeechModel = class {
96
- constructor(modelId, config) {
97
- this.modelId = modelId;
98
- this.config = config;
99
- this.specificationVersion = "v3";
100
- }
101
- get provider() {
102
- return this.config.provider;
103
- }
104
- async getArgs({
105
- text,
106
- voice = "d8ab67c6-953d-4bd8-9370-8fa53a0f1453",
107
- outputFormat = "mp3",
108
- speed,
109
- instructions,
110
- language,
111
- providerOptions
112
- }) {
113
- const warnings = [];
114
- const humeOptions = await parseProviderOptions({
115
- provider: "hume",
116
- providerOptions,
117
- schema: humeSpeechModelOptionsSchema
118
- });
119
- const requestBody = {
120
- utterances: [
121
- {
122
- text,
123
- speed,
124
- description: instructions,
125
- voice: {
126
- id: voice,
127
- provider: "HUME_AI"
128
- }
129
- }
130
- ],
131
- format: { type: "mp3" }
132
- };
133
- if (outputFormat) {
134
- if (["mp3", "pcm", "wav"].includes(outputFormat)) {
135
- requestBody.format = { type: outputFormat };
136
- } else {
137
- warnings.push({
138
- type: "unsupported",
139
- feature: "outputFormat",
140
- details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`
141
- });
142
- }
143
- }
144
- if (humeOptions) {
145
- const speechModelOptions = {};
146
- if (humeOptions.context) {
147
- if ("generationId" in humeOptions.context) {
148
- speechModelOptions.context = {
149
- generation_id: humeOptions.context.generationId
150
- };
151
- } else {
152
- speechModelOptions.context = {
153
- utterances: humeOptions.context.utterances.map((utterance) => ({
154
- text: utterance.text,
155
- description: utterance.description,
156
- speed: utterance.speed,
157
- trailing_silence: utterance.trailingSilence,
158
- voice: utterance.voice
159
- }))
160
- };
161
- }
162
- }
163
- for (const key in speechModelOptions) {
164
- const value = speechModelOptions[key];
165
- if (value !== void 0) {
166
- requestBody[key] = value;
167
- }
168
- }
169
- }
170
- if (language) {
171
- warnings.push({
172
- type: "unsupported",
173
- feature: "language",
174
- details: `Hume speech models do not support language selection. Language parameter "${language}" was ignored.`
175
- });
176
- }
177
- return {
178
- requestBody,
179
- warnings
180
- };
181
- }
182
- async doGenerate(options) {
183
- var _a, _b, _c;
184
- const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
185
- const { requestBody, warnings } = await this.getArgs(options);
186
- const {
187
- value: audio,
188
- responseHeaders,
189
- rawValue: rawResponse
190
- } = await postJsonToApi({
191
- url: this.config.url({
192
- path: "/v0/tts/file",
193
- modelId: this.modelId
194
- }),
195
- headers: combineHeaders(this.config.headers(), options.headers),
196
- body: requestBody,
197
- failedResponseHandler: humeFailedResponseHandler,
198
- successfulResponseHandler: createBinaryResponseHandler(),
199
- abortSignal: options.abortSignal,
200
- fetch: this.config.fetch
201
- });
202
- return {
203
- audio,
204
- warnings,
205
- request: {
206
- body: JSON.stringify(requestBody)
207
- },
208
- response: {
209
- timestamp: currentDate,
210
- modelId: this.modelId,
211
- headers: responseHeaders,
212
- body: rawResponse
213
- }
214
- };
215
- }
216
- };
217
-
218
- // src/version.ts
219
- var VERSION = true ? "3.0.0-beta.2" : "0.0.0-test";
220
-
221
- // src/hume-provider.ts
222
- function createHume(options = {}) {
223
- const getHeaders = () => withUserAgentSuffix(
224
- {
225
- "X-Hume-Api-Key": loadApiKey({
226
- apiKey: options.apiKey,
227
- environmentVariableName: "HUME_API_KEY",
228
- description: "Hume"
229
- }),
230
- ...options.headers
231
- },
232
- `ai-sdk/hume/${VERSION}`
233
- );
234
- const createSpeechModel = () => new HumeSpeechModel("", {
235
- provider: `hume.speech`,
236
- url: ({ path }) => `https://api.hume.ai${path}`,
237
- headers: getHeaders,
238
- fetch: options.fetch
239
- });
240
- const provider = function() {
241
- return {
242
- speech: createSpeechModel()
243
- };
244
- };
245
- provider.speech = createSpeechModel;
246
- provider.speechModel = createSpeechModel;
247
- return provider;
248
- }
249
- var hume = createHume();
250
- export {
251
- VERSION,
252
- createHume,
253
- hume
254
- };
255
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hume-provider.ts","../src/hume-speech-model.ts","../src/hume-error.ts","../src/version.ts"],"sourcesContent":["import { SpeechModelV3, ProviderV3 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { HumeSpeechModel } from './hume-speech-model';\nimport { VERSION } from './version';\n\nexport interface HumeProvider extends Pick<ProviderV3, 'speechModel'> {\n (settings?: {}): {\n speech: HumeSpeechModel;\n };\n\n /**\n * Creates a model for speech synthesis.\n */\n speech(): SpeechModelV3;\n}\n\nexport interface HumeProviderSettings {\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 Hume provider instance.\n */\nexport function createHume(options: HumeProviderSettings = {}): HumeProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'X-Hume-Api-Key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'HUME_API_KEY',\n description: 'Hume',\n }),\n ...options.headers,\n },\n `ai-sdk/hume/${VERSION}`,\n );\n\n const createSpeechModel = () =>\n new HumeSpeechModel('', {\n provider: `hume.speech`,\n url: ({ path }) => `https://api.hume.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function () {\n return {\n speech: createSpeechModel(),\n };\n };\n\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n return provider satisfies HumeProvider;\n}\n\n/**\n * Default Hume provider instance.\n */\nexport const hume = createHume();\n","import { SpeechModelV3, SharedV3Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { HumeConfig } from './hume-config';\nimport { humeFailedResponseHandler } from './hume-error';\nimport { HumeSpeechAPITypes } from './hume-api-types';\n\n// https://dev.hume.ai/reference/text-to-speech-tts/synthesize-file\nconst humeSpeechModelOptionsSchema = z.object({\n /**\n * Context for the speech synthesis request.\n * Can be either a generationId for retrieving a previous generation,\n * or a list of utterances to synthesize.\n */\n context: z\n .object({\n /**\n * ID of a previously generated speech synthesis to retrieve.\n */\n generationId: z.string(),\n })\n .or(\n z.object({\n /**\n * List of utterances to synthesize into speech.\n */\n utterances: z.array(\n z.object({\n /**\n * The text content to convert to speech.\n */\n text: z.string(),\n /**\n * Optional description or instructions for how the text should be spoken.\n */\n description: z.string().optional(),\n /**\n * Optional speech rate multiplier.\n */\n speed: z.number().optional(),\n /**\n * Optional duration of silence to add after the utterance in seconds.\n */\n trailingSilence: z.number().optional(),\n /**\n * Voice configuration for the utterance.\n * Can be specified by ID or name.\n */\n voice: z\n .object({\n /**\n * ID of the voice to use.\n */\n id: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n })\n .or(\n z.object({\n /**\n * Name of the voice to use.\n */\n name: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n }),\n )\n .optional(),\n }),\n ),\n }),\n )\n .nullish(),\n});\n\nexport type HumeSpeechModelOptions = z.infer<\n typeof humeSpeechModelOptionsSchema\n>;\n\ninterface HumeSpeechModelConfig extends HumeConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class HumeSpeechModel implements SpeechModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: '',\n private readonly config: HumeSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice = 'd8ab67c6-953d-4bd8-9370-8fa53a0f1453',\n outputFormat = 'mp3',\n speed,\n instructions,\n language,\n providerOptions,\n }: Parameters<SpeechModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Parse provider options\n const humeOptions = await parseProviderOptions({\n provider: 'hume',\n providerOptions,\n schema: humeSpeechModelOptionsSchema,\n });\n\n // Create request body\n const requestBody: HumeSpeechAPITypes = {\n utterances: [\n {\n text,\n speed,\n description: instructions,\n voice: {\n id: voice,\n provider: 'HUME_AI',\n },\n },\n ],\n format: { type: 'mp3' },\n };\n\n if (outputFormat) {\n if (['mp3', 'pcm', 'wav'].includes(outputFormat)) {\n requestBody.format = { type: outputFormat as 'mp3' | 'pcm' | 'wav' };\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (humeOptions) {\n const speechModelOptions: Omit<\n HumeSpeechAPITypes,\n 'utterances' | 'format'\n > = {};\n\n if (humeOptions.context) {\n if ('generationId' in humeOptions.context) {\n speechModelOptions.context = {\n generation_id: humeOptions.context.generationId,\n };\n } else {\n speechModelOptions.context = {\n utterances: humeOptions.context.utterances.map(utterance => ({\n text: utterance.text,\n description: utterance.description,\n speed: utterance.speed,\n trailing_silence: utterance.trailingSilence,\n voice: utterance.voice,\n })),\n };\n }\n }\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[\n key as keyof Omit<HumeSpeechAPITypes, 'utterances' | 'format'>\n ];\n if (value !== undefined) {\n (requestBody as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n if (language) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details: `Hume speech models do not support language selection. Language parameter \"${language}\" was ignored.`,\n });\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/v0/tts/file',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: humeFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const humeErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type HumeErrorData = z.infer<typeof humeErrorDataSchema>;\n\nexport const humeFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: humeErrorDataSchema,\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"]}