dvgateway-adapters 1.4.6 → 1.4.8

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.
@@ -167,11 +167,132 @@ export interface GeminiLiveAdapterOptions {
167
167
  * setup message. See {@link GeminiLiveToolChoice} for the full table.
168
168
  */
169
169
  toolChoice?: GeminiLiveToolChoice;
170
+ /**
171
+ * Linear gain applied to every audio chunk BEFORE it leaves the
172
+ * adapter, expressed in dBFS (0 = unity, +24 ≈ 16× amplitude).
173
+ * Default: `0` (no change).
174
+ *
175
+ * Why this exists: Gemini Live's half-cascade models
176
+ * (`gemini-live-2.5-flash-preview`) emit audio around -40 dBFS peak
177
+ * — ~30 dB quieter than OpenAI Realtime's ~-12 dBFS. Without
178
+ * compensation the caller hears a barely-audible whisper. Set
179
+ * `outputGainDb: 24` for half-cascade models; native-audio models
180
+ * (`gemini-2.5-flash-native-audio`) are closer to phone-ready
181
+ * loudness and typically need 0–12 dB.
182
+ *
183
+ * The gain is applied in the Float32 domain; the subsequent
184
+ * `float32ToSlin16` clamps to int16 range so values above unity
185
+ * clip cleanly rather than wrapping around.
186
+ *
187
+ * Values outside [-24, +40] dB are permitted but warned — they
188
+ * indicate almost certainly a mis-configuration.
189
+ */
190
+ outputGainDb?: number;
191
+ }
192
+ /**
193
+ * Server message shape — defensively typed to accept BOTH camelCase
194
+ * (per the published v1beta spec) AND snake_case (which some Live
195
+ * preview deployments have been observed to emit). The parser falls
196
+ * back from one to the other so we don't silently drop audio when
197
+ * Google rolls a backend change.
198
+ */
199
+ interface GeminiServerMessage {
200
+ setupComplete?: Record<string, unknown>;
201
+ setup_complete?: Record<string, unknown>;
202
+ serverContent?: GeminiServerContent;
203
+ server_content?: GeminiServerContent;
204
+ toolCall?: {
205
+ functionCalls?: Array<{
206
+ id?: string;
207
+ name: string;
208
+ args?: Record<string, unknown>;
209
+ }>;
210
+ function_calls?: Array<{
211
+ id?: string;
212
+ name: string;
213
+ args?: Record<string, unknown>;
214
+ }>;
215
+ };
216
+ tool_call?: {
217
+ functionCalls?: Array<{
218
+ id?: string;
219
+ name: string;
220
+ args?: Record<string, unknown>;
221
+ }>;
222
+ function_calls?: Array<{
223
+ id?: string;
224
+ name: string;
225
+ args?: Record<string, unknown>;
226
+ }>;
227
+ };
228
+ toolCallCancellation?: {
229
+ ids?: string[];
230
+ };
231
+ tool_call_cancellation?: {
232
+ ids?: string[];
233
+ };
234
+ usageMetadata?: Record<string, unknown>;
235
+ usage_metadata?: Record<string, unknown>;
236
+ goAway?: {
237
+ timeLeft?: string;
238
+ };
239
+ go_away?: {
240
+ timeLeft?: string;
241
+ time_left?: string;
242
+ };
243
+ sessionResumptionUpdate?: {
244
+ newHandle?: string;
245
+ resumable?: boolean;
246
+ };
247
+ session_resumption_update?: {
248
+ new_handle?: string;
249
+ resumable?: boolean;
250
+ };
251
+ }
252
+ interface GeminiServerContent {
253
+ modelTurn?: GeminiModelTurn;
254
+ model_turn?: GeminiModelTurn;
255
+ turnComplete?: boolean;
256
+ turn_complete?: boolean;
257
+ interrupted?: boolean;
258
+ generationComplete?: boolean;
259
+ generation_complete?: boolean;
260
+ inputTranscription?: {
261
+ text?: string;
262
+ };
263
+ input_transcription?: {
264
+ text?: string;
265
+ };
266
+ outputTranscription?: {
267
+ text?: string;
268
+ };
269
+ output_transcription?: {
270
+ text?: string;
271
+ };
272
+ }
273
+ interface GeminiModelTurn {
274
+ parts?: Array<GeminiPart>;
275
+ }
276
+ interface GeminiPart {
277
+ text?: string;
278
+ inlineData?: {
279
+ mimeType?: string;
280
+ data?: string;
281
+ };
282
+ inline_data?: {
283
+ mime_type?: string;
284
+ mimeType?: string;
285
+ data?: string;
286
+ };
170
287
  }
171
288
  export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
172
289
  private readonly opts;
173
290
  private readonly tools;
174
291
  private readonly toolChoice;
292
+ /** Output gain expressed in dBFS — stored for the diagnostic log. */
293
+ private readonly outputGainDb;
294
+ /** Pre-computed linear multiplier: `10 ** (outputGainDb / 20)`. */
295
+ private readonly outputGainLinear;
175
296
  private audioOutputHandler;
176
297
  private transcriptHandler;
177
298
  private errorHandler;
@@ -188,6 +309,8 @@ export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
188
309
  private readonly loggedFirstAudio;
189
310
  /** Per-session diagnostics: have we warned about a text-only response yet? */
190
311
  private readonly warnedTextOnly;
312
+ /** Per-session runtime diagnostics — fed by heartbeat + event logs. */
313
+ private readonly sessionDiag;
191
314
  private stopped;
192
315
  constructor(opts: GeminiLiveAdapterOptions);
193
316
  onAudioOutput(handler: (chunk: Buffer, linkedId: string) => void): void;
@@ -230,6 +353,17 @@ export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
230
353
  sendActivityEnd(linkedId: string): void;
231
354
  startSession(linkedId: string, audioIn: AsyncIterable<AudioChunk>): Promise<void>;
232
355
  stop(linkedId?: string): Promise<void>;
356
+ /** Release per-session resources — WS, buffers, diagnostic timer. */
357
+ private tearDownSession;
358
+ /**
359
+ * Emit one per-session heartbeat line and fire the silence watchdog
360
+ * when Gemini has been quiet for long enough to look stuck.
361
+ *
362
+ * The heartbeat intentionally logs every 2 seconds regardless of
363
+ * activity — an operator scrolling the journal should see whether
364
+ * audio is flowing out and whether Gemini is answering, at a glance.
365
+ */
366
+ private emitHeartbeat;
233
367
  private resolveModelPath;
234
368
  private buildRealtimeInputConfig;
235
369
  private connectLive;
@@ -245,4 +379,11 @@ export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
245
379
  export declare function parseRateFromMime(mime: string): number | null;
246
380
  /** Peak |sample| value across a Float32Array — for first-chunk diagnostics. */
247
381
  export declare function peakAmplitude(samples: Float32Array): number;
382
+ /**
383
+ * Short tag for the server message's dominant type — surfaced in the
384
+ * per-session heartbeat so an operator can see at a glance what Gemini
385
+ * was doing when it went quiet. Exported for unit tests.
386
+ */
387
+ export declare function classifyServerMessage(msg: GeminiServerMessage): string;
388
+ export {};
248
389
  //# sourceMappingURL=gemini-live.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-live.d.ts","sourceRoot":"","sources":["../../src/realtime/gemini-live.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini-live.d.ts","sourceRoot":"","sources":["../../src/realtime/gemini-live.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,10 @@ export class GeminiLiveAdapter {
75
75
  opts;
76
76
  tools;
77
77
  toolChoice;
78
+ /** Output gain expressed in dBFS — stored for the diagnostic log. */
79
+ outputGainDb;
80
+ /** Pre-computed linear multiplier: `10 ** (outputGainDb / 20)`. */
81
+ outputGainLinear;
78
82
  audioOutputHandler = null;
79
83
  transcriptHandler = null;
80
84
  errorHandler = null;
