dvgateway-adapters 1.4.5 → 1.4.7
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 +37 -0
- package/dist/realtime/gemini-live.d.ts.map +1 -1
- package/dist/realtime/gemini-live.js +169 -27
- package/dist/realtime/gemini-live.js.map +1 -1
- package/dist/realtime/gemini-live.test.js +218 -1
- package/dist/realtime/gemini-live.test.js.map +1 -1
- package/dist/realtime/index.d.ts +1 -1
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +1 -1
- package/dist/realtime/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -167,11 +167,36 @@ 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;
|
|
170
191
|
}
|
|
171
192
|
export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
|
|
172
193
|
private readonly opts;
|
|
173
194
|
private readonly tools;
|
|
174
195
|
private readonly toolChoice;
|
|
196
|
+
/** Output gain expressed in dBFS — stored for the diagnostic log. */
|
|
197
|
+
private readonly outputGainDb;
|
|
198
|
+
/** Pre-computed linear multiplier: `10 ** (outputGainDb / 20)`. */
|
|
199
|
+
private readonly outputGainLinear;
|
|
175
200
|
private audioOutputHandler;
|
|
176
201
|
private transcriptHandler;
|
|
177
202
|
private errorHandler;
|
|
@@ -184,6 +209,10 @@ export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
|
|
|
184
209
|
private readonly outputTranscriptBuf;
|
|
185
210
|
/** Per-session "caller speaking" state (for synthetic onSpeechActivity events) */
|
|
186
211
|
private readonly callerSpeaking;
|
|
212
|
+
/** Per-session diagnostics: have we logged the first audio chunk yet? */
|
|
213
|
+
private readonly loggedFirstAudio;
|
|
214
|
+
/** Per-session diagnostics: have we warned about a text-only response yet? */
|
|
215
|
+
private readonly warnedTextOnly;
|
|
187
216
|
private stopped;
|
|
188
217
|
constructor(opts: GeminiLiveAdapterOptions);
|
|
189
218
|
onAudioOutput(handler: (chunk: Buffer, linkedId: string) => void): void;
|
|
@@ -233,4 +262,12 @@ export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
|
|
|
233
262
|
private handleServerMessage;
|
|
234
263
|
private sendMessage;
|
|
235
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Extract the sample rate from a MIME type like `audio/pcm;rate=24000`.
|
|
267
|
+
* Returns `null` when no `rate=` parameter is present so the caller can
|
|
268
|
+
* fall back to a default.
|
|
269
|
+
*/
|
|
270
|
+
export declare function parseRateFromMime(mime: string): number | null;
|
|
271
|
+
/** Peak |sample| value across a Float32Array — for first-chunk diagnostics. */
|
|
272
|
+
export declare function peakAmplitude(samples: Float32Array): number;
|
|
236
273
|
//# 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;
|
|
@@ -87,6 +91,10 @@ export class GeminiLiveAdapter {
|
|
|
87
91
|
outputTranscriptBuf = new Map();
|
|
88
92
|
/** Per-session "caller speaking" state (for synthetic onSpeechActivity events) */
|
|
89
93
|
callerSpeaking = new Map();
|
|
94
|
+
/** Per-session diagnostics: have we logged the first audio chunk yet? */
|
|
95
|
+
loggedFirstAudio = new Set();
|
|
96
|
+
/** Per-session diagnostics: have we warned about a text-only response yet? */
|
|
97
|
+
warnedTextOnly = new Set();
|
|
90
98
|
stopped = false;
|
|
91
99
|
constructor(opts) {
|
|
92
100
|
const endpoint = opts.endpoint ?? 'ai-studio';
|
|
@@ -118,6 +126,18 @@ export class GeminiLiveAdapter {
|
|
|
118
126
|
// given — matches OpenAIRealtimeAdapter's behavior so the two
|
|
119
127
|
// adapters stay drop-in-compatible.
|
|
120
128
|
this.toolChoice = opts.toolChoice ?? (this.tools.length > 0 ? 'auto' : undefined);
|
|
129
|
+
// Output gain — see `outputGainDb` docstring. Warn on nonsensical
|
|
130
|
+
// values but never clamp the user's setting; they may be feeding a
|
|
131
|
+
// non-phone sink (file, WebRTC, etc.) where wider ranges make sense.
|
|
132
|
+
this.outputGainDb = opts.outputGainDb ?? 0;
|
|
133
|
+
if (this.outputGainDb < -24 || this.outputGainDb > 40) {
|
|
134
|
+
console.warn(`[GeminiLive] outputGainDb=${this.outputGainDb} is outside the ` +
|
|
135
|
+
`sensible [-24, +40] dB range — this is almost certainly a ` +
|
|
136
|
+
`mis-configuration`);
|
|
137
|
+
}
|
|
138
|
+
this.outputGainLinear = this.outputGainDb === 0
|
|
139
|
+
? 1
|
|
140
|
+
: Math.pow(10, this.outputGainDb / 20);
|
|
121
141
|
}
|
|
122
142
|
onAudioOutput(handler) {
|
|
123
143
|
this.audioOutputHandler = handler;
|
|
@@ -278,6 +298,8 @@ export class GeminiLiveAdapter {
|
|
|
278
298
|
this.inputTranscriptBuf.delete(linkedId);
|
|
279
299
|
this.outputTranscriptBuf.delete(linkedId);
|
|
280
300
|
this.callerSpeaking.delete(linkedId);
|
|
301
|
+
this.loggedFirstAudio.delete(linkedId);
|
|
302
|
+
this.warnedTextOnly.delete(linkedId);
|
|
281
303
|
}
|
|
282
304
|
else {
|
|
283
305
|
this.stopped = true;
|
|
@@ -289,6 +311,8 @@ export class GeminiLiveAdapter {
|
|
|
289
311
|
this.inputTranscriptBuf.delete(id);
|
|
290
312
|
this.outputTranscriptBuf.delete(id);
|
|
291
313
|
this.callerSpeaking.delete(id);
|
|
314
|
+
this.loggedFirstAudio.delete(id);
|
|
315
|
+
this.warnedTextOnly.delete(id);
|
|
292
316
|
}
|
|
293
317
|
}
|
|
294
318
|
}
|
|
@@ -382,25 +406,115 @@ export class GeminiLiveAdapter {
|
|
|
382
406
|
}
|
|
383
407
|
}
|
|
384
408
|
handleServerMessage(msg, linkedId) {
|
|
385
|
-
//
|
|
386
|
-
if (msg.setupComplete) {
|
|
409
|
+
// Setup complete (camelCase or snake_case from the wire)
|
|
410
|
+
if (msg.setupComplete || msg.setup_complete) {
|
|
411
|
+
console.log(`[GeminiLive] session setup complete linkedid=${linkedId}`);
|
|
387
412
|
return;
|
|
388
413
|
}
|
|
389
|
-
// ──
|
|
390
|
-
|
|
391
|
-
|
|
414
|
+
// ── Server content: the main response channel ──
|
|
415
|
+
const sc = msg.serverContent ?? msg.server_content;
|
|
416
|
+
if (sc) {
|
|
417
|
+
const modelTurn = sc.modelTurn ?? sc.model_turn;
|
|
392
418
|
// Audio output (modelTurn.parts[].inlineData)
|
|
393
|
-
if (
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
419
|
+
if (modelTurn?.parts) {
|
|
420
|
+
let audioPartCount = 0;
|
|
421
|
+
let textPartCount = 0;
|
|
422
|
+
for (const part of modelTurn.parts) {
|
|
423
|
+
// Accept both camelCase `inlineData` and snake_case `inline_data`
|
|
424
|
+
// — Google's Live preview has been observed to emit either depending
|
|
425
|
+
// on the backend rollout. Falling back keeps audio flowing through
|
|
426
|
+
// a backend rename that would otherwise silently zero our VU.
|
|
427
|
+
const inline = part.inlineData ?? part.inline_data;
|
|
428
|
+
const b64 = inline?.data;
|
|
429
|
+
if (b64) {
|
|
430
|
+
audioPartCount++;
|
|
431
|
+
// Sample rate may be encoded in the MIME type as
|
|
432
|
+
// `audio/pcm;rate=24000`. Default to 24kHz when unspecified —
|
|
433
|
+
// that matches both half-cascade and native-audio Gemini Live
|
|
434
|
+
// models as documented today, but parsing makes us resilient
|
|
435
|
+
// if Google adds a 16kHz output mode in the future.
|
|
436
|
+
const mime = inline;
|
|
437
|
+
const mimeType = mime?.mimeType ?? mime?.mime_type ?? '';
|
|
438
|
+
const sourceRate = parseRateFromMime(mimeType) ?? GEMINI_OUTPUT_SAMPLE_RATE;
|
|
439
|
+
const pcmSrcBuf = Buffer.from(b64, 'base64');
|
|
440
|
+
const samplesSrc = slin16ToFloat32(pcmSrcBuf);
|
|
441
|
+
// Compute the upstream peak BEFORE anything else touches
|
|
442
|
+
// the samples — this value is what the diagnostic log
|
|
443
|
+
// reports below so the operator sees the true provider
|
|
444
|
+
// output level, not a gain-shifted reading.
|
|
445
|
+
const srcPeak = peakAmplitude(samplesSrc);
|
|
446
|
+
// Resample if source rate doesn't match gateway target.
|
|
447
|
+
// When rates already match, `resample` returns the SAME
|
|
448
|
+
// reference as `samplesSrc`; the in-place gain below would
|
|
449
|
+
// therefore also mutate `samplesSrc`. That's fine because
|
|
450
|
+
// we already captured `srcPeak` above, but keep it in mind
|
|
451
|
+
// if adding any later read of `samplesSrc`.
|
|
452
|
+
const samples16k = sourceRate === DV_SAMPLE_RATE
|
|
453
|
+
? samplesSrc
|
|
454
|
+
: resample(samplesSrc, sourceRate, DV_SAMPLE_RATE);
|
|
455
|
+
// Apply user-configured output gain. Gemini half-cascade
|
|
456
|
+
// models emit audio around -40 dBFS peak (≈30 dB quieter
|
|
457
|
+
// than OpenAI Realtime) which is barely audible over a
|
|
458
|
+
// phone line. `float32ToSlin16` below clamps samples to
|
|
459
|
+
// the int16 range, so values above unity clip cleanly.
|
|
460
|
+
if (this.outputGainLinear !== 1) {
|
|
461
|
+
for (let i = 0; i < samples16k.length; i++) {
|
|
462
|
+
samples16k[i] = samples16k[i] * this.outputGainLinear;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
400
465
|
const pcm16k = float32ToSlin16(samples16k);
|
|
401
|
-
|
|
466
|
+
// Copy into a fresh Buffer so the bytes survive any later
|
|
467
|
+
// reuse of the slab pool that backs `Buffer.allocUnsafe`
|
|
468
|
+
// inside `float32ToSlin16`. The user's handler may stash the
|
|
469
|
+
// chunk in an async iterable that's read after several more
|
|
470
|
+
// frames are decoded — without this copy those bytes can be
|
|
471
|
+
// overwritten before the WS write actually flushes them.
|
|
472
|
+
const out = Buffer.from(pcm16k);
|
|
473
|
+
// First-chunk diagnostic — surfaces the actual shape of what
|
|
474
|
+
// Gemini sent so a "no audio" report is one log line away
|
|
475
|
+
// from a confirmed root cause. `srcPeak` was captured
|
|
476
|
+
// above BEFORE gain was applied so the log always reports
|
|
477
|
+
// the upstream provider level, not a gain-shifted reading.
|
|
478
|
+
if (!this.loggedFirstAudio.has(linkedId)) {
|
|
479
|
+
this.loggedFirstAudio.add(linkedId);
|
|
480
|
+
const peakSrc = srcPeak;
|
|
481
|
+
const peakSrcDb = peakSrc > 0 ? 20 * Math.log10(peakSrc) : -96;
|
|
482
|
+
console.log(`[GeminiLive] first audio chunk linkedid=${linkedId} ` +
|
|
483
|
+
`mime=${JSON.stringify(mimeType)} sourceRate=${sourceRate}Hz ` +
|
|
484
|
+
`srcBytes=${pcmSrcBuf.length} dstBytes=${out.length} ` +
|
|
485
|
+
`peak=${peakSrc.toFixed(4)} (${peakSrcDb.toFixed(1)}dBFS) ` +
|
|
486
|
+
`outputGainDb=${this.outputGainDb}`);
|
|
487
|
+
if (peakSrc < 1e-4) {
|
|
488
|
+
console.warn(`[GeminiLive] first audio chunk is silent (peak < -80dBFS) ` +
|
|
489
|
+
`linkedid=${linkedId} — check Gemini model + responseModalities`);
|
|
490
|
+
}
|
|
491
|
+
else if (peakSrcDb < -30 && this.outputGainDb < 12) {
|
|
492
|
+
// Gemini half-cascade typically outputs around -40 dBFS.
|
|
493
|
+
// If we see that range and the operator hasn't bumped
|
|
494
|
+
// the gain, nudge them toward the fix.
|
|
495
|
+
console.warn(`[GeminiLive] source peak ${peakSrcDb.toFixed(1)}dBFS is ` +
|
|
496
|
+
`quiet for a phone sink (< -30 dBFS) and outputGainDb=` +
|
|
497
|
+
`${this.outputGainDb} is not compensating. ` +
|
|
498
|
+
`Recommended: outputGainDb: 24 for half-cascade models.`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
this.audioOutputHandler?.(out, linkedId);
|
|
502
|
+
}
|
|
503
|
+
else if (part.text) {
|
|
504
|
+
textPartCount++;
|
|
402
505
|
}
|
|
403
|
-
|
|
506
|
+
}
|
|
507
|
+
// If Gemini is sending text but never audio, the call will be
|
|
508
|
+
// silent — surface that exactly once per session so the operator
|
|
509
|
+
// doesn't have to guess between "Gemini broken" / "wiring broken"
|
|
510
|
+
// / "responseModalities ignored".
|
|
511
|
+
if (textPartCount > 0 && audioPartCount === 0 && !this.warnedTextOnly.has(linkedId)) {
|
|
512
|
+
this.warnedTextOnly.add(linkedId);
|
|
513
|
+
console.warn(`[GeminiLive] received TEXT-only response (no inlineData) ` +
|
|
514
|
+
`linkedid=${linkedId} parts=${modelTurn.parts.length} — ` +
|
|
515
|
+
`the model is not producing audio. Likely cause: ` +
|
|
516
|
+
`generationConfig.responseModalities did not reach Gemini. ` +
|
|
517
|
+
`Verify the setup message field naming.`);
|
|
404
518
|
}
|
|
405
519
|
}
|
|
406
520
|
// Interruption: caller barge-in detected by server-side VAD
|
|
@@ -415,8 +529,10 @@ export class GeminiLiveAdapter {
|
|
|
415
529
|
});
|
|
416
530
|
}
|
|
417
531
|
}
|
|
532
|
+
const turnComplete = sc.turnComplete ?? sc.turn_complete;
|
|
533
|
+
const generationComplete = sc.generationComplete ?? sc.generation_complete;
|
|
418
534
|
// Turn complete: AI finished generating → if caller was marked speaking, clear it
|
|
419
|
-
if (
|
|
535
|
+
if (turnComplete === true || generationComplete === true) {
|
|
420
536
|
if (this.callerSpeaking.get(linkedId)) {
|
|
421
537
|
this.callerSpeaking.set(linkedId, false);
|
|
422
538
|
this.speechActivityHandler?.({
|
|
@@ -428,20 +544,19 @@ export class GeminiLiveAdapter {
|
|
|
428
544
|
}
|
|
429
545
|
}
|
|
430
546
|
// Input transcription (caller speech → text, streamed incrementally)
|
|
431
|
-
|
|
547
|
+
const inputT = sc.inputTranscription ?? sc.input_transcription;
|
|
548
|
+
if (inputT?.text != null) {
|
|
432
549
|
const prev = this.inputTranscriptBuf.get(linkedId) ?? '';
|
|
433
|
-
|
|
434
|
-
this.inputTranscriptBuf.set(linkedId, next);
|
|
435
|
-
// Emit as finalized on turnComplete (below); for now just accumulate
|
|
550
|
+
this.inputTranscriptBuf.set(linkedId, prev + inputT.text);
|
|
436
551
|
}
|
|
437
552
|
// Output transcription (assistant speech → text, streamed incrementally)
|
|
438
|
-
|
|
553
|
+
const outputT = sc.outputTranscription ?? sc.output_transcription;
|
|
554
|
+
if (outputT?.text != null) {
|
|
439
555
|
const prev = this.outputTranscriptBuf.get(linkedId) ?? '';
|
|
440
|
-
|
|
441
|
-
this.outputTranscriptBuf.set(linkedId, next);
|
|
556
|
+
this.outputTranscriptBuf.set(linkedId, prev + outputT.text);
|
|
442
557
|
}
|
|
443
558
|
// On turn completion, flush accumulated transcripts as final results
|
|
444
|
-
if (
|
|
559
|
+
if (turnComplete === true) {
|
|
445
560
|
const inputText = this.inputTranscriptBuf.get(linkedId) ?? '';
|
|
446
561
|
if (inputText.trim()) {
|
|
447
562
|
this.transcriptHandler?.({
|
|
@@ -467,8 +582,10 @@ export class GeminiLiveAdapter {
|
|
|
467
582
|
}
|
|
468
583
|
}
|
|
469
584
|
// ── toolCall: model wants to invoke a function ──
|
|
470
|
-
|
|
471
|
-
|
|
585
|
+
const tc = msg.toolCall ?? msg.tool_call;
|
|
586
|
+
const functionCalls = tc?.functionCalls ?? tc?.function_calls;
|
|
587
|
+
if (functionCalls) {
|
|
588
|
+
for (const fc of functionCalls) {
|
|
472
589
|
if (fc.name) {
|
|
473
590
|
this.toolCallHandler?.({
|
|
474
591
|
callId: fc.id ?? '',
|
|
@@ -480,8 +597,10 @@ export class GeminiLiveAdapter {
|
|
|
480
597
|
}
|
|
481
598
|
}
|
|
482
599
|
// ── goAway: session will close soon (quota / deployment boundary) ──
|
|
483
|
-
|
|
484
|
-
|
|
600
|
+
const goAway = msg.goAway ?? msg.go_away;
|
|
601
|
+
if (goAway) {
|
|
602
|
+
const timeLeft = goAway.timeLeft ?? goAway.time_left;
|
|
603
|
+
this.errorHandler?.(new Error(`Gemini Live goAway: session closing in ${timeLeft ?? 'unknown'}`), linkedId);
|
|
485
604
|
}
|
|
486
605
|
}
|
|
487
606
|
sendMessage(ws, obj) {
|
|
@@ -490,4 +609,27 @@ export class GeminiLiveAdapter {
|
|
|
490
609
|
}
|
|
491
610
|
}
|
|
492
611
|
}
|
|
612
|
+
// ─── Helpers exposed for unit tests ───────────────────────────────────────
|
|
613
|
+
/**
|
|
614
|
+
* Extract the sample rate from a MIME type like `audio/pcm;rate=24000`.
|
|
615
|
+
* Returns `null` when no `rate=` parameter is present so the caller can
|
|
616
|
+
* fall back to a default.
|
|
617
|
+
*/
|
|
618
|
+
export function parseRateFromMime(mime) {
|
|
619
|
+
const m = /[;\s]rate=(\d+)/i.exec(mime);
|
|
620
|
+
if (!m)
|
|
621
|
+
return null;
|
|
622
|
+
const n = Number(m[1]);
|
|
623
|
+
return Number.isFinite(n) && n > 0 ? n : null;
|
|
624
|
+
}
|
|
625
|
+
/** Peak |sample| value across a Float32Array — for first-chunk diagnostics. */
|
|
626
|
+
export function peakAmplitude(samples) {
|
|
627
|
+
let peak = 0;
|
|
628
|
+
for (let i = 0; i < samples.length; i++) {
|
|
629
|
+
const v = Math.abs(samples[i] ?? 0);
|
|
630
|
+
if (v > peak)
|
|
631
|
+
peak = v;
|
|
632
|
+
}
|
|
633
|
+
return peak;
|
|
634
|
+
}
|
|
493
635
|
//# 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 } from './gemini-live.js';
|
|
6
|
+
import { buildGeminiToolConfig, 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({
|
|
@@ -65,4 +65,221 @@ describe('GeminiLiveAdapter toolChoice defaults', () => {
|
|
|
65
65
|
expect(choice).toBe('none');
|
|
66
66
|
});
|
|
67
67
|
});
|
|
68
|
+
describe('parseRateFromMime', () => {
|
|
69
|
+
it('extracts rate from `audio/pcm;rate=24000`', () => {
|
|
70
|
+
expect(parseRateFromMime('audio/pcm;rate=24000')).toBe(24000);
|
|
71
|
+
});
|
|
72
|
+
it('extracts rate with leading whitespace', () => {
|
|
73
|
+
expect(parseRateFromMime('audio/pcm; rate=16000')).toBe(16000);
|
|
74
|
+
});
|
|
75
|
+
it('returns null when no rate present', () => {
|
|
76
|
+
expect(parseRateFromMime('audio/pcm')).toBeNull();
|
|
77
|
+
});
|
|
78
|
+
it('returns null for empty string', () => {
|
|
79
|
+
expect(parseRateFromMime('')).toBeNull();
|
|
80
|
+
});
|
|
81
|
+
it('rejects rate=0 as invalid', () => {
|
|
82
|
+
expect(parseRateFromMime('audio/pcm;rate=0')).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe('peakAmplitude', () => {
|
|
86
|
+
it('returns 0 for an empty array', () => {
|
|
87
|
+
expect(peakAmplitude(new Float32Array(0))).toBe(0);
|
|
88
|
+
});
|
|
89
|
+
it('returns 0 for all-zero samples (silence)', () => {
|
|
90
|
+
expect(peakAmplitude(new Float32Array([0, 0, 0, 0]))).toBe(0);
|
|
91
|
+
});
|
|
92
|
+
it('returns the absolute peak across positive and negative samples', () => {
|
|
93
|
+
expect(peakAmplitude(new Float32Array([0.1, -0.7, 0.3, -0.2]))).toBeCloseTo(0.7);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('GeminiLiveAdapter dual-casing response parser', () => {
|
|
97
|
+
/**
|
|
98
|
+
* These tests reach into the private `handleServerMessage` to verify
|
|
99
|
+
* that the parser accepts BOTH camelCase (per the published spec) and
|
|
100
|
+
* snake_case (observed in Live preview deployments) — without this,
|
|
101
|
+
* a backend rename silently zeros the callee VU.
|
|
102
|
+
*/
|
|
103
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
104
|
+
function makeAdapter() {
|
|
105
|
+
const adapter = new GeminiLiveAdapter({ apiKey: 'test-key' });
|
|
106
|
+
const invoke = (msg, lid) => {
|
|
107
|
+
adapter.handleServerMessage(msg, lid);
|
|
108
|
+
};
|
|
109
|
+
return { adapter, invoke };
|
|
110
|
+
}
|
|
111
|
+
it('decodes audio from camelCase serverContent.modelTurn.parts[].inlineData', () => {
|
|
112
|
+
const { adapter, invoke } = makeAdapter();
|
|
113
|
+
const captured = [];
|
|
114
|
+
adapter.onAudioOutput((chunk) => captured.push(chunk));
|
|
115
|
+
// 16-bit LE PCM: two samples (max positive, max negative) at 16kHz
|
|
116
|
+
// — already at 16k so no resample distortion vs source.
|
|
117
|
+
const pcm = Buffer.from([0xff, 0x7f, 0x00, 0x80]);
|
|
118
|
+
invoke({
|
|
119
|
+
serverContent: {
|
|
120
|
+
modelTurn: {
|
|
121
|
+
parts: [{
|
|
122
|
+
inlineData: { mimeType: 'audio/pcm;rate=16000', data: pcm.toString('base64') },
|
|
123
|
+
}],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
}, 'sim-call-1');
|
|
127
|
+
expect(captured).toHaveLength(1);
|
|
128
|
+
expect(captured[0].length).toBe(4);
|
|
129
|
+
});
|
|
130
|
+
it('decodes audio from snake_case server_content.model_turn.parts[].inline_data', () => {
|
|
131
|
+
const { adapter, invoke } = makeAdapter();
|
|
132
|
+
const captured = [];
|
|
133
|
+
adapter.onAudioOutput((chunk) => captured.push(chunk));
|
|
134
|
+
const pcm = Buffer.from([0xff, 0x7f, 0x00, 0x80]);
|
|
135
|
+
invoke({
|
|
136
|
+
server_content: {
|
|
137
|
+
model_turn: {
|
|
138
|
+
parts: [{
|
|
139
|
+
inline_data: { mime_type: 'audio/pcm;rate=16000', data: pcm.toString('base64') },
|
|
140
|
+
}],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
}, 'sim-call-2');
|
|
144
|
+
expect(captured).toHaveLength(1);
|
|
145
|
+
expect(captured[0].length).toBe(4);
|
|
146
|
+
});
|
|
147
|
+
it('routes turnComplete from snake_case turn_complete', () => {
|
|
148
|
+
const { adapter, invoke } = makeAdapter();
|
|
149
|
+
const transcripts = [];
|
|
150
|
+
adapter.onTranscript((r) => transcripts.push(r.text));
|
|
151
|
+
// Stream a partial output transcript via snake_case
|
|
152
|
+
invoke({
|
|
153
|
+
server_content: { output_transcription: { text: 'Hello!' } },
|
|
154
|
+
}, 'sim-call-3');
|
|
155
|
+
// Then complete the turn — also snake_case
|
|
156
|
+
invoke({
|
|
157
|
+
server_content: { turn_complete: true },
|
|
158
|
+
}, 'sim-call-3');
|
|
159
|
+
expect(transcripts).toContain('Hello!');
|
|
160
|
+
});
|
|
161
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
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
|
+
});
|
|
68
285
|
//# 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/dist/realtime/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { OpenAIRealtimeAdapter } from './openai-realtime.js';
|
|
2
2
|
export type { OpenAIRealtimeAdapterOptions, OpenAIRealtimeVoice, OpenAIRealtimeTurnDetectionMode, OpenAIRealtimeTurnDetectionOptions, OpenAIRealtimeTool, RealtimeToolCall, RealtimeSpeechActivityEvent, RealtimeSpeechAdapter, } from './openai-realtime.js';
|
|
3
|
-
export { GeminiLiveAdapter, buildGeminiToolConfig } from './gemini-live.js';
|
|
3
|
+
export { GeminiLiveAdapter, buildGeminiToolConfig, parseRateFromMime, peakAmplitude, } from './gemini-live.js';
|
|
4
4
|
export type { GeminiLiveAdapterOptions, GeminiLiveVoice, GeminiLiveModel, GeminiLiveEndpoint, GeminiLiveTurnDetectionMode, GeminiLiveTurnDetectionOptions, GeminiLiveTool, GeminiLiveToolChoice, } from './gemini-live.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EACV,4BAA4B,EAC5B,mBAAmB,EACnB,+BAA+B,EAC/B,kCAAkC,EAClC,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EACV,4BAA4B,EAC5B,mBAAmB,EACnB,+BAA+B,EAC/B,kCAAkC,EAClC,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,2BAA2B,EAC3B,8BAA8B,EAC9B,cAAc,EACd,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
package/dist/realtime/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Realtime speech-to-speech adapters
|
|
2
2
|
export { OpenAIRealtimeAdapter } from './openai-realtime.js';
|
|
3
|
-
export { GeminiLiveAdapter, buildGeminiToolConfig } from './gemini-live.js';
|
|
3
|
+
export { GeminiLiveAdapter, buildGeminiToolConfig, parseRateFromMime, peakAmplitude, } from './gemini-live.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAY7D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAY7D,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC"}
|
package/package.json
CHANGED