@memberjunction/ai-realtime-client 6.1.1 → 6.1.2
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/drivers/geminiRealtimeClient.d.ts +130 -22
- package/dist/drivers/geminiRealtimeClient.d.ts.map +1 -1
- package/dist/drivers/geminiRealtimeClient.js +558 -45
- package/dist/drivers/geminiRealtimeClient.js.map +1 -1
- package/dist/drivers/openAILiveClient.d.ts +11 -0
- package/dist/drivers/openAILiveClient.d.ts.map +1 -1
- package/dist/drivers/openAILiveClient.js +29 -4
- package/dist/drivers/openAILiveClient.js.map +1 -1
- package/dist/generic/baseRealtimeClient.d.ts +53 -1
- package/dist/generic/baseRealtimeClient.d.ts.map +1 -1
- package/dist/generic/baseRealtimeClient.js +61 -0
- package/dist/generic/baseRealtimeClient.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/media/channelVideoSource.d.ts +83 -0
- package/dist/media/channelVideoSource.d.ts.map +1 -0
- package/dist/media/channelVideoSource.js +117 -0
- package/dist/media/channelVideoSource.js.map +1 -0
- package/dist/media/frameCapture.d.ts +73 -0
- package/dist/media/frameCapture.d.ts.map +1 -0
- package/dist/media/frameCapture.js +145 -0
- package/dist/media/frameCapture.js.map +1 -0
- package/package.json +4 -4
|
@@ -12,14 +12,14 @@ import { IPcmMicCapture } from '../audio/micCapture.js';
|
|
|
12
12
|
*/
|
|
13
13
|
export interface GeminiLiveClientSession {
|
|
14
14
|
/**
|
|
15
|
-
* Streams realtime user input to the model — mic audio frames
|
|
16
|
-
*
|
|
17
|
-
* messages: native-audio models treat {@link sendClientContent} as history seeding
|
|
18
|
-
* only and will NOT generate from it mid-call, but realtime text triggers immediately.
|
|
15
|
+
* Streams realtime user input to the model — mic audio frames, inbound video frames,
|
|
16
|
+
* and mid-session text.
|
|
19
17
|
*/
|
|
20
18
|
sendRealtimeInput(params: {
|
|
21
19
|
audio?: GeminiBlob;
|
|
22
20
|
text?: string;
|
|
21
|
+
media?: GeminiBlob;
|
|
22
|
+
video?: GeminiBlob;
|
|
23
23
|
}): void;
|
|
24
24
|
/** Appends client content WITHOUT triggering generation (context notes, history seeding). */
|
|
25
25
|
sendClientContent(params: {
|
|
@@ -131,14 +131,45 @@ export declare class GeminiPcmPlayback extends RealtimePcmPlayback {
|
|
|
131
131
|
* `'normal'` when the turn completes.
|
|
132
132
|
*/
|
|
133
133
|
export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
134
|
+
static readonly ASSISTANT_SAFETY_BACKSTOP_MS = 15000;
|
|
134
135
|
private session;
|
|
135
136
|
private micStream;
|
|
137
|
+
private cameraStream;
|
|
136
138
|
private micCapture;
|
|
139
|
+
private cameraCapture;
|
|
137
140
|
private playback;
|
|
141
|
+
private firstVideoSendTimestamp;
|
|
142
|
+
private lastVideoSendTimestamp;
|
|
143
|
+
protected videoFramesSent: number;
|
|
144
|
+
protected resumptionHandle: string | null;
|
|
145
|
+
private lastConnectArgs;
|
|
146
|
+
/** Returns the latest session resumption handle reported by the server, if any. */
|
|
147
|
+
get ResumptionHandle(): string | null;
|
|
148
|
+
/** Returns the count of video frames successfully sent over the established video track. */
|
|
149
|
+
get VideoFramesSent(): number;
|
|
150
|
+
/**
|
|
151
|
+
* Returns the cumulative active video duration in seconds across sent video frames.
|
|
152
|
+
* Represents the wall-clock span between first and last sent frames (span-not-sum) for stream telemetry.
|
|
153
|
+
* Provider-reported ImageTokens remains the authoritative financial billing basis.
|
|
154
|
+
*/
|
|
155
|
+
get VideoSeconds(): number;
|
|
156
|
+
private idleSignal;
|
|
157
|
+
private supportsScheduling;
|
|
158
|
+
private supportsBlocking;
|
|
159
|
+
private interactionInProgress;
|
|
160
|
+
private toolBatchBarrier;
|
|
161
|
+
private assistantSafetyBackstopTimer;
|
|
162
|
+
/**
|
|
163
|
+
* Whether the active model session enforces asynchronous non-blocking tool execution.
|
|
164
|
+
* Derived from model tooling capability (!supportsBlocking), separated from the idle signal (Reviewer Item 19).
|
|
165
|
+
*/
|
|
166
|
+
private get isNonBlocking();
|
|
138
167
|
/** Accumulates the in-flight assistant transcript across delta frames. */
|
|
139
168
|
private pendingAssistantText;
|
|
140
169
|
/** Accumulates the in-flight user transcription across delta frames. */
|
|
141
170
|
private pendingUserText;
|
|
171
|
+
/** Accumulates in-flight thought text deltas until finalized on turn completion. */
|
|
172
|
+
private pendingThoughtText;
|
|
142
173
|
/** True while a model turn is in flight; gates (queues) client-triggered sends. */
|
|
143
174
|
private responseActive;
|
|
144
175
|
/** The kind of the turn currently in flight; stamped at send time, reset on turnComplete. */
|
|
@@ -173,11 +204,18 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
173
204
|
* values the server LOCKED into the token, so tampering is ignored by the API), then wires
|
|
174
205
|
* the mic-capture worklet. Reports `'listening'` once audio is flowing.
|
|
175
206
|
*/
|
|
176
|
-
Connect(config: ClientRealtimeSessionConfig, micStream: MediaStream): Promise<void>;
|
|
177
207
|
/**
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
208
|
+
* Opens the client-direct Gemini Live session: creates the playout engine, connects with
|
|
209
|
+
* the ephemeral token + the server-built `SessionConfig` (`{ model, config }` — the same
|
|
210
|
+
* values the server LOCKED into the token, so tampering is ignored by the API), negotiates
|
|
211
|
+
* tracks, then wires the mic-capture worklet and optional video capture.
|
|
212
|
+
* Reports `'listening'` once audio is flowing.
|
|
213
|
+
*/
|
|
214
|
+
Connect(config: ClientRealtimeSessionConfig, micStream: MediaStream, cameraStream?: MediaStream): Promise<void>;
|
|
215
|
+
/**
|
|
216
|
+
* Tears down the session, mic capture, mic tracks, camera capture, and playout engine,
|
|
217
|
+
* resets the response state machine, and emits a final `'closed'` (unless already `'error'`).
|
|
218
|
+
* Safe to call more than once.
|
|
181
219
|
*/
|
|
182
220
|
Disconnect(): Promise<void>;
|
|
183
221
|
/**
|
|
@@ -195,6 +233,22 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
195
233
|
* needed.
|
|
196
234
|
*/
|
|
197
235
|
SendText(text: string): void;
|
|
236
|
+
/**
|
|
237
|
+
* Streams one base64 image frame over the established inbound video track.
|
|
238
|
+
*
|
|
239
|
+
* Enforces a 750ms minimum inter-frame spacing to serve as a backstop with deliberate jitter
|
|
240
|
+
* headroom for 1 fps (1000ms) pacers (such as `ChannelInboundVideoBridge`'s `setInterval`,
|
|
241
|
+
* `frameCapture`, and channel-level gates like `OnScreencastFrame`'s 1000ms pacer). Upstream
|
|
242
|
+
* cadence generators and channel gates are the primary enforcers of the nominal 1 fps ceiling,
|
|
243
|
+
* while this 750ms gate absorbs event loop and async dispatch jitter without dropping intended
|
|
244
|
+
* 1Hz frames, while preventing any unpaced callers from bursting above 1.33 fps.
|
|
245
|
+
*
|
|
246
|
+
* If inbound video is not established, returns `false` without error or frame sends (fallback).
|
|
247
|
+
*
|
|
248
|
+
* @returns `true` if the frame was dispatched to the session; `false` if dropped (throttled
|
|
249
|
+
* or track unestablished).
|
|
250
|
+
*/
|
|
251
|
+
SendVideoFrame(base64Image: string, mimeType?: string): boolean;
|
|
198
252
|
/**
|
|
199
253
|
* @inheritdoc
|
|
200
254
|
*
|
|
@@ -284,7 +338,7 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
284
338
|
* server locked the real config into the token, so the session still behaves correctly.
|
|
285
339
|
*/
|
|
286
340
|
private parseSessionConfig;
|
|
287
|
-
/** Streams one base64 PCM16 mic chunk to the model (no-op once the session is gone). */
|
|
341
|
+
/** Streams one base64 PCM16 mic chunk to the model (no-op once the session is gone, closed, or in error). */
|
|
288
342
|
private sendMicChunk;
|
|
289
343
|
/** Surfaces a fatal websocket error and marks the session unusable. */
|
|
290
344
|
private handleTransportError;
|
|
@@ -295,6 +349,15 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
295
349
|
* handlers, including `usageMetadata` → {@link emitUsage}.
|
|
296
350
|
*/
|
|
297
351
|
private handleServerMessage;
|
|
352
|
+
/**
|
|
353
|
+
* Resumes the live session using a previously captured session resumption handle (F7).
|
|
354
|
+
*/
|
|
355
|
+
protected resumeSession(handle: string): Promise<void>;
|
|
356
|
+
/**
|
|
357
|
+
* Inspects inbound frames for the untyped `interaction_status` / `interactionStatus` wire field
|
|
358
|
+
* documented for Gemini Live Extended Thinking (V3). Narrowed via null-safe object/string helpers.
|
|
359
|
+
*/
|
|
360
|
+
private checkInteractionStatus;
|
|
298
361
|
/**
|
|
299
362
|
* Emits a usage update from a server message's `usageMetadata`.
|
|
300
363
|
*
|
|
@@ -308,6 +371,14 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
308
371
|
private handleUsageMetadata;
|
|
309
372
|
/** Translates one {@link LiveServerContent} frame in provider-documented signal order. */
|
|
310
373
|
private handleServerContent;
|
|
374
|
+
/**
|
|
375
|
+
* generationComplete: indicates the model has finished generating all tokens for the turn.
|
|
376
|
+
* Playout may still be active (the delay between generationComplete and turnComplete).
|
|
377
|
+
*
|
|
378
|
+
* Per Reviewer Item 20: Draining the queue happens on turnComplete or true IDLE, not prematurely
|
|
379
|
+
* on generationComplete. We set responseActive = false so busy state reflects token completion.
|
|
380
|
+
*/
|
|
381
|
+
private handleGenerationComplete;
|
|
311
382
|
/**
|
|
312
383
|
* Barge-in: the provider stopped generating because the user spoke. Flush every scheduled
|
|
313
384
|
* playout source (per the Live API contract, `interrupted` is the signal to empty the
|
|
@@ -319,6 +390,12 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
319
390
|
private handleInterruption;
|
|
320
391
|
/** Decodes inline model-audio parts (base64 PCM16 @ 24 kHz) into the playout queue. */
|
|
321
392
|
private handleModelAudio;
|
|
393
|
+
/**
|
|
394
|
+
* Extracts thought parts (`part.thought === true`) from model turns and emits them
|
|
395
|
+
* as narration transcript deltas (`Kind: 'narration'`). Thought summaries are reasoning
|
|
396
|
+
* notes, never synthesized as assistant speech.
|
|
397
|
+
*/
|
|
398
|
+
private handleModelThoughts;
|
|
322
399
|
/**
|
|
323
400
|
* User transcription: each frame's `text` is an incremental DELTA (emitted with
|
|
324
401
|
* `IsFinal: false`); the accumulated turn text is finalized on the `finished` flag — or,
|
|
@@ -334,19 +411,32 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
334
411
|
private handleAssistantTranscription;
|
|
335
412
|
/**
|
|
336
413
|
* Surfaces the model's tool calls to the host and caches each callID→name for
|
|
337
|
-
* {@link SendToolResult}.
|
|
338
|
-
*
|
|
339
|
-
*
|
|
340
|
-
*
|
|
341
|
-
*
|
|
414
|
+
* {@link SendToolResult}.
|
|
415
|
+
*
|
|
416
|
+
* In synchronous BLOCKING mode (e.g. 3.1 preview), the model yields the floor pending
|
|
417
|
+
* the tool result: `responseActive` is cleared so the tool response can take the floor,
|
|
418
|
+
* and the client silently leaves 'speaking'.
|
|
419
|
+
*
|
|
420
|
+
* In asynchronous NON_BLOCKING mode (Extended Thinking and 3.8 default), the model keeps
|
|
421
|
+
* generating and reasoning in the background. We must NOT set `responseActive = false`,
|
|
422
|
+
* as the model is not idle and still generating. The tool batch barrier tracks the call.
|
|
342
423
|
*/
|
|
343
424
|
private handleToolCallFrame;
|
|
344
425
|
/**
|
|
345
|
-
* Turn boundary: finalize any un-finished assistant transcript
|
|
346
|
-
*
|
|
347
|
-
*
|
|
426
|
+
* Turn boundary: finalize any un-finished assistant transcript.
|
|
427
|
+
* Under 'turnComplete' idle signal, release the busy lock, reset response kind,
|
|
428
|
+
* drain queued sends, and return the floor to the user.
|
|
429
|
+
* Under 'interactionStatus' (Extended Thinking), turnComplete does NOT indicate idle:
|
|
430
|
+
* background reasoning or async tool calls may still be in flight, so the busy lock
|
|
431
|
+
* and queued sends remain held until the true IDLE signal lands.
|
|
348
432
|
*/
|
|
349
433
|
private handleTurnComplete;
|
|
434
|
+
/**
|
|
435
|
+
* Reached when the server emits true IDLE (interactionStatus) or the safety backstop fires.
|
|
436
|
+
* Releases busy state, commits any deferred open client turns without cutting off generation,
|
|
437
|
+
* drains queued sends, and returns the floor.
|
|
438
|
+
*/
|
|
439
|
+
private handleIdleTerminal;
|
|
350
440
|
/**
|
|
351
441
|
* First model output of a turn (audio part or transcription delta): the user's turn is
|
|
352
442
|
* over (finalize their pending transcript), the model is busy, and the client is audibly /
|
|
@@ -357,6 +447,8 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
357
447
|
private finalizeUserTranscript;
|
|
358
448
|
/** Emits the accumulated assistant turn as final (if non-empty), tagged with its kind. */
|
|
359
449
|
private finalizeAssistantTranscript;
|
|
450
|
+
/** Emits the accumulated thought turn as final (if non-empty) with Kind: 'narration' and IsThought: true. */
|
|
451
|
+
private finalizeThoughtTranscript;
|
|
360
452
|
/**
|
|
361
453
|
* Runs a send immediately when no turn is in flight; otherwise queues it for the next
|
|
362
454
|
* `turnComplete`. This is Gemini's equivalent of the OpenAI driver's
|
|
@@ -379,12 +471,22 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
379
471
|
/**
|
|
380
472
|
* Sends the tool response (Gemini continues the turn with it) and marks the model busy.
|
|
381
473
|
*
|
|
382
|
-
*
|
|
383
|
-
* tool response alone does NOT start generation — the Live API
|
|
384
|
-
* until the turn is committed. The empty-turn commit
|
|
385
|
-
* `sendClientContent({ turnComplete: true })`
|
|
386
|
-
*
|
|
474
|
+
* In BLOCKING mode (legacy 3.1), if context notes have left a client content turn open
|
|
475
|
+
* ({@link openClientTurn}), the tool response alone does NOT start generation — the Live API
|
|
476
|
+
* holds for more client input until the turn is committed. The empty-turn commit
|
|
477
|
+
* (`sendClientContent({ turnComplete: true })`) releases generation.
|
|
478
|
+
*
|
|
479
|
+
* In NON_BLOCKING mode (Extended Thinking and 3.8 default), setting `turnComplete: true`
|
|
480
|
+
* unconditionally interrupts active model generation mid-sentence. We must NOT commit
|
|
481
|
+
* openClientTurn here; it is deferred until true IDLE (or a subsequent user turn commit).
|
|
482
|
+
*/
|
|
483
|
+
/**
|
|
484
|
+
* Extracts scheduling hints (`__mj_scheduling` or legacy `scheduling`) from the tool output,
|
|
485
|
+
* strips both keys so they do not leak into the model's response payload, resolves the scheduling
|
|
486
|
+
* directive accepting both 'INTERRUPT' and 'INTERRUPTED', and warns on unrecognized values or
|
|
487
|
+
* unsupported models (delegates normalization to Core `ExtractToolSchedulingHint`).
|
|
387
488
|
*/
|
|
489
|
+
private resolveFunctionScheduling;
|
|
388
490
|
private sendToolResponseTurn;
|
|
389
491
|
/**
|
|
390
492
|
* Parses a JSON-stringified tool result into the structured object Gemini's
|
|
@@ -392,10 +494,16 @@ export declare class GeminiRealtimeClient extends BaseRealtimeClient {
|
|
|
392
494
|
* free-text result still round-trips (same fallback as the server driver).
|
|
393
495
|
*/
|
|
394
496
|
private parseToolOutput;
|
|
497
|
+
private scheduleSafetyBackstop;
|
|
498
|
+
private clearSafetyBackstop;
|
|
499
|
+
private handleSafetyBackstopTrigger;
|
|
500
|
+
private handleToolBatchTimeout;
|
|
395
501
|
/** Resets the per-session response state machine (used on Disconnect). */
|
|
396
502
|
private resetResponseState;
|
|
397
503
|
/** Updates the client's own state view and emits the change to the host. */
|
|
398
504
|
private setState;
|
|
505
|
+
private static readObject;
|
|
506
|
+
private static readString;
|
|
399
507
|
}
|
|
400
508
|
/**
|
|
401
509
|
* Tree-shaking prevention: bundlers cannot see that {@link GeminiRealtimeClient} is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geminiRealtimeClient.d.ts","sourceRoot":"","sources":["../../src/drivers/geminiRealtimeClient.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"geminiRealtimeClient.d.ts","sourceRoot":"","sources":["../../src/drivers/geminiRealtimeClient.ts"],"names":[],"mappings":"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"}
|