@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 +142 -0
- package/README.md +2 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +44 -65
- package/dist/index.js.map +1 -1
- package/package.json +7 -9
- package/src/hume-provider.ts +3 -3
- package/src/hume-speech-model.ts +7 -7
- package/dist/index.d.mts +0 -92
- package/dist/index.mjs +0 -255
- package/dist/index.mjs.map +0 -1
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 {
|
|
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
|
|
47
|
+
declare class HumeSpeechModel implements SpeechModelV4 {
|
|
48
48
|
readonly modelId: '';
|
|
49
49
|
private readonly config;
|
|
50
|
-
readonly specificationVersion = "
|
|
50
|
+
readonly specificationVersion = "v4";
|
|
51
51
|
get provider(): string;
|
|
52
52
|
constructor(modelId: '', config: HumeSpeechModelConfig);
|
|
53
53
|
private getArgs;
|
|
54
|
-
doGenerate(options: Parameters<
|
|
54
|
+
doGenerate(options: Parameters<SpeechModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>>;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
interface HumeProvider extends Pick<
|
|
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():
|
|
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
|
-
|
|
2
|
+
import {
|
|
3
|
+
loadApiKey,
|
|
4
|
+
withUserAgentSuffix
|
|
5
|
+
} from "@ai-sdk/provider-utils";
|
|
31
6
|
|
|
32
7
|
// src/hume-speech-model.ts
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
var humeErrorDataSchema =
|
|
40
|
-
error:
|
|
41
|
-
message:
|
|
42
|
-
code:
|
|
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 =
|
|
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 =
|
|
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:
|
|
37
|
+
context: z2.object({
|
|
58
38
|
/**
|
|
59
39
|
* ID of a previously generated speech synthesis to retrieve.
|
|
60
40
|
*/
|
|
61
|
-
generationId:
|
|
41
|
+
generationId: z2.string()
|
|
62
42
|
}).or(
|
|
63
|
-
|
|
43
|
+
z2.object({
|
|
64
44
|
/**
|
|
65
45
|
* List of utterances to synthesize into speech.
|
|
66
46
|
*/
|
|
67
|
-
utterances:
|
|
68
|
-
|
|
47
|
+
utterances: z2.array(
|
|
48
|
+
z2.object({
|
|
69
49
|
/**
|
|
70
50
|
* The text content to convert to speech.
|
|
71
51
|
*/
|
|
72
|
-
text:
|
|
52
|
+
text: z2.string(),
|
|
73
53
|
/**
|
|
74
54
|
* Optional description or instructions for how the text should be spoken.
|
|
75
55
|
*/
|
|
76
|
-
description:
|
|
56
|
+
description: z2.string().optional(),
|
|
77
57
|
/**
|
|
78
58
|
* Optional speech rate multiplier.
|
|
79
59
|
*/
|
|
80
|
-
speed:
|
|
60
|
+
speed: z2.number().optional(),
|
|
81
61
|
/**
|
|
82
62
|
* Optional duration of silence to add after the utterance in seconds.
|
|
83
63
|
*/
|
|
84
|
-
trailingSilence:
|
|
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:
|
|
69
|
+
voice: z2.object({
|
|
90
70
|
/**
|
|
91
71
|
* ID of the voice to use.
|
|
92
72
|
*/
|
|
93
|
-
id:
|
|
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:
|
|
77
|
+
provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
|
|
98
78
|
}).or(
|
|
99
|
-
|
|
79
|
+
z2.object({
|
|
100
80
|
/**
|
|
101
81
|
* Name of the voice to use.
|
|
102
82
|
*/
|
|
103
|
-
name:
|
|
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:
|
|
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 = "
|
|
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
|
|
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
|
|
190
|
+
} = await postJsonToApi({
|
|
211
191
|
url: this.config.url({
|
|
212
192
|
path: "/v0/tts/file",
|
|
213
193
|
modelId: this.modelId
|
|
214
194
|
}),
|
|
215
|
-
headers:
|
|
195
|
+
headers: combineHeaders(this.config.headers(), options.headers),
|
|
216
196
|
body: requestBody,
|
|
217
197
|
failedResponseHandler: humeFailedResponseHandler,
|
|
218
|
-
successfulResponseHandler:
|
|
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.
|
|
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 = () =>
|
|
223
|
+
const getHeaders = () => withUserAgentSuffix(
|
|
244
224
|
{
|
|
245
|
-
"X-Hume-Api-Key":
|
|
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
|
-
|
|
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":";AACA;AAAA,EAEE;AAAA,EACA;AAAA,OACK;;;ACJP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAAA,UAAS;;;ACPlB,SAAS,SAAS;AAClB,SAAS,sCAAsC;AAExC,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,OAAO,EAAE,OAAO;AAAA,IACd,SAAS,EAAE,OAAO;AAAA,IAClB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAIM,IAAM,4BAA4B,+BAA+B;AAAA,EACtE,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK,MAAM;AACrC,CAAC;;;ADFD,IAAM,+BAA+BC,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5C,SAASA,GACN,OAAO;AAAA;AAAA;AAAA;AAAA,IAIN,cAAcA,GAAE,OAAO;AAAA,EACzB,CAAC,EACA;AAAA,IACCA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,MAIP,YAAYA,GAAE;AAAA,QACZA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,UAIP,MAAMA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,UAIf,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,UAIjC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,UAI3B,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,UAKrC,OAAOA,GACJ,OAAO;AAAA;AAAA;AAAA;AAAA,YAIN,IAAIA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,YAIb,UAAUA,GAAE,KAAK,CAAC,WAAW,cAAc,CAAC,EAAE,SAAS;AAAA,UACzD,CAAC,EACA;AAAA,YACCA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,cAIP,MAAMA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,cAIf,UAAUA,GAAE,KAAK,CAAC,WAAW,cAAc,CAAC,EAAE,SAAS;AAAA,YACzD,CAAC;AAAA,UACH,EACC,SAAS;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,EACC,QAAQ;AACb,CAAC;AAYM,IAAM,kBAAN,MAA+C;AAAA,EAOpD,YACW,SACQ,QACjB;AAFS;AACQ;AARnB,SAAS,uBAAuB;AAAA,EAS7B;AAAA,EAPH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA+C;AAC7C,UAAM,WAA8B,CAAC;AAGrC,UAAM,cAAc,MAAM,qBAAqB;AAAA,MAC7C,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAGD,UAAM,cAAkC;AAAA,MACtC,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,EAAE,MAAM,MAAM;AAAA,IACxB;AAEA,QAAI,cAAc;AAChB,UAAI,CAAC,OAAO,OAAO,KAAK,EAAE,SAAS,YAAY,GAAG;AAChD,oBAAY,SAAS,EAAE,MAAM,aAAsC;AAAA,MACrE,OAAO;AACL,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,8BAA8B,YAAY;AAAA,QACrD,CAAC;AAAA,MACH;AAAA,IACF;AAGA,QAAI,aAAa;AACf,YAAM,qBAGF,CAAC;AAEL,UAAI,YAAY,SAAS;AACvB,YAAI,kBAAkB,YAAY,SAAS;AACzC,6BAAmB,UAAU;AAAA,YAC3B,eAAe,YAAY,QAAQ;AAAA,UACrC;AAAA,QACF,OAAO;AACL,6BAAmB,UAAU;AAAA,YAC3B,YAAY,YAAY,QAAQ,WAAW,IAAI,gBAAc;AAAA,cAC3D,MAAM,UAAU;AAAA,cAChB,aAAa,UAAU;AAAA,cACvB,OAAO,UAAU;AAAA,cACjB,kBAAkB,UAAU;AAAA,cAC5B,OAAO,UAAU;AAAA,YACnB,EAAE;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAEA,iBAAW,OAAO,oBAAoB;AACpC,cAAM,QACJ,mBACE,GACF;AACF,YAAI,UAAU,QAAW;AACvB,UAAC,YAAwC,GAAG,IAAI;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,6EAA6E,QAAQ;AAAA,MAChG,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC2D;AA5M/D;AA6MI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,aAAa,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAE5D,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,MAAM,cAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,SAAS,eAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2B,4BAA4B;AAAA,MACvD,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS;AAAA,QACP,MAAM,KAAK,UAAU,WAAW;AAAA,MAClC;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;;;AE7OO,IAAM,UACX,OACI,kBACA;;;AHoCC,SAAS,WAAW,UAAgC,CAAC,GAAiB;AAC3E,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,kBAAkB,WAAW;AAAA,QAC3B,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC;AAAA,MACD,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,eAAe,OAAO;AAAA,EACxB;AAEF,QAAM,oBAAoB,MACxB,IAAI,gBAAgB,IAAI;AAAA,IACtB,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,sBAAsB,IAAI;AAAA,IAC7C,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,WAAY;AAC3B,WAAO;AAAA,MACL,QAAQ,kBAAkB;AAAA,IAC5B;AAAA,EACF;AAEA,WAAS,SAAS;AAClB,WAAS,cAAc;AAEvB,SAAO;AACT;AAKO,IAAM,OAAO,WAAW;","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.
|
|
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.
|
|
28
|
-
"
|
|
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.
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.0-beta.
|
|
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.
|
|
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",
|
package/src/hume-provider.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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<
|
|
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():
|
|
18
|
+
speech(): SpeechModelV4;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export interface HumeProviderSettings {
|
package/src/hume-speech-model.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
96
|
-
readonly specificationVersion = '
|
|
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<
|
|
116
|
-
const warnings:
|
|
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<
|
|
205
|
-
): Promise<Awaited<ReturnType<
|
|
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
|
package/dist/index.mjs.map
DELETED
|
@@ -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"]}
|