@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 +159 -0
- package/README.md +2 -0
- package/dist/index.d.ts +17 -8
- package/dist/index.js +58 -67
- package/dist/index.js.map +1 -1
- package/package.json +7 -9
- package/src/hume-config.ts +1 -1
- package/src/hume-provider.ts +3 -3
- package/src/hume-speech-model.ts +25 -8
- 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,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
|
|
2
|
-
import {
|
|
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
|
|
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
|
|
48
|
+
declare class HumeSpeechModel implements SpeechModelV4 {
|
|
48
49
|
readonly modelId: '';
|
|
49
50
|
private readonly config;
|
|
50
|
-
readonly specificationVersion = "
|
|
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<
|
|
63
|
+
doGenerate(options: Parameters<SpeechModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>>;
|
|
55
64
|
}
|
|
56
65
|
|
|
57
|
-
interface HumeProvider extends Pick<
|
|
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():
|
|
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
|
-
|
|
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
|
+
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
|
-
|
|
38
|
-
|
|
39
|
-
var humeErrorDataSchema =
|
|
40
|
-
error:
|
|
41
|
-
message:
|
|
42
|
-
code:
|
|
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 =
|
|
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 =
|
|
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:
|
|
40
|
+
context: z2.object({
|
|
58
41
|
/**
|
|
59
42
|
* ID of a previously generated speech synthesis to retrieve.
|
|
60
43
|
*/
|
|
61
|
-
generationId:
|
|
44
|
+
generationId: z2.string()
|
|
62
45
|
}).or(
|
|
63
|
-
|
|
46
|
+
z2.object({
|
|
64
47
|
/**
|
|
65
48
|
* List of utterances to synthesize into speech.
|
|
66
49
|
*/
|
|
67
|
-
utterances:
|
|
68
|
-
|
|
50
|
+
utterances: z2.array(
|
|
51
|
+
z2.object({
|
|
69
52
|
/**
|
|
70
53
|
* The text content to convert to speech.
|
|
71
54
|
*/
|
|
72
|
-
text:
|
|
55
|
+
text: z2.string(),
|
|
73
56
|
/**
|
|
74
57
|
* Optional description or instructions for how the text should be spoken.
|
|
75
58
|
*/
|
|
76
|
-
description:
|
|
59
|
+
description: z2.string().optional(),
|
|
77
60
|
/**
|
|
78
61
|
* Optional speech rate multiplier.
|
|
79
62
|
*/
|
|
80
|
-
speed:
|
|
63
|
+
speed: z2.number().optional(),
|
|
81
64
|
/**
|
|
82
65
|
* Optional duration of silence to add after the utterance in seconds.
|
|
83
66
|
*/
|
|
84
|
-
trailingSilence:
|
|
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:
|
|
72
|
+
voice: z2.object({
|
|
90
73
|
/**
|
|
91
74
|
* ID of the voice to use.
|
|
92
75
|
*/
|
|
93
|
-
id:
|
|
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:
|
|
80
|
+
provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
|
|
98
81
|
}).or(
|
|
99
|
-
|
|
82
|
+
z2.object({
|
|
100
83
|
/**
|
|
101
84
|
* Name of the voice to use.
|
|
102
85
|
*/
|
|
103
|
-
name:
|
|
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:
|
|
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 = "
|
|
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
|
|
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
|
|
202
|
+
} = await postJsonToApi({
|
|
211
203
|
url: this.config.url({
|
|
212
204
|
path: "/v0/tts/file",
|
|
213
205
|
modelId: this.modelId
|
|
214
206
|
}),
|
|
215
|
-
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:
|
|
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.
|
|
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 = () =>
|
|
235
|
+
const getHeaders = () => withUserAgentSuffix(
|
|
244
236
|
{
|
|
245
|
-
"X-Hume-Api-Key":
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.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.
|
|
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-config.ts
CHANGED
|
@@ -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
|
|
6
|
+
headers?: () => Record<string, string | undefined>;
|
|
7
7
|
fetch?: FetchFunction;
|
|
8
8
|
generateId?: () => string;
|
|
9
9
|
};
|
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,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
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
|
|
96
|
-
readonly specificationVersion = '
|
|
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<
|
|
116
|
-
const warnings:
|
|
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<
|
|
205
|
-
): Promise<Awaited<ReturnType<
|
|
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
|
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"]}
|