@memberjunction/ai-realtime-client 5.48.0 → 5.49.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.
@@ -4,18 +4,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- var HuggingFaceRealtimeClient_1;
8
7
  import { RegisterClass } from '@memberjunction/global';
9
8
  import { BaseRealtimeClient } from '../generic/baseRealtimeClient.js';
10
- import { base64ToArrayBuffer } from '../audio/pcmUtils.js';
11
- import { RealtimePcmPlayback } from '../audio/pcmPlayback.js';
12
- import { RealtimeAudioMeter } from '../audio/audioMeter.js';
13
- import { createPcmMicCapture } from '../audio/micCapture.js';
9
+ import { OpenAIProtocolWebSocketRealtimeClient, } from '../generic/openAIProtocolClient.js';
14
10
  // ── Audio constants ────────────────────────────────────────────────────────────
15
11
  /**
16
12
  * Default PCM16 sample rate (mono) both directions, used when the server pact omits `sampleRate`.
17
13
  * HuggingFace's speech-to-speech cascade is natively **16 kHz**, so capture AND playout default to that
18
- * (a wrong rate pitch/speed-distorts audio). Matches the server driver's {@link HUGGINGFACE_DEFAULT_PCM_SAMPLE_RATE}.
14
+ * (a wrong rate pitch/speed-distorts audio). Matches the server driver's `HUGGINGFACE_DEFAULT_PCM_SAMPLE_RATE`.
19
15
  */
20
16
  export const HUGGINGFACE_DEFAULT_PCM_SAMPLE_RATE = 16000;
21
17
  // ── The driver ─────────────────────────────────────────────────────────────────
@@ -30,176 +26,53 @@ export const HUGGINGFACE_DEFAULT_PCM_SAMPLE_RATE = 16000;
30
26
  * — the credential IS the URL): the browser connects to MJAPI's realtime proxy, which tunnels
31
27
  * transparently to the internal self-hosted endpoint. The client never learns the internal endpoint.
32
28
  *
