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

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,164 @@
1
1
  # @ai-sdk/hume
2
2
 
3
+ ## 3.0.0-beta.21
4
+
5
+ ### Patch Changes
6
+
7
+ - b3976a2: Add workflow serialization support to all provider models.
8
+
9
+ **`@ai-sdk/provider-utils`:** New `serializeModel()` helper that extracts only serializable properties from a model instance, filtering out functions and objects containing functions. Third-party provider authors can use this to add workflow support to their own models.
10
+
11
+ **All providers:** `headers` is now optional in provider config types. This is non-breaking — existing code that passes `headers` continues to work. Custom provider implementations that construct model configs manually can now omit `headers`, which is useful when models are deserialized from a workflow step boundary where auth is provided separately.
12
+
13
+ All provider model classes now include `WORKFLOW_SERIALIZE` and `WORKFLOW_DESERIALIZE` static methods, enabling them to cross workflow step boundaries without serialization errors.
14
+
15
+ - Updated dependencies [b3976a2]
16
+ - Updated dependencies [ff5eba1]
17
+ - @ai-sdk/provider-utils@5.0.0-beta.20
18
+ - @ai-sdk/provider@4.0.0-beta.12
19
+
20
+ ## 3.0.0-beta.20
21
+
22
+ ### Major Changes
23
+
24
+ - ef992f8: Remove CommonJS exports from all packages. All packages are now ESM-only (`"type": "module"`). Consumers using `require()` must switch to ESM `import` syntax.
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [ef992f8]
29
+ - @ai-sdk/provider@4.0.0-beta.11
30
+ - @ai-sdk/provider-utils@5.0.0-beta.19
31
+
32
+ ## 3.0.0-beta.19
33
+
34
+ ### Patch Changes
35
+
36
+ - Updated dependencies [90e2d8a]
37
+ - @ai-sdk/provider-utils@5.0.0-beta.18
38
+
39
+ ## 3.0.0-beta.18
40
+
41
+ ### Patch Changes
42
+
43
+ - Updated dependencies [3ae1786]
44
+ - @ai-sdk/provider-utils@5.0.0-beta.17
45
+
46
+ ## 3.0.0-beta.17
47
+
48
+ ### Patch Changes
49
+
50
+ - Updated dependencies [176466a]
51
+ - @ai-sdk/provider@4.0.0-beta.10
52
+ - @ai-sdk/provider-utils@5.0.0-beta.16
53
+
54
+ ## 3.0.0-beta.16
55
+
56
+ ### Patch Changes
57
+
58
+ - Updated dependencies [e311194]
59
+ - @ai-sdk/provider@4.0.0-beta.9
60
+ - @ai-sdk/provider-utils@5.0.0-beta.15
61
+
62
+ ## 3.0.0-beta.15
63
+
64
+ ### Patch Changes
65
+
66
+ - Updated dependencies [34bd95d]
67
+ - Updated dependencies [008271d]
68
+ - @ai-sdk/provider@4.0.0-beta.8
69
+ - @ai-sdk/provider-utils@5.0.0-beta.14
70
+
71
+ ## 3.0.0-beta.14
72
+
73
+ ### Patch Changes
74
+
75
+ - Updated dependencies [b0c2869]
76
+ - Updated dependencies [7e26e81]
77
+ - @ai-sdk/provider-utils@5.0.0-beta.13
78
+
79
+ ## 3.0.0-beta.13
80
+
81
+ ### Patch Changes
82
+
83
+ - Updated dependencies [46d1149]
84
+ - @ai-sdk/provider-utils@5.0.0-beta.12
85
+
86
+ ## 3.0.0-beta.12
87
+
88
+ ### Patch Changes
89
+
90
+ - Updated dependencies [6fd51c0]
91
+ - @ai-sdk/provider-utils@5.0.0-beta.11
92
+ - @ai-sdk/provider@4.0.0-beta.7
93
+
94
+ ## 3.0.0-beta.11
95
+
96
+ ### Patch Changes
97
+
98
+ - Updated dependencies [c29a26f]
99
+ - @ai-sdk/provider-utils@5.0.0-beta.10
100
+ - @ai-sdk/provider@4.0.0-beta.6
101
+
102
+ ## 3.0.0-beta.10
103
+
104
+ ### Patch Changes
105
+
106
+ - 38fc777: Add AI Gateway hint to provider READMEs
107
+
108
+ ## 3.0.0-beta.9
109
+
110
+ ### Patch Changes
111
+
112
+ - Updated dependencies [2e17091]
113
+ - @ai-sdk/provider-utils@5.0.0-beta.9
114
+
115
+ ## 3.0.0-beta.8
116
+
117
+ ### Patch Changes
118
+
119
+ - Updated dependencies [986c6fd]
120
+ - Updated dependencies [493295c]
121
+ - @ai-sdk/provider-utils@5.0.0-beta.8
122
+
123
+ ## 3.0.0-beta.7
124
+
125
+ ### Patch Changes
126
+
127
+ - Updated dependencies [1f509d4]
128
+ - @ai-sdk/provider-utils@5.0.0-beta.7
129
+ - @ai-sdk/provider@4.0.0-beta.5
130
+
131
+ ## 3.0.0-beta.6
132
+
133
+ ### Patch Changes
134
+
135
+ - Updated dependencies [3887c70]
136
+ - @ai-sdk/provider-utils@5.0.0-beta.6
137
+ - @ai-sdk/provider@4.0.0-beta.4
138
+
139
+ ## 3.0.0-beta.5
140
+
141
+ ### Patch Changes
142
+
143
+ - Updated dependencies [776b617]
144
+ - @ai-sdk/provider-utils@5.0.0-beta.5
145
+ - @ai-sdk/provider@4.0.0-beta.3
146
+
147
+ ## 3.0.0-beta.4
148
+
149
+ ### Patch Changes
150
+
151
+ - Updated dependencies [61753c3]
152
+ - @ai-sdk/provider-utils@5.0.0-beta.4
153
+
154
+ ## 3.0.0-beta.3
155
+
156
+ ### Patch Changes
157
+
158
+ - Updated dependencies [f7d4f01]
159
+ - @ai-sdk/provider-utils@5.0.0-beta.3
160
+ - @ai-sdk/provider@4.0.0-beta.2
161
+
3
162
  ## 3.0.0-beta.2
