dvgateway-adapters 1.4.4 → 1.4.6
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 +52 -0
- package/dist/realtime/gemini-live.d.ts.map +1 -1
- package/dist/realtime/gemini-live.js +150 -27
- package/dist/realtime/gemini-live.js.map +1 -1
- package/dist/realtime/gemini-live.test.d.ts +2 -0
- package/dist/realtime/gemini-live.test.d.ts.map +1 -0
- package/dist/realtime/gemini-live.test.js +163 -0
- package/dist/realtime/gemini-live.test.js.map +1 -0
- package/dist/realtime/index.d.ts +2 -2
- 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 +6 -2
|
@@ -77,6 +77,35 @@ export interface GeminiLiveTool {
|
|
|
77
77
|
/** JSON Schema describing the function parameters. */
|
|
78
78
|
parameters?: Record<string, unknown>;
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Tool-choice strategy (mirrors OpenAIRealtimeAdapter's `toolChoice`).
|
|
82
|
+
*
|
|
83
|
+
* Mapped to Gemini's `tool_config.function_calling_config`:
|
|
84
|
+
*
|
|
85
|
+
* | SDK value | Gemini protocol |
|
|
86
|
+
* |----------------------------------------|-----------------------------------------------------|
|
|
87
|
+
* | `'auto'` | `{ mode: 'AUTO' }` |
|
|
88
|
+
* | `'none'` | `{ mode: 'NONE' }` |
|
|
89
|
+
* | `'required'` | `{ mode: 'ANY' }` |
|
|
90
|
+
* | `{ type: 'function', name: 'fn' }` | `{ mode: 'ANY', allowed_function_names: ['fn'] }` |
|
|
91
|
+
*
|
|
92
|
+
* Default when `tools` is set but `toolChoice` is omitted: `'auto'`
|
|
93
|
+
* (matches OpenAI default). Default when `tools` is empty: undefined —
|
|
94
|
+
* no `tool_config` is sent.
|
|
95
|
+
*
|
|
96
|
+
* Reference: https://ai.google.dev/api/live#toolconfig
|
|
97
|
+
*/
|
|
98
|
+
export type GeminiLiveToolChoice = 'auto' | 'none' | 'required' | {
|
|
99
|
+
type: 'function';
|
|
100
|
+
name: string;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Convert an OpenAI-style `toolChoice` into Gemini Live's `tool_config`
|
|
104
|
+
* shape. Pure function — exported for unit tests and any caller that
|
|
105
|
+
* wants to emit the raw protocol object directly (e.g. custom
|
|
106
|
+
* BidiGenerateContent clients).
|
|
107
|
+
*/
|
|
108
|
+
export declare function buildGeminiToolConfig(choice: GeminiLiveToolChoice): Record<string, unknown>;
|
|
80
109
|
export interface GeminiLiveAdapterOptions {
|
|
81
110
|
/** API key for AI Studio endpoint (required if endpoint="ai-studio"). */
|
|
82
111
|
apiKey?: string;
|
|
@@ -128,10 +157,21 @@ export interface GeminiLiveAdapterOptions {
|
|
|
128
157
|
maxOutputTokens?: number;
|
|
129
158
|
/** Tools the model can call during the session. */
|
|
130
159
|
tools?: GeminiLiveTool[];
|
|
160
|
+
/**
|
|
161
|
+
* Tool-choice strategy (default: `'auto'` when `tools` is non-empty,
|
|
162
|
+
* else unset). Mirrors OpenAIRealtimeAdapter's `toolChoice` so S2S
|
|
163
|
+
* pipelines can swap `OpenAIRealtimeAdapter` ↔ `GeminiLiveAdapter`
|
|
164
|
+
* without losing tool-calling control.
|
|
165
|
+
*
|
|
166
|
+
* Mapped to Gemini's `tool_config.function_calling_config` on the
|
|
167
|
+
* setup message. See {@link GeminiLiveToolChoice} for the full table.
|
|
168
|
+
*/
|
|
169
|
+
toolChoice?: GeminiLiveToolChoice;
|
|
131
170
|
}
|
|
132
171
|
export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
|
|
133
172
|
private readonly opts;
|
|
134
173
|
private readonly tools;
|
|
174
|
+
private readonly toolChoice;
|
|
135
175
|
private audioOutputHandler;
|
|
136
176
|
private transcriptHandler;
|
|
137
177
|
private errorHandler;
|
|
@@ -144,6 +184,10 @@ export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
|
|
|
144
184
|
private readonly outputTranscriptBuf;
|
|
145
185
|
/** Per-session "caller speaking" state (for synthetic onSpeechActivity events) */
|
|
146
186
|
private readonly callerSpeaking;
|
|
187
|
+
/** Per-session diagnostics: have we logged the first audio chunk yet? */
|
|
188
|
+
private readonly loggedFirstAudio;
|
|
189
|
+
/** Per-session diagnostics: have we warned about a text-only response yet? */
|
|
190
|
+
private readonly warnedTextOnly;
|
|
147
191
|
private stopped;
|
|
148
192
|
constructor(opts: GeminiLiveAdapterOptions);
|
|
149
193
|
onAudioOutput(handler: (chunk: Buffer, linkedId: string) => void): void;
|
|
@@ -193,4 +237,12 @@ export declare class GeminiLiveAdapter implements RealtimeSpeechAdapter {
|
|
|
193
237
|
private handleServerMessage;
|
|
194
238
|
private sendMessage;
|
|
195
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Extract the sample rate from a MIME type like `audio/pcm;rate=24000`.
|
|
242
|
+
* Returns `null` when no `rate=` parameter is present so the caller can
|
|
243
|
+
* fall back to a default.
|
|
244
|
+
*/
|
|
245
|
+
export declare function parseRateFromMime(mime: string): number | null;
|
|
246
|
+
/** Peak |sample| value across a Float32Array — for first-chunk diagnostics. */
|
|
247
|
+
export declare function peakAmplitude(samples: Float32Array): number;
|
|
196
248
|
//# 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,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;
|
|
1
|
+
{"version":3,"file":"gemini-live.d.ts","sourceRoot":"","sources":["../../src/realtime/gemini-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,30 @@
|
|
|
41
41
|
*/
|
|
42
42
|
import WebSocket from 'ws';
|
|
43
43
|
import { resample, float32ToSlin16, slin16ToFloat32 } from 'dvgateway-sdk';
|
|
44
|
+
/**
|
|
45
|
+
* Convert an OpenAI-style `toolChoice` into Gemini Live's `tool_config`
|
|
46
|
+
* shape. Pure function — exported for unit tests and any caller that
|
|
47
|
+
* wants to emit the raw protocol object directly (e.g. custom
|
|
48
|
+
* BidiGenerateContent clients).
|
|
49
|
+
*/
|
|
50
|
+
export function buildGeminiToolConfig(choice) {
|
|
51
|
+
if (choice === 'auto') {
|
|
52
|
+
return { function_calling_config: { mode: 'AUTO' } };
|
|
53
|
+
}
|
|
54
|
+
if (choice === 'none') {
|
|
55
|
+
return { function_calling_config: { mode: 'NONE' } };
|
|
56
|
+
}
|
|
57
|
+
if (choice === 'required') {
|
|
58
|
+
return { function_calling_config: { mode: 'ANY' } };
|
|
59
|
+
}
|
|
60
|
+
// { type: 'function', name: 'fn' } — pin to exactly one function.
|
|
61
|
+
return {
|
|
62
|
+
function_calling_config: {
|
|
63
|
+
mode: 'ANY',
|
|
64
|
+
allowed_function_names: [choice.name],
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
44
68
|
// ─── Implementation ──────────────────────────────────────────────────────────
|
|
45
69
|
const AI_STUDIO_URL = 'wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent';
|
|
46
70
|
const GEMINI_OUTPUT_SAMPLE_RATE = 24000;
|
|
@@ -50,6 +74,7 @@ const INPUT_SAMPLES_16K = Math.round(DV_SAMPLE_RATE * INPUT_CHUNK_MS / 1000); //
|
|
|
50
74
|
export class GeminiLiveAdapter {
|
|
51
75
|
opts;
|
|
52
76
|
tools;
|
|
77
|
+
toolChoice;
|
|
53
78
|
audioOutputHandler = null;
|
|
54
79
|
transcriptHandler = null;
|
|
55
80
|
errorHandler = null;
|
|
@@ -62,6 +87,10 @@ export class GeminiLiveAdapter {
|
|
|
62
87
|
outputTranscriptBuf = new Map();
|
|
63
88
|
/** Per-session "caller speaking" state (for synthetic onSpeechActivity events) */
|
|
64
89
|
callerSpeaking = new Map();
|
|
90
|
+
/** Per-session diagnostics: have we logged the first audio chunk yet? */
|
|
91
|
+
loggedFirstAudio = new Set();
|
|
92
|
+
/** Per-session diagnostics: have we warned about a text-only response yet? */
|
|
93
|
+
warnedTextOnly = new Set();
|
|
65
94
|
stopped = false;
|
|
66
95
|
constructor(opts) {
|
|
67
96
|
const endpoint = opts.endpoint ?? 'ai-studio';
|
|
@@ -89,6 +118,10 @@ export class GeminiLiveAdapter {
|
|
|
89
118
|
maxOutputTokens: opts.maxOutputTokens ?? null,
|
|
90
119
|
};
|
|
91
120
|
this.tools = opts.tools ?? [];
|
|
121
|
+
// Default to 'auto' when tools are declared but no explicit choice
|
|
122
|
+
// given — matches OpenAIRealtimeAdapter's behavior so the two
|
|
123
|
+
// adapters stay drop-in-compatible.
|
|
124
|
+
this.toolChoice = opts.toolChoice ?? (this.tools.length > 0 ? 'auto' : undefined);
|
|
92
125
|
}
|
|
93
126
|
onAudioOutput(handler) {
|
|
94
127
|
this.audioOutputHandler = handler;
|
|
@@ -220,6 +253,9 @@ export class GeminiLiveAdapter {
|
|
|
220
253
|
},
|
|
221
254
|
],
|
|
222
255
|
}),
|
|
256
|
+
...(this.tools.length > 0 && this.toolChoice !== undefined && {
|
|
257
|
+
tool_config: buildGeminiToolConfig(this.toolChoice),
|
|
258
|
+
}),
|
|
223
259
|
},
|
|
224
260
|
};
|
|
225
261
|
this.sendMessage(ws, setupMsg);
|
|
@@ -246,6 +282,8 @@ export class GeminiLiveAdapter {
|
|
|
246
282
|
this.inputTranscriptBuf.delete(linkedId);
|
|
247
283
|
this.outputTranscriptBuf.delete(linkedId);
|
|
248
284
|
this.callerSpeaking.delete(linkedId);
|
|
285
|
+
this.loggedFirstAudio.delete(linkedId);
|
|
286
|
+
this.warnedTextOnly.delete(linkedId);
|
|
249
287
|
}
|
|
250
288
|
else {
|
|
251
289
|
this.stopped = true;
|
|
@@ -257,6 +295,8 @@ export class GeminiLiveAdapter {
|
|
|
257
295
|
this.inputTranscriptBuf.delete(id);
|
|
258
296
|
this.outputTranscriptBuf.delete(id);
|
|
259
297
|
this.callerSpeaking.delete(id);
|
|
298
|
+
this.loggedFirstAudio.delete(id);
|
|
299
|
+
this.warnedTextOnly.delete(id);
|
|
260
300
|
}
|
|
261
301
|
}
|
|
262
302
|
}
|
|
@@ -350,25 +390,80 @@ export class GeminiLiveAdapter {
|
|
|
350
390
|
}
|
|
351
391
|
}
|
|
352
392
|
handleServerMessage(msg, linkedId) {
|
|
353
|
-
//
|
|
354
|
-
if (msg.setupComplete) {
|
|
393
|
+
// Setup complete (camelCase or snake_case from the wire)
|
|
394
|
+
if (msg.setupComplete || msg.setup_complete) {
|
|
395
|
+
console.log(`[GeminiLive] session setup complete linkedid=${linkedId}`);
|
|
355
396
|
return;
|
|
356
397
|
}
|
|
357
|
-
// ──
|
|
358
|
-
|
|
359
|
-
|
|
398
|
+
// ── Server content: the main response channel ──
|
|
399
|
+
const sc = msg.serverContent ?? msg.server_content;
|
|
400
|
+
if (sc) {
|
|
401
|
+
const modelTurn = sc.modelTurn ?? sc.model_turn;
|
|
360
402
|
// Audio output (modelTurn.parts[].inlineData)
|
|
361
|
-
if (
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
403
|
+
if (modelTurn?.parts) {
|
|
404
|
+
let audioPartCount = 0;
|
|
405
|
+
let textPartCount = 0;
|
|
406
|
+
for (const part of modelTurn.parts) {
|
|
407
|
+
// Accept both camelCase `inlineData` and snake_case `inline_data`
|
|
408
|
+
// — Google's Live preview has been observed to emit either depending
|
|
409
|
+
// on the backend rollout. Falling back keeps audio flowing through
|
|
410
|
+
// a backend rename that would otherwise silently zero our VU.
|
|
411
|
+
const inline = part.inlineData ?? part.inline_data;
|
|
412
|
+
const b64 = inline?.data;
|
|
413
|
+
if (b64) {
|
|
414
|
+
audioPartCount++;
|
|
415
|
+
// Sample rate may be encoded in the MIME type as
|
|
416
|
+
// `audio/pcm;rate=24000`. Default to 24kHz when unspecified —
|
|
417
|
+
// that matches both half-cascade and native-audio Gemini Live
|
|
418
|
+
// models as documented today, but parsing makes us resilient
|
|
419
|
+
// if Google adds a 16kHz output mode in the future.
|
|
420
|
+
const mime = inline;
|
|
421
|
+
const mimeType = mime?.mimeType ?? mime?.mime_type ?? '';
|
|
422
|
+
const sourceRate = parseRateFromMime(mimeType) ?? GEMINI_OUTPUT_SAMPLE_RATE;
|
|
423
|
+
const pcmSrcBuf = Buffer.from(b64, 'base64');
|
|
424
|
+
const samplesSrc = slin16ToFloat32(pcmSrcBuf);
|
|
425
|
+
const samples16k = sourceRate === DV_SAMPLE_RATE
|
|
426
|
+
? samplesSrc
|
|
427
|
+
: resample(samplesSrc, sourceRate, DV_SAMPLE_RATE);
|
|
368
428
|
const pcm16k = float32ToSlin16(samples16k);
|
|
369
|
-
|
|
429
|
+
// Copy into a fresh Buffer so the bytes survive any later
|
|
430
|
+
// reuse of the slab pool that backs `Buffer.allocUnsafe`
|
|
431
|
+
// inside `float32ToSlin16`. The user's handler may stash the
|
|
432
|
+
// chunk in an async iterable that's read after several more
|
|
433
|
+
// frames are decoded — without this copy those bytes can be
|
|
434
|
+
// overwritten before the WS write actually flushes them.
|
|
435
|
+
const out = Buffer.from(pcm16k);
|
|
436
|
+
// First-chunk diagnostic — surfaces the actual shape of what
|
|
437
|
+
// Gemini sent so a "no audio" report is one log line away
|
|
438
|
+
// from a confirmed root cause.
|
|
439
|
+
if (!this.loggedFirstAudio.has(linkedId)) {
|
|
440
|
+
this.loggedFirstAudio.add(linkedId);
|
|
441
|
+
const peak = peakAmplitude(samplesSrc);
|
|
442
|
+
console.log(`[GeminiLive] first audio chunk linkedid=${linkedId} ` +
|
|
443
|
+
`mime=${JSON.stringify(mimeType)} sourceRate=${sourceRate}Hz ` +
|
|
444
|
+
`srcBytes=${pcmSrcBuf.length} dstBytes=${out.length} peak=${peak.toFixed(4)}`);
|
|
445
|
+
if (peak < 1e-4) {
|
|
446
|
+
console.warn(`[GeminiLive] first audio chunk is silent (peak < -80dBFS) ` +
|
|
447
|
+
`linkedid=${linkedId} — check Gemini model + responseModalities`);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
this.audioOutputHandler?.(out, linkedId);
|
|
370
451
|
}
|
|
371
|
-
|
|
452
|
+
else if (part.text) {
|
|
453
|
+
textPartCount++;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
// If Gemini is sending text but never audio, the call will be
|
|
457
|
+
// silent — surface that exactly once per session so the operator
|
|
458
|
+
// doesn't have to guess between "Gemini broken" / "wiring broken"
|
|
459
|
+
// / "responseModalities ignored".
|
|
460
|
+
if (textPartCount > 0 && audioPartCount === 0 && !this.warnedTextOnly.has(linkedId)) {
|
|
461
|
+
this.warnedTextOnly.add(linkedId);
|
|
462
|
+
console.warn(`[GeminiLive] received TEXT-only response (no inlineData) ` +
|
|
463
|
+
`linkedid=${linkedId} parts=${modelTurn.parts.length} — ` +
|
|
464
|
+
`the model is not producing audio. Likely cause: ` +
|
|
465
|
+
`generationConfig.responseModalities did not reach Gemini. ` +
|
|
466
|
+
`Verify the setup message field naming.`);
|
|
372
467
|
}
|
|
373
468
|
}
|
|
374
469
|
// Interruption: caller barge-in detected by server-side VAD
|
|
@@ -383,8 +478,10 @@ export class GeminiLiveAdapter {
|
|
|
383
478
|
});
|
|
384
479
|
}
|
|
385
480
|
}
|
|
481
|
+
const turnComplete = sc.turnComplete ?? sc.turn_complete;
|
|
482
|
+
const generationComplete = sc.generationComplete ?? sc.generation_complete;
|
|
386
483
|
// Turn complete: AI finished generating → if caller was marked speaking, clear it
|
|
387
|
-
if (
|
|
484
|
+
if (turnComplete === true || generationComplete === true) {
|
|
388
485
|
if (this.callerSpeaking.get(linkedId)) {
|
|
389
486
|
this.callerSpeaking.set(linkedId, false);
|
|
390
487
|
this.speechActivityHandler?.({
|
|
@@ -396,20 +493,19 @@ export class GeminiLiveAdapter {
|
|
|
396
493
|
}
|
|
397
494
|
}
|
|
398
495
|
// Input transcription (caller speech → text, streamed incrementally)
|
|
399
|
-
|
|
496
|
+
const inputT = sc.inputTranscription ?? sc.input_transcription;
|
|
497
|
+
if (inputT?.text != null) {
|
|
400
498
|
const prev = this.inputTranscriptBuf.get(linkedId) ?? '';
|
|
401
|
-
|
|
402
|
-
this.inputTranscriptBuf.set(linkedId, next);
|
|
403
|
-
// Emit as finalized on turnComplete (below); for now just accumulate
|
|
499
|
+
this.inputTranscriptBuf.set(linkedId, prev + inputT.text);
|
|
404
500
|
}
|
|
405
501
|
// Output transcription (assistant speech → text, streamed incrementally)
|
|
406
|
-
|
|
502
|
+
const outputT = sc.outputTranscription ?? sc.output_transcription;
|
|
503
|
+
if (outputT?.text != null) {
|
|
407
504
|
const prev = this.outputTranscriptBuf.get(linkedId) ?? '';
|
|
408
|
-
|
|
409
|
-
this.outputTranscriptBuf.set(linkedId, next);
|
|
505
|
+
this.outputTranscriptBuf.set(linkedId, prev + outputT.text);
|
|
410
506
|
}
|
|
411
507
|
// On turn completion, flush accumulated transcripts as final results
|
|
412
|
-
if (
|
|
508
|
+
if (turnComplete === true) {
|
|
413
509
|
const inputText = this.inputTranscriptBuf.get(linkedId) ?? '';
|
|
414
510
|
if (inputText.trim()) {
|
|
415
511
|
this.transcriptHandler?.({
|
|
@@ -435,8 +531,10 @@ export class GeminiLiveAdapter {
|
|
|
435
531
|
}
|
|
436
532
|
}
|
|
437
533
|
// ── toolCall: model wants to invoke a function ──
|
|
438
|
-
|
|
439
|
-
|
|
534
|
+
const tc = msg.toolCall ?? msg.tool_call;
|
|
535
|
+
const functionCalls = tc?.functionCalls ?? tc?.function_calls;
|
|
536
|
+
if (functionCalls) {
|
|
537
|
+
for (const fc of functionCalls) {
|
|
440
538
|
if (fc.name) {
|
|
441
539
|
this.toolCallHandler?.({
|
|
442
540
|
callId: fc.id ?? '',
|
|
@@ -448,8 +546,10 @@ export class GeminiLiveAdapter {
|
|
|
448
546
|
}
|
|
449
547
|
}
|
|
450
548
|
// ── goAway: session will close soon (quota / deployment boundary) ──
|
|
451
|
-
|
|
452
|
-
|
|
549
|
+
const goAway = msg.goAway ?? msg.go_away;
|
|
550
|
+
if (goAway) {
|
|
551
|
+
const timeLeft = goAway.timeLeft ?? goAway.time_left;
|
|
552
|
+
this.errorHandler?.(new Error(`Gemini Live goAway: session closing in ${timeLeft ?? 'unknown'}`), linkedId);
|
|
453
553
|
}
|
|
454
554
|
}
|
|
455
555
|
sendMessage(ws, obj) {
|
|
@@ -458,4 +558,27 @@ export class GeminiLiveAdapter {
|
|
|
458
558
|
}
|
|
459
559
|
}
|
|
460
560
|
}
|
|
561
|
+
// ─── Helpers exposed for unit tests ───────────────────────────────────────
|
|
562
|
+
/**
|
|
563
|
+
* Extract the sample rate from a MIME type like `audio/pcm;rate=24000`.
|
|
564
|
+
* Returns `null` when no `rate=` parameter is present so the caller can
|
|
565
|
+
* fall back to a default.
|
|
566
|
+
*/
|
|
567
|
+
export function parseRateFromMime(mime) {
|
|
568
|
+
const m = /[;\s]rate=(\d+)/i.exec(mime);
|
|
569
|
+
if (!m)
|
|
570
|
+
return null;
|
|
571
|
+
const n = Number(m[1]);
|
|
572
|
+
return Number.isFinite(n) && n > 0 ? n : null;
|
|
573
|
+
}
|
|
574
|
+
/** Peak |sample| value across a Float32Array — for first-chunk diagnostics. */
|
|
575
|
+
export function peakAmplitude(samples) {
|
|
576
|
+
let peak = 0;
|
|
577
|
+
for (let i = 0; i < samples.length; i++) {
|
|
578
|
+
const v = Math.abs(samples[i] ?? 0);
|
|
579
|
+
if (v > peak)
|
|
580
|
+
peak = v;
|
|
581
|
+
}
|
|
582
|
+
return peak;
|
|
583
|
+
}
|
|
461
584
|
//# 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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-live.test.d.ts","sourceRoot":"","sources":["../../src/realtime/gemini-live.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the GeminiLiveAdapter's `toolChoice` → `tool_config`
|
|
3
|
+
* mapping. These run without a live WebSocket — they exercise the
|
|
4
|
+
* pure mapping function only.
|
|
5
|
+
*/
|
|
6
|
+
import { buildGeminiToolConfig, GeminiLiveAdapter, parseRateFromMime, peakAmplitude, } from './gemini-live.js';
|
|
7
|
+
describe('buildGeminiToolConfig', () => {
|
|
8
|
+
it("maps 'auto' to function_calling_config.mode=AUTO", () => {
|
|
9
|
+
expect(buildGeminiToolConfig('auto')).toEqual({
|
|
10
|
+
function_calling_config: { mode: 'AUTO' },
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
it("maps 'none' to function_calling_config.mode=NONE", () => {
|
|
14
|
+
expect(buildGeminiToolConfig('none')).toEqual({
|
|
15
|
+
function_calling_config: { mode: 'NONE' },
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it("maps 'required' to function_calling_config.mode=ANY", () => {
|
|
19
|
+
// OpenAI calls this 'required'; Gemini's equivalent is mode=ANY.
|
|
20
|
+
expect(buildGeminiToolConfig('required')).toEqual({
|
|
21
|
+
function_calling_config: { mode: 'ANY' },
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
it('maps a pinned function call to mode=ANY + allowed_function_names', () => {
|
|
25
|
+
expect(buildGeminiToolConfig({ type: 'function', name: 'lookup_order' })).toEqual({
|
|
26
|
+
function_calling_config: {
|
|
27
|
+
mode: 'ANY',
|
|
28
|
+
allowed_function_names: ['lookup_order'],
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('GeminiLiveAdapter toolChoice defaults', () => {
|
|
34
|
+
it('defaults to "auto" when tools are declared but toolChoice is omitted', () => {
|
|
35
|
+
const adapter = new GeminiLiveAdapter({
|
|
36
|
+
apiKey: 'test-key',
|
|
37
|
+
tools: [{ name: 'lookup_order', description: 'Get order status' }],
|
|
38
|
+
});
|
|
39
|
+
// Read the private field through a type assertion — this mirrors
|
|
40
|
+
// how OpenAIRealtimeAdapter surfaces the default.
|
|
41
|
+
const choice = adapter.toolChoice;
|
|
42
|
+
expect(choice).toBe('auto');
|
|
43
|
+
});
|
|
44
|
+
it('stays undefined when no tools are declared', () => {
|
|
45
|
+
const adapter = new GeminiLiveAdapter({ apiKey: 'test-key' });
|
|
46
|
+
const choice = adapter.toolChoice;
|
|
47
|
+
expect(choice).toBeUndefined();
|
|
48
|
+
});
|
|
49
|
+
it('respects an explicit toolChoice override', () => {
|
|
50
|
+
const adapter = new GeminiLiveAdapter({
|
|
51
|
+
apiKey: 'test-key',
|
|
52
|
+
tools: [{ name: 'fn1' }, { name: 'fn2' }],
|
|
53
|
+
toolChoice: { type: 'function', name: 'fn1' },
|
|
54
|
+
});
|
|
55
|
+
const choice = adapter.toolChoice;
|
|
56
|
+
expect(choice).toEqual({ type: 'function', name: 'fn1' });
|
|
57
|
+
});
|
|
58
|
+
it('respects "none" to disable tool calling even when tools are declared', () => {
|
|
59
|
+
const adapter = new GeminiLiveAdapter({
|
|
60
|
+
apiKey: 'test-key',
|
|
61
|
+
tools: [{ name: 'fn1' }],
|
|
62
|
+
toolChoice: 'none',
|
|
63
|
+
});
|
|
64
|
+
const choice = adapter.toolChoice;
|
|
65
|
+
expect(choice).toBe('none');
|
|
66
|
+
});
|
|
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
|
+
//# sourceMappingURL=gemini-live.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 } from './gemini-live.js';
|
|
4
|
-
export type { GeminiLiveAdapterOptions, GeminiLiveVoice, GeminiLiveModel, GeminiLiveEndpoint, GeminiLiveTurnDetectionMode, GeminiLiveTurnDetectionOptions, GeminiLiveTool, } from './gemini-live.js';
|
|
3
|
+
export { GeminiLiveAdapter, buildGeminiToolConfig, parseRateFromMime, peakAmplitude, } from './gemini-live.js';
|
|
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 } 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dvgateway-adapters",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.6",
|
|
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",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "tsc",
|
|
37
37
|
"dev": "tsc --watch",
|
|
38
|
+
"test": "jest",
|
|
38
39
|
"typecheck": "tsc --noEmit",
|
|
39
40
|
"prepublishOnly": "npm run build"
|
|
40
41
|
},
|
|
@@ -79,11 +80,14 @@
|
|
|
79
80
|
"ws": "^8.18.0"
|
|
80
81
|
},
|
|
81
82
|
"devDependencies": {
|
|
83
|
+
"@types/jest": "^30.0.0",
|
|
82
84
|
"@types/node": "^20.0.0",
|
|
83
85
|
"@types/ws": "^8.5.10",
|
|
86
|
+
"jest": "^30.3.0",
|
|
87
|
+
"ts-jest": "^29.4.9",
|
|
84
88
|
"typescript": "^5.4.0"
|
|
85
89
|
},
|
|
86
90
|
"peerDependencies": {
|
|
87
|
-
"dvgateway-sdk": "
|
|
91
|
+
"dvgateway-sdk": "file:../dvgateway-sdk"
|
|
88
92
|
}
|
|
89
93
|
}
|