@memberjunction/ai-realtime-client 6.1.1 → 6.1.3

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.
@@ -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 AND mid-session text.
16
- * Text via realtime input is the Live API's "respond now" path for in-conversation
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
- * Tears down the session, mic capture, mic tracks, and playout engine, resets the response
179
- * state machine, and emits a final `'closed'` (unless already `'error'`). Safe to call
180
- * more than once.
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}. Two deliberate behaviors mirror the OpenAI driver: (1) the client
338
- * silently leaves `'speaking'` (no emission) so a host-rendered busy indicator isn't
339
- * clobbered by this turn's trailing frames; (2) `responseActive` is CLEARED — the model has
340
- * yielded the floor pending the result, so a queued tool result can never deadlock waiting
341
- * for a `turnComplete` that may not arrive until after the result is sent.
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, release the busy lock,
346
- * reset the response kind to `'normal'`, drain queued sends (stopping at the first one
347
- * that starts a new turn), and return the floor to the user.
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
- * When context notes have left a client content turn open ({@link openClientTurn}), the
383
- * tool response alone does NOT start generation — the Live API holds for more client input
384
- * until the turn is committed. The empty-turn commit (the SDK-documented
385
- * `sendClientContent({ turnComplete: true })` form) releases generation so the model
386
- * speaks the result immediately, matching the OpenAI driver's explicit `response.create`.
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":"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"}
1
+ {"version":3,"file":"geminiRealtimeClient.d.ts","sourceRoot":"","sources":["../../src/drivers/geminiRealtimeClient.ts"],"names":[],"mappings":"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"}