4
163
 
5
164
  ### 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,5 +1,6 @@
1
- import { SpeechModelV3, ProviderV3 } from '@ai-sdk/provider';
2
- import { FetchFunction } from '@ai-sdk/provider-utils';
1
+ import * as _ai_sdk_provider from '@ai-sdk/provider';
2
+ import { SpeechModelV4, ProviderV4 } from '@ai-sdk/provider';
3
+ import { FetchFunction, WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from '@ai-sdk/provider-utils';
3
4
  import { z } from 'zod/v4';
4
5
 
5
6
  type HumeConfig = {
@@ -8,7 +9,7 @@ type HumeConfig = {
8
9
  modelId: string;
9
10
  path: string;
10
11
  }) => string;
11
- headers: () => Record<string, string | undefined>;
12
+ headers?: () => Record<string, string | undefined>;
12
13
  fetch?: FetchFunction;
13
14
  generateId?: () => string;
14
15
  };
@@ -44,24 +45,32 @@ interface HumeSpeechModelConfig extends HumeConfig {
44
45
  currentDate?: () => Date;
45
46
  };
46
47
  }
47
- declare class HumeSpeechModel implements SpeechModelV3 {
48
+ declare class HumeSpeechModel implements SpeechModelV4 {
48
49
  readonly modelId: '';
49
50
  private readonly config;
50
- readonly specificationVersion = "v3";
51
+ readonly specificationVersion = "v4";
51
52
  get provider(): string;
53
+ static [WORKFLOW_SERIALIZE](model: HumeSpeechModel): {
54
+ modelId: string;
55
+ config: _ai_sdk_provider.JSONObject;
56
+ };
57
+ static [WORKFLOW_DESERIALIZE](options: {
58
+ modelId: '';
59
+ config: HumeSpeechModelConfig;
60
+ }): HumeSpeechModel;
52
61
  constructor(modelId: '', config: HumeSpeechModelConfig);
53
62
  private getArgs;
54
- doGenerate(options: Parameters<SpeechModelV3['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>>;
63
+ doGenerate(options: Parameters<SpeechModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>>;
55
64
  }
56
65
 
57
- interface HumeProvider extends Pick<ProviderV3, 'speechModel'> {
66
+ interface HumeProvider extends Pick<ProviderV4, 'speechModel'> {
58
67
  (settings?: {}): {
59
68
  speech: HumeSpeechModel;
60
69
  };
61
70
  /**
62
71
  * Creates a model for speech synthesis.
63
72
  */
64
- speech(): SpeechModelV3;
73
+ speech(): SpeechModelV4;
65
74
  }
66
75
  interface HumeProviderSettings {
67
76
  /**
package/dist/index.js CHANGED
@@ -1,110 +1,93 @@
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
+ serializeModelOptions,
14
+ WORKFLOW_SERIALIZE,
15
+ WORKFLOW_DESERIALIZE
16
+ } from "@ai-sdk/provider-utils";
17
+ import { z as z2 } from "zod/v4";
35
18
 
36
19
  // 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()
20
+ import { z } from "zod/v4";
21
+ import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
22
+ var humeErrorDataSchema = z.object({
23
+ error: z.object({
24
+ message: z.string(),
25
+ code: z.number()
43
26
  })
44
27
  });
45
- var humeFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)({
28
+ var humeFailedResponseHandler = createJsonErrorResponseHandler({
46
29
  errorSchema: humeErrorDataSchema,
47
30
  errorToMessage: (data) => data.error.message
48
31
  });
49
32
 
50
33
  // src/hume-speech-model.ts
51
- var humeSpeechModelOptionsSchema = import_v42.z.object({
34
+ var humeSpeechModelOptionsSchema = z2.object({
52
35
  /**
53
36
  * Context for the speech synthesis request.
54
37
  * Can be either a generationId for retrieving a previous generation,
55
38
  * or a list of utterances to synthesize.
56
39
  */
57
- context: import_v42.z.object({
40
+ context: z2.object({
58
41
  /**
59
42
  * ID of a previously generated speech synthesis to retrieve.
60
43
  */
61
- generationId: import_v42.z.string()
44
+ generationId: z2.string()
62
45
  }).or(
63
- import_v42.z.object({
46
+ z2.object({
64
47
  /**
65
48
  * List of utterances to synthesize into speech.
66
49
  */
67
- utterances: import_v42.z.array(
68
- import_v42.z.object({
50
+ utterances: z2.array(
51
+ z2.object({
69
52
  /**
70
53
  * The text content to convert to speech.
71
54
  */
72
- text: import_v42.z.string(),
55
+ text: z2.string(),
73
56
  /**
74
57
  * Optional description or instructions for how the text should be spoken.
75
58
  */
76
- description: import_v42.z.string().optional(),
59
+ description: z2.string().optional(),
77
60
  /**
78
61
  * Optional speech rate multiplier.
79
62
  */
80
- speed: import_v42.z.number().optional(),
63
+ speed: z2.number().optional(),
81
64
  /**
82
65
  * Optional duration of silence to add after the utterance in seconds.
83
66
  */
84
- trailingSilence: import_v42.z.number().optional(),
67
+ trailingSilence: z2.number().optional(),
85
68
  /**
86
69
  * Voice configuration for the utterance.
87
70
  * Can be specified by ID or name.
88
71
  */
89
- voice: import_v42.z.object({
72
+ voice: z2.object({
90
73
  /**
91
74
  * ID of the voice to use.
92
75
  */
93
- id: import_v42.z.string(),
76
+ id: z2.string(),
94
77
  /**
95
78
  * Provider of the voice, either Hume's built-in voices or a custom voice.
96
79
  */
97
- provider: import_v42.z.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
80
+ provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
98
81
  }).or(
99
- import_v42.z.object({
82
+ z2.object({
100
83
  /**
101
84
  * Name of the voice to use.
102
85
  */
103
- name: import_v42.z.string(),
86
+ name: z2.string(),
104
87
  /**
105
88
  * Provider of the voice, either Hume's built-in voices or a custom voice.
106
89
  */
107
- provider: import_v42.z.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
90
+ provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
108
91
  })
109
92
  ).optional()
110
93
  })
@@ -112,15 +95,24 @@ var humeSpeechModelOptionsSchema = import_v42.z.object({
112
95
  })
113
96
  ).nullish()
114
97
  });
115
- var HumeSpeechModel = class {
98
+ var HumeSpeechModel = class _HumeSpeechModel {
116
99
  constructor(modelId, config) {
117
100
  this.modelId = modelId;
118
101
  this.config = config;
119
- this.specificationVersion = "v3";
102
+ this.specificationVersion = "v4";
120
103
  }
121
104
  get provider() {
122
105
  return this.config.provider;
123
106
  }
107
+ static [WORKFLOW_SERIALIZE](model) {
108
+ return serializeModelOptions({
109
+ modelId: model.modelId,
110
+ config: model.config
111
+ });
112
+ }
113
+ static [WORKFLOW_DESERIALIZE](options) {
114
+ return new _HumeSpeechModel(options.modelId, options.config);
115
+ }
124
116
  async getArgs({
125
117
  text,
126
118
  voice = "d8ab67c6-953d-4bd8-9370-8fa53a0f1453",
@@ -131,7 +123,7 @@ var HumeSpeechModel = class {
131
123
  providerOptions
132
124
  }) {
133
125
  const warnings = [];
134
- const humeOptions = await (0, import_provider_utils2.parseProviderOptions)({
126
+ const humeOptions = await parseProviderOptions({
135
127
  provider: "hume",
136
128
  providerOptions,
137
129
  schema: humeSpeechModelOptionsSchema
@@ -200,22 +192,22 @@ var HumeSpeechModel = class {
200
192
  };
201
193
  }
202
194
  async doGenerate(options) {
203
- var _a, _b, _c;
195
+ var _a, _b, _c, _d, _e;
204
196
  const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
205
197
  const { requestBody, warnings } = await this.getArgs(options);
206
198
  const {
207
199
  value: audio,
208
200
  responseHeaders,
209
201
  rawValue: rawResponse
210
- } = await (0, import_provider_utils2.postJsonToApi)({
202
+ } = await postJsonToApi({
211
203
  url: this.config.url({
212
204
  path: "/v0/tts/file",
213
205
  modelId: this.modelId
214
206
  }),
215
- headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
207
+ headers: combineHeaders((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
216
208
  body: requestBody,
217
209
  failedResponseHandler: humeFailedResponseHandler,
218
- successfulResponseHandler: (0, import_provider_utils2.createBinaryResponseHandler)(),
210
+ successfulResponseHandler: createBinaryResponseHandler(),
219
211
  abortSignal: options.abortSignal,
220
212
  fetch: this.config.fetch
221
213
  });
@@ -236,13 +228,13 @@ var HumeSpeechModel = class {
236
228
  };
237
229
 
238
230
  // src/version.ts
239
- var VERSION = true ? "3.0.0-beta.2" : "0.0.0-test";
231
+ var VERSION = true ? "3.0.0-beta.21" : "0.0.0-test";
240
232
 
241
233
  // src/hume-provider.ts
242
234
  function createHume(options = {}) {
243
- const getHeaders = () => (0, import_provider_utils3.withUserAgentSuffix)(
235
+ const getHeaders = () => withUserAgentSuffix(
244
236
  {
245
- "X-Hume-Api-Key": (0, import_provider_utils3.loadApiKey)({
237
+ "X-Hume-Api-Key": loadApiKey({
246
238
  apiKey: options.apiKey,
247
239
  environmentVariableName: "HUME_API_KEY",
248
240
  description: "Hume"
@@ -267,10 +259,9 @@ function createHume(options = {}) {
267
259
  return provider;
268
260
  }
269
261
  var hume = createHume();
270
- // Annotate the CommonJS export names for ESM import in node:
271
- 0 && (module.exports = {
262
+ export {
272
263
  VERSION,
273
264
  createHume,
274
265
  hume
275
- });
266
+ };
276
267
  //# 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 serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\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 static [WORKFLOW_SERIALIZE](model: HumeSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: '';\n config: HumeSpeechModelConfig;\n }) {\n return new HumeSpeechModel(options.modelId as '', options.config);\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.21",
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.12",
33
+ "@ai-sdk/provider-utils": "5.0.0-beta.20"
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",
@@ -3,7 +3,7 @@ import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
  export type HumeConfig = {
4
4
  provider: string;
5
5
  url: (options: { modelId: string; path: string }) => string;
6
- headers: () => Record<string, string | undefined>;
6
+ headers?: () => Record<string, string | undefined>;
7
7
  fetch?: FetchFunction;
8
8
  generateId?: () => string;
9
9
  };
@@ -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,9 +1,12 @@
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,
5
5
  parseProviderOptions,
6
6
  postJsonToApi,
7
+ serializeModelOptions,
8
+ WORKFLOW_SERIALIZE,
9
+ WORKFLOW_DESERIALIZE,
7
10
  } from '@ai-sdk/provider-utils';
8
11
  import { z } from 'zod/v4';
9
12
  import { HumeConfig } from './hume-config';
@@ -92,13 +95,27 @@ interface HumeSpeechModelConfig extends HumeConfig {
92
95
  };
93
96
  }
94
97
 
95
- export class HumeSpeechModel implements SpeechModelV3 {
96
- readonly specificationVersion = 'v3';
98
+ export class HumeSpeechModel implements SpeechModelV4 {
99
+ readonly specificationVersion = 'v4';
97
100
 
98
101
  get provider(): string {
99
102
  return this.config.provider;
100
103
  }
101
104
 
105
+ static [WORKFLOW_SERIALIZE](model: HumeSpeechModel) {
106
+ return serializeModelOptions({
107
+ modelId: model.modelId,
108
+ config: model.config,
109
+ });
110
+ }
111
+
112
+ static [WORKFLOW_DESERIALIZE](options: {
113
+ modelId: '';
114
+ config: HumeSpeechModelConfig;
115
+ }) {
116
+ return new HumeSpeechModel(options.modelId as '', options.config);
117
+ }
118
+
102
119
  constructor(
103
120
  readonly modelId: '',
104
121
  private readonly config: HumeSpeechModelConfig,
@@ -112,8 +129,8 @@ export class HumeSpeechModel implements SpeechModelV3 {
112
129
  instructions,
113
130
  language,
114
131
  providerOptions,
115
- }: Parameters<SpeechModelV3['doGenerate']>[0]) {
116
- const warnings: SharedV3Warning[] = [];
132
+ }: Parameters<SpeechModelV4['doGenerate']>[0]) {
133
+ const warnings: SharedV4Warning[] = [];
117
134
 
118
135
  // Parse provider options
119
136
  const humeOptions = await parseProviderOptions({
@@ -201,8 +218,8 @@ export class HumeSpeechModel implements SpeechModelV3 {
201
218
  }
202
219
 
203
220
  async doGenerate(
204
- options: Parameters<SpeechModelV3['doGenerate']>[0],
205
- ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {
221
+ options: Parameters<SpeechModelV4['doGenerate']>[0],
222
+ ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {
206
223
  const currentDate = this.config._internal?.currentDate?.() ?? new Date();
207
224
  const { requestBody, warnings } = await this.getArgs(options);
208
225
 
@@ -215,7 +232,7 @@ export class HumeSpeechModel implements SpeechModelV3 {
215
232
  path: '/v0/tts/file',
216
233
  modelId: this.modelId,
217
234
  }),
218
- headers: combineHeaders(this.config.headers(), options.headers),
235
+ headers: combineHeaders(this.config.headers?.(), options.headers),
219
236
  body: requestBody,
220
237
  failedResponseHandler: humeFailedResponseHandler,
221
238
  successfulResponseHandler: createBinaryResponseHandler(),
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"]}