@framers/agentos 0.9.123 → 0.9.124
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/dist/io/avatar/index.d.ts +13 -0
- package/dist/io/avatar/index.d.ts.map +1 -0
- package/dist/io/avatar/index.js +12 -0
- package/dist/io/avatar/index.js.map +1 -0
- package/dist/io/avatar/providerCatalog.d.ts +24 -0
- package/dist/io/avatar/providerCatalog.d.ts.map +1 -0
- package/dist/io/avatar/providerCatalog.js +21 -0
- package/dist/io/avatar/providerCatalog.js.map +1 -0
- package/dist/io/avatar/providers/SimliAvatarProvider.d.ts +44 -0
- package/dist/io/avatar/providers/SimliAvatarProvider.d.ts.map +1 -0
- package/dist/io/avatar/providers/SimliAvatarProvider.js +90 -0
- package/dist/io/avatar/providers/SimliAvatarProvider.js.map +1 -0
- package/dist/io/avatar/providers/SimliServerSession.d.ts +78 -0
- package/dist/io/avatar/providers/SimliServerSession.d.ts.map +1 -0
- package/dist/io/avatar/providers/SimliServerSession.js +178 -0
- package/dist/io/avatar/providers/SimliServerSession.js.map +1 -0
- package/dist/io/avatar/types.d.ts +77 -0
- package/dist/io/avatar/types.d.ts.map +1 -0
- package/dist/io/avatar/types.js +19 -0
- package/dist/io/avatar/types.js.map +1 -0
- package/dist/io/voice-pipeline/env-constructor.d.ts +5 -3
- package/dist/io/voice-pipeline/env-constructor.d.ts.map +1 -1
- package/dist/io/voice-pipeline/env-constructor.js +25 -0
- package/dist/io/voice-pipeline/env-constructor.js.map +1 -1
- package/dist/io/voice-pipeline/provider-family.d.ts +1 -1
- package/dist/io/voice-pipeline/provider-family.d.ts.map +1 -1
- package/dist/io/voice-pipeline/provider-family.js +4 -0
- package/dist/io/voice-pipeline/provider-family.js.map +1 -1
- package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.d.ts +79 -0
- package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.d.ts.map +1 -0
- package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.js +163 -0
- package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.js.map +1 -0
- package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.d.ts +57 -0
- package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.d.ts.map +1 -0
- package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.js +235 -0
- package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.js.map +1 -0
- package/dist/io/voice-pipeline/providers/HumeBatchTTS.d.ts +81 -0
- package/dist/io/voice-pipeline/providers/HumeBatchTTS.d.ts.map +1 -0
- package/dist/io/voice-pipeline/providers/HumeBatchTTS.js +177 -0
- package/dist/io/voice-pipeline/providers/HumeBatchTTS.js.map +1 -0
- package/dist/io/voice-pipeline/providers/HumeStreamingTTS.d.ts +58 -0
- package/dist/io/voice-pipeline/providers/HumeStreamingTTS.d.ts.map +1 -0
- package/dist/io/voice-pipeline/providers/HumeStreamingTTS.js +240 -0
- package/dist/io/voice-pipeline/providers/HumeStreamingTTS.js.map +1 -0
- package/dist/io/voice-pipeline/providers/index.d.ts +4 -0
- package/dist/io/voice-pipeline/providers/index.d.ts.map +1 -1
- package/dist/io/voice-pipeline/providers/index.js +4 -0
- package/dist/io/voice-pipeline/providers/index.js.map +1 -1
- package/dist/io/voice-pipeline/types.d.ts +8 -0
- package/dist/io/voice-pipeline/types.d.ts.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CartesiaStreamingTTS.js","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/CartesiaStreamingTTS.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module voice-pipeline/providers/HumeBatchTTS
|
|
3
|
+
*
|
|
4
|
+
* Batch text-to-speech via Hume's Octave API (`POST /v0/tts`). Implements
|
|
5
|
+
* {@link IBatchTTS} for one-shot expressive narration synthesis.
|
|
6
|
+
*
|
|
7
|
+
* Contract notes (verified 2026-07-08):
|
|
8
|
+
* - Auth is the `X-Hume-Api-Key` header.
|
|
9
|
+
* - `version` is OMITTED by default so requests auto-route: `version: 2`
|
|
10
|
+
* REQUIRES an explicit voice, and a hard-coded default would break
|
|
11
|
+
* voice-less calls. Callers opt in via `providerOptions.version` and own
|
|
12
|
+
* that constraint.
|
|
13
|
+
* - `expressiveness.instructions` renders as the utterance `description`
|
|
14
|
+
* (acting directions) — Hume is the one core provider with a
|
|
15
|
+
* natural-language instruction surface — and is reported in
|
|
16
|
+
* `appliedExpressiveness` when consumed.
|
|
17
|
+
* - Response audio arrives base64-encoded in `generations[].audio` with a
|
|
18
|
+
* vendor-reported `duration` in seconds.
|
|
19
|
+
* - `opus` output is unsupported by the vendor and falls back to mp3, with
|
|
20
|
+
* the produced format reported on the result.
|
|
21
|
+
*/
|
|
22
|
+
import type { IBatchTTS, BatchTTSConfig, BatchTTSResult } from '../types.js';
|
|
23
|
+
import { type HealthyProvider, type HealthCheckResult, type ProviderCapabilities } from '../HealthyProvider.js';
|
|
24
|
+
/** A Hume voice reference: by id or by name, from the Hume or custom library. */
|
|
25
|
+
export interface HumeVoiceRef {
|
|
26
|
+
id?: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
/** @default 'HUME_AI' */
|
|
29
|
+
provider?: 'HUME_AI' | 'CUSTOM_VOICE';
|
|
30
|
+
}
|
|
31
|
+
/** Configuration for the Hume batch TTS provider. */
|
|
32
|
+
export interface HumeBatchTTSConfig {
|
|
33
|
+
/** Hume API key. */
|
|
34
|
+
apiKey: string;
|
|
35
|
+
/** Default voice. Optional — voice-less requests auto-generate a voice
|
|
36
|
+
* from the description, which is a first-class Octave behavior. */
|
|
37
|
+
voice?: HumeVoiceRef;
|
|
38
|
+
/** Base URL for the Hume API. @default 'https://api.hume.ai' */
|
|
39
|
+
baseUrl?: string;
|
|
40
|
+
/** Chain priority. Lower values are tried first. @default 86 */
|
|
41
|
+
priority?: number;
|
|
42
|
+
/** Optional capability overrides. */
|
|
43
|
+
capabilities?: Partial<ProviderCapabilities>;
|
|
44
|
+
/** Injectable health probe for tests. */
|
|
45
|
+
healthProbe?: (apiKey: string) => Promise<{
|
|
46
|
+
ok: boolean;
|
|
47
|
+
status: number;
|
|
48
|
+
latencyMs: number;
|
|
49
|
+
}>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Batch (one-shot) TTS provider using Hume's Octave `/v0/tts` endpoint.
|
|
53
|
+
*/
|
|
54
|
+
export declare class HumeBatchTTS implements IBatchTTS, HealthyProvider {
|
|
55
|
+
readonly providerId = "hume-octave";
|
|
56
|
+
readonly priority: number;
|
|
57
|
+
readonly capabilities: ProviderCapabilities;
|
|
58
|
+
/** API key pool for round-robin rotation and quota failover. */
|
|
59
|
+
private readonly keyPool;
|
|
60
|
+
/** Default voice when none is provided in the synthesis config. */
|
|
61
|
+
private readonly voice;
|
|
62
|
+
/** Base URL for all API requests. */
|
|
63
|
+
private readonly baseUrl;
|
|
64
|
+
/** Injectable health probe for tests. */
|
|
65
|
+
private readonly healthProbe;
|
|
66
|
+
constructor(config: HumeBatchTTSConfig);
|
|
67
|
+
healthCheck(): Promise<HealthCheckResult>;
|
|
68
|
+
/** Normalize a voice reference into Hume's `{id|name, provider}` shape. */
|
|
69
|
+
private static toHumeVoice;
|
|
70
|
+
/**
|
|
71
|
+
* Synthesize complete text into audio via Hume's Octave REST API.
|
|
72
|
+
*
|
|
73
|
+
* @param text - The text to synthesize.
|
|
74
|
+
* @param config - Optional synthesis configuration (voice, format, speed,
|
|
75
|
+
* expressiveness.instructions → description).
|
|
76
|
+
* @returns Resolved {@link BatchTTSResult} with the decoded audio buffer.
|
|
77
|
+
* @throws Error if the API returns a non-OK status or an empty generation.
|
|
78
|
+
*/
|
|
79
|
+
synthesize(text: string, config?: BatchTTSConfig): Promise<BatchTTSResult>;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=HumeBatchTTS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HumeBatchTTS.d.ts","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/HumeBatchTTS.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7E,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAS/B,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,QAAQ,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC;CACvC;AAWD,qDAAqD;AACrD,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf;wEACoE;IACpE,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/F;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS,EAAE,eAAe;IAC7D,QAAQ,CAAC,UAAU,iBAAiB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IAErC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IAEjD,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;gBAEjE,MAAM,EAAE,kBAAkB;IAehC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA6B/C,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,WAAW;IAY1B;;;;;;;;OAQG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CAiFjF"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module voice-pipeline/providers/HumeBatchTTS
|
|
3
|
+
*
|
|
4
|
+
* Batch text-to-speech via Hume's Octave API (`POST /v0/tts`). Implements
|
|
5
|
+
* {@link IBatchTTS} for one-shot expressive narration synthesis.
|
|
6
|
+
*
|
|
7
|
+
* Contract notes (verified 2026-07-08):
|
|
8
|
+
* - Auth is the `X-Hume-Api-Key` header.
|
|
9
|
+
* - `version` is OMITTED by default so requests auto-route: `version: 2`
|
|
10
|
+
* REQUIRES an explicit voice, and a hard-coded default would break
|
|
11
|
+
* voice-less calls. Callers opt in via `providerOptions.version` and own
|
|
12
|
+
* that constraint.
|
|
13
|
+
* - `expressiveness.instructions` renders as the utterance `description`
|
|
14
|
+
* (acting directions) — Hume is the one core provider with a
|
|
15
|
+
* natural-language instruction surface — and is reported in
|
|
16
|
+
* `appliedExpressiveness` when consumed.
|
|
17
|
+
* - Response audio arrives base64-encoded in `generations[].audio` with a
|
|
18
|
+
* vendor-reported `duration` in seconds.
|
|
19
|
+
* - `opus` output is unsupported by the vendor and falls back to mp3, with
|
|
20
|
+
* the produced format reported on the result.
|
|
21
|
+
*/
|
|
22
|
+
import { ApiKeyPool } from '../../../core/providers/ApiKeyPool.js';
|
|
23
|
+
import { isQuotaError } from '../../../core/providers/quotaErrors.js';
|
|
24
|
+
import { defaultCapabilities, } from '../HealthyProvider.js';
|
|
25
|
+
import { VoicePipelineError } from '../VoicePipelineError.js';
|
|
26
|
+
/** Approximate bytes per second for 128kbps MP3 audio (duration fallback). */
|
|
27
|
+
const BYTES_PER_SEC_MP3 = 16000;
|
|
28
|
+
/** Per-request synthesize timeout (same rationale as the sibling providers). */
|
|
29
|
+
const SYNTHESIZE_TIMEOUT_MS = 60000;
|
|
30
|
+
async function defaultHumeProbe(apiKey) {
|
|
31
|
+
const start = Date.now();
|
|
32
|
+
const res = await fetch('https://api.hume.ai/v0/tts/voices?provider=HUME_AI&page_size=1', {
|
|
33
|
+
headers: { 'X-Hume-Api-Key': apiKey },
|
|
34
|
+
signal: AbortSignal.timeout(1000),
|
|
35
|
+
});
|
|
36
|
+
return { ok: res.ok, status: res.status, latencyMs: Date.now() - start };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Batch (one-shot) TTS provider using Hume's Octave `/v0/tts` endpoint.
|
|
40
|
+
*/
|
|
41
|
+
export class HumeBatchTTS {
|
|
42
|
+
constructor(config) {
|
|
43
|
+
this.providerId = 'hume-octave';
|
|
44
|
+
this.keyPool = new ApiKeyPool(config.apiKey);
|
|
45
|
+
this.voice = config.voice;
|
|
46
|
+
this.baseUrl = config.baseUrl ?? 'https://api.hume.ai';
|
|
47
|
+
this.priority = config.priority ?? 86;
|
|
48
|
+
this.capabilities = defaultCapabilities({
|
|
49
|
+
languages: ['*'],
|
|
50
|
+
streaming: false,
|
|
51
|
+
costTier: 'premium',
|
|
52
|
+
latencyClass: 'batch',
|
|
53
|
+
...(config.capabilities ?? {}),
|
|
54
|
+
});
|
|
55
|
+
this.healthProbe = config.healthProbe ?? defaultHumeProbe;
|
|
56
|
+
}
|
|
57
|
+
async healthCheck() {
|
|
58
|
+
if (!this.keyPool.hasKeys) {
|
|
59
|
+
return { ok: false, error: { class: 'auth', message: 'no api key available' } };
|
|
60
|
+
}
|
|
61
|
+
const key = this.keyPool.next();
|
|
62
|
+
try {
|
|
63
|
+
const res = await this.healthProbe(key);
|
|
64
|
+
if (res.ok)
|
|
65
|
+
return { ok: true, latencyMs: res.latencyMs };
|
|
66
|
+
const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'tts', provider: this.providerId });
|
|
67
|
+
return {
|
|
68
|
+
ok: false,
|
|
69
|
+
latencyMs: res.latencyMs,
|
|
70
|
+
error: { class: classified.errorClass, message: `HTTP ${res.status}` },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const classified = VoicePipelineError.classifyError(err, {
|
|
75
|
+
kind: 'tts',
|
|
76
|
+
provider: this.providerId,
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
ok: false,
|
|
80
|
+
error: { class: classified.errorClass, message: classified.message },
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** Normalize a voice reference into Hume's `{id|name, provider}` shape. */
|
|
85
|
+
static toHumeVoice(voice) {
|
|
86
|
+
if (voice == null)
|
|
87
|
+
return undefined;
|
|
88
|
+
if (typeof voice === 'string')
|
|
89
|
+
return { name: voice, provider: 'HUME_AI' };
|
|
90
|
+
const out = { provider: voice.provider ?? 'HUME_AI' };
|
|
91
|
+
if (voice.id)
|
|
92
|
+
out.id = voice.id;
|
|
93
|
+
else if (voice.name)
|
|
94
|
+
out.name = voice.name;
|
|
95
|
+
else
|
|
96
|
+
return undefined;
|
|
97
|
+
return out;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Synthesize complete text into audio via Hume's Octave REST API.
|
|
101
|
+
*
|
|
102
|
+
* @param text - The text to synthesize.
|
|
103
|
+
* @param config - Optional synthesis configuration (voice, format, speed,
|
|
104
|
+
* expressiveness.instructions → description).
|
|
105
|
+
* @returns Resolved {@link BatchTTSResult} with the decoded audio buffer.
|
|
106
|
+
* @throws Error if the API returns a non-OK status or an empty generation.
|
|
107
|
+
*/
|
|
108
|
+
async synthesize(text, config) {
|
|
109
|
+
const requested = config?.format ?? 'mp3';
|
|
110
|
+
const format = requested === 'pcm' ? 'pcm' : 'mp3';
|
|
111
|
+
const applied = [];
|
|
112
|
+
const instructions = config?.expressiveness?.instructions;
|
|
113
|
+
if (instructions)
|
|
114
|
+
applied.push('instructions');
|
|
115
|
+
const rawSpeed = config?.speed ?? config?.expressiveness?.speed;
|
|
116
|
+
const speed = typeof rawSpeed === 'number' && Number.isFinite(rawSpeed) ? rawSpeed : undefined;
|
|
117
|
+
if (speed != null)
|
|
118
|
+
applied.push('speed');
|
|
119
|
+
const voice = HumeBatchTTS.toHumeVoice(config?.voice ?? this.voice);
|
|
120
|
+
// `version` is deliberately NOT defaulted (auto-routing); callers opting
|
|
121
|
+
// into Octave 2 via providerOptions must also supply a voice.
|
|
122
|
+
const body = {
|
|
123
|
+
utterances: [
|
|
124
|
+
{
|
|
125
|
+
text,
|
|
126
|
+
...(instructions ? { description: instructions } : {}),
|
|
127
|
+
...(voice ? { voice } : {}),
|
|
128
|
+
...(speed != null ? { speed } : {}),
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
format: { type: format },
|
|
132
|
+
...(config?.providerOptions ?? {}),
|
|
133
|
+
};
|
|
134
|
+
const doFetch = (key) => fetch(`${this.baseUrl}/v0/tts`, {
|
|
135
|
+
method: 'POST',
|
|
136
|
+
headers: {
|
|
137
|
+
'X-Hume-Api-Key': key,
|
|
138
|
+
'Content-Type': 'application/json',
|
|
139
|
+
},
|
|
140
|
+
body: JSON.stringify(body),
|
|
141
|
+
signal: AbortSignal.timeout(SYNTHESIZE_TIMEOUT_MS),
|
|
142
|
+
});
|
|
143
|
+
const key = this.keyPool.next();
|
|
144
|
+
let res = await doFetch(key);
|
|
145
|
+
if (!res.ok && this.keyPool.size > 1) {
|
|
146
|
+
const errBody = await res.text().catch(() => '');
|
|
147
|
+
if (isQuotaError(res.status, errBody)) {
|
|
148
|
+
this.keyPool.markExhausted(key);
|
|
149
|
+
res = await doFetch(this.keyPool.next());
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
throw new Error(`Hume TTS failed: ${res.status} ${errBody.slice(0, 200)}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!res.ok) {
|
|
156
|
+
const detail = await res.text().catch(() => '');
|
|
157
|
+
throw new Error(`Hume TTS failed: ${res.status} ${detail.slice(0, 200)}`);
|
|
158
|
+
}
|
|
159
|
+
const payload = (await res.json());
|
|
160
|
+
const generation = payload.generations?.[0];
|
|
161
|
+
if (!generation?.audio) {
|
|
162
|
+
throw new Error('Hume TTS returned no generations');
|
|
163
|
+
}
|
|
164
|
+
const audio = Buffer.from(generation.audio, 'base64');
|
|
165
|
+
const durationMs = typeof generation.duration === 'number' && Number.isFinite(generation.duration)
|
|
166
|
+
? Math.round(generation.duration * 1000)
|
|
167
|
+
: Math.round((audio.byteLength / BYTES_PER_SEC_MP3) * 1000);
|
|
168
|
+
return {
|
|
169
|
+
audio,
|
|
170
|
+
format,
|
|
171
|
+
durationMs,
|
|
172
|
+
provider: this.providerId,
|
|
173
|
+
...(applied.length > 0 ? { appliedExpressiveness: applied } : {}),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=HumeBatchTTS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HumeBatchTTS.js","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/HumeBatchTTS.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module voice-pipeline/providers/HumeStreamingTTS
|
|
3
|
+
*
|
|
4
|
+
* Streaming text-to-speech via Hume's Octave WSS input-streaming API.
|
|
5
|
+
* Implements {@link IStreamingTTS} for realtime token-in / audio-out
|
|
6
|
+
* synthesis.
|
|
7
|
+
*
|
|
8
|
+
* Contract notes (pinned from the vendor reference 2026-07-08):
|
|
9
|
+
* - Endpoint: `wss://api.hume.ai/v0/tts/stream/input?api_key=…`. This is the
|
|
10
|
+
* TRUE incremental-input surface — `POST /v0/tts/stream/json` only streams
|
|
11
|
+
* OUTPUT for a complete request and is deliberately not used here.
|
|
12
|
+
* - `no_binary=true` keeps every server frame a JSON `TtsOutput` message
|
|
13
|
+
* (base64 `audio`, `audio_format`, `chunk_index`, …) — no binary frames to
|
|
14
|
+
* special-case.
|
|
15
|
+
* - `instant_mode` requires an explicit voice; it is enabled exactly when a
|
|
16
|
+
* voice is configured and disabled otherwise (voice-less sessions
|
|
17
|
+
* auto-generate a voice from the description, which instant mode forbids).
|
|
18
|
+
* - Client publishes `InputMessage` JSON: `{ text }` per token batch,
|
|
19
|
+
* `{ flush: true }` to force generation of buffered text, `{ close: true }`
|
|
20
|
+
* to finish and close. Acting directions (`description`) and the voice ride
|
|
21
|
+
* the FIRST publish; Hume persists them for subsequent utterances until
|
|
22
|
+
* overridden.
|
|
23
|
+
* - There is no vendor cancel: `cancel()` is a local hard-stop — drop all
|
|
24
|
+
* further inbound chunks and close the socket.
|
|
25
|
+
*/
|
|
26
|
+
import type { IStreamingTTS, StreamingTTSConfig, StreamingTTSSession } from '../types.js';
|
|
27
|
+
import { type HealthyProvider, type HealthCheckResult, type ProviderCapabilities } from '../HealthyProvider.js';
|
|
28
|
+
import type { HumeVoiceRef } from './HumeBatchTTS.js';
|
|
29
|
+
/** Configuration for the Hume streaming TTS provider. */
|
|
30
|
+
export interface HumeStreamingTTSConfig {
|
|
31
|
+
/** Hume API key. */
|
|
32
|
+
apiKey: string;
|
|
33
|
+
/** Default voice. Optional — voice-less sessions run without instant mode
|
|
34
|
+
* and let Octave derive a voice from the acting description. */
|
|
35
|
+
voice?: HumeVoiceRef;
|
|
36
|
+
/** WebSocket endpoint. @default 'wss://api.hume.ai/v0/tts/stream/input' */
|
|
37
|
+
wsUrl?: string;
|
|
38
|
+
/** Chain priority. Lower values are tried first. @default 14 */
|
|
39
|
+
priority?: number;
|
|
40
|
+
/** Optional capability overrides. */
|
|
41
|
+
capabilities?: Partial<ProviderCapabilities>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Streaming TTS provider for Hume Octave voices — the expressive leg of the
|
|
45
|
+
* chain (acting directions via `expressiveness.instructions`).
|
|
46
|
+
*/
|
|
47
|
+
export declare class HumeStreamingTTS implements IStreamingTTS, HealthyProvider {
|
|
48
|
+
readonly providerId = "hume-octave-stream";
|
|
49
|
+
readonly priority: number;
|
|
50
|
+
readonly capabilities: ProviderCapabilities;
|
|
51
|
+
private readonly keyPool;
|
|
52
|
+
private readonly voice;
|
|
53
|
+
private readonly wsUrl;
|
|
54
|
+
constructor(config: HumeStreamingTTSConfig);
|
|
55
|
+
healthCheck(): Promise<HealthCheckResult>;
|
|
56
|
+
startSession(config?: StreamingTTSConfig): Promise<StreamingTTSSession>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=HumeStreamingTTS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HumeStreamingTTS.d.ts","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/HumeStreamingTTS.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAEV,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf;qEACiE;IACjE,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC9C;AAuJD;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,aAAa,EAAE,eAAe;IACrE,QAAQ,CAAC,UAAU,wBAAwB;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,MAAM,EAAE,sBAAsB;IAcpC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAmCzC,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAiB9E"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module voice-pipeline/providers/HumeStreamingTTS
|
|
3
|
+
*
|
|
4
|
+
* Streaming text-to-speech via Hume's Octave WSS input-streaming API.
|
|
5
|
+
* Implements {@link IStreamingTTS} for realtime token-in / audio-out
|
|
6
|
+
* synthesis.
|
|
7
|
+
*
|
|
8
|
+
* Contract notes (pinned from the vendor reference 2026-07-08):
|
|
9
|
+
* - Endpoint: `wss://api.hume.ai/v0/tts/stream/input?api_key=…`. This is the
|
|
10
|
+
* TRUE incremental-input surface — `POST /v0/tts/stream/json` only streams
|
|
11
|
+
* OUTPUT for a complete request and is deliberately not used here.
|
|
12
|
+
* - `no_binary=true` keeps every server frame a JSON `TtsOutput` message
|
|
13
|
+
* (base64 `audio`, `audio_format`, `chunk_index`, …) — no binary frames to
|
|
14
|
+
* special-case.
|
|
15
|
+
* - `instant_mode` requires an explicit voice; it is enabled exactly when a
|
|
16
|
+
* voice is configured and disabled otherwise (voice-less sessions
|
|
17
|
+
* auto-generate a voice from the description, which instant mode forbids).
|
|
18
|
+
* - Client publishes `InputMessage` JSON: `{ text }` per token batch,
|
|
19
|
+
* `{ flush: true }` to force generation of buffered text, `{ close: true }`
|
|
20
|
+
* to finish and close. Acting directions (`description`) and the voice ride
|
|
21
|
+
* the FIRST publish; Hume persists them for subsequent utterances until
|
|
22
|
+
* overridden.
|
|
23
|
+
* - There is no vendor cancel: `cancel()` is a local hard-stop — drop all
|
|
24
|
+
* further inbound chunks and close the socket.
|
|
25
|
+
*/
|
|
26
|
+
import { EventEmitter } from 'node:events';
|
|
27
|
+
import WebSocket from 'ws';
|
|
28
|
+
import { ApiKeyPool } from '../../../core/providers/ApiKeyPool.js';
|
|
29
|
+
import { defaultCapabilities, } from '../HealthyProvider.js';
|
|
30
|
+
import { VoicePipelineError } from '../VoicePipelineError.js';
|
|
31
|
+
/** Normalize a voice reference into Hume's `{id|name, provider}` shape. */
|
|
32
|
+
function toHumeVoice(voice) {
|
|
33
|
+
if (voice == null)
|
|
34
|
+
return undefined;
|
|
35
|
+
if (typeof voice === 'string')
|
|
36
|
+
return { name: voice, provider: 'HUME_AI' };
|
|
37
|
+
const out = { provider: voice.provider ?? 'HUME_AI' };
|
|
38
|
+
if (voice.id)
|
|
39
|
+
out.id = voice.id;
|
|
40
|
+
else if (voice.name)
|
|
41
|
+
out.name = voice.name;
|
|
42
|
+
else
|
|
43
|
+
return undefined;
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* One live Hume input-streaming session. First publish carries the sticky
|
|
48
|
+
* session attributes (voice, description); later publishes are bare text.
|
|
49
|
+
*/
|
|
50
|
+
class HumeStreamingTTSSession extends EventEmitter {
|
|
51
|
+
constructor(opts) {
|
|
52
|
+
super();
|
|
53
|
+
this.opts = opts;
|
|
54
|
+
/** Exposed for tests (mirrors the sibling sessions' introspection seam). */
|
|
55
|
+
this.ws = null;
|
|
56
|
+
/** Attributes that ride the first publish only. */
|
|
57
|
+
this.firstPublishDone = false;
|
|
58
|
+
/** Local hard-cancel latch: drop every inbound frame once set. */
|
|
59
|
+
this.cancelled = false;
|
|
60
|
+
this.closed = false;
|
|
61
|
+
this.flushResolvers = [];
|
|
62
|
+
/** Tokens pushed since the last flush boundary — stamped on each chunk so
|
|
63
|
+
* barge-in handlers can report the interrupted remainder. */
|
|
64
|
+
this.accumulatedText = '';
|
|
65
|
+
}
|
|
66
|
+
/** Open the socket; resolves once the connection is live. */
|
|
67
|
+
async connect() {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
const ws = new WebSocket(this.opts.url);
|
|
70
|
+
this.ws = ws;
|
|
71
|
+
ws.on('open', () => resolve());
|
|
72
|
+
ws.on('error', (err) => {
|
|
73
|
+
if (this.closed || this.cancelled)
|
|
74
|
+
return;
|
|
75
|
+
this.emit('error', err);
|
|
76
|
+
reject(err);
|
|
77
|
+
});
|
|
78
|
+
ws.on('close', () => {
|
|
79
|
+
if (!this.closed)
|
|
80
|
+
this.emit('close');
|
|
81
|
+
});
|
|
82
|
+
ws.on('message', (raw) => this.onMessage(raw));
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
onMessage(raw) {
|
|
86
|
+
if (this.cancelled)
|
|
87
|
+
return; // hard-cancel: late frames drop silently
|
|
88
|
+
let msg;
|
|
89
|
+
try {
|
|
90
|
+
msg = JSON.parse(String(raw));
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return; // binary frames are disabled via no_binary=true
|
|
94
|
+
}
|
|
95
|
+
if (typeof msg.audio === 'string' && msg.audio.length > 0) {
|
|
96
|
+
const audio = Buffer.from(msg.audio, 'base64');
|
|
97
|
+
const format = msg.audio_format === 'pcm' ? 'pcm' : 'mp3';
|
|
98
|
+
const chunk = {
|
|
99
|
+
audio,
|
|
100
|
+
format,
|
|
101
|
+
sampleRate: format === 'pcm' ? 48000 : 44100,
|
|
102
|
+
durationMs: Math.max(1, Math.round((audio.byteLength / 16000) * 1000)),
|
|
103
|
+
text: this.accumulatedText,
|
|
104
|
+
};
|
|
105
|
+
this.emit('audio', chunk);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Any explicit flush/finish boundary resolves pending flush() callers.
|
|
109
|
+
if (msg.type === 'flushed' || msg.type === 'done') {
|
|
110
|
+
this.accumulatedText = '';
|
|
111
|
+
const resolvers = this.flushResolvers;
|
|
112
|
+
this.flushResolvers = [];
|
|
113
|
+
this.emit('flush_complete');
|
|
114
|
+
for (const r of resolvers)
|
|
115
|
+
r();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
send(payload) {
|
|
119
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN)
|
|
120
|
+
return;
|
|
121
|
+
this.ws.send(JSON.stringify(payload));
|
|
122
|
+
}
|
|
123
|
+
pushTokens(tokens) {
|
|
124
|
+
if (this.closed || this.cancelled || tokens.length === 0)
|
|
125
|
+
return;
|
|
126
|
+
this.accumulatedText += tokens;
|
|
127
|
+
if (!this.firstPublishDone) {
|
|
128
|
+
this.firstPublishDone = true;
|
|
129
|
+
this.send({
|
|
130
|
+
text: tokens,
|
|
131
|
+
...(this.opts.description ? { description: this.opts.description } : {}),
|
|
132
|
+
...(this.opts.voice ? { voice: this.opts.voice } : {}),
|
|
133
|
+
});
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this.send({ text: tokens });
|
|
137
|
+
}
|
|
138
|
+
async flush() {
|
|
139
|
+
if (this.closed || this.cancelled)
|
|
140
|
+
return;
|
|
141
|
+
const done = new Promise((resolve) => this.flushResolvers.push(resolve));
|
|
142
|
+
this.send({ flush: true });
|
|
143
|
+
await done;
|
|
144
|
+
}
|
|
145
|
+
cancel() {
|
|
146
|
+
if (this.closed || this.cancelled)
|
|
147
|
+
return;
|
|
148
|
+
// No vendor cancel exists: latch locally so late chunks drop, then tear
|
|
149
|
+
// down the socket. Callers stop playback separately per the contract.
|
|
150
|
+
this.cancelled = true;
|
|
151
|
+
this.flushResolvers = [];
|
|
152
|
+
this.accumulatedText = '';
|
|
153
|
+
try {
|
|
154
|
+
this.ws?.close();
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
/* already gone */
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
close() {
|
|
161
|
+
if (this.closed)
|
|
162
|
+
return;
|
|
163
|
+
this.closed = true;
|
|
164
|
+
this.send({ close: true });
|
|
165
|
+
try {
|
|
166
|
+
this.ws?.close();
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
/* already gone */
|
|
170
|
+
}
|
|
171
|
+
this.emit('close');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Streaming TTS provider for Hume Octave voices — the expressive leg of the
|
|
176
|
+
* chain (acting directions via `expressiveness.instructions`).
|
|
177
|
+
*/
|
|
178
|
+
export class HumeStreamingTTS {
|
|
179
|
+
constructor(config) {
|
|
180
|
+
this.providerId = 'hume-octave-stream';
|
|
181
|
+
this.keyPool = new ApiKeyPool(config.apiKey);
|
|
182
|
+
this.voice = config.voice;
|
|
183
|
+
this.wsUrl = config.wsUrl ?? 'wss://api.hume.ai/v0/tts/stream/input';
|
|
184
|
+
this.priority = config.priority ?? 14;
|
|
185
|
+
this.capabilities = defaultCapabilities({
|
|
186
|
+
languages: ['*'],
|
|
187
|
+
streaming: true,
|
|
188
|
+
costTier: 'premium',
|
|
189
|
+
latencyClass: 'realtime',
|
|
190
|
+
...(config.capabilities ?? {}),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
async healthCheck() {
|
|
194
|
+
if (!this.keyPool.hasKeys) {
|
|
195
|
+
return { ok: false, error: { class: 'auth', message: 'no api key available' } };
|
|
196
|
+
}
|
|
197
|
+
const start = Date.now();
|
|
198
|
+
try {
|
|
199
|
+
const res = await fetch('https://api.hume.ai/v0/tts/voices?provider=HUME_AI&page_size=1', {
|
|
200
|
+
headers: { 'X-Hume-Api-Key': this.keyPool.next() },
|
|
201
|
+
signal: AbortSignal.timeout(1000),
|
|
202
|
+
});
|
|
203
|
+
if (res.ok)
|
|
204
|
+
return { ok: true, latencyMs: Date.now() - start };
|
|
205
|
+
const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'tts', provider: this.providerId });
|
|
206
|
+
return {
|
|
207
|
+
ok: false,
|
|
208
|
+
latencyMs: Date.now() - start,
|
|
209
|
+
error: { class: classified.errorClass, message: `HTTP ${res.status}` },
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
const classified = VoicePipelineError.classifyError(err, {
|
|
214
|
+
kind: 'tts',
|
|
215
|
+
provider: this.providerId,
|
|
216
|
+
});
|
|
217
|
+
return {
|
|
218
|
+
ok: false,
|
|
219
|
+
error: { class: classified.errorClass, message: classified.message },
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
async startSession(config) {
|
|
224
|
+
const key = this.keyPool.next();
|
|
225
|
+
const voice = toHumeVoice(config?.voice ?? this.voice);
|
|
226
|
+
// instant_mode demands an explicit voice — enable it exactly when we
|
|
227
|
+
// have one; voice-less sessions trade first-chunk latency for Octave's
|
|
228
|
+
// description-derived voice generation.
|
|
229
|
+
const url = `${this.wsUrl}?api_key=${encodeURIComponent(key)}` +
|
|
230
|
+
`&no_binary=true&instant_mode=${voice ? 'true' : 'false'}`;
|
|
231
|
+
const session = new HumeStreamingTTSSession({
|
|
232
|
+
url,
|
|
233
|
+
voice,
|
|
234
|
+
description: config?.expressiveness?.instructions,
|
|
235
|
+
});
|
|
236
|
+
await session.connect();
|
|
237
|
+
return session;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=HumeStreamingTTS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HumeStreamingTTS.js","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/HumeStreamingTTS.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,10 @@ export { AgentSessionVoiceAdapter } from './AgentSessionVoiceAdapter.js';
|
|
|
17
17
|
export { OpenAIBatchTTS, type OpenAIBatchTTSConfig } from './OpenAIBatchTTS.js';
|
|
18
18
|
export { ElevenLabsBatchTTS, type ElevenLabsBatchTTSConfig } from './ElevenLabsBatchTTS.js';
|
|
19
19
|
export { DeepgramAuraBatchTTS, type DeepgramAuraBatchTTSConfig, chunkForAura, } from './DeepgramAuraBatchTTS.js';
|
|
20
|
+
export { CartesiaBatchTTS, CARTESIA_VERSION, type CartesiaBatchTTSConfig, } from './CartesiaBatchTTS.js';
|
|
21
|
+
export { CartesiaStreamingTTS, type CartesiaStreamingTTSConfig, } from './CartesiaStreamingTTS.js';
|
|
22
|
+
export { HumeBatchTTS, type HumeBatchTTSConfig, type HumeVoiceRef, } from './HumeBatchTTS.js';
|
|
23
|
+
export { HumeStreamingTTS, type HumeStreamingTTSConfig, } from './HumeStreamingTTS.js';
|
|
20
24
|
export { BatchTTSFallback } from './BatchTTSFallback.js';
|
|
21
25
|
export { BatchSTTFallback, EmptyTranscriptError, } from './BatchSTTFallback.js';
|
|
22
26
|
export { DeepgramPreRecordedBatchSTT, type DeepgramPreRecordedBatchSTTConfig, } from './DeepgramPreRecordedBatchSTT.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,wBAAwB,EACxB,KAAK,8BAA8B,GACpC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,YAAY,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,2BAA2B,EAC3B,KAAK,iCAAiC,GACvC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,wBAAwB,EACxB,KAAK,8BAA8B,GACpC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,YAAY,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,2BAA2B,EAC3B,KAAK,iCAAiC,GACvC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC"}
|
|
@@ -17,6 +17,10 @@ export { AgentSessionVoiceAdapter } from './AgentSessionVoiceAdapter.js';
|
|
|
17
17
|
export { OpenAIBatchTTS } from './OpenAIBatchTTS.js';
|
|
18
18
|
export { ElevenLabsBatchTTS } from './ElevenLabsBatchTTS.js';
|
|
19
19
|
export { DeepgramAuraBatchTTS, chunkForAura, } from './DeepgramAuraBatchTTS.js';
|
|
20
|
+
export { CartesiaBatchTTS, CARTESIA_VERSION, } from './CartesiaBatchTTS.js';
|
|
21
|
+
export { CartesiaStreamingTTS, } from './CartesiaStreamingTTS.js';
|
|
22
|
+
export { HumeBatchTTS, } from './HumeBatchTTS.js';
|
|
23
|
+
export { HumeStreamingTTS, } from './HumeStreamingTTS.js';
|
|
20
24
|
export { BatchTTSFallback } from './BatchTTSFallback.js';
|
|
21
25
|
// Batch (one-shot) STT providers.
|
|
22
26
|
export { BatchSTTFallback, EmptyTranscriptError, } from './BatchSTTFallback.js';
|