@tryhakim/voice 1.0.0
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/LICENSE +21 -0
- package/README.md +188 -0
- package/dist/audio/speech-stream-ws.d.ts +40 -0
- package/dist/audio/speech-stream-ws.d.ts.map +1 -0
- package/dist/audio/speech-stream-ws.js +565 -0
- package/dist/audio/speech-stream-ws.js.map +1 -0
- package/dist/audio/speech.d.ts +46 -0
- package/dist/audio/speech.d.ts.map +1 -0
- package/dist/audio/speech.js +125 -0
- package/dist/audio/speech.js.map +1 -0
- package/dist/audio/stream.d.ts +38 -0
- package/dist/audio/stream.d.ts.map +1 -0
- package/dist/audio/stream.js +452 -0
- package/dist/audio/stream.js.map +1 -0
- package/dist/audio/to-blob.d.ts +10 -0
- package/dist/audio/to-blob.d.ts.map +1 -0
- package/dist/audio/to-blob.js +78 -0
- package/dist/audio/to-blob.js.map +1 -0
- package/dist/audio/transcriptions.d.ts +35 -0
- package/dist/audio/transcriptions.d.ts.map +1 -0
- package/dist/audio/transcriptions.js +105 -0
- package/dist/audio/transcriptions.js.map +1 -0
- package/dist/audio/translate-stream-ws.d.ts +37 -0
- package/dist/audio/translate-stream-ws.d.ts.map +1 -0
- package/dist/audio/translate-stream-ws.js +665 -0
- package/dist/audio/translate-stream-ws.js.map +1 -0
- package/dist/audio/translate.d.ts +36 -0
- package/dist/audio/translate.d.ts.map +1 -0
- package/dist/audio/translate.js +39 -0
- package/dist/audio/translate.js.map +1 -0
- package/dist/audio/voices.d.ts +47 -0
- package/dist/audio/voices.d.ts.map +1 -0
- package/dist/audio/voices.js +91 -0
- package/dist/audio/voices.js.map +1 -0
- package/dist/chat/completions.d.ts +76 -0
- package/dist/chat/completions.d.ts.map +1 -0
- package/dist/chat/completions.js +114 -0
- package/dist/chat/completions.js.map +1 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +2 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/sse.d.ts +12 -0
- package/dist/chat/sse.d.ts.map +1 -0
- package/dist/chat/sse.js +142 -0
- package/dist/chat/sse.js.map +1 -0
- package/dist/client.d.ts +63 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +80 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +99 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +158 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs.d.ts +34 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +62 -0
- package/dist/jobs.js.map +1 -0
- package/dist/observability.d.ts +28 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +107 -0
- package/dist/observability.js.map +1 -0
- package/dist/settings.d.ts +49 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +84 -0
- package/dist/settings.js.map +1 -0
- package/dist/transport.d.ts +82 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +289 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +969 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/usage.d.ts +43 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +85 -0
- package/dist/usage.js.map +1 -0
- package/dist/version.d.ts +13 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.js.map +1 -0
- package/dist/webhooks.d.ts +84 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +157 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realtime TTS over WebSocket (`WSS /v1/audio/speech/stream`).
|
|
3
|
+
*
|
|
4
|
+
* The SDK translates server frames into friendly `SpeechStreamEvent`s
|
|
5
|
+
* and emits caller `sendSpeech({...})` requests as `speech.create`
|
|
6
|
+
* frames upstream.
|
|
7
|
+
*
|
|
8
|
+
* Like the STT counterpart in `./stream.ts`, this helper stays
|
|
9
|
+
* dependency-free. We prefer `globalThis.WebSocket` when present
|
|
10
|
+
* (Node 22+, Bun, Deno, browsers). On Node 18/20 the global isn't
|
|
11
|
+
* there — we dynamically import `ws` at runtime and surface a
|
|
12
|
+
* helpful error if it's missing.
|
|
13
|
+
*
|
|
14
|
+
* The handle is lazy: the socket opens on the first `sendSpeech` /
|
|
15
|
+
* iteration of `events` / `audio` / `close`. This keeps the hot
|
|
16
|
+
* path fast and avoids dangling connections when a caller
|
|
17
|
+
* constructs a handle but bails before using it.
|
|
18
|
+
*
|
|
19
|
+
* Binary chunks coming back from the server are surfaced as
|
|
20
|
+
* `speech.audio` events (each carries a `chunk: Uint8Array`) so
|
|
21
|
+
* consumers can iterate a single stream of events instead of
|
|
22
|
+
* juggling a separate audio channel. The companion `audio` iterable
|
|
23
|
+
* filters to those chunks for callers who only want raw PCM.
|
|
24
|
+
*/
|
|
25
|
+
import { ConnectionError, HakimError } from '../errors.js';
|
|
26
|
+
import { SDK_NAME, SDK_VERSION } from '../version.js';
|
|
27
|
+
export function openSpeechStream(transport, opts = {}) {
|
|
28
|
+
const url = buildWsUrl(transport.baseURL);
|
|
29
|
+
const apiKey = transport.apiKey;
|
|
30
|
+
const pending = [];
|
|
31
|
+
let socket = null;
|
|
32
|
+
let openPromise = null;
|
|
33
|
+
const queue = [];
|
|
34
|
+
let waiter = null;
|
|
35
|
+
const audioQueue = [];
|
|
36
|
+
let audioWaiter = null;
|
|
37
|
+
let streamClosed = false;
|
|
38
|
+
let closedResolve;
|
|
39
|
+
const closedPromise = new Promise((r) => {
|
|
40
|
+
closedResolve = r;
|
|
41
|
+
});
|
|
42
|
+
let requestSeq = 0;
|
|
43
|
+
function emit(ev) {
|
|
44
|
+
if (streamClosed)
|
|
45
|
+
return;
|
|
46
|
+
if (waiter) {
|
|
47
|
+
const w = waiter;
|
|
48
|
+
waiter = null;
|
|
49
|
+
w({ value: ev, done: false });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
queue.push(ev);
|
|
53
|
+
}
|
|
54
|
+
if (ev.type === 'speech.audio') {
|
|
55
|
+
if (audioWaiter) {
|
|
56
|
+
const w = audioWaiter;
|
|
57
|
+
audioWaiter = null;
|
|
58
|
+
w({ value: ev.chunk, done: false });
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
audioQueue.push(ev.chunk);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function finishStream() {
|
|
66
|
+
if (streamClosed)
|
|
67
|
+
return;
|
|
68
|
+
streamClosed = true;
|
|
69
|
+
if (waiter) {
|
|
70
|
+
const w = waiter;
|
|
71
|
+
waiter = null;
|
|
72
|
+
w({ value: undefined, done: true });
|
|
73
|
+
}
|
|
74
|
+
if (audioWaiter) {
|
|
75
|
+
const w = audioWaiter;
|
|
76
|
+
audioWaiter = null;
|
|
77
|
+
w({ value: undefined, done: true });
|
|
78
|
+
}
|
|
79
|
+
closedResolve();
|
|
80
|
+
}
|
|
81
|
+
async function ensureOpen() {
|
|
82
|
+
if (socket)
|
|
83
|
+
return socket;
|
|
84
|
+
if (openPromise)
|
|
85
|
+
return openPromise;
|
|
86
|
+
openPromise = (async () => {
|
|
87
|
+
const Ctor = await resolveSocketCtor();
|
|
88
|
+
const headers = {
|
|
89
|
+
Authorization: `Bearer ${apiKey}`,
|
|
90
|
+
'User-Agent': `${SDK_NAME}/${SDK_VERSION}`,
|
|
91
|
+
};
|
|
92
|
+
const s = new Ctor(url, { headers });
|
|
93
|
+
// Browser WebSocket: ask for arraybuffer so the message handler
|
|
94
|
+
// sees ArrayBuffer rather than Blob (Node `ws` ignores this and
|
|
95
|
+
// delivers Buffer regardless).
|
|
96
|
+
try {
|
|
97
|
+
s.binaryType = 'arraybuffer';
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
/* soft-fail · some socket impls reject the assignment */
|
|
101
|
+
}
|
|
102
|
+
await new Promise((resolve, reject) => {
|
|
103
|
+
const onOpen = () => {
|
|
104
|
+
detach();
|
|
105
|
+
resolve();
|
|
106
|
+
};
|
|
107
|
+
const onError = (err) => {
|
|
108
|
+
detach();
|
|
109
|
+
reject(new ConnectionError({
|
|
110
|
+
message: 'Hakim SDK: could not open WebSocket to ' +
|
|
111
|
+
`${url}. Is HAKIM_API_KEY valid and the network reachable?` +
|
|
112
|
+
(err instanceof Error ? ` Cause: ${err.message}` : ''),
|
|
113
|
+
requestId: undefined,
|
|
114
|
+
}));
|
|
115
|
+
};
|
|
116
|
+
const detach = () => {
|
|
117
|
+
removeListener(s, 'open', onOpen);
|
|
118
|
+
removeListener(s, 'error', onError);
|
|
119
|
+
};
|
|
120
|
+
addListener(s, 'open', onOpen);
|
|
121
|
+
addListener(s, 'error', onError);
|
|
122
|
+
});
|
|
123
|
+
attachSocketHandlers(s, emit, finishStream);
|
|
124
|
+
socket = s;
|
|
125
|
+
// Send the initial session.update for any defaults the caller
|
|
126
|
+
// pinned. The server applies these to every subsequent
|
|
127
|
+
// speech.create that doesn't override the field per request.
|
|
128
|
+
const sessionUpdate = buildSessionUpdate(opts);
|
|
129
|
+
if (sessionUpdate) {
|
|
130
|
+
s.send(JSON.stringify(sessionUpdate));
|
|
131
|
+
}
|
|
132
|
+
for (const frame of pending.splice(0)) {
|
|
133
|
+
s.send(frame);
|
|
134
|
+
}
|
|
135
|
+
return s;
|
|
136
|
+
})();
|
|
137
|
+
return openPromise;
|
|
138
|
+
}
|
|
139
|
+
function enqueueFrame(frame) {
|
|
140
|
+
if (socket && socket.readyState === 1 /* OPEN */) {
|
|
141
|
+
socket.send(frame);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
pending.push(frame);
|
|
145
|
+
ensureOpen().catch((err) => {
|
|
146
|
+
if (err instanceof HakimError || err instanceof ConnectionError) {
|
|
147
|
+
emit({
|
|
148
|
+
type: 'error',
|
|
149
|
+
code: err.code ?? 'connection_error',
|
|
150
|
+
message: err.message,
|
|
151
|
+
retryable: false,
|
|
152
|
+
fatal: true,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
finishStream();
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function sendSpeech(request) {
|
|
160
|
+
if (streamClosed) {
|
|
161
|
+
throw new HakimError({
|
|
162
|
+
type: 'invalid_request_error',
|
|
163
|
+
code: 'stream_closed',
|
|
164
|
+
message: 'Hakim SDK: cannot send speech; stream is closed.',
|
|
165
|
+
status: 400,
|
|
166
|
+
requestId: undefined,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
if (typeof request.input !== 'string' || request.input.length === 0) {
|
|
170
|
+
throw new HakimError({
|
|
171
|
+
type: 'invalid_request_error',
|
|
172
|
+
code: 'input_required',
|
|
173
|
+
message: 'Hakim SDK: sendSpeech({ input }) must be a non-empty string.',
|
|
174
|
+
status: 400,
|
|
175
|
+
requestId: undefined,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const requestId = request.request_id ?? `wst_local_${(requestSeq++).toString(36)}`;
|
|
179
|
+
const frame = {
|
|
180
|
+
type: 'speech.create',
|
|
181
|
+
input: request.input,
|
|
182
|
+
request_id: requestId,
|
|
183
|
+
};
|
|
184
|
+
if (request.voice !== undefined)
|
|
185
|
+
frame.voice = request.voice;
|
|
186
|
+
if (request.model !== undefined)
|
|
187
|
+
frame.model = request.model;
|
|
188
|
+
if (request.cfg !== undefined)
|
|
189
|
+
frame.cfg = request.cfg;
|
|
190
|
+
if (request.voice_prompt !== undefined)
|
|
191
|
+
frame.voice_prompt = request.voice_prompt;
|
|
192
|
+
enqueueFrame(JSON.stringify(frame));
|
|
193
|
+
return requestId;
|
|
194
|
+
}
|
|
195
|
+
function updateSession(session) {
|
|
196
|
+
if (streamClosed) {
|
|
197
|
+
throw new HakimError({
|
|
198
|
+
type: 'invalid_request_error',
|
|
199
|
+
code: 'stream_closed',
|
|
200
|
+
message: 'Hakim SDK: cannot update session; stream is closed.',
|
|
201
|
+
status: 400,
|
|
202
|
+
requestId: undefined,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// Merge into the local defaults so a later lazy open picks them up
|
|
206
|
+
// even if the socket wasn't open yet when updateSession was called.
|
|
207
|
+
if (session.model !== undefined)
|
|
208
|
+
opts.model = session.model;
|
|
209
|
+
if (session.voice !== undefined)
|
|
210
|
+
opts.voice = session.voice;
|
|
211
|
+
if (session.cfg !== undefined)
|
|
212
|
+
opts.cfg = session.cfg;
|
|
213
|
+
if (session.voice_prompt !== undefined)
|
|
214
|
+
opts.voice_prompt = session.voice_prompt;
|
|
215
|
+
const upd = buildSessionUpdate(session);
|
|
216
|
+
if (upd)
|
|
217
|
+
enqueueFrame(JSON.stringify(upd));
|
|
218
|
+
}
|
|
219
|
+
async function close() {
|
|
220
|
+
if (streamClosed)
|
|
221
|
+
return;
|
|
222
|
+
enqueueFrame(JSON.stringify({ type: 'session.close' }));
|
|
223
|
+
await closedPromise;
|
|
224
|
+
}
|
|
225
|
+
if (opts.signal) {
|
|
226
|
+
if (opts.signal.aborted) {
|
|
227
|
+
Promise.resolve()
|
|
228
|
+
.then(() => close())
|
|
229
|
+
.catch(() => undefined);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
opts.signal.addEventListener('abort', () => {
|
|
233
|
+
close().catch(() => undefined);
|
|
234
|
+
}, { once: true });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const events = {
|
|
238
|
+
[Symbol.asyncIterator]() {
|
|
239
|
+
return {
|
|
240
|
+
next() {
|
|
241
|
+
if (queue.length > 0) {
|
|
242
|
+
return Promise.resolve({ value: queue.shift(), done: false });
|
|
243
|
+
}
|
|
244
|
+
if (streamClosed) {
|
|
245
|
+
return Promise.resolve({
|
|
246
|
+
value: undefined,
|
|
247
|
+
done: true,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return new Promise((resolve) => {
|
|
251
|
+
waiter = resolve;
|
|
252
|
+
if (!socket && !openPromise) {
|
|
253
|
+
ensureOpen().catch((err) => {
|
|
254
|
+
if (!streamClosed) {
|
|
255
|
+
emit({
|
|
256
|
+
type: 'error',
|
|
257
|
+
code: err?.code ?? 'connection_error',
|
|
258
|
+
message: err instanceof Error ? err.message : 'connection error',
|
|
259
|
+
retryable: false,
|
|
260
|
+
fatal: true,
|
|
261
|
+
});
|
|
262
|
+
finishStream();
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
},
|
|
268
|
+
return() {
|
|
269
|
+
close().catch(() => undefined);
|
|
270
|
+
return Promise.resolve({
|
|
271
|
+
value: undefined,
|
|
272
|
+
done: true,
|
|
273
|
+
});
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
const audio = {
|
|
279
|
+
[Symbol.asyncIterator]() {
|
|
280
|
+
return {
|
|
281
|
+
next() {
|
|
282
|
+
if (audioQueue.length > 0) {
|
|
283
|
+
return Promise.resolve({ value: audioQueue.shift(), done: false });
|
|
284
|
+
}
|
|
285
|
+
if (streamClosed) {
|
|
286
|
+
return Promise.resolve({
|
|
287
|
+
value: undefined,
|
|
288
|
+
done: true,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return new Promise((resolve) => {
|
|
292
|
+
audioWaiter = resolve;
|
|
293
|
+
if (!socket && !openPromise) {
|
|
294
|
+
ensureOpen().catch((err) => {
|
|
295
|
+
if (!streamClosed) {
|
|
296
|
+
emit({
|
|
297
|
+
type: 'error',
|
|
298
|
+
code: err?.code ?? 'connection_error',
|
|
299
|
+
message: err instanceof Error ? err.message : 'connection error',
|
|
300
|
+
retryable: false,
|
|
301
|
+
fatal: true,
|
|
302
|
+
});
|
|
303
|
+
finishStream();
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
},
|
|
309
|
+
return() {
|
|
310
|
+
close().catch(() => undefined);
|
|
311
|
+
return Promise.resolve({
|
|
312
|
+
value: undefined,
|
|
313
|
+
done: true,
|
|
314
|
+
});
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
return {
|
|
320
|
+
sendSpeech,
|
|
321
|
+
updateSession,
|
|
322
|
+
events,
|
|
323
|
+
audio,
|
|
324
|
+
close,
|
|
325
|
+
closed: closedPromise,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
function attachSocketHandlers(s, emit, finishStream) {
|
|
329
|
+
// Track the last request_id seen on the wire so we can attach it
|
|
330
|
+
// to binary audio frames (which carry no envelope of their own).
|
|
331
|
+
// The server always emits `speech.started` before any audio chunk
|
|
332
|
+
// for that utterance, so this is a safe single-cursor approach.
|
|
333
|
+
let currentRequestId = null;
|
|
334
|
+
const onMessage = (raw, maybeIsBinary) => {
|
|
335
|
+
const binary = decodeBinary(raw, maybeIsBinary);
|
|
336
|
+
if (binary !== null) {
|
|
337
|
+
if (currentRequestId === null)
|
|
338
|
+
return;
|
|
339
|
+
emit({ type: 'speech.audio', request_id: currentRequestId, chunk: binary });
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const text = extractMessageText(raw);
|
|
343
|
+
if (text === null)
|
|
344
|
+
return;
|
|
345
|
+
let parsed;
|
|
346
|
+
try {
|
|
347
|
+
parsed = JSON.parse(text);
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
const translated = translateFrame(parsed);
|
|
353
|
+
if (!translated)
|
|
354
|
+
return;
|
|
355
|
+
if (translated.type === 'speech.started') {
|
|
356
|
+
currentRequestId = translated.request_id;
|
|
357
|
+
}
|
|
358
|
+
emit(translated);
|
|
359
|
+
if (translated.type === 'speech.done' || (translated.type === 'error' && translated.fatal)) {
|
|
360
|
+
// Don't reset on .done — the next .started arrives with its
|
|
361
|
+
// own request_id and overwrites cleanly. Resetting here would
|
|
362
|
+
// race with a follow-up binary frame the engine queued before
|
|
363
|
+
// we processed the .done text frame.
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
const onClose = () => {
|
|
367
|
+
finishStream();
|
|
368
|
+
};
|
|
369
|
+
addListener(s, 'message', onMessage);
|
|
370
|
+
addListener(s, 'close', onClose);
|
|
371
|
+
}
|
|
372
|
+
/** Try to extract binary payload from the on('message', ...) raw arg.
|
|
373
|
+
* Returns null when the frame is text. */
|
|
374
|
+
function decodeBinary(raw, maybeIsBinary) {
|
|
375
|
+
// Node `ws` emits (data: Buffer | ArrayBuffer | Buffer[], isBinary: boolean)
|
|
376
|
+
if (maybeIsBinary === true) {
|
|
377
|
+
if (raw instanceof Uint8Array)
|
|
378
|
+
return raw;
|
|
379
|
+
if (raw instanceof ArrayBuffer)
|
|
380
|
+
return new Uint8Array(raw);
|
|
381
|
+
if (Array.isArray(raw)) {
|
|
382
|
+
const total = raw.reduce((n, b) => n + (b?.byteLength ?? 0), 0);
|
|
383
|
+
const out = new Uint8Array(total);
|
|
384
|
+
let off = 0;
|
|
385
|
+
for (const b of raw) {
|
|
386
|
+
out.set(b, off);
|
|
387
|
+
off += b.byteLength;
|
|
388
|
+
}
|
|
389
|
+
return out;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Browser MessageEvent: `{ data: string | ArrayBuffer | Blob }`.
|
|
393
|
+
if (raw && typeof raw === 'object' && 'data' in raw) {
|
|
394
|
+
const d = raw.data;
|
|
395
|
+
if (d instanceof ArrayBuffer)
|
|
396
|
+
return new Uint8Array(d);
|
|
397
|
+
if (ArrayBuffer.isView(d) && d instanceof Uint8Array)
|
|
398
|
+
return d;
|
|
399
|
+
}
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
function extractMessageText(raw) {
|
|
403
|
+
if (typeof raw === 'string')
|
|
404
|
+
return raw;
|
|
405
|
+
if (raw && typeof raw === 'object' && 'data' in raw) {
|
|
406
|
+
const d = raw.data;
|
|
407
|
+
if (typeof d === 'string')
|
|
408
|
+
return d;
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
if (raw instanceof Uint8Array)
|
|
412
|
+
return new TextDecoder().decode(raw);
|
|
413
|
+
if (Array.isArray(raw)) {
|
|
414
|
+
// Node `ws` fragmented text frames arrive as Buffer[].
|
|
415
|
+
try {
|
|
416
|
+
const parts = raw;
|
|
417
|
+
const total = parts.reduce((n, b) => n + b.byteLength, 0);
|
|
418
|
+
const out = new Uint8Array(total);
|
|
419
|
+
let off = 0;
|
|
420
|
+
for (const b of parts) {
|
|
421
|
+
out.set(b, off);
|
|
422
|
+
off += b.byteLength;
|
|
423
|
+
}
|
|
424
|
+
return new TextDecoder().decode(out);
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
return null;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
export function translateFrame(frame) {
|
|
433
|
+
if (!frame || typeof frame !== 'object')
|
|
434
|
+
return null;
|
|
435
|
+
const f = frame;
|
|
436
|
+
switch (f.type) {
|
|
437
|
+
case 'speech.started': {
|
|
438
|
+
const d = frame;
|
|
439
|
+
if (typeof d.request_id !== 'string')
|
|
440
|
+
return null;
|
|
441
|
+
return {
|
|
442
|
+
type: 'speech.started',
|
|
443
|
+
request_id: d.request_id,
|
|
444
|
+
characters: typeof d.characters === 'number' ? d.characters : 0,
|
|
445
|
+
sample_rate: typeof d.sample_rate === 'number' ? d.sample_rate : 24000,
|
|
446
|
+
encoding: 'pcm_s16le',
|
|
447
|
+
channels: 1,
|
|
448
|
+
model: typeof d.model === 'string' ? d.model : 'hakim-fast-v1',
|
|
449
|
+
voice: typeof d.voice === 'string' ? d.voice : 'unknown',
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
case 'speech.done': {
|
|
453
|
+
const d = frame;
|
|
454
|
+
if (typeof d.request_id !== 'string')
|
|
455
|
+
return null;
|
|
456
|
+
return {
|
|
457
|
+
type: 'speech.done',
|
|
458
|
+
request_id: d.request_id,
|
|
459
|
+
duration_ms: typeof d.duration_ms === 'number' ? d.duration_ms : 0,
|
|
460
|
+
usage: d.usage,
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
case 'session.usage': {
|
|
464
|
+
const d = frame;
|
|
465
|
+
return {
|
|
466
|
+
type: 'session.usage',
|
|
467
|
+
session_characters: typeof d.session_characters === 'number' ? d.session_characters : 0,
|
|
468
|
+
usage: d.usage,
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
case 'error': {
|
|
472
|
+
const d = frame;
|
|
473
|
+
const out = {
|
|
474
|
+
type: 'error',
|
|
475
|
+
code: typeof d.code === 'string' ? d.code : 'unknown_error',
|
|
476
|
+
message: typeof d.message === 'string' ? d.message : 'unknown error',
|
|
477
|
+
retryable: d.retryable === true,
|
|
478
|
+
fatal: d.fatal === true,
|
|
479
|
+
};
|
|
480
|
+
if (typeof d.request_id === 'string')
|
|
481
|
+
out.request_id = d.request_id;
|
|
482
|
+
return out;
|
|
483
|
+
}
|
|
484
|
+
case 'session.created':
|
|
485
|
+
// Informational — surfaces session ids + limits in the server
|
|
486
|
+
// log; SDK consumers don't need to branch on it.
|
|
487
|
+
return null;
|
|
488
|
+
default:
|
|
489
|
+
return null;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
export function buildSessionUpdate(session) {
|
|
493
|
+
const out = {};
|
|
494
|
+
if (session.model !== undefined)
|
|
495
|
+
out.model = session.model;
|
|
496
|
+
if (session.voice !== undefined)
|
|
497
|
+
out.voice = session.voice;
|
|
498
|
+
if (session.cfg !== undefined)
|
|
499
|
+
out.cfg = session.cfg;
|
|
500
|
+
if (session.voice_prompt !== undefined)
|
|
501
|
+
out.voice_prompt = session.voice_prompt;
|
|
502
|
+
if (Object.keys(out).length === 0)
|
|
503
|
+
return null;
|
|
504
|
+
return { type: 'session.update', session: out };
|
|
505
|
+
}
|
|
506
|
+
function buildWsUrl(baseURL) {
|
|
507
|
+
const u = new URL(baseURL);
|
|
508
|
+
u.protocol = u.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
509
|
+
u.pathname = u.pathname.replace(/\/$/, '') + '/v1/audio/speech/stream';
|
|
510
|
+
return u.toString();
|
|
511
|
+
}
|
|
512
|
+
function addListener(socket, type, listener) {
|
|
513
|
+
if (socket.addEventListener) {
|
|
514
|
+
socket.addEventListener(type, listener);
|
|
515
|
+
}
|
|
516
|
+
else if (socket.on) {
|
|
517
|
+
socket.on(type, listener);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
function removeListener(socket, type, listener) {
|
|
521
|
+
const s = socket;
|
|
522
|
+
if (s.removeEventListener)
|
|
523
|
+
s.removeEventListener(type, listener);
|
|
524
|
+
else if (s.off)
|
|
525
|
+
s.off(type, listener);
|
|
526
|
+
}
|
|
527
|
+
let _socketCtor = null;
|
|
528
|
+
let _socketCtorPromise = null;
|
|
529
|
+
async function resolveSocketCtor() {
|
|
530
|
+
if (_socketCtor)
|
|
531
|
+
return _socketCtor;
|
|
532
|
+
if (_socketCtorPromise)
|
|
533
|
+
return _socketCtorPromise;
|
|
534
|
+
const globalWs = globalThis.WebSocket;
|
|
535
|
+
if (globalWs) {
|
|
536
|
+
_socketCtor = globalWs;
|
|
537
|
+
return globalWs;
|
|
538
|
+
}
|
|
539
|
+
_socketCtorPromise = (async () => {
|
|
540
|
+
try {
|
|
541
|
+
// Computed specifier so `tsc` doesn't try to resolve `ws`'s
|
|
542
|
+
// types at compile time (the SDK ships zero deps; `ws` is
|
|
543
|
+
// only resolved at runtime on older Node).
|
|
544
|
+
const mod = await new Function('s', 'return import(s)')('ws');
|
|
545
|
+
const Ctor = mod.default ?? mod.WebSocket;
|
|
546
|
+
if (!Ctor)
|
|
547
|
+
throw new Error('ws module did not export a WebSocket class');
|
|
548
|
+
_socketCtor = Ctor;
|
|
549
|
+
return Ctor;
|
|
550
|
+
}
|
|
551
|
+
catch (err) {
|
|
552
|
+
throw new HakimError({
|
|
553
|
+
type: 'invalid_request_error',
|
|
554
|
+
code: 'websocket_impl_missing',
|
|
555
|
+
message: 'Hakim SDK: realtime TTS requires a WebSocket implementation. On Node 22+ / Bun / Deno / browsers it is built in. On Node 18 / 20, run `npm install ws` alongside @tryhakim/voice. ' +
|
|
556
|
+
(err instanceof Error ? `(cause: ${err.message})` : ''),
|
|
557
|
+
status: 0,
|
|
558
|
+
requestId: undefined,
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
})();
|
|
562
|
+
return _socketCtorPromise;
|
|
563
|
+
}
|
|
564
|
+
export const __internals = { translateFrame, buildSessionUpdate, buildWsUrl };
|
|
565
|
+
//# sourceMappingURL=speech-stream-ws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech-stream-ws.js","sourceRoot":"","sources":["../../src/audio/speech-stream-ws.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `audio.speech` — POST /v1/audio/speech.
|
|
3
|
+
*
|
|
4
|
+
* Two entry points:
|
|
5
|
+
*
|
|
6
|
+
* - `create(request)` — buffers the full audio into memory and
|
|
7
|
+
* returns it with decoded headers. Use for short outputs or when
|
|
8
|
+
* you need `usageCharacters` / `durationMs` immediately.
|
|
9
|
+
*
|
|
10
|
+
* - `stream(request)` — returns an AsyncIterable of `Uint8Array`
|
|
11
|
+
* chunks so the caller can start playback / uploading before the
|
|
12
|
+
* server finishes synthesis. `stream` forces `stream: true` on the
|
|
13
|
+
* request payload regardless of what the caller passed.
|
|
14
|
+
*/
|
|
15
|
+
import type { Transport } from '../transport.js';
|
|
16
|
+
import type { SpeechRequest, SpeechResponse, SpeechStreamHandle, SpeechStreamOptions, SpeechStreamResponse } from '../types.js';
|
|
17
|
+
export declare class SpeechAPI {
|
|
18
|
+
private readonly transport;
|
|
19
|
+
constructor(transport: Transport);
|
|
20
|
+
/** Realtime TTS over a WebSocket (`/v1/audio/speech/stream`).
|
|
21
|
+
*
|
|
22
|
+
* Trades the per-request TCP/TLS/HTTP-header setup of the HTTP
|
|
23
|
+
* path (~7 ms per call cross-region) for a long-lived socket that
|
|
24
|
+
* can serve many utterances back-to-back. The persistent surface
|
|
25
|
+
* is the right pick for LLM-→-TTS pipelines (synthesise the next
|
|
26
|
+
* sentence while the LLM is still generating tokens) and embed
|
|
27
|
+
* widgets that make many TTS calls per session.
|
|
28
|
+
*
|
|
29
|
+
* Returns a `SpeechStreamHandle` — call `sendSpeech({...})` to
|
|
30
|
+
* request an utterance, iterate `audio` (raw PCM-S16LE @ 24 kHz
|
|
31
|
+
* mono) or `events` (started / audio / done / usage / error), and
|
|
32
|
+
* `close()` when finished. */
|
|
33
|
+
streamWs(opts?: SpeechStreamOptions): SpeechStreamHandle;
|
|
34
|
+
/** Non-streaming TTS. Returns the complete audio body as a Uint8Array. */
|
|
35
|
+
create(request: SpeechRequest, opts?: {
|
|
36
|
+
idempotencyKey?: string;
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
}): Promise<SpeechResponse>;
|
|
39
|
+
/** Streaming TTS. Starts yielding chunks as soon as the server writes
|
|
40
|
+
* them, without buffering the whole response. */
|
|
41
|
+
stream(request: SpeechRequest, opts?: {
|
|
42
|
+
idempotencyKey?: string;
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
}): Promise<SpeechStreamResponse>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=speech.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../src/audio/speech.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAKrB,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD;;;;;;;;;;;;mCAY+B;IAC/B,QAAQ,CAAC,IAAI,GAAE,mBAAwB,GAAG,kBAAkB;IAI5D,0EAA0E;IACpE,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAC3D,OAAO,CAAC,cAAc,CAAC;IA2B1B;sDACkD;IAC5C,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAC3D,OAAO,CAAC,oBAAoB,CAAC;CAgCjC"}
|