@ai-sdk/hume 3.0.0-beta.9 → 3.0.0-canary.32
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 +201 -0
- package/README.md +2 -0
- package/dist/index.d.ts +39 -29
- package/dist/index.js +85 -67
- package/dist/index.js.map +1 -1
- package/package.json +11 -9
- package/src/hume-config.ts +2 -2
- package/src/hume-provider.ts +33 -4
- package/src/hume-speech-model-options.ts +77 -0
- package/src/hume-speech-model.ts +22 -81
- package/src/index.ts +1 -1
- 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,206 @@
|
|
|
1
1
|
# @ai-sdk/hume
|
|
2
2
|
|
|
3
|
+
## 3.0.0-canary.32
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0c4c275: trigger initial canary release
|
|
8
|
+
- Updated dependencies [0c4c275]
|
|
9
|
+
- @ai-sdk/provider-utils@5.0.0-canary.31
|
|
10
|
+
- @ai-sdk/provider@4.0.0-canary.15
|
|
11
|
+
|
|
12
|
+
## 3.0.0-beta.31
|
|
13
|
+
|
|
14
|
+
### Major Changes
|
|
15
|
+
|
|
16
|
+
- 04e9009: chore: make provider implementations code patterns more consistent, including renaming certain exported symbols
|
|
17
|
+
|
|
18
|
+
For all externally exported symbols that were renamed, the old names continue to work via deprecated aliases.
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [08d2129]
|
|
23
|
+
- @ai-sdk/provider-utils@5.0.0-beta.30
|
|
24
|
+
|
|
25
|
+
## 3.0.0-beta.30
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- 258c093: chore: ensure consistent import handling and avoid import duplicates or cycles
|
|
30
|
+
- Updated dependencies [9bd6512]
|
|
31
|
+
- Updated dependencies [258c093]
|
|
32
|
+
- Updated dependencies [b6783da]
|
|
33
|
+
- @ai-sdk/provider-utils@5.0.0-beta.29
|
|
34
|
+
- @ai-sdk/provider@4.0.0-beta.14
|
|
35
|
+
|
|
36
|
+
## 3.0.0-beta.29
|
|
37
|
+
|
|
38
|
+
### Patch Changes
|
|
39
|
+
|
|
40
|
+
- 9f0e36c: trigger release for all packages after provenance setup
|
|
41
|
+
- Updated dependencies [9f0e36c]
|
|
42
|
+
- @ai-sdk/provider@4.0.0-beta.13
|
|
43
|
+
- @ai-sdk/provider-utils@5.0.0-beta.28
|
|
44
|
+
|
|
45
|
+
## 3.0.0-beta.28
|
|
46
|
+
|
|
47
|
+
### Patch Changes
|
|
48
|
+
|
|
49
|
+
- Updated dependencies [785fe16]
|
|
50
|
+
- Updated dependencies [67df0a0]
|
|
51
|
+
- Updated dependencies [befb78c]
|
|
52
|
+
- Updated dependencies [0458559]
|
|
53
|
+
- Updated dependencies [5852c0a]
|
|
54
|
+
- Updated dependencies [fc92055]
|
|
55
|
+
- @ai-sdk/provider-utils@5.0.0-beta.27
|
|
56
|
+
|
|
57
|
+
## 3.0.0-beta.27
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- Updated dependencies [2e98477]
|
|
62
|
+
- @ai-sdk/provider-utils@5.0.0-beta.26
|
|
63
|
+
|
|
64
|
+
## 3.0.0-beta.26
|
|
65
|
+
|
|
66
|
+
### Patch Changes
|
|
67
|
+
|
|
68
|
+
- Updated dependencies [eea8d98]
|
|
69
|
+
- @ai-sdk/provider-utils@5.0.0-beta.25
|
|
70
|
+
|
|
71
|
+
## 3.0.0-beta.25
|
|
72
|
+
|
|
73
|
+
### Patch Changes
|
|
74
|
+
|
|
75
|
+
- Updated dependencies [f807e45]
|
|
76
|
+
- @ai-sdk/provider-utils@5.0.0-beta.24
|
|
77
|
+
|
|
78
|
+
## 3.0.0-beta.24
|
|
79
|
+
|
|
80
|
+
### Patch Changes
|
|
81
|
+
|
|
82
|
+
- Updated dependencies [350ea38]
|
|
83
|
+
- @ai-sdk/provider-utils@5.0.0-beta.23
|
|
84
|
+
|
|
85
|
+
## 3.0.0-beta.23
|
|
86
|
+
|
|
87
|
+
### Patch Changes
|
|
88
|
+
|
|
89
|
+
- Updated dependencies [083947b]
|
|
90
|
+
- @ai-sdk/provider-utils@5.0.0-beta.22
|
|
91
|
+
|
|
92
|
+
## 3.0.0-beta.22
|
|
93
|
+
|
|
94
|
+
### Patch Changes
|
|
95
|
+
|
|
96
|
+
- Updated dependencies [add1126]
|
|
97
|
+
- @ai-sdk/provider-utils@5.0.0-beta.21
|
|
98
|
+
|
|
99
|
+
## 3.0.0-beta.21
|
|
100
|
+
|
|
101
|
+
### Patch Changes
|
|
102
|
+
|
|
103
|
+
- b3976a2: Add workflow serialization support to all provider models.
|
|
104
|
+
|
|
105
|
+
**`@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.
|
|
106
|
+
|
|
107
|
+
**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.
|
|
108
|
+
|
|
109
|
+
All provider model classes now include `WORKFLOW_SERIALIZE` and `WORKFLOW_DESERIALIZE` static methods, enabling them to cross workflow step boundaries without serialization errors.
|
|
110
|
+
|
|
111
|
+
- Updated dependencies [b3976a2]
|
|
112
|
+
- Updated dependencies [ff5eba1]
|
|
113
|
+
- @ai-sdk/provider-utils@5.0.0-beta.20
|
|
114
|
+
- @ai-sdk/provider@4.0.0-beta.12
|
|
115
|
+
|
|
116
|
+
## 3.0.0-beta.20
|
|
117
|
+
|
|
118
|
+
### Major Changes
|
|
119
|
+
|
|
120
|
+
- ef992f8: Remove CommonJS exports from all packages. All packages are now ESM-only (`"type": "module"`). Consumers using `require()` must switch to ESM `import` syntax.
|
|
121
|
+
|
|
122
|
+
### Patch Changes
|
|
123
|
+
|
|
124
|
+
- Updated dependencies [ef992f8]
|
|
125
|
+
- @ai-sdk/provider@4.0.0-beta.11
|
|
126
|
+
- @ai-sdk/provider-utils@5.0.0-beta.19
|
|
127
|
+
|
|
128
|
+
## 3.0.0-beta.19
|
|
129
|
+
|
|
130
|
+
### Patch Changes
|
|
131
|
+
|
|
132
|
+
- Updated dependencies [90e2d8a]
|
|
133
|
+
- @ai-sdk/provider-utils@5.0.0-beta.18
|
|
134
|
+
|
|
135
|
+
## 3.0.0-beta.18
|
|
136
|
+
|
|
137
|
+
### Patch Changes
|
|
138
|
+
|
|
139
|
+
- Updated dependencies [3ae1786]
|
|
140
|
+
- @ai-sdk/provider-utils@5.0.0-beta.17
|
|
141
|
+
|
|
142
|
+
## 3.0.0-beta.17
|
|
143
|
+
|
|
144
|
+
### Patch Changes
|
|
145
|
+
|
|
146
|
+
- Updated dependencies [176466a]
|
|
147
|
+
- @ai-sdk/provider@4.0.0-beta.10
|
|
148
|
+
- @ai-sdk/provider-utils@5.0.0-beta.16
|
|
149
|
+
|
|
150
|
+
## 3.0.0-beta.16
|
|
151
|
+
|
|
152
|
+
### Patch Changes
|
|
153
|
+
|
|
154
|
+
- Updated dependencies [e311194]
|
|
155
|
+
- @ai-sdk/provider@4.0.0-beta.9
|
|
156
|
+
- @ai-sdk/provider-utils@5.0.0-beta.15
|
|
157
|
+
|
|
158
|
+
## 3.0.0-beta.15
|
|
159
|
+
|
|
160
|
+
### Patch Changes
|
|
161
|
+
|
|
162
|
+
- Updated dependencies [34bd95d]
|
|
163
|
+
- Updated dependencies [008271d]
|
|
164
|
+
- @ai-sdk/provider@4.0.0-beta.8
|
|
165
|
+
- @ai-sdk/provider-utils@5.0.0-beta.14
|
|
166
|
+
|
|
167
|
+
## 3.0.0-beta.14
|
|
168
|
+
|
|
169
|
+
### Patch Changes
|
|
170
|
+
|
|
171
|
+
- Updated dependencies [b0c2869]
|
|
172
|
+
- Updated dependencies [7e26e81]
|
|
173
|
+
- @ai-sdk/provider-utils@5.0.0-beta.13
|
|
174
|
+
|
|
175
|
+
## 3.0.0-beta.13
|
|
176
|
+
|
|
177
|
+
### Patch Changes
|
|
178
|
+
|
|
179
|
+
- Updated dependencies [46d1149]
|
|
180
|
+
- @ai-sdk/provider-utils@5.0.0-beta.12
|
|
181
|
+
|
|
182
|
+
## 3.0.0-beta.12
|
|
183
|
+
|
|
184
|
+
### Patch Changes
|
|
185
|
+
|
|
186
|
+
- Updated dependencies [6fd51c0]
|
|
187
|
+
- @ai-sdk/provider-utils@5.0.0-beta.11
|
|
188
|
+
- @ai-sdk/provider@4.0.0-beta.7
|
|
189
|
+
|
|
190
|
+
## 3.0.0-beta.11
|
|
191
|
+
|
|
192
|
+
### Patch Changes
|
|
193
|
+
|
|
194
|
+
- Updated dependencies [c29a26f]
|
|
195
|
+
- @ai-sdk/provider-utils@5.0.0-beta.10
|
|
196
|
+
- @ai-sdk/provider@4.0.0-beta.6
|
|
197
|
+
|
|
198
|
+
## 3.0.0-beta.10
|
|
199
|
+
|
|
200
|
+
### Patch Changes
|
|
201
|
+
|
|
202
|
+
- 38fc777: Add AI Gateway hint to provider READMEs
|
|
203
|
+
|
|
3
204
|
## 3.0.0-beta.9
|
|
4
205
|
|
|
5
206
|
### 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 * as _ai_sdk_provider from '@ai-sdk/provider';
|
|
1
2
|
import { SpeechModelV4, ProviderV4 } from '@ai-sdk/provider';
|
|
2
|
-
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
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,37 +9,11 @@ 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
|
};
|
|
15
16
|
|
|
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
17
|
interface HumeSpeechModelConfig extends HumeConfig {
|
|
43
18
|
_internal?: {
|
|
44
19
|
currentDate?: () => Date;
|
|
@@ -49,12 +24,20 @@ declare class HumeSpeechModel implements SpeechModelV4 {
|
|
|
49
24
|
private readonly config;
|
|
50
25
|
readonly specificationVersion = "v4";
|
|
51
26
|
get provider(): string;
|
|
27
|
+
static [WORKFLOW_SERIALIZE](model: HumeSpeechModel): {
|
|
28
|
+
modelId: string;
|
|
29
|
+
config: _ai_sdk_provider.JSONObject;
|
|
30
|
+
};
|
|
31
|
+
static [WORKFLOW_DESERIALIZE](options: {
|
|
32
|
+
modelId: '';
|
|
33
|
+
config: HumeSpeechModelConfig;
|
|
34
|
+
}): HumeSpeechModel;
|
|
52
35
|
constructor(modelId: '', config: HumeSpeechModelConfig);
|
|
53
36
|
private getArgs;
|
|
54
37
|
doGenerate(options: Parameters<SpeechModelV4['doGenerate']>[0]): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>>;
|
|
55
38
|
}
|
|
56
39
|
|
|
57
|
-
interface HumeProvider extends
|
|
40
|
+
interface HumeProvider extends ProviderV4 {
|
|
58
41
|
(settings?: {}): {
|
|
59
42
|
speech: HumeSpeechModel;
|
|
60
43
|
};
|
|
@@ -87,6 +70,33 @@ declare function createHume(options?: HumeProviderSettings): HumeProvider;
|
|
|
87
70
|
*/
|
|
88
71
|
declare const hume: HumeProvider;
|
|
89
72
|
|
|
73
|
+
declare const humeSpeechModelOptionsSchema: z.ZodObject<{
|
|
74
|
+
context: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodObject<{
|
|
75
|
+
generationId: z.ZodString;
|
|
76
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
77
|
+
utterances: z.ZodArray<z.ZodObject<{
|
|
78
|
+
text: z.ZodString;
|
|
79
|
+
description: z.ZodOptional<z.ZodString>;
|
|
80
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
81
|
+
trailingSilence: z.ZodOptional<z.ZodNumber>;
|
|
82
|
+
voice: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
|
|
83
|
+
id: z.ZodString;
|
|
84
|
+
provider: z.ZodOptional<z.ZodEnum<{
|
|
85
|
+
HUME_AI: "HUME_AI";
|
|
86
|
+
CUSTOM_VOICE: "CUSTOM_VOICE";
|
|
87
|
+
}>>;
|
|
88
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
89
|
+
name: z.ZodString;
|
|
90
|
+
provider: z.ZodOptional<z.ZodEnum<{
|
|
91
|
+
HUME_AI: "HUME_AI";
|
|
92
|
+
CUSTOM_VOICE: "CUSTOM_VOICE";
|
|
93
|
+
}>>;
|
|
94
|
+
}, z.core.$strip>]>>;
|
|
95
|
+
}, z.core.$strip>>;
|
|
96
|
+
}, z.core.$strip>]>>>;
|
|
97
|
+
}, z.core.$strip>;
|
|
98
|
+
type HumeSpeechModelOptions = z.infer<typeof humeSpeechModelOptionsSchema>;
|
|
99
|
+
|
|
90
100
|
declare const VERSION: string;
|
|
91
101
|
|
|
92
102
|
export { type HumeProvider, type HumeProviderSettings, type HumeSpeechModelOptions, VERSION, createHume, hume };
|
package/dist/index.js
CHANGED
|
@@ -1,110 +1,96 @@
|
|
|
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
|
+
NoSuchModelError
|
|
4
|
+
} from "@ai-sdk/provider";
|
|
5
|
+
import {
|
|
6
|
+
loadApiKey,
|
|
7
|
+
withUserAgentSuffix
|
|
8
|
+
} from "@ai-sdk/provider-utils";
|
|
31
9
|
|
|
32
10
|
// src/hume-speech-model.ts
|
|
33
|
-
|
|
34
|
-
|
|
11
|
+
import {
|
|
12
|
+
combineHeaders,
|
|
13
|
+
createBinaryResponseHandler,
|
|
14
|
+
parseProviderOptions,
|
|
15
|
+
postJsonToApi,
|
|
16
|
+
serializeModelOptions,
|
|
17
|
+
WORKFLOW_SERIALIZE,
|
|
18
|
+
WORKFLOW_DESERIALIZE
|
|
19
|
+
} from "@ai-sdk/provider-utils";
|
|
35
20
|
|
|
36
21
|
// src/hume-error.ts
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
var humeErrorDataSchema =
|
|
40
|
-
error:
|
|
41
|
-
message:
|
|
42
|
-
code:
|
|
22
|
+
import { z } from "zod/v4";
|
|
23
|
+
import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
|
|
24
|
+
var humeErrorDataSchema = z.object({
|
|
25
|
+
error: z.object({
|
|
26
|
+
message: z.string(),
|
|
27
|
+
code: z.number()
|
|
43
28
|
})
|
|
44
29
|
});
|
|
45
|
-
var humeFailedResponseHandler =
|
|
30
|
+
var humeFailedResponseHandler = createJsonErrorResponseHandler({
|
|
46
31
|
errorSchema: humeErrorDataSchema,
|
|
47
32
|
errorToMessage: (data) => data.error.message
|
|
48
33
|
});
|
|
49
34
|
|
|
50
|
-
// src/hume-speech-model.ts
|
|
51
|
-
|
|
35
|
+
// src/hume-speech-model-options.ts
|
|
36
|
+
import { z as z2 } from "zod/v4";
|
|
37
|
+
var humeSpeechModelOptionsSchema = z2.object({
|
|
52
38
|
/**
|
|
53
39
|
* Context for the speech synthesis request.
|
|
54
40
|
* Can be either a generationId for retrieving a previous generation,
|
|
55
41
|
* or a list of utterances to synthesize.
|
|
56
42
|
*/
|
|
57
|
-
context:
|
|
43
|
+
context: z2.object({
|
|
58
44
|
/**
|
|
59
45
|
* ID of a previously generated speech synthesis to retrieve.
|
|
60
46
|
*/
|
|
61
|
-
generationId:
|
|
47
|
+
generationId: z2.string()
|
|
62
48
|
}).or(
|
|
63
|
-
|
|
49
|
+
z2.object({
|
|
64
50
|
/**
|
|
65
51
|
* List of utterances to synthesize into speech.
|
|
66
52
|
*/
|
|
67
|
-
utterances:
|
|
68
|
-
|
|
53
|
+
utterances: z2.array(
|
|
54
|
+
z2.object({
|
|
69
55
|
/**
|
|
70
56
|
* The text content to convert to speech.
|
|
71
57
|
*/
|
|
72
|
-
text:
|
|
58
|
+
text: z2.string(),
|
|
73
59
|
/**
|
|
74
60
|
* Optional description or instructions for how the text should be spoken.
|
|
75
61
|
*/
|
|
76
|
-
description:
|
|
62
|
+
description: z2.string().optional(),
|
|
77
63
|
/**
|
|
78
64
|
* Optional speech rate multiplier.
|
|
79
65
|
*/
|
|
80
|
-
speed:
|
|
66
|
+
speed: z2.number().optional(),
|
|
81
67
|
/**
|
|
82
68
|
* Optional duration of silence to add after the utterance in seconds.
|
|
83
69
|
*/
|
|
84
|
-
trailingSilence:
|
|
70
|
+
trailingSilence: z2.number().optional(),
|
|
85
71
|
/**
|
|
86
72
|
* Voice configuration for the utterance.
|
|
87
73
|
* Can be specified by ID or name.
|
|
88
74
|
*/
|
|
89
|
-
voice:
|
|
75
|
+
voice: z2.object({
|
|
90
76
|
/**
|
|
91
77
|
* ID of the voice to use.
|
|
92
78
|
*/
|
|
93
|
-
id:
|
|
79
|
+
id: z2.string(),
|
|
94
80
|
/**
|
|
95
81
|
* Provider of the voice, either Hume's built-in voices or a custom voice.
|
|
96
82
|
*/
|
|
97
|
-
provider:
|
|
83
|
+
provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
|
|
98
84
|
}).or(
|
|
99
|
-
|
|
85
|
+
z2.object({
|
|
100
86
|
/**
|
|
101
87
|
* Name of the voice to use.
|
|
102
88
|
*/
|
|
103
|
-
name:
|
|
89
|
+
name: z2.string(),
|
|
104
90
|
/**
|
|
105
91
|
* Provider of the voice, either Hume's built-in voices or a custom voice.
|
|
106
92
|
*/
|
|
107
|
-
provider:
|
|
93
|
+
provider: z2.enum(["HUME_AI", "CUSTOM_VOICE"]).optional()
|
|
108
94
|
})
|
|
109
95
|
).optional()
|
|
110
96
|
})
|
|
@@ -112,7 +98,9 @@ var humeSpeechModelOptionsSchema = import_v42.z.object({
|
|
|
112
98
|
})
|
|
113
99
|
).nullish()
|
|
114
100
|
});
|
|
115
|
-
|
|
101
|
+
|
|
102
|
+
// src/hume-speech-model.ts
|
|
103
|
+
var HumeSpeechModel = class _HumeSpeechModel {
|
|
116
104
|
constructor(modelId, config) {
|
|
117
105
|
this.modelId = modelId;
|
|
118
106
|
this.config = config;
|
|
@@ -121,6 +109,15 @@ var HumeSpeechModel = class {
|
|
|
121
109
|
get provider() {
|
|
122
110
|
return this.config.provider;
|
|
123
111
|
}
|
|
112
|
+
static [WORKFLOW_SERIALIZE](model) {
|
|
113
|
+
return serializeModelOptions({
|
|
114
|
+
modelId: model.modelId,
|
|
115
|
+
config: model.config
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
static [WORKFLOW_DESERIALIZE](options) {
|
|
119
|
+
return new _HumeSpeechModel(options.modelId, options.config);
|
|
120
|
+
}
|
|
124
121
|
async getArgs({
|
|
125
122
|
text,
|
|
126
123
|
voice = "d8ab67c6-953d-4bd8-9370-8fa53a0f1453",
|
|
@@ -131,7 +128,7 @@ var HumeSpeechModel = class {
|
|
|
131
128
|
providerOptions
|
|
132
129
|
}) {
|
|
133
130
|
const warnings = [];
|
|
134
|
-
const humeOptions = await
|
|
131
|
+
const humeOptions = await parseProviderOptions({
|
|
135
132
|
provider: "hume",
|
|
136
133
|
providerOptions,
|
|
137
134
|
schema: humeSpeechModelOptionsSchema
|
|
@@ -200,22 +197,22 @@ var HumeSpeechModel = class {
|
|
|
200
197
|
};
|
|
201
198
|
}
|
|
202
199
|
async doGenerate(options) {
|
|
203
|
-
var _a, _b, _c;
|
|
200
|
+
var _a, _b, _c, _d, _e;
|
|
204
201
|
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
202
|
const { requestBody, warnings } = await this.getArgs(options);
|
|
206
203
|
const {
|
|
207
204
|
value: audio,
|
|
208
205
|
responseHeaders,
|
|
209
206
|
rawValue: rawResponse
|
|
210
|
-
} = await
|
|
207
|
+
} = await postJsonToApi({
|
|
211
208
|
url: this.config.url({
|
|
212
209
|
path: "/v0/tts/file",
|
|
213
210
|
modelId: this.modelId
|
|
214
211
|
}),
|
|
215
|
-
headers: (
|
|
212
|
+
headers: combineHeaders((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
|
|
216
213
|
body: requestBody,
|
|
217
214
|
failedResponseHandler: humeFailedResponseHandler,
|
|
218
|
-
successfulResponseHandler:
|
|
215
|
+
successfulResponseHandler: createBinaryResponseHandler(),
|
|
219
216
|
abortSignal: options.abortSignal,
|
|
220
217
|
fetch: this.config.fetch
|
|
221
218
|
});
|
|
@@ -236,13 +233,13 @@ var HumeSpeechModel = class {
|
|
|
236
233
|
};
|
|
237
234
|
|
|
238
235
|
// src/version.ts
|
|
239
|
-
var VERSION = true ? "3.0.0-
|
|
236
|
+
var VERSION = true ? "3.0.0-canary.32" : "0.0.0-test";
|
|
240
237
|
|
|
241
238
|
// src/hume-provider.ts
|
|
242
239
|
function createHume(options = {}) {
|
|
243
|
-
const getHeaders = () =>
|
|
240
|
+
const getHeaders = () => withUserAgentSuffix(
|
|
244
241
|
{
|
|
245
|
-
"X-Hume-Api-Key":
|
|
242
|
+
"X-Hume-Api-Key": loadApiKey({
|
|
246
243
|
apiKey: options.apiKey,
|
|
247
244
|
environmentVariableName: "HUME_API_KEY",
|
|
248
245
|
description: "Hume"
|
|
@@ -262,15 +259,36 @@ function createHume(options = {}) {
|
|
|
262
259
|
speech: createSpeechModel()
|
|
263
260
|
};
|
|
264
261
|
};
|
|
262
|
+
provider.specificationVersion = "v4";
|
|
265
263
|
provider.speech = createSpeechModel;
|
|
266
264
|
provider.speechModel = createSpeechModel;
|
|
265
|
+
provider.languageModel = (modelId) => {
|
|
266
|
+
throw new NoSuchModelError({
|
|
267
|
+
modelId,
|
|
268
|
+
modelType: "languageModel",
|
|
269
|
+
message: "Hume does not provide language models"
|
|
270
|
+
});
|
|
271
|
+
};
|
|
272
|
+
provider.embeddingModel = (modelId) => {
|
|
273
|
+
throw new NoSuchModelError({
|
|
274
|
+
modelId,
|
|
275
|
+
modelType: "embeddingModel",
|
|
276
|
+
message: "Hume does not provide embedding models"
|
|
277
|
+
});
|
|
278
|
+
};
|
|
279
|
+
provider.imageModel = (modelId) => {
|
|
280
|
+
throw new NoSuchModelError({
|
|
281
|
+
modelId,
|
|
282
|
+
modelType: "imageModel",
|
|
283
|
+
message: "Hume does not provide image models"
|
|
284
|
+
});
|
|
285
|
+
};
|
|
267
286
|
return provider;
|
|
268
287
|
}
|
|
269
288
|
var hume = createHume();
|
|
270
|
-
|
|
271
|
-
0 && (module.exports = {
|
|
289
|
+
export {
|
|
272
290
|
VERSION,
|
|
273
291
|
createHume,
|
|
274
292
|
hume
|
|
275
|
-
}
|
|
293
|
+
};
|
|
276
294
|
//# 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 { SpeechModelV4, ProviderV4 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { HumeSpeechModel } from './hume-speech-model';\nimport { VERSION } from './version';\n\nexport interface HumeProvider extends Pick<ProviderV4, 'speechModel'> {\n (settings?: {}): {\n speech: HumeSpeechModel;\n };\n\n /**\n * Creates a model for speech synthesis.\n */\n speech(): SpeechModelV4;\n}\n\nexport interface HumeProviderSettings {\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create an Hume provider instance.\n */\nexport function createHume(options: HumeProviderSettings = {}): HumeProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'X-Hume-Api-Key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'HUME_API_KEY',\n description: 'Hume',\n }),\n ...options.headers,\n },\n `ai-sdk/hume/${VERSION}`,\n );\n\n const createSpeechModel = () =>\n new HumeSpeechModel('', {\n provider: `hume.speech`,\n url: ({ path }) => `https://api.hume.ai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function () {\n return {\n speech: createSpeechModel(),\n };\n };\n\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n return provider satisfies HumeProvider;\n}\n\n/**\n * Default Hume provider instance.\n */\nexport const hume = createHume();\n","import { SpeechModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { HumeConfig } from './hume-config';\nimport { humeFailedResponseHandler } from './hume-error';\nimport { HumeSpeechAPITypes } from './hume-api-types';\n\n// https://dev.hume.ai/reference/text-to-speech-tts/synthesize-file\nconst humeSpeechModelOptionsSchema = z.object({\n /**\n * Context for the speech synthesis request.\n * Can be either a generationId for retrieving a previous generation,\n * or a list of utterances to synthesize.\n */\n context: z\n .object({\n /**\n * ID of a previously generated speech synthesis to retrieve.\n */\n generationId: z.string(),\n })\n .or(\n z.object({\n /**\n * List of utterances to synthesize into speech.\n */\n utterances: z.array(\n z.object({\n /**\n * The text content to convert to speech.\n */\n text: z.string(),\n /**\n * Optional description or instructions for how the text should be spoken.\n */\n description: z.string().optional(),\n /**\n * Optional speech rate multiplier.\n */\n speed: z.number().optional(),\n /**\n * Optional duration of silence to add after the utterance in seconds.\n */\n trailingSilence: z.number().optional(),\n /**\n * Voice configuration for the utterance.\n * Can be specified by ID or name.\n */\n voice: z\n .object({\n /**\n * ID of the voice to use.\n */\n id: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n })\n .or(\n z.object({\n /**\n * Name of the voice to use.\n */\n name: z.string(),\n /**\n * Provider of the voice, either Hume's built-in voices or a custom voice.\n */\n provider: z.enum(['HUME_AI', 'CUSTOM_VOICE']).optional(),\n }),\n )\n .optional(),\n }),\n ),\n }),\n )\n .nullish(),\n});\n\nexport type HumeSpeechModelOptions = z.infer<\n typeof humeSpeechModelOptionsSchema\n>;\n\ninterface HumeSpeechModelConfig extends HumeConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class HumeSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: '',\n private readonly config: HumeSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice = 'd8ab67c6-953d-4bd8-9370-8fa53a0f1453',\n outputFormat = 'mp3',\n speed,\n instructions,\n language,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n\n // Parse provider options\n const humeOptions = await parseProviderOptions({\n provider: 'hume',\n providerOptions,\n schema: humeSpeechModelOptionsSchema,\n });\n\n // Create request body\n const requestBody: HumeSpeechAPITypes = {\n utterances: [\n {\n text,\n speed,\n description: instructions,\n voice: {\n id: voice,\n provider: 'HUME_AI',\n },\n },\n ],\n format: { type: 'mp3' },\n };\n\n if (outputFormat) {\n if (['mp3', 'pcm', 'wav'].includes(outputFormat)) {\n requestBody.format = { type: outputFormat as 'mp3' | 'pcm' | 'wav' };\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (humeOptions) {\n const speechModelOptions: Omit<\n HumeSpeechAPITypes,\n 'utterances' | 'format'\n > = {};\n\n if (humeOptions.context) {\n if ('generationId' in humeOptions.context) {\n speechModelOptions.context = {\n generation_id: humeOptions.context.generationId,\n };\n } else {\n speechModelOptions.context = {\n utterances: humeOptions.context.utterances.map(utterance => ({\n text: utterance.text,\n description: utterance.description,\n speed: utterance.speed,\n trailing_silence: utterance.trailingSilence,\n voice: utterance.voice,\n })),\n };\n }\n }\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[\n key as keyof Omit<HumeSpeechAPITypes, 'utterances' | 'format'>\n ];\n if (value !== undefined) {\n (requestBody as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n if (language) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details: `Hume speech models do not support language selection. Language parameter \"${language}\" was ignored.`,\n });\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: audio,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/v0/tts/file',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: humeFailedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const humeErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type HumeErrorData = z.infer<typeof humeErrorDataSchema>;\n\nexport const humeFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: humeErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["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/hume-speech-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type SpeechModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { HumeSpeechModel } from './hume-speech-model';\nimport { VERSION } from './version';\n\nexport interface HumeProvider extends ProviderV4 {\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.specificationVersion = 'v4' as const;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n provider.languageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'languageModel',\n message: 'Hume does not provide language models',\n });\n };\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n message: 'Hume does not provide embedding models',\n });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'imageModel',\n message: 'Hume does not provide image models',\n });\n };\n\n return provider as HumeProvider;\n}\n\n/**\n * Default Hume provider instance.\n */\nexport const hume = createHume();\n","import type { 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 type { HumeConfig } from './hume-config';\nimport { humeFailedResponseHandler } from './hume-error';\nimport { humeSpeechModelOptionsSchema } from './hume-speech-model-options';\nimport type { HumeSpeechAPITypes } from './hume-api-types';\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","import { z } from 'zod/v4';\n\n// https://dev.hume.ai/reference/text-to-speech-tts/synthesize-file\nexport const 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","// 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"]}
|