@@ -91,6 +95,8 @@ export class GeminiLiveAdapter {
91
95
  loggedFirstAudio = new Set();
92
96
  /** Per-session diagnostics: have we warned about a text-only response yet? */
93
97
  warnedTextOnly = new Set();
98
+ /** Per-session runtime diagnostics — fed by heartbeat + event logs. */
99
+ sessionDiag = new Map();
94
100
  stopped = false;
95
101
  constructor(opts) {
96
102
  const endpoint = opts.endpoint ?? 'ai-studio';
@@ -122,6 +128,18 @@ export class GeminiLiveAdapter {
122
128
  // given — matches OpenAIRealtimeAdapter's behavior so the two
123
129
  // adapters stay drop-in-compatible.
124
130
  this.toolChoice = opts.toolChoice ?? (this.tools.length > 0 ? 'auto' : undefined);
131
+ // Output gain — see `outputGainDb` docstring. Warn on nonsensical
132
+ // values but never clamp the user's setting; they may be feeding a
133
+ // non-phone sink (file, WebRTC, etc.) where wider ranges make sense.
134
+ this.outputGainDb = opts.outputGainDb ?? 0;
135
+ if (this.outputGainDb < -24 || this.outputGainDb > 40) {
136
+ console.warn(`[GeminiLive] outputGainDb=${this.outputGainDb} is outside the ` +
137
+ `sensible [-24, +40] dB range — this is almost certainly a ` +
138
+ `mis-configuration`);
139
+ }
140
+ this.outputGainLinear = this.outputGainDb === 0
141
+ ? 1
142
+ : Math.pow(10, this.outputGainDb / 20);
125
143
  }
126
144
  onAudioOutput(handler) {
127
145
  this.audioOutputHandler = handler;
@@ -219,6 +237,26 @@ export class GeminiLiveAdapter {
219
237
  this.inputTranscriptBuf.set(linkedId, '');
220
238
  this.outputTranscriptBuf.set(linkedId, '');
221
239
  this.callerSpeaking.set(linkedId, false);
240
+ // Initialize per-session diagnostics. Heartbeat starts AFTER we send
241
+ // the setup message below so the first heartbeat reflects a live
242
+ // session, not one that's still waiting on the Google handshake.
243
+ const now = Date.now();
244
+ const diag = {
245
+ startTime: now,
246
+ chunksSentTotal: 0,
247
+ chunksSentSinceHeartbeat: 0,
248
+ lastServerMessageAt: now,
249
+ lastServerMessageType: '(none yet)',
250
+ heartbeatTimer: null,
251
+ silenceWarned: false,
252
+ turnStartedAt: now,
253
+ turnNumber: 0,
254
+ sawInputThisTurn: false,
255
+ sawOutputThisTurn: false,
256
+ };
257
+ this.sessionDiag.set(linkedId, diag);
258
+ console.log(`[GeminiLive] session starting linkedid=${linkedId} model=${this.opts.model} ` +
259
+ `voice=${this.opts.voice} outputGainDb=${this.outputGainDb}`);
222
260
  // ── Send initial setup message ──
223
261
  const setupMsg = {
224
262
  setup: {
@@ -259,6 +297,11 @@ export class GeminiLiveAdapter {
259
297
  },
260
298
  };
261
299
  this.sendMessage(ws, setupMsg);
300
+ // Kick off the 2-second heartbeat now that the handshake is in flight.
301
+ // Heartbeat surfaces live send rate + time-since-last-server-message so
302
+ // an operator can distinguish "Gemini is silent" from "we're not sending
303
+ // audio" from journalctl alone.
304
+ diag.heartbeatTimer = setInterval(() => this.emitHeartbeat(linkedId), 2000);
262
305
  // Pipe audio in background
263
306
  void this.pipeAudioIn(linkedId, ws, audioIn);
264
307
  // Wait until WS closes or stop() is called
@@ -274,33 +317,85 @@ export class GeminiLiveAdapter {
274
317
  }
275
318
  async stop(linkedId) {
276
319
  if (linkedId) {
277
- const ws = this.sessions.get(linkedId);
278
- if (ws && ws.readyState === WebSocket.OPEN) {
279
- ws.close(1000, 'session ended');
280
- }
281
- this.sessions.delete(linkedId);
282
- this.inputTranscriptBuf.delete(linkedId);
283
- this.outputTranscriptBuf.delete(linkedId);
284
- this.callerSpeaking.delete(linkedId);
285
- this.loggedFirstAudio.delete(linkedId);
286
- this.warnedTextOnly.delete(linkedId);
320
+ this.tearDownSession(linkedId, 'session ended');
287
321
  }
288
322
  else {
289
323
  this.stopped = true;
290
- for (const [id, ws] of this.sessions) {
291
- if (ws.readyState === WebSocket.OPEN) {
292
- ws.close(1000, 'adapter stopped');
293
- }
294
- this.sessions.delete(id);
295
- this.inputTranscriptBuf.delete(id);
296
- this.outputTranscriptBuf.delete(id);
297
- this.callerSpeaking.delete(id);
298
- this.loggedFirstAudio.delete(id);
299
- this.warnedTextOnly.delete(id);
324
+ for (const id of Array.from(this.sessions.keys())) {
325
+ this.tearDownSession(id, 'adapter stopped');
300
326
  }
301
327
  }
302
328
  }
329
+ /** Release per-session resources — WS, buffers, diagnostic timer. */
330
+ tearDownSession(linkedId, reason) {
331
+ const ws = this.sessions.get(linkedId);
332
+ if (ws && ws.readyState === WebSocket.OPEN) {
333
+ ws.close(1000, reason);
334
+ }
335
+ const diag = this.sessionDiag.get(linkedId);
336
+ if (diag?.heartbeatTimer) {
337
+ clearInterval(diag.heartbeatTimer);
338
+ diag.heartbeatTimer = null;
339
+ }
340
+ if (diag) {
341
+ const sessionAge = Math.round((Date.now() - diag.startTime) / 1000);
342
+ console.log(`[GeminiLive] session ended linkedid=${linkedId} reason=${JSON.stringify(reason)} ` +
343
+ `age=${sessionAge}s chunks_sent=${diag.chunksSentTotal} turns=${diag.turnNumber}`);
344
+ }
345
+ this.sessions.delete(linkedId);
346
+ this.inputTranscriptBuf.delete(linkedId);
347
+ this.outputTranscriptBuf.delete(linkedId);
348
+ this.callerSpeaking.delete(linkedId);
349
+ this.loggedFirstAudio.delete(linkedId);
350
+ this.warnedTextOnly.delete(linkedId);
351
+ this.sessionDiag.delete(linkedId);
352
+ }
303
353
  // ── Private helpers ─────────────────────────────────────────────────────
354
+ /**
355
+ * Emit one per-session heartbeat line and fire the silence watchdog
356
+ * when Gemini has been quiet for long enough to look stuck.
357
+ *
358
+ * The heartbeat intentionally logs every 2 seconds regardless of
359
+ * activity — an operator scrolling the journal should see whether
360
+ * audio is flowing out and whether Gemini is answering, at a glance.
361
+ */
362
+ emitHeartbeat(linkedId) {
363
+ const diag = this.sessionDiag.get(linkedId);
364
+ if (!diag)
365
+ return;
366
+ const now = Date.now();
367
+ const sinceServerMs = now - diag.lastServerMessageAt;
368
+ const sessionAgeSec = Math.round((now - diag.startTime) / 1000);
369
+ console.log(`[GeminiLive] heartbeat linkedid=${linkedId} ` +
370
+ `session_age=${sessionAgeSec}s ` +
371
+ `chunks_total=${diag.chunksSentTotal} ` +
372
+ `chunks_last_2s=${diag.chunksSentSinceHeartbeat} ` +
373
+ `last_server_msg=${diag.lastServerMessageType} ` +
374
+ `server_silent_for=${Math.round(sinceServerMs / 1000)}s ` +
375
+ `turn=${diag.turnNumber}`);
376
+ diag.chunksSentSinceHeartbeat = 0;
377
+ // Silence watchdog — fire WARN once per contiguous silence gap.
378
+ // Preconditions: (a) >10s since last server message, (b) we've
379
+ // actually pumped at least 100 chunks (2s of audio at 50fps, so
380
+ // the session is genuinely active), (c) we haven't already warned
381
+ // for this gap. Resets when a server message arrives (which updates
382
+ // lastServerMessageAt → sinceServerMs goes small → the reset branch
383
+ // below clears silenceWarned so a later gap re-warns).
384
+ if (sinceServerMs > 10_000 && !diag.silenceWarned && diag.chunksSentTotal > 100) {
385
+ diag.silenceWarned = true;
386
+ console.warn(`[GeminiLive] WARNING Gemini has been silent for ${Math.round(sinceServerMs / 1000)}s ` +
387
+ `while SDK sent ${diag.chunksSentTotal} audio chunks to it (last_msg=` +
388
+ `${diag.lastServerMessageType}). Most likely causes: ` +
389
+ `(1) server_vad not detecting user speech — input too quiet, wrong format, or filtered as noise, ` +
390
+ `(2) model stuck post-response — session in locked state after a long turn, ` +
391
+ `(3) Gemini WS silently dropped or quota-limited. ` +
392
+ `linkedid=${linkedId}`);
393
+ }
394
+ if (sinceServerMs < 5_000) {
395
+ // Fresh activity → re-arm the watchdog for the next gap.
396
+ diag.silenceWarned = false;
397
+ }
398
+ }
304
399
  resolveModelPath() {
305
400
  if (this.opts.endpoint === 'vertex') {
306
401
  return `projects/${this.opts.project}/locations/${this.opts.location}/publishers/google/models/${this.opts.model}`;
@@ -353,8 +448,14 @@ export class GeminiLiveAdapter {
353
448
  ws.on('error', (err) => {
354
449
  this.errorHandler?.(err, linkedId);
355
450
  });
356
- ws.on('close', () => {
357
- this.sessions.delete(linkedId);
451
+ ws.on('close', (code, reason) => {
452
+ // Release the diagnostic timer + buffers here too — `stop()` might
453
+ // never fire if the caller relies on the session's own WS close.
454
+ // The reason string surfaces quota / goAway / network faults that
455
+ // would otherwise disappear silently.
456
+ const reasonStr = reason?.toString('utf8') || '(none)';
457
+ console.log(`[GeminiLive] WS closed linkedid=${linkedId} code=${code} reason=${JSON.stringify(reasonStr)}`);
458
+ this.tearDownSession(linkedId, `ws-close(${code})`);
358
459
  });
359
460
  await new Promise((resolve, reject) => {
360
461
  ws.once('open', resolve);
@@ -363,33 +464,69 @@ export class GeminiLiveAdapter {
363
464
  return ws;
364
465
  }
365
466
  async pipeAudioIn(linkedId, ws, audioIn) {
366
- for await (const chunk of audioIn) {
367
- if (this.stopped || ws.readyState !== WebSocket.OPEN)
368
- break;
369
- // DVGateway is 16kHz; Gemini Live input is 16kHz → no resampling needed.
370
- // (Keep the resample call guarded for forward compatibility if DV changes.)
371
- const samples16k = chunk.sampleRate === DV_SAMPLE_RATE
372
- ? chunk.samples
373
- : resample(chunk.samples, chunk.sampleRate, DV_SAMPLE_RATE);
374
- // Split into 20ms frames and send
375
- let offset = 0;
376
- while (offset < samples16k.length) {
377
- const end = Math.min(offset + INPUT_SAMPLES_16K, samples16k.length);
378
- const frame = samples16k.subarray(offset, end);
379
- offset = end;
380
- const pcm16 = float32ToSlin16(frame);
381
- const b64 = Buffer.from(pcm16.buffer, pcm16.byteOffset, pcm16.byteLength).toString('base64');
382
- this.sendMessage(ws, {
383
- realtime_input: {
384
- media_chunks: [
385
- { mime_type: 'audio/pcm;rate=16000', data: b64 },
386
- ],
387
- },
388
- });
467
+ const diag = this.sessionDiag.get(linkedId);
468
+ console.log(`[GeminiLive] pipeAudioIn starting linkedid=${linkedId}`);
469
+ const startedAt = Date.now();
470
+ let exitReason = 'iterator_ended';
471
+ try {
472
+ for await (const chunk of audioIn) {
473
+ if (this.stopped) {
474
+ exitReason = 'adapter_stopped';
475
+ break;
476
+ }
477
+ if (ws.readyState !== WebSocket.OPEN) {
478
+ exitReason = `ws_state_${ws.readyState}`;
479
+ break;
480
+ }
481
+ // DVGateway is 16kHz; Gemini Live input is 16kHz → no resampling needed.
482
+ // (Keep the resample call guarded for forward compatibility if DV changes.)
483
+ const samples16k = chunk.sampleRate === DV_SAMPLE_RATE
484
+ ? chunk.samples
485
+ : resample(chunk.samples, chunk.sampleRate, DV_SAMPLE_RATE);
486
+ // Split into 20ms frames and send
487
+ let offset = 0;
488
+ while (offset < samples16k.length) {
489
+ const end = Math.min(offset + INPUT_SAMPLES_16K, samples16k.length);
490
+ const frame = samples16k.subarray(offset, end);
491
+ offset = end;
492
+ const pcm16 = float32ToSlin16(frame);
493
+ const b64 = Buffer.from(pcm16.buffer, pcm16.byteOffset, pcm16.byteLength).toString('base64');
494
+ this.sendMessage(ws, {
495
+ realtime_input: {
496
+ media_chunks: [
497
+ { mime_type: 'audio/pcm;rate=16000', data: b64 },
498
+ ],
499
+ },
500
+ });
501
+ // Update diagnostics counters AFTER the send succeeded so the
502
+ // heartbeat reflects frames that actually went out on the wire.
503
+ if (diag) {
504
+ diag.chunksSentTotal++;
505
+ diag.chunksSentSinceHeartbeat++;
506
+ }
507
+ }
389
508
  }
390
509
  }
510
+ finally {
511
+ const durationSec = Math.round((Date.now() - startedAt) / 1000);
512
+ // Critical diagnostic: if audioIn ends while the session was
513
+ // supposed to be active, it means the gateway's downstream audio
514
+ // stream closed. Operator needs to know this distinct from
515
+ // "caller hung up" (in which case stopped/ws_state != OPEN).
516
+ console.log(`[GeminiLive] pipeAudioIn ended linkedid=${linkedId} ` +
517
+ `reason=${exitReason} duration=${durationSec}s ` +
518
+ `chunks_sent=${diag?.chunksSentTotal ?? 0}`);
519
+ }
391
520
  }
392
521
  handleServerMessage(msg, linkedId) {
522
+ // Update diagnostic state FIRST so the heartbeat and silence watchdog
523
+ // see this message's arrival timestamp even if one of the branches
524
+ // below returns early.
525
+ const diag = this.sessionDiag.get(linkedId);
526
+ if (diag) {
527
+ diag.lastServerMessageAt = Date.now();
528
+ diag.lastServerMessageType = classifyServerMessage(msg);
529
+ }
393
530
  // Setup complete (camelCase or snake_case from the wire)
394
531
  if (msg.setupComplete || msg.setup_complete) {
395
532
  console.log(`[GeminiLive] session setup complete linkedid=${linkedId}`);
@@ -422,9 +559,30 @@ export class GeminiLiveAdapter {
422
559
  const sourceRate = parseRateFromMime(mimeType) ?? GEMINI_OUTPUT_SAMPLE_RATE;
423
560
  const pcmSrcBuf = Buffer.from(b64, 'base64');
424
561
  const samplesSrc = slin16ToFloat32(pcmSrcBuf);
562
+ // Compute the upstream peak BEFORE anything else touches
563
+ // the samples — this value is what the diagnostic log
564
+ // reports below so the operator sees the true provider
565
+ // output level, not a gain-shifted reading.
566
+ const srcPeak = peakAmplitude(samplesSrc);
567
+ // Resample if source rate doesn't match gateway target.
568
+ // When rates already match, `resample` returns the SAME
569
+ // reference as `samplesSrc`; the in-place gain below would
570
+ // therefore also mutate `samplesSrc`. That's fine because
571
+ // we already captured `srcPeak` above, but keep it in mind
572
+ // if adding any later read of `samplesSrc`.
425
573
  const samples16k = sourceRate === DV_SAMPLE_RATE
426
574
  ? samplesSrc
427
575
  : resample(samplesSrc, sourceRate, DV_SAMPLE_RATE);
576
+ // Apply user-configured output gain. Gemini half-cascade
577
+ // models emit audio around -40 dBFS peak (≈30 dB quieter
578
+ // than OpenAI Realtime) which is barely audible over a
579
+ // phone line. `float32ToSlin16` below clamps samples to
580
+ // the int16 range, so values above unity clip cleanly.
581
+ if (this.outputGainLinear !== 1) {
582
+ for (let i = 0; i < samples16k.length; i++) {
583
+ samples16k[i] = samples16k[i] * this.outputGainLinear;
584
+ }
585
+ }
428
586
  const pcm16k = float32ToSlin16(samples16k);
429
587
  // Copy into a fresh Buffer so the bytes survive any later
430
588
  // reuse of the slab pool that backs `Buffer.allocUnsafe`
@@ -435,17 +593,31 @@ export class GeminiLiveAdapter {
435
593
  const out = Buffer.from(pcm16k);
436
594
  // First-chunk diagnostic — surfaces the actual shape of what
437
595
  // Gemini sent so a "no audio" report is one log line away
438
- // from a confirmed root cause.
596
+ // from a confirmed root cause. `srcPeak` was captured
597
+ // above BEFORE gain was applied so the log always reports
598
+ // the upstream provider level, not a gain-shifted reading.
439
599
  if (!this.loggedFirstAudio.has(linkedId)) {
440
600
  this.loggedFirstAudio.add(linkedId);
441
- const peak = peakAmplitude(samplesSrc);
601
+ const peakSrc = srcPeak;
602
+ const peakSrcDb = peakSrc > 0 ? 20 * Math.log10(peakSrc) : -96;
442
603
  console.log(`[GeminiLive] first audio chunk linkedid=${linkedId} ` +
443
604
  `mime=${JSON.stringify(mimeType)} sourceRate=${sourceRate}Hz ` +
444
- `srcBytes=${pcmSrcBuf.length} dstBytes=${out.length} peak=${peak.toFixed(4)}`);
445
- if (peak < 1e-4) {
605
+ `srcBytes=${pcmSrcBuf.length} dstBytes=${out.length} ` +
606
+ `peak=${peakSrc.toFixed(4)} (${peakSrcDb.toFixed(1)}dBFS) ` +
607
+ `outputGainDb=${this.outputGainDb}`);
608
+ if (peakSrc < 1e-4) {
446
609
  console.warn(`[GeminiLive] first audio chunk is silent (peak < -80dBFS) ` +
447
610
  `linkedid=${linkedId} — check Gemini model + responseModalities`);
448
611
  }
612
+ else if (peakSrcDb < -30 && this.outputGainDb < 12) {
613
+ // Gemini half-cascade typically outputs around -40 dBFS.
614
+ // If we see that range and the operator hasn't bumped
615
+ // the gain, nudge them toward the fix.
616
+ console.warn(`[GeminiLive] source peak ${peakSrcDb.toFixed(1)}dBFS is ` +
617
+ `quiet for a phone sink (< -30 dBFS) and outputGainDb=` +
618
+ `${this.outputGainDb} is not compensating. ` +
619
+ `Recommended: outputGainDb: 24 for half-cascade models.`);
620
+ }
449
621
  }
450
622
  this.audioOutputHandler?.(out, linkedId);
451
623
  }
@@ -468,6 +640,9 @@ export class GeminiLiveAdapter {
468
640
  }
469
641
  // Interruption: caller barge-in detected by server-side VAD
470
642
  if (sc.interrupted === true) {
643
+ const turnDurMs = diag ? Date.now() - diag.turnStartedAt : 0;
644
+ console.log(`[GeminiLive] barge-in detected (interrupted=true) linkedid=${linkedId} ` +
645
+ `turn=${diag?.turnNumber ?? 0} turn_duration=${turnDurMs}ms`);
471
646
  if (!this.callerSpeaking.get(linkedId)) {
472
647
  this.callerSpeaking.set(linkedId, true);
473
648
  this.speechActivityHandler?.({
@@ -492,21 +667,39 @@ export class GeminiLiveAdapter {
492
667
  });
493
668
  }
494
669
  }
495
- // Input transcription (caller speech → text, streamed incrementally)
670
+ // Input transcription (caller speech → text, streamed incrementally).
671
+ // First chunk per turn is the critical diagnostic: if it never
672
+ // arrives, Gemini's server_vad is not picking up the user's voice.
496
673
  const inputT = sc.inputTranscription ?? sc.input_transcription;
497
674
  if (inputT?.text != null) {
498
675
  const prev = this.inputTranscriptBuf.get(linkedId) ?? '';
499
676
  this.inputTranscriptBuf.set(linkedId, prev + inputT.text);
677
+ if (diag && !diag.sawInputThisTurn) {
678
+ diag.sawInputThisTurn = true;
679
+ console.log(`[GeminiLive] first input_transcription linkedid=${linkedId} ` +
680
+ `turn=${diag.turnNumber} text=${JSON.stringify((inputT.text ?? '').slice(0, 100))}`);
681
+ }
500
682
  }
501
683
  // Output transcription (assistant speech → text, streamed incrementally)
502
684
  const outputT = sc.outputTranscription ?? sc.output_transcription;
503
685
  if (outputT?.text != null) {
504
686
  const prev = this.outputTranscriptBuf.get(linkedId) ?? '';
505
687
  this.outputTranscriptBuf.set(linkedId, prev + outputT.text);
688
+ if (diag && !diag.sawOutputThisTurn) {
689
+ diag.sawOutputThisTurn = true;
690
+ console.log(`[GeminiLive] first output_transcription linkedid=${linkedId} ` +
691
+ `turn=${diag.turnNumber} text=${JSON.stringify((outputT.text ?? '').slice(0, 100))}`);
692
+ }
506
693
  }
507
694
  // On turn completion, flush accumulated transcripts as final results
508
695
  if (turnComplete === true) {
509
696
  const inputText = this.inputTranscriptBuf.get(linkedId) ?? '';
697
+ const outputText = this.outputTranscriptBuf.get(linkedId) ?? '';
698
+ const turnDurMs = diag ? Date.now() - diag.turnStartedAt : 0;
699
+ console.log(`[GeminiLive] turn_complete linkedid=${linkedId} turn=${diag?.turnNumber ?? 0} ` +
700
+ `duration=${turnDurMs}ms ` +
701
+ `input=${JSON.stringify(inputText.slice(0, 100))} ` +
702
+ `output=${JSON.stringify(outputText.slice(0, 100))}`);
510
703
  if (inputText.trim()) {
511
704
  this.transcriptHandler?.({
512
705
  linkedId,
@@ -516,7 +709,6 @@ export class GeminiLiveAdapter {
516
709
  timestampMs: Date.now(),
517
710
  });
518
711
  }
519
- const outputText = this.outputTranscriptBuf.get(linkedId) ?? '';
520
712
  if (outputText.trim()) {
521
713
  this.transcriptHandler?.({
522
714
  linkedId,
@@ -528,6 +720,14 @@ export class GeminiLiveAdapter {
528
720
  }
529
721
  this.inputTranscriptBuf.set(linkedId, '');
530
722
  this.outputTranscriptBuf.set(linkedId, '');
723
+ // Advance turn counter + reset per-turn flags so the NEXT turn's
724
+ // first input/output transcription gets logged again.
725
+ if (diag) {
726
+ diag.turnNumber++;
727
+ diag.turnStartedAt = Date.now();
728
+ diag.sawInputThisTurn = false;
729
+ diag.sawOutputThisTurn = false;
730
+ }
531
731
  }
532
732
  }
533
733
  // ── toolCall: model wants to invoke a function ──
@@ -536,6 +736,9 @@ export class GeminiLiveAdapter {
536
736
  if (functionCalls) {
537
737
  for (const fc of functionCalls) {
538
738
  if (fc.name) {
739
+ const argsStr = JSON.stringify(fc.args ?? {});
740
+ console.log(`[GeminiLive] tool_call linkedid=${linkedId} name=${fc.name} ` +
741
+ `args=${argsStr.length > 200 ? argsStr.slice(0, 200) + '…' : argsStr}`);
539
742
  this.toolCallHandler?.({
540
743
  callId: fc.id ?? '',
541
744
  name: fc.name,
@@ -581,4 +784,45 @@ export function peakAmplitude(samples) {
581
784
  }
582
785
  return peak;
583
786
  }
787
+ /**
788
+ * Short tag for the server message's dominant type — surfaced in the
789
+ * per-session heartbeat so an operator can see at a glance what Gemini
790
+ * was doing when it went quiet. Exported for unit tests.
791
+ */
792
+ export function classifyServerMessage(msg) {
793
+ if (msg.setupComplete || msg.setup_complete)
794
+ return 'setupComplete';
795
+ const sc = msg.serverContent ?? msg.server_content;
796
+ if (sc) {
797
+ const modelTurn = sc.modelTurn ?? sc.model_turn;
798
+ if (modelTurn?.parts?.some((p) => (p.inlineData ?? p.inline_data)?.data))
799
+ return 'modelTurn(audio)';
800
+ if (modelTurn?.parts?.some((p) => p.text))
801
+ return 'modelTurn(text)';
802
+ if ((sc.turnComplete ?? sc.turn_complete) === true)
803
+ return 'turnComplete';
804
+ if ((sc.generationComplete ?? sc.generation_complete) === true)
805
+ return 'generationComplete';
806
+ if (sc.interrupted === true)
807
+ return 'interrupted';
808
+ if ((sc.inputTranscription ?? sc.input_transcription)?.text != null)
809
+ return 'inputTranscription';
810
+ if ((sc.outputTranscription ?? sc.output_transcription)?.text != null)
811
+ return 'outputTranscription';
812
+ return 'serverContent(other)';
813
+ }
814
+ if (msg.toolCall || msg.tool_call)
815
+ return 'toolCall';
816
+ if (msg.toolCallCancellation || msg.tool_call_cancellation)
817
+ return 'toolCallCancellation';
818
+ if (msg.goAway || msg.go_away)
819
+ return 'goAway';
820
+ if (msg.sessionResumptionUpdate || msg.session_resumption_update)
821
+ return 'sessionResumptionUpdate';
822
+ if (msg.usageMetadata || msg.usage_metadata)
823
+ return 'usageMetadata';
824
+ // Unknown — surface the top-level keys so future backend changes are
825
+ // visible in logs instead of silently ignored.
826
+ return 'unknown:' + Object.keys(msg).join(',');
827
+ }
584
828
  //# sourceMappingURL=gemini-live.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-live.js","sourceRoot":"","sources":["../../src/realtime/gemini-live.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini-live.js","sourceRoot":"","sources":["../../src/realtime/gemini-live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAsF3E;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAA4B;IAE5B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;IACtD,CAAC;IACD,kEAAkE;IAClE,OAAO;QACL,uBAAuB,EAAE;YACvB,IAAI,EAAE,KAAK;YACX,sBAAsB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;SACtC;KACF,CAAC;AACJ,CAAC;AA+KD,gFAAgF;AAEhF,MAAM,aAAa,GACjB,sHAAsH,CAAC;AACzH,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc;AAE5F,MAAM,OAAO,iBAAiB;IACX,IAAI,CAkBnB;IACe,KAAK,CAAmB;IACxB,UAAU,CAAmC;IAC9D,qEAAqE;IACpD,YAAY,CAAS;IACtC,mEAAmE;IAClD,gBAAgB,CAAS;IAElC,kBAAkB,GAAuD,IAAI,CAAC;IAC9E,iBAAiB,GAAgD,IAAI,CAAC;IACtE,YAAY,GAAqD,IAAI,CAAC;IACtE,eAAe,GAAkD,IAAI,CAAC;IACtE,qBAAqB,GAA0D,IAAI,CAAC;IAE3E,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzD,mFAAmF;IAClE,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChE,gDAAgD;IAC/B,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjE,kFAAkF;IACjE,cAAc,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC7D,yEAAyE;IACxD,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IACtD,8EAA8E;IAC7D,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACpD,uEAAuE;IACtD,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE7D,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,IAA8B;QACxC,MAAM,QAAQ,GAAuB,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC;QAElE,IAAI,QAAQ,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,GAAG;YACV,QAAQ;YACR,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,+BAA+B;YACpD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;YAC3B,YAAY,EACV,IAAI,CAAC,YAAY;gBACjB,6EAA6E;YAC/E,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;YACvC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI;YACnD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI;YACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG;YACpC,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;SAC9C,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9B,mEAAmE;QACnE,8DAA8D;QAC9D,oCAAoC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAElF,kEAAkE;QAClE,mEAAmE;QACnE,qEAAqE;QACrE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CACV,6BAA6B,IAAI,CAAC,YAAY,kBAAkB;gBAChE,4DAA4D;gBAC5D,mBAAmB,CACpB,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,KAAK,CAAC;YAC7C,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,OAAkD;QAC9D,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,OAA2C;QACtD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,OAAgD;QACtD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,OAA6C;QACtD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CAAC,OAAqD;QACpE,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAgB,EAAE,MAAc,EAAE,MAAe;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAO;QAEpD,wEAAwE;QACxE,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAC5D,CAAC,CAAE,MAAkC;YACrC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QAEf,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;YACnB,aAAa,EAAE;gBACb,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;aACzD;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,QAAgB;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAO;QACpD,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO;QACpD,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,QAAQ;YACR,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,QAAgB;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAO;QACpD,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO;QACpD,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,QAAQ;YACR,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,OAAkC;QACrE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEzC,qEAAqE;QACrE,iEAAiE;QACjE,iEAAiE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAuB;YAC/B,SAAS,EAAE,GAAG;YACd,eAAe,EAAE,CAAC;YAClB,wBAAwB,EAAE,CAAC;YAC3B,mBAAmB,EAAE,GAAG;YACxB,qBAAqB,EAAE,YAAY;YACnC,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,GAAG;YAClB,UAAU,EAAE,CAAC;YACb,gBAAgB,EAAE,KAAK;YACvB,iBAAiB,EAAE,KAAK;SACzB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CACT,0CAA0C,QAAQ,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG;YAC9E,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,YAAY,EAAE,CAC7D,CAAC;QAEF,mCAAmC;QACnC,MAAM,QAAQ,GAA4B;YACxC,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBAC9B,iBAAiB,EAAE;oBACjB,mBAAmB,EAAE,CAAC,OAAO,CAAC;oBAC9B,aAAa,EAAE;wBACb,YAAY,EAAE;4BACZ,qBAAqB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;yBACvD;wBACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;qBACjE;oBACD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;oBAClC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI;wBACxC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;qBAC7C,CAAC;iBACH;gBACD,kBAAkB,EAAE;oBAClB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;iBAC1C;gBACD,qBAAqB,EAAE,IAAI,CAAC,wBAAwB,EAAE;gBACtD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,CAAC;gBACtE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,CAAC;gBACxE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI;oBAC3B,KAAK,EAAE;wBACL;4BACE,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAC5C,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gCAC1B,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;6BAClD,CAAC,CAAC;yBACJ;qBACF;iBACF,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI;oBAC5D,WAAW,EAAE,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACpD,CAAC;aACH;SACF,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE/B,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,gCAAgC;QAChC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAE5E,2BAA2B;QAC3B,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7C,2CAA2C;QAC3C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC7B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjD,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAiB;QAC1B,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,qEAAqE;IAC7D,eAAe,CAAC,QAAgB,EAAE,MAAc;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3C,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,EAAE,cAAc,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CACT,uCAAuC,QAAQ,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG;gBACnF,OAAO,UAAU,iBAAiB,IAAI,CAAC,eAAe,UAAU,IAAI,CAAC,UAAU,EAAE,CAClF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,2EAA2E;IAE3E;;;;;;;OAOG;IACK,aAAa,CAAC,QAAgB;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAEhE,OAAO,CAAC,GAAG,CACT,mCAAmC,QAAQ,GAAG;YAC9C,eAAe,aAAa,IAAI;YAChC,gBAAgB,IAAI,CAAC,eAAe,GAAG;YACvC,kBAAkB,IAAI,CAAC,wBAAwB,GAAG;YAClD,mBAAmB,IAAI,CAAC,qBAAqB,GAAG;YAChD,qBAAqB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI;YACzD,QAAQ,IAAI,CAAC,UAAU,EAAE,CAC1B,CAAC;QACF,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC;QAElC,gEAAgE;QAChE,+DAA+D;QAC/D,gEAAgE;QAChE,kEAAkE;QAClE,oEAAoE;QACpE,oEAAoE;QACpE,uDAAuD;QACvD,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC;YAChF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,OAAO,CAAC,IAAI,CACV,mDAAmD,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI;gBACvF,kBAAkB,IAAI,CAAC,eAAe,gCAAgC;gBACtE,GAAG,IAAI,CAAC,qBAAqB,yBAAyB;gBACtD,kGAAkG;gBAClG,6EAA6E;gBAC7E,mDAAmD;gBACnD,YAAY,QAAQ,EAAE,CACvB,CAAC;QACJ,CAAC;QACD,IAAI,aAAa,GAAG,KAAK,EAAE,CAAC;YAC1B,yDAAyD;YACzD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,6BAA6B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACrH,CAAC;QACD,sCAAsC;QACtC,OAAO,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAEO,wBAAwB;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACnC,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO;gBACL,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;aACjD,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAA4B,EAAE,4BAA4B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3F,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,IAAI,EAAE,CAAC,gBAAgB;YAAE,GAAG,CAAC,2BAA2B,GAAG,qBAAqB,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtG,IAAI,EAAE,CAAC,cAAc;YAAE,GAAG,CAAC,yBAAyB,GAAG,mBAAmB,EAAE,CAAC,cAAc,EAAE,CAAC;QAC9F,IAAI,EAAE,CAAC,eAAe,IAAI,IAAI;YAAE,GAAG,CAAC,iBAAiB,GAAG,EAAE,CAAC,eAAe,CAAC;QAC3E,IAAI,EAAE,CAAC,iBAAiB,IAAI,IAAI;YAAE,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,iBAAiB,CAAC;QACjF,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,4BAA4B,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAgB;QACxC,IAAI,GAAW,CAAC;QAChB,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACpC,GAAG,GAAG,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,6FAA6F,CAAC;YAC/H,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,GAAG,aAAa,QAAQ,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACvE,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAE3C,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAuB,EAAE,EAAE;YAC3C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAwB,CAAC;gBAC/D,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;YAC9C,mEAAmE;YACnE,iEAAiE;YACjE,kEAAkE;YAClE,sCAAsC;YACtC,MAAM,SAAS,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC;YACvD,OAAO,CAAC,GAAG,CACT,mCAAmC,QAAQ,SAAS,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAC/F,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,IAAI,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,QAAgB,EAChB,EAAa,EACb,OAAkC;QAElC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,UAAU,GAAG,gBAAgB,CAAC;QAElC,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,UAAU,GAAG,iBAAiB,CAAC;oBAC/B,MAAM;gBACR,CAAC;gBACD,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBACrC,UAAU,GAAG,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;oBACzC,MAAM;gBACR,CAAC;gBAED,yEAAyE;gBACzE,4EAA4E;gBAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,cAAc;oBACpD,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBAE9D,kCAAkC;gBAClC,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,OAAO,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;oBAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;oBACpE,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAC/C,MAAM,GAAG,GAAG,CAAC;oBAEb,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAE7F,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;wBACnB,cAAc,EAAE;4BACd,YAAY,EAAE;gCACZ,EAAE,SAAS,EAAE,sBAAsB,EAAE,IAAI,EAAE,GAAG,EAAE;6BACjD;yBACF;qBACF,CAAC,CAAC;oBAEH,8DAA8D;oBAC9D,gEAAgE;oBAChE,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;YAChE,6DAA6D;YAC7D,iEAAiE;YACjE,2DAA2D;YAC3D,6DAA6D;YAC7D,OAAO,CAAC,GAAG,CACT,2CAA2C,QAAQ,GAAG;gBACtD,UAAU,UAAU,aAAa,WAAW,IAAI;gBAChD,eAAe,IAAI,EAAE,eAAe,IAAI,CAAC,EAAE,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,GAAwB,EAAE,QAAgB;QACpE,sEAAsE;QACtE,mEAAmE;QACnE,uBAAuB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,yDAAyD;QACzD,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,gDAAgD,QAAQ,EAAE,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,MAAM,EAAE,GAAoC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc,CAAC;QACpF,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,SAAS,GAAgC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC;YAE7E,8CAA8C;YAC9C,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;gBACrB,IAAI,cAAc,GAAG,CAAC,CAAC;gBACvB,IAAI,aAAa,GAAG,CAAC,CAAC;gBAEtB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBACnC,kEAAkE;oBAClE,qEAAqE;oBACrE,mEAAmE;oBACnE,8DAA8D;oBAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC;oBACnD,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,CAAC;oBAEzB,IAAI,GAAG,EAAE,CAAC;wBACR,cAAc,EAAE,CAAC;wBACjB,iDAAiD;wBACjD,8DAA8D;wBAC9D,8DAA8D;wBAC9D,6DAA6D;wBAC7D,oDAAoD;wBACpD,MAAM,IAAI,GAAI,MAAgE,CAAC;wBAC/E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;wBACzD,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,yBAAyB,CAAC;wBAE5E,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;wBAC7C,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;wBAE9C,yDAAyD;wBACzD,sDAAsD;wBACtD,uDAAuD;wBACvD,4CAA4C;wBAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;wBAE1C,wDAAwD;wBACxD,wDAAwD;wBACxD,2DAA2D;wBAC3D,0DAA0D;wBAC1D,2DAA2D;wBAC3D,4CAA4C;wBAC5C,MAAM,UAAU,GAAG,UAAU,KAAK,cAAc;4BAC9C,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;wBAErD,yDAAyD;wBACzD,yDAAyD;wBACzD,uDAAuD;wBACvD,wDAAwD;wBACxD,uDAAuD;wBACvD,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;4BAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC3C,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;4BACzD,CAAC;wBACH,CAAC;wBAED,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;wBAE3C,0DAA0D;wBAC1D,yDAAyD;wBACzD,6DAA6D;wBAC7D,4DAA4D;wBAC5D,4DAA4D;wBAC5D,yDAAyD;wBACzD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAEhC,6DAA6D;wBAC7D,0DAA0D;wBAC1D,sDAAsD;wBACtD,0DAA0D;wBAC1D,2DAA2D;wBAC3D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACzC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACpC,MAAM,OAAO,GAAG,OAAO,CAAC;4BACxB,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/D,OAAO,CAAC,GAAG,CACT,2CAA2C,QAAQ,GAAG;gCACtD,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,UAAU,KAAK;gCAC9D,YAAY,SAAS,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,GAAG;gCACtD,QAAQ,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;gCAC3D,gBAAgB,IAAI,CAAC,YAAY,EAAE,CACpC,CAAC;4BACF,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;gCACnB,OAAO,CAAC,IAAI,CACV,4DAA4D;oCAC5D,YAAY,QAAQ,4CAA4C,CACjE,CAAC;4BACJ,CAAC;iCAAM,IAAI,SAAS,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC;gCACrD,yDAAyD;gCACzD,sDAAsD;gCACtD,uCAAuC;gCACvC,OAAO,CAAC,IAAI,CACV,4BAA4B,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;oCAC1D,uDAAuD;oCACvD,GAAG,IAAI,CAAC,YAAY,wBAAwB;oCAC5C,wDAAwD,CACzD,CAAC;4BACJ,CAAC;wBACH,CAAC;wBAED,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBAC3C,CAAC;yBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACrB,aAAa,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAED,8DAA8D;gBAC9D,iEAAiE;gBACjE,kEAAkE;gBAClE,kCAAkC;gBAClC,IAAI,aAAa,GAAG,CAAC,IAAI,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAClC,OAAO,CAAC,IAAI,CACV,2DAA2D;wBAC3D,YAAY,QAAQ,UAAU,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK;wBACzD,kDAAkD;wBAClD,4DAA4D;wBAC5D,wCAAwC,CACzC,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,4DAA4D;YAC5D,IAAI,EAAE,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CACT,8DAA8D,QAAQ,GAAG;oBACzE,QAAQ,IAAI,EAAE,UAAU,IAAI,CAAC,kBAAkB,SAAS,IAAI,CAC7D,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC3B,QAAQ;wBACR,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,IAAI;wBACd,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,aAAa,CAAC;YACzD,MAAM,kBAAkB,GAAG,EAAE,CAAC,kBAAkB,IAAI,EAAE,CAAC,mBAAmB,CAAC;YAE3E,kFAAkF;YAClF,IAAI,YAAY,KAAK,IAAI,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;gBACzD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACzC,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC3B,QAAQ;wBACR,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,KAAK;wBACf,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,+DAA+D;YAC/D,mEAAmE;YACnE,MAAM,MAAM,GAAG,EAAE,CAAC,kBAAkB,IAAI,EAAE,CAAC,mBAAmB,CAAC;YAC/D,IAAI,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1D,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC7B,OAAO,CAAC,GAAG,CACT,mDAAmD,QAAQ,GAAG;wBAC9D,QAAQ,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CACpF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,yEAAyE;YACzE,MAAM,OAAO,GAAG,EAAE,CAAC,mBAAmB,IAAI,EAAE,CAAC,oBAAoB,CAAC;YAClE,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC1D,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAC9B,OAAO,CAAC,GAAG,CACT,oDAAoD,QAAQ,GAAG;wBAC/D,QAAQ,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CACrF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,qEAAqE;YACrE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CACT,uCAAuC,QAAQ,SAAS,IAAI,EAAE,UAAU,IAAI,CAAC,GAAG;oBAChF,YAAY,SAAS,KAAK;oBAC1B,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG;oBACnD,UAAU,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CACrD,CAAC;gBACF,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACvB,QAAQ;wBACR,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,UAAU;wBACnB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACvB,QAAQ;wBACR,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,OAAO;wBAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC3C,iEAAiE;gBACjE,sDAAsD;gBACtD,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAChC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;oBAC9B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC;QACzC,MAAM,aAAa,GAAG,EAAE,EAAE,aAAa,IAAI,EAAE,EAAE,cAAc,CAAC;QAC9D,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;gBAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CACT,mCAAmC,QAAQ,SAAS,EAAE,CAAC,IAAI,GAAG;wBAC9D,QAAQ,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CACvE,CAAC;oBACF,IAAI,CAAC,eAAe,EAAE,CAAC;wBACrB,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;wBACnB,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;wBACnB,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAK,MAAiC,CAAC,SAAS,CAAC;YACjF,IAAI,CAAC,YAAY,EAAE,CACjB,IAAI,KAAK,CAAC,0CAA0C,QAAQ,IAAI,SAAS,EAAE,CAAC,EAC5E,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,EAAa,EAAE,GAA4B;QAC7D,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AAED,6EAA6E;AAE7E;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,OAAqB;IACjD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAwB;IAC5D,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc;QAAE,OAAO,eAAe,CAAC;IACpE,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc,CAAC;IACnD,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC;QAChD,IAAI,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO,kBAAkB,CAAC;QACpG,IAAI,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,iBAAiB,CAAC;QACpE,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI;YAAE,OAAO,cAAc,CAAC;QAC1E,IAAI,CAAC,EAAE,CAAC,kBAAkB,IAAI,EAAE,CAAC,mBAAmB,CAAC,KAAK,IAAI;YAAE,OAAO,oBAAoB,CAAC;QAC5F,IAAI,EAAE,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO,aAAa,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,kBAAkB,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE,IAAI,IAAI,IAAI;YAAE,OAAO,oBAAoB,CAAC;QACjG,IAAI,CAAC,EAAE,CAAC,mBAAmB,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,IAAI,IAAI;YAAE,OAAO,qBAAqB,CAAC;QACpG,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,sBAAsB;QAAE,OAAO,sBAAsB,CAAC;IAC1F,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,yBAAyB;QAAE,OAAO,yBAAyB,CAAC;IACnG,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc;QAAE,OAAO,eAAe,CAAC;IACpE,qEAAqE;IACrE,+CAA+C;IAC/C,OAAO,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * mapping. These run without a live WebSocket — they exercise the
4
4
  * pure mapping function only.
5
5
  */
6
- import { buildGeminiToolConfig, GeminiLiveAdapter, parseRateFromMime, peakAmplitude, } from './gemini-live.js';
6
+ import { buildGeminiToolConfig, classifyServerMessage, GeminiLiveAdapter, parseRateFromMime, peakAmplitude, } from './gemini-live.js';
7
7
  describe('buildGeminiToolConfig', () => {
8
8
  it("maps 'auto' to function_calling_config.mode=AUTO", () => {
9
9
  expect(buildGeminiToolConfig('auto')).toEqual({
@@ -160,4 +160,217 @@ describe('GeminiLiveAdapter dual-casing response parser', () => {
160
160
  });
161
161
  /* eslint-enable @typescript-eslint/no-explicit-any */
162
162
  });
163
+ describe('GeminiLiveAdapter outputGainDb', () => {
164
+ /* eslint-disable @typescript-eslint/no-explicit-any */
165
+ function makeAdapter(outputGainDb) {
166
+ const opts = { apiKey: 'test-key' };
167
+ if (outputGainDb !== undefined)
168
+ opts.outputGainDb = outputGainDb;
169
+ const adapter = new GeminiLiveAdapter(opts);
170
+ const invoke = (msg, lid) => {
171
+ adapter.handleServerMessage(msg, lid);
172
+ };
173
+ return { adapter, invoke };
174
+ }
175
+ /** Build a 4-sample 16-bit LE PCM buffer with a known int16 value. */
176
+ function pcmWithPeak(int16Value) {
177
+ // Interleave positive and negative values at the same magnitude so
178
+ // the test also catches asymmetric gain bugs.
179
+ const b = Buffer.alloc(8);
180
+ b.writeInt16LE(int16Value, 0);
181
+ b.writeInt16LE(-int16Value, 2);
182
+ b.writeInt16LE(int16Value, 4);
183
+ b.writeInt16LE(-int16Value, 6);
184
+ return b;
185
+ }
186
+ /** Return the peak absolute int16 value in a slin16 buffer. */
187
+ function peakInt16(buf) {
188
+ let peak = 0;
189
+ for (let i = 0; i < buf.length; i += 2) {
190
+ const s = buf.readInt16LE(i);
191
+ const abs = s < 0 ? -s : s;
192
+ if (abs > peak)
193
+ peak = abs;
194
+ }
195
+ return peak;
196
+ }
197
+ it('default gain of 0 dB leaves samples unchanged', () => {
198
+ const { adapter, invoke } = makeAdapter();
199
+ const captured = [];
200
+ adapter.onAudioOutput((chunk) => captured.push(chunk));
201
+ const pcm = pcmWithPeak(1000); // ≈ -30.3 dBFS source
202
+ invoke({
203
+ serverContent: {
204
+ modelTurn: {
205
+ parts: [{
206
+ inlineData: { mimeType: 'audio/pcm;rate=16000', data: pcm.toString('base64') },
207
+ }],
208
+ },
209
+ },
210
+ }, 'sim-gain-0');
211
+ expect(captured).toHaveLength(1);
212
+ // Unity gain → peak within 1 LSB of source (rounding through Float32).
213
+ expect(peakInt16(captured[0])).toBeGreaterThanOrEqual(999);
214
+ expect(peakInt16(captured[0])).toBeLessThanOrEqual(1001);
215
+ });
216
+ it('+6 dB gain roughly doubles the peak', () => {
217
+ const { adapter, invoke } = makeAdapter(6);
218
+ const captured = [];
219
+ adapter.onAudioOutput((chunk) => captured.push(chunk));
220
+ const pcm = pcmWithPeak(1000);
221
+ invoke({
222
+ serverContent: {
223
+ modelTurn: {
224
+ parts: [{
225
+ inlineData: { mimeType: 'audio/pcm;rate=16000', data: pcm.toString('base64') },
226
+ }],
227
+ },
228
+ },
229
+ }, 'sim-gain-6');
230
+ const peak = peakInt16(captured[0]);
231
+ // 10^(6/20) ≈ 1.9953, so 1000 * 1.9953 ≈ 1995.
232
+ expect(peak).toBeGreaterThanOrEqual(1990);
233
+ expect(peak).toBeLessThanOrEqual(2000);
234
+ });
235
+ it('+24 dB gain amplifies 1000 to ~15800 without wrapping', () => {
236
+ const { adapter, invoke } = makeAdapter(24);
237
+ const captured = [];
238
+ adapter.onAudioOutput((chunk) => captured.push(chunk));
239
+ const pcm = pcmWithPeak(1000);
240
+ invoke({
241
+ serverContent: {
242
+ modelTurn: {
243
+ parts: [{
244
+ inlineData: { mimeType: 'audio/pcm;rate=16000', data: pcm.toString('base64') },
245
+ }],
246
+ },
247
+ },
248
+ }, 'sim-gain-24');
249
+ const peak = peakInt16(captured[0]);
250
+ // 10^(24/20) ≈ 15.849, so 1000 * 15.849 ≈ 15849.
251
+ expect(peak).toBeGreaterThanOrEqual(15840);
252
+ expect(peak).toBeLessThanOrEqual(15860);
253
+ });
254
+ it('clips cleanly (no wrap-around) when gain would exceed int16 range', () => {
255
+ const { adapter, invoke } = makeAdapter(24); // ~16x gain
256
+ const captured = [];
257
+ adapter.onAudioOutput((chunk) => captured.push(chunk));
258
+ // Source at ~6800 (≈ -13.7 dBFS) × 16x → ~108800, far above int16 max.
259
+ // Must clamp to ±32767, not wrap to negative.
260
+ const pcm = pcmWithPeak(6800);
261
+ invoke({
262
+ serverContent: {
263
+ modelTurn: {
264
+ parts: [{
265
+ inlineData: { mimeType: 'audio/pcm;rate=16000', data: pcm.toString('base64') },
266
+ }],
267
+ },
268
+ },
269
+ }, 'sim-gain-clip');
270
+ const peak = peakInt16(captured[0]);
271
+ // Clamped to int16 max magnitude (32767). Allow 32767±1 for rounding.
272
+ expect(peak).toBeGreaterThanOrEqual(32766);
273
+ expect(peak).toBeLessThanOrEqual(32767);
274
+ });
275
+ it('exposes the configured outputGainDb on the adapter', () => {
276
+ const { adapter } = makeAdapter(24);
277
+ expect(adapter.outputGainDb).toBe(24);
278
+ });
279
+ it('defaults outputGainDb to 0 when not specified', () => {
280
+ const { adapter } = makeAdapter();
281
+ expect(adapter.outputGainDb).toBe(0);
282
+ });
283
+ /* eslint-enable @typescript-eslint/no-explicit-any */
284
+ });
285
+ describe('classifyServerMessage — heartbeat tag generator', () => {
286
+ it('tags setupComplete (camelCase)', () => {
287
+ expect(classifyServerMessage({ setupComplete: {} })).toBe('setupComplete');
288
+ });
289
+ it('tags setupComplete (snake_case)', () => {
290
+ expect(classifyServerMessage({ setup_complete: {} })).toBe('setupComplete');
291
+ });
292
+ it('tags audio modelTurn distinct from text modelTurn', () => {
293
+ expect(classifyServerMessage({
294
+ serverContent: { modelTurn: { parts: [{ inlineData: { data: 'aGVsbG8=' } }] } },
295
+ })).toBe('modelTurn(audio)');
296
+ expect(classifyServerMessage({
297
+ serverContent: { modelTurn: { parts: [{ text: 'hello' }] } },
298
+ })).toBe('modelTurn(text)');
299
+ });
300
+ it('tags turnComplete over other serverContent variants', () => {
301
+ expect(classifyServerMessage({ serverContent: { turn_complete: true } })).toBe('turnComplete');
302
+ expect(classifyServerMessage({ server_content: { turnComplete: true } })).toBe('turnComplete');
303
+ });
304
+ it('tags interrupted when no modelTurn present', () => {
305
+ expect(classifyServerMessage({ serverContent: { interrupted: true } })).toBe('interrupted');
306
+ });
307
+ it('tags inputTranscription and outputTranscription', () => {
308
+ expect(classifyServerMessage({
309
+ serverContent: { inputTranscription: { text: 'hi' } },
310
+ })).toBe('inputTranscription');
311
+ expect(classifyServerMessage({
312
+ server_content: { output_transcription: { text: 'hello' } },
313
+ })).toBe('outputTranscription');
314
+ });
315
+ it('tags toolCall and goAway', () => {
316
+ expect(classifyServerMessage({
317
+ toolCall: { functionCalls: [{ name: 'lookup' }] },
318
+ })).toBe('toolCall');
319
+ expect(classifyServerMessage({ goAway: { timeLeft: '5s' } })).toBe('goAway');
320
+ });
321
+ it('surfaces unknown top-level keys for forward-compat visibility', () => {
322
+ /* eslint-disable @typescript-eslint/no-explicit-any */
323
+ const result = classifyServerMessage({ futureFeature: { x: 1 } });
324
+ /* eslint-enable @typescript-eslint/no-explicit-any */
325
+ expect(result).toBe('unknown:futureFeature');
326
+ });
327
+ });
328
+ describe('GeminiLiveAdapter per-session diagnostics', () => {
329
+ /* eslint-disable @typescript-eslint/no-explicit-any */
330
+ it('exposes session diagnostic state for tests', () => {
331
+ const adapter = new GeminiLiveAdapter({ apiKey: 'test-key' });
332
+ // Simulate startSession's diagnostic initialization by reaching in.
333
+ adapter.sessionDiag.set('sim-call', {
334
+ startTime: Date.now(),
335
+ chunksSentTotal: 0,
336
+ chunksSentSinceHeartbeat: 0,
337
+ lastServerMessageAt: Date.now(),
338
+ lastServerMessageType: '(none yet)',
339
+ heartbeatTimer: null,
340
+ silenceWarned: false,
341
+ turnStartedAt: Date.now(),
342
+ turnNumber: 0,
343
+ sawInputThisTurn: false,
344
+ sawOutputThisTurn: false,
345
+ });
346
+ // handleServerMessage should update lastServerMessageType.
347
+ adapter.handleServerMessage({ serverContent: { turnComplete: true } }, 'sim-call');
348
+ const diag = adapter.sessionDiag.get('sim-call');
349
+ expect(diag.lastServerMessageType).toBe('turnComplete');
350
+ expect(diag.turnNumber).toBe(1); // advanced by turn_complete handling
351
+ expect(diag.sawInputThisTurn).toBe(false); // reset for next turn
352
+ });
353
+ it('advances turn counter and resets per-turn flags on turnComplete', () => {
354
+ const adapter = new GeminiLiveAdapter({ apiKey: 'test-key' });
355
+ adapter.sessionDiag.set('sim-call', {
356
+ startTime: Date.now(),
357
+ chunksSentTotal: 0,
358
+ chunksSentSinceHeartbeat: 0,
359
+ lastServerMessageAt: Date.now(),
360
+ lastServerMessageType: '(none yet)',
361
+ heartbeatTimer: null,
362
+ silenceWarned: false,
363
+ turnStartedAt: Date.now(),
364
+ turnNumber: 5,
365
+ sawInputThisTurn: true,
366
+ sawOutputThisTurn: true,
367
+ });
368
+ adapter.handleServerMessage({ serverContent: { turnComplete: true } }, 'sim-call');
369
+ const diag = adapter.sessionDiag.get('sim-call');
370
+ expect(diag.turnNumber).toBe(6);
371
+ expect(diag.sawInputThisTurn).toBe(false);
372
+ expect(diag.sawOutputThisTurn).toBe(false);
373
+ });
374
+ /* eslint-enable @typescript-eslint/no-explicit-any */
375
+ });
163
376
  //# sourceMappingURL=gemini-live.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-live.test.js","sourceRoot":"","sources":["../../src/realtime/gemini-live.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5C,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5C,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,iEAAiE;QACjE,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,uBAAuB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACzC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CACJ,qBAAqB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAClE,CAAC,OAAO,CAAC;YACR,uBAAuB,EAAE;gBACvB,IAAI,EAAE,KAAK;gBACX,sBAAsB,EAAE,CAAC,cAAc,CAAC;aACzC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;YACpC,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;SACnE,CAAC,CAAC;QACH,iEAAiE;QACjE,kDAAkD;QAClD,MAAM,MAAM,GAAI,OAA8C,CAAC,UAAU,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAI,OAA8C,CAAC,UAAU,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;YACpC,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACzC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;SAC9C,CAAC,CAAC;QACH,MAAM,MAAM,GAAI,OAA8C,CAAC,UAAU,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;YACpC,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACxB,UAAU,EAAE,MAAM;SACnB,CAAC,CAAC;QACH,MAAM,MAAM,GAAI,OAA8C,CAAC,UAAU,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D;;;;;OAKG;IACH,uDAAuD;IACvD,SAAS,WAAW;QAClB,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,GAAW,EAAQ,EAAE;YAC5C,OAAe,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,mEAAmE;QACnE,wDAAwD;QACxD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAElD,MAAM,CAAC;YACL,aAAa,EAAE;gBACb,SAAS,EAAE;oBACT,KAAK,EAAE,CAAC;4BACN,UAAU,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;yBAC/E,CAAC;iBACH;aACF;SACF,EAAE,YAAY,CAAC,CAAC;QAEjB,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAElD,MAAM,CAAC;YACL,cAAc,EAAE;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE,CAAC;4BACN,WAAW,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;yBACjF,CAAC;iBACH;aACF;SACF,EAAE,YAAY,CAAC,CAAC;QAEjB,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtD,oDAAoD;QACpD,MAAM,CAAC;YACL,cAAc,EAAE,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;SAC7D,EAAE,YAAY,CAAC,CAAC;QAEjB,2CAA2C;QAC3C,MAAM,CAAC;YACL,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;SACxC,EAAE,YAAY,CAAC,CAAC;QAEjB,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,sDAAsD;AACxD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"gemini-live.test.js","sourceRoot":"","sources":["../../src/realtime/gemini-live.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dvgateway-adapters",
3
- "version": "1.4.6",
3
+ "version": "1.4.8",
4
4
  "description": "AI service adapters for DVGateway SDK (Deepgram, ElevenLabs, Anthropic, OpenAI, OpenAI Realtime)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",