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.
- package/dist/realtime/gemini-live.d.ts +141 -0
- package/dist/realtime/gemini-live.d.ts.map +1 -1
- package/dist/realtime/gemini-live.js +295 -51
- package/dist/realtime/gemini-live.js.map +1 -1
- package/dist/realtime/gemini-live.test.js +214 -1
- package/dist/realtime/gemini-live.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAI9B;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,CAAC;AAEb,yDAAyD;AACzD,MAAM,MAAM,eAAe,GACvB,+BAA+B,GAC/B,+BAA+B,GAC/B,2BAA2B,CAAC;AAEhC,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD,MAAM,MAAM,2BAA2B,GAAG,YAAY,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,8BAA8B;IAC7C;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,2BAA2B,CAAC;IACnC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,wEAAwE;IACxE,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,MAAM,GACN,UAAU,GACV;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,oBAAoB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED,MAAM,WAAW,wBAAwB;IACvC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;OAGG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,mDAAmD;IACnD,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,aAAa,CAAC,EAAE,8BAA8B,CAAC;IAC/C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;
|
|
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
|
-
|
|
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
|
|
291
|
-
|
|
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
|
-
|
|
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
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
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
|
|
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}
|
|
445
|
-
|
|
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":"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"}
|
|
@@ -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":"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"}
|
|
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