33
- * OpenAI ordering: the session config is applied via `session.update` only AFTER the endpoint's
34
- * `session.created` frame (sending it earlier is dropped), and `'listening'` is reported at that point
35
- * (obligation #7). Because the audio plane is a raw websocket (not WebRTC), the client OWNS playback —
36
- * `IsAudioPlaying` reflects the local playout clock, and barge-in/cancel flush it locally.
29
+ * Because HuggingFace speaks the OpenAI wire protocol over a websocket with a client-owned PCM
30
+ * plane, nearly everything lives in the shared layers (protocol brain + websocket transport in
31
+ * {@link OpenAIProtocolWebSocketRealtimeClient}). This class supplies only the HuggingFace
32
+ * specifics: the proxy-URL connect, the `{ session, sampleRate }` server-pact parsing, the
33
+ * `session.created` readiness gate (OpenAI ordering — a `session.update` sent earlier is
34
+ * dropped), and the benign close semantics of a self-hosted proxy hop.
37
35
  */
38
- let HuggingFaceRealtimeClient = HuggingFaceRealtimeClient_1 = class HuggingFaceRealtimeClient extends BaseRealtimeClient {
39
- constructor() {
40
- super(...arguments);
41
- // ── Transport ──────────────────────────────────────────────────────────────
42
- this.socket = null;
43
- this.playback = null;
44
- this.micCapture = null;
45
- this.micStream = null;
46
- /** The OpenAI-Realtime `session` object applied via `session.update` on `session.created`. */
47
- this.sessionObject = {};
48
- /** Resolver for the in-flight Connect's `session.created` wait (null outside Connect). */
49
- this.onSessionCreated = null;
50
- // ── Response state machine (mirrors the OpenAI WebRTC client) ──────────────
51
- this.pendingAssistantText = '';
52
- this.responseActive = false;
53
- this.pendingResultResponse = false;
54
- this.pendingNarrationKind = false;
55
- this.activeResponseKind = 'normal';
56
- this.currentState = 'closed';
57
- this.closedByConsumer = false;
58
- // ── Connection internals ───────────────────────────────────────────────────
59
- /** Resolver for the in-flight Connect's socket-open wait. */
60
- this.onOpen = null;
61
- }
62
- // ── BaseRealtimeClient: connection lifecycle ───────────────────────────────
63
- /**
64
- * Opens the browser-direct websocket to the proxy URL (`config.EphemeralToken`), waits for the
65
- * endpoint's `session.created`, applies the server-built session config, builds the PCM audio plane
66
- * at the pact's sample rate, and reports `'listening'`.
67
- */
68
- async Connect(config, micStream) {
69
- this.setState('connecting');
70
- this.sessionObject = HuggingFaceRealtimeClient_1.parseSessionObject(config);
71
- const sampleRate = HuggingFaceRealtimeClient_1.parseSampleRate(config);
72
- this.micStream = micStream;
73
- const opened = this.buildSignal((resolve) => (this.onOpen = resolve));
74
- const created = this.buildSignal((resolve) => (this.onSessionCreated = resolve));
75
- this.socket = this.createSocket(config.EphemeralToken);
76
- this.socket.onopen = () => this.onOpen?.();
77
- this.socket.onmessage = (data) => this.handleSocketMessage(data);
78
- this.socket.onerror = (message) => this.handleSocketError(message);
79
- this.socket.onclose = () => this.handleSocketClose();
80
- await opened;
81
- this.setState('connected');
82
- await created;
83
- this.applySessionConfig();
84
- this.playback = this.createPlayback(sampleRate);
85
- this.micCapture = await this.createMicCapture(micStream, sampleRate, (b64) => this.sendInput(b64));
86
- this.attachOutputAudioMeter(this.playback?.CreateMeter?.() ?? null);
87
- this.attachInputAudioMeter(RealtimeAudioMeter.ForMicStream(micStream));
88
- this.setState('listening');
89
- }
90
- /** Tears down the audio plane + socket and resets the response state machine. */
91
- async Disconnect() {
92
- this.closedByConsumer = true;
93
- this.closeAudioMeters();
94
- this.micCapture?.Stop();
95
- this.micCapture = null;
96
- this.micStream?.getTracks().forEach((t) => t.stop());
97
- this.micStream = null;
98
- this.playback?.Close();
99
- this.playback = null;
100
- if (this.socket) {
101
- try {
102
- this.socket.close();
103
- }
104
- catch { /* already closing */ }
105
- this.socket = null;
106
- }
107
- this.resetResponseState();
108
- if (this.currentState !== 'error') {
109
- this.setState('closed');
110
- }
111
- }
112
- // ── BaseRealtimeClient: outbound actions ──────────────────────────────────
113
- /**
114
- * Injects typed text as a user-role message, then triggers a reply through the same collision-safe
115
- * path tool results use. SendText implies barge-in — an active spoken response is cancelled first.
116
- */
117
- SendText(text) {
118
- if (!this.socket) {
119
- return;
120
- }
121
- this.CancelActiveResponse();
122
- this.sendFrame({
123
- type: 'conversation.item.create',
124
- item: { type: 'message', role: 'user', content: [{ type: 'input_text', text }] },
125
- });
126
- this.requestResultResponse();
127
- }
128
- /**
129
- * Cancels the model's in-flight response (only when one is active) and flushes local playback so
130
- * already-buffered speech stops immediately. Preserves any queued tool-result trigger. No-op when idle.
131
- */
132
- CancelActiveResponse() {
133
- if (!this.socket) {
134
- return;
135
- }
136
- const playing = this.playback?.IsPlaying ?? false;
137
- if (!this.responseActive && !playing) {
138
- return;
139
- }
140
- if (this.responseActive) {
141
- this.sendFrame({ type: 'response.cancel' });
142
- this.responseActive = false;
143
- this.pendingNarrationKind = false;
144
- this.activeResponseKind = 'normal';
145
- this.pendingAssistantText = '';
146
- }
147
- this.playback?.Flush();
148
- if (this.currentState === 'speaking') {
149
- this.setState('listening');
150
- }
151
- }
152
- /** Injects a system-role context item the model can draw on next time it speaks, WITHOUT a reply. */
153
- SendContextNote(text) {
154
- if (!this.socket) {
155
- return;
156
- }
157
- this.sendFrame({
158
- type: 'conversation.item.create',
159
- item: { type: 'message', role: 'system', content: [{ type: 'input_text', text }] },
160
- });
36
+ let HuggingFaceRealtimeClient = class HuggingFaceRealtimeClient extends OpenAIProtocolWebSocketRealtimeClient {
37
+ /** @inheritdoc — used in the shared diagnostics + close messages. */
38
+ get providerDebugLabel() {
39
+ return 'HuggingFaceRealtimeClient';
40
+ }
41
+ // ── Transport hooks ────────────────────────────────────────────────────────
42
+ /** @inheritdoc — the proxy URL IS the credential (one-time ticket in the query string). */
43
+ openProviderSocket(config) {
44
+ return this.createSocket(config.EphemeralToken);
45
+ }
46
+ /** @inheritdoc — the endpoint drops `session.update` until `session.created` confirms the session. */
47
+ get waitsForSessionCreated() {
48
+ return true;
49
+ }
50
+ /** @inheritdoc — extracts the wire-shaped `session` object from the `{ session, sampleRate }` pact. */
51
+ resolveSessionObject(config) {
52
+ const sessionConfig = config.SessionConfig ?? {};
53
+ const raw = sessionConfig['session'];
54
+ return raw !== null && typeof raw === 'object' && !Array.isArray(raw) ? raw : {};
161
55
  }
162
- /**
163
- * Triggers ONE short spoken update; marks the upcoming response `'narration'` so its transcripts are
164
- * ephemeral. Skipped while a response is in flight (narration is disposable by contract).
165
- */
166
- RequestSpokenUpdate(instructions) {
167
- if (!this.socket || this.responseActive) {
168
- return;
169
- }
170
- this.responseActive = true;
171
- this.pendingNarrationKind = true;
172
- this.sendFrame({ type: 'response.create', response: { instructions } });
56
+ /** @inheritdoc — the pact's `sampleRate`, defaulting to the HF-native 16 kHz. */
57
+ resolveSampleRate(config) {
58
+ const raw = config.SessionConfig?.['sampleRate'];
59
+ return typeof raw === 'number' && raw > 0 ? raw : HUGGINGFACE_DEFAULT_PCM_SAMPLE_RATE;
173
60
  }
174
61
  /**
175
- * Sends the tool result as a `function_call_output` item, then triggers a reply — immediately if idle,
176
- * otherwise queued until the current response finishes (so the model always voices delegated results).
62
+ * @inheritdoc
63
+ *
64
+ * A close the consumer didn't ask for is reported as a terminal `'closed'` — NOT the fatal
65
+ * error the cloud providers surface: the self-hosted proxy hop closes benignly (ticket
66
+ * expiry, upstream restart), and the host treats `'closed'` as the session-over signal.
177
67
  */
178
- SendToolResult(callID, outputJson) {
179
- if (!this.socket) {
68
+ handleSocketClose() {
69
+ if (this.closedByConsumer) {
180
70
  return;
181
71
  }
182
- this.sendFrame({
183
- type: 'conversation.item.create',
184
- item: { type: 'function_call_output', call_id: callID, output: outputJson },
185
- });
186
- this.requestResultResponse();
187
- }
188
- /** Mute / unmute by toggling the mic tracks' `enabled` flag (transport stays up). */
189
- SetMuted(muted) {
190
- for (const t of this.micStream?.getAudioTracks() ?? []) {
191
- t.enabled = !muted;
72
+ if (this.currentState !== 'error') {
73
+ this.setState('closed');
192
74
  }
193
75
  }
194
- /** @inheritdoc */
195
- get IsBusy() {
196
- return this.responseActive;
197
- }
198
- /** @inheritdoc */
199
- get IsAudioPlaying() {
200
- return this.playback?.IsPlaying ?? false;
201
- }
202
- // ── Overridable creation seams (tests inject fakes — no network / WebAudio) ──
203
76
  /** Creates the websocket to the given URL (the proxy URL). Production wraps the platform `WebSocket`. */
204
77
  createSocket(url) {
205
78
  const WS = globalThis.WebSocket;
@@ -221,228 +94,8 @@ let HuggingFaceRealtimeClient = HuggingFaceRealtimeClient_1 = class HuggingFaceR
221
94
  ws.onclose = () => seam.onclose?.();
222
95
  return seam;
223
96
  }
224
- /** Creation seam for the mic-capture pipeline. Production delegates to the shared {@link createPcmMicCapture}. */
225
- async createMicCapture(micStream, sampleRate, onPcmChunk) {
226
- return createPcmMicCapture(micStream, sampleRate, onPcmChunk);
227
- }
228
- /** Creation seam for the playout engine. Production returns the shared {@link RealtimePcmPlayback}. */
229
- createPlayback(sampleRate) {
230
- return new RealtimePcmPlayback(sampleRate);
231
- }
232
- /** Extracts the wire-shaped `session` object from the server pact (`{ session, sampleRate }`). */
233
- static parseSessionObject(config) {
234
- const sessionConfig = config.SessionConfig ?? {};
235
- const raw = sessionConfig['session'];
236
- return raw !== null && typeof raw === 'object' && !Array.isArray(raw) ? raw : {};
237
- }
238
- /** Extracts the PCM sample rate from the server pact, defaulting to the HF-native 16 kHz. */
239
- static parseSampleRate(config) {
240
- const raw = config.SessionConfig?.['sampleRate'];
241
- return typeof raw === 'number' && raw > 0 ? raw : HUGGINGFACE_DEFAULT_PCM_SAMPLE_RATE;
242
- }
243
- /** Creates a one-shot signal promise, handing its resolver to the supplied setter. */
244
- buildSignal(assign) {
245
- return new Promise((resolve) => assign(resolve));
246
- }
247
- /** Sends the server-built session config once the session exists (skipped when empty). */
248
- applySessionConfig() {
249
- if (Object.keys(this.sessionObject).length === 0) {
250
- return;
251
- }
252
- this.sendFrame({ type: 'session.update', session: this.sessionObject });
253
- }
254
- /** Streams one base64 PCM16 mic frame as an `input_audio_buffer.append`. */
255
- sendInput(base64Pcm16) {
256
- this.sendFrame({ type: 'input_audio_buffer.append', audio: base64Pcm16 });
257
- }
258
- // ── Inbound event translation ──────────────────────────────────────────────
259
- /** Parses an inbound frame and dispatches it. */
260
- handleSocketMessage(data) {
261
- let event;
262
- try {
263
- event = JSON.parse(data);
264
- }
265
- catch {
266
- return; // non-JSON frame — ignore
267
- }
268
- if (event === null || typeof event !== 'object') {
269
- return;
270
- }
271
- this.handleEvent(event);
272
- }
273
- /** Dispatches a typed OpenAI-Realtime server event to the appropriate behavior. */
274
- handleEvent(event) {
275
- switch (event.type) {
276
- case 'session.created':
277
- this.onSessionCreated?.();
278
- this.onSessionCreated = null;
279
- break;
280
- case 'response.output_audio.delta':
281
- case 'response.audio.delta':
282
- this.handleAudioDelta(event.delta);
283
- break;
284
- case 'response.output_audio_transcript.delta':
285
- case 'response.audio_transcript.delta':
286
- this.onAssistantDelta(event.delta ?? '');
287
- break;
288
- case 'response.output_audio_transcript.done':
289
- case 'response.audio_transcript.done':
290
- this.onAssistantDone(event.transcript ?? '');
291
- break;
292
- case 'conversation.item.input_audio_transcription.completed':
293
- this.emitTranscript({ Role: 'User', Text: event.transcript ?? '', IsFinal: true, Kind: 'normal' });
294
- break;
295
- case 'response.function_call_arguments.done':
296
- this.onToolCallFrame(event);
297
- break;
298
- case 'input_audio_buffer.speech_started':
299
- this.handleSpeechStarted();
300
- break;
301
- case 'response.created':
302
- this.responseActive = true;
303
- this.activeResponseKind = this.pendingNarrationKind ? 'narration' : 'normal';
304
- this.pendingNarrationKind = false;
305
- break;
306
- case 'response.done':
307
- this.handleResponseDone(event);
308
- break;
309
- case 'error':
310
- this.emitError({ Message: event.error?.message ?? 'Unknown provider error', Code: event.error?.code, Fatal: false });
311
- break;
312
- default:
313
- break;
314
- }
315
- }
316
- /** Enqueues one base64 audio chunk for playout and reflects `'speaking'`. */
317
- handleAudioDelta(deltaBase64) {
318
- if (!deltaBase64) {
319
- return;
320
- }
321
- if (this.currentState !== 'speaking') {
322
- this.setState('speaking');
323
- }
324
- this.playback?.Enqueue(base64ToArrayBuffer(deltaBase64));
325
- }
326
- /** Appends an assistant transcript delta and emits it (tagged with the active response kind). */
327
- onAssistantDelta(delta) {
328
- if (!delta) {
329
- return;
330
- }
331
- if (this.currentState !== 'speaking') {
332
- this.setState('speaking');
333
- }
334
- this.pendingAssistantText += delta;
335
- this.emitTranscript({ Role: 'Assistant', Text: delta, IsFinal: false, Kind: this.activeResponseKind });
336
- }
337
- /** Finalizes the assistant turn (empty turns emit nothing). */
338
- onAssistantDone(transcript) {
339
- const finalText = transcript || this.pendingAssistantText;
340
- this.pendingAssistantText = '';
341
- if (finalText.trim().length > 0) {
342
- this.emitTranscript({ Role: 'Assistant', Text: finalText, IsFinal: true, Kind: this.activeResponseKind });
343
- }
344
- }
345
- /**
346
- * Surfaces a completed tool call. Silently leaves `'speaking'` (no emission) so a host busy indicator
347
- * isn't clobbered, and clears the busy flag (deadlock guard — obligation #2). `arguments` is already a
348
- * JSON string on the wire.
349
- */
350
- onToolCallFrame(event) {
351
- if (this.currentState === 'speaking') {
352
- this.currentState = 'connected';
353
- }
354
- this.responseActive = false;
355
- this.emitToolCall({
356
- CallID: event.call_id ?? '',
357
- ToolName: event.name ?? '',
358
- ArgumentsJson: typeof event.arguments === 'string' ? event.arguments : JSON.stringify(event.arguments ?? {}),
359
- });
360
- }
361
- /**
362
- * True barge-in ONLY: the user started speaking over active model output (a response in flight or audio
363
- * audibly playing). Flushes local playback, emits the interruption, returns to `'listening'`.
364
- */
365
- handleSpeechStarted() {
366
- const playing = this.playback?.IsPlaying ?? false;
367
- if (this.responseActive || playing) {
368
- this.playback?.Flush();
369
- this.emitInterruption();
370
- }
371
- this.setState('listening');
372
- }
373
- /** Response boundary: release the lock, emit usage, fire any queued tool-result reply, return to listening. */
374
- handleResponseDone(event) {
375
- this.responseActive = false;
376
- this.activeResponseKind = 'normal';
377
- const usage = event.response?.usage;
378
- if (usage) {
379
- this.emitUsage({ InputTokens: usage.input_tokens, OutputTokens: usage.output_tokens, Raw: usage });
380
- }
381
- this.flushPendingResultResponse();
382
- if (this.currentState === 'speaking') {
383
- this.setState('listening');
384
- }
385
- }
386
- // ── Response state machine ─────────────────────────────────────────────────
387
- /** Triggers a reply immediately when idle, else queues it until the current response finishes. */
388
- requestResultResponse() {
389
- if (!this.socket) {
390
- return;
391
- }
392
- if (this.responseActive) {
393
- this.pendingResultResponse = true;
394
- return;
395
- }
396
- this.pendingResultResponse = false;
397
- this.responseActive = true;
398
- this.sendFrame({ type: 'response.create' });
399
- this.setState('speaking');
400
- }
401
- /** On a turn completing, fire any queued tool-result response so the answer is spoken. */
402
- flushPendingResultResponse() {
403
- if (!this.pendingResultResponse || !this.socket) {
404
- return;
405
- }
406
- this.pendingResultResponse = false;
407
- this.responseActive = true;
408
- this.sendFrame({ type: 'response.create' });
409
- this.setState('speaking');
410
- }
411
- /** Resets the per-session response state machine (used on Disconnect). */
412
- resetResponseState() {
413
- this.pendingAssistantText = '';
414
- this.responseActive = false;
415
- this.pendingResultResponse = false;
416
- this.pendingNarrationKind = false;
417
- this.activeResponseKind = 'normal';
418
- }
419
- // ── Transport error / close ────────────────────────────────────────────────
420
- /** A socket-level error is fatal — the transport is gone (obligation #6). */
421
- handleSocketError(message) {
422
- this.emitError({ Message: message, Fatal: true });
423
- this.setState('error');
424
- }
425
- /** A close is silent when consumer-initiated; otherwise reported as a terminal `'closed'`. */
426
- handleSocketClose() {
427
- if (this.closedByConsumer) {
428
- return;
429
- }
430
- if (this.currentState !== 'error') {
431
- this.setState('closed');
432
- }
433
- }
434
- // ── Helpers ────────────────────────────────────────────────────────────────
435
- /** Updates the client's own state view and emits the change to the host. */
436
- setState(state) {
437
- this.currentState = state;
438
- this.emitStateChange(state);
439
- }
440
- /** JSON-serializes and sends one client frame (no-op when the socket is closed). */
441
- sendFrame(frame) {
442
- this.socket?.send(JSON.stringify(frame));
443
- }
444
97
  };
445
- HuggingFaceRealtimeClient = HuggingFaceRealtimeClient_1 = __decorate([
98
+ HuggingFaceRealtimeClient = __decorate([
446
99
  RegisterClass(BaseRealtimeClient, 'huggingface')
447
100
  ], HuggingFaceRealtimeClient);
448
101
  export { HuggingFaceRealtimeClient };
@@ -1 +1 @@
1
- {"version":3,"file":"huggingFaceRealtimeClient.js","sourceRoot":"","sources":["../../src/drivers/huggingFaceRealtimeClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"huggingFaceRealtimeClient.js","sourceRoot":"","sources":["../../src/drivers/huggingFaceRealtimeClient.ts"],"names":[],"mappings":"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"}