@mastra/voice-google-gemini-live 0.0.0-remove-unused-model-providers-api-20251030210744 → 0.0.0-remove-ai-peer-dep-from-evals-20260105220639
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/CHANGELOG.md +150 -4
- package/README.md +3 -3
- package/dist/docs/README.md +31 -0
- package/dist/docs/SKILL.md +32 -0
- package/dist/docs/SOURCE_MAP.json +6 -0
- package/dist/docs/voice/01-overview.md +1019 -0
- package/dist/docs/voice/02-speech-to-speech.md +106 -0
- package/dist/docs/voice/03-reference.md +303 -0
- package/dist/index.cjs +80 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +18 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +80 -23
- package/dist/index.js.map +1 -1
- package/dist/managers/AudioStreamManager.d.ts +1 -1
- package/dist/managers/AudioStreamManager.d.ts.map +1 -1
- package/dist/managers/EventManager.d.ts +1 -1
- package/dist/managers/EventManager.d.ts.map +1 -1
- package/dist/managers/SessionManager.d.ts +1 -1
- package/dist/managers/SessionManager.d.ts.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +15 -11
package/dist/index.d.ts
CHANGED
|
@@ -320,6 +320,11 @@ export declare class GeminiLiveVoice extends MastraVoice<GeminiLiveVoiceConfig,
|
|
|
320
320
|
* @private
|
|
321
321
|
*/
|
|
322
322
|
private handleToolCall;
|
|
323
|
+
/**
|
|
324
|
+
* Process a single tool call
|
|
325
|
+
* @private
|
|
326
|
+
*/
|
|
327
|
+
private processSingleToolCall;
|
|
323
328
|
/**
|
|
324
329
|
* Handle token usage information
|
|
325
330
|
* @private
|
|
@@ -340,6 +345,16 @@ export declare class GeminiLiveVoice extends MastraVoice<GeminiLiveVoiceConfig,
|
|
|
340
345
|
* @private
|
|
341
346
|
*/
|
|
342
347
|
private determineModality;
|
|
348
|
+
/**
|
|
349
|
+
* Resolve Vertex AI location with sensible default
|
|
350
|
+
* @private
|
|
351
|
+
*/
|
|
352
|
+
private getVertexLocation;
|
|
353
|
+
/**
|
|
354
|
+
* Resolve the correct model identifier for Gemini API or Vertex AI
|
|
355
|
+
* @private
|
|
356
|
+
*/
|
|
357
|
+
private resolveModelIdentifier;
|
|
343
358
|
/**
|
|
344
359
|
* Send initial configuration to Gemini Live API
|
|
345
360
|
* @private
|
|
@@ -385,14 +400,14 @@ export declare class GeminiLiveVoice extends MastraVoice<GeminiLiveVoiceConfig,
|
|
|
385
400
|
* inputSchema: z.object({
|
|
386
401
|
* location: z.string().describe("The city and state, e.g. San Francisco, CA"),
|
|
387
402
|
* }),
|
|
388
|
-
* execute: async (
|
|
403
|
+
* execute: async (inputData) => {
|
|
389
404
|
* // Fetch weather data from an API
|
|
390
405
|
* const response = await fetch(
|
|
391
|
-
* `https://api.weather.com?location=${encodeURIComponent(
|
|
406
|
+
* `https://api.weather.com?location=${encodeURIComponent(inputData.location)}`,
|
|
392
407
|
* );
|
|
393
408
|
* const data = await response.json();
|
|
394
409
|
* return {
|
|
395
|
-
* message: `The current temperature in ${
|
|
410
|
+
* message: `The current temperature in ${inputData.location} is ${data.temperature}°F with ${data.conditions}.`,
|
|
396
411
|
* };
|
|
397
412
|
* },
|
|
398
413
|
* });
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtE,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAMlB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAYjB;;GAEG;AAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,qBAAa,eAAgB,SAAQ,WAAW,CAC9C,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,CACnB;IACC,OAAO,CAAC,EAAE,CAAC,CAAS;IACpB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAgD;IAC7D,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,KAAK,CAAiB;IAG9B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,kBAAkB,CAAqB;IAG/C,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,sBAAsB,CAAC,CAAiB;IAGhD,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAM;IAG7B,OAAO,CAAC,OAAO,CAAwB;IAEvC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAwB9B;;;;OAIG;gBACS,MAAM,GAAE,WAAW,CAAC,qBAAqB,CAAC,GAAG,qBAA0B;IA0DnF;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,EAAE,CAAC,CAAC,SAAS,cAAc,EACzB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,GAC7F,IAAI;IAUP;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,cAAc,EAC1B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,GAC7F,IAAI;IASP;;;;OAIG;IACH,IAAI,CAAC,CAAC,SAAS,cAAc,EAC3B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,GAC7F,IAAI;IAUP;;;OAGG;IACH,OAAO,CAAC,IAAI;IAoCZ;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;OAGG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAS9C;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACG,OAAO,CAAC,EAAE,cAAc,EAAE,GAAE;QAAE,cAAc,CAAC,EAAE,GAAG,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1508,7 +1508,8 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
1508
1508
|
let wsUrl;
|
|
1509
1509
|
let headers = {};
|
|
1510
1510
|
if (this.options.vertexAI) {
|
|
1511
|
-
|
|
1511
|
+
const location = this.getVertexLocation();
|
|
1512
|
+
wsUrl = `wss://${location}-aiplatform.googleapis.com/ws/google.cloud.aiplatform.v1beta1.LlmBidiService/BidiGenerateContent`;
|
|
1512
1513
|
await this.authManager.initialize();
|
|
1513
1514
|
const accessToken = await this.authManager.getAccessToken();
|
|
1514
1515
|
headers = { headers: { Authorization: `Bearer ${accessToken}` } };
|
|
@@ -2257,6 +2258,18 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
2257
2258
|
role: "assistant"
|
|
2258
2259
|
});
|
|
2259
2260
|
}
|
|
2261
|
+
if (part.functionCall) {
|
|
2262
|
+
this.log("Found function call in serverContent.modelTurn.parts", part.functionCall);
|
|
2263
|
+
const toolCallData = {
|
|
2264
|
+
toolCall: {
|
|
2265
|
+
name: part.functionCall.name,
|
|
2266
|
+
args: part.functionCall.args || {},
|
|
2267
|
+
id: part.functionCall.id || randomUUID()
|
|
2268
|
+
}
|
|
2269
|
+
};
|
|
2270
|
+
void this.handleToolCall(toolCallData);
|
|
2271
|
+
continue;
|
|
2272
|
+
}
|
|
2260
2273
|
if (part.inlineData?.mimeType?.includes("audio") && typeof part.inlineData.data === "string") {
|
|
2261
2274
|
try {
|
|
2262
2275
|
const audioData = part.inlineData.data;
|
|
@@ -2331,9 +2344,24 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
2331
2344
|
if (!data.toolCall) {
|
|
2332
2345
|
return;
|
|
2333
2346
|
}
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2347
|
+
let toolCalls = [];
|
|
2348
|
+
if (data.toolCall.functionCalls && Array.isArray(data.toolCall.functionCalls)) {
|
|
2349
|
+
toolCalls = data.toolCall.functionCalls;
|
|
2350
|
+
} else if (data.toolCall.name) {
|
|
2351
|
+
toolCalls = [{ name: data.toolCall.name, args: data.toolCall.args, id: data.toolCall.id }];
|
|
2352
|
+
}
|
|
2353
|
+
for (const toolCall of toolCalls) {
|
|
2354
|
+
const toolName = toolCall.name || "";
|
|
2355
|
+
const toolArgs = toolCall.args || {};
|
|
2356
|
+
const toolId = toolCall.id || randomUUID();
|
|
2357
|
+
await this.processSingleToolCall(toolName, toolArgs, toolId);
|
|
2358
|
+
}
|
|
2359
|
+
}
|
|
2360
|
+
/**
|
|
2361
|
+
* Process a single tool call
|
|
2362
|
+
* @private
|
|
2363
|
+
*/
|
|
2364
|
+
async processSingleToolCall(toolName, toolArgs, toolId) {
|
|
2337
2365
|
this.log("Processing tool call", { toolName, toolArgs, toolId });
|
|
2338
2366
|
this.emit("toolCall", {
|
|
2339
2367
|
name: toolName,
|
|
@@ -2353,36 +2381,38 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
2353
2381
|
let result;
|
|
2354
2382
|
if (tool.execute) {
|
|
2355
2383
|
this.log("Executing tool", { toolName, toolArgs });
|
|
2356
|
-
result = await tool.execute(
|
|
2357
|
-
{ context: toolArgs, requestContext: this.requestContext },
|
|
2358
|
-
{
|
|
2359
|
-
toolCallId: toolId,
|
|
2360
|
-
messages: []
|
|
2361
|
-
}
|
|
2362
|
-
);
|
|
2384
|
+
result = await tool.execute(toolArgs, { requestContext: this.requestContext });
|
|
2363
2385
|
this.log("Tool executed successfully", { toolName, result });
|
|
2364
2386
|
} else {
|
|
2365
2387
|
this.log("Tool has no execute function", { toolName });
|
|
2366
2388
|
result = { error: "Tool has no execute function" };
|
|
2367
2389
|
}
|
|
2368
2390
|
const toolResultMessage = {
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2391
|
+
toolResponse: {
|
|
2392
|
+
functionResponses: [
|
|
2393
|
+
{
|
|
2394
|
+
id: toolId,
|
|
2395
|
+
response: result
|
|
2396
|
+
}
|
|
2397
|
+
]
|
|
2372
2398
|
}
|
|
2373
2399
|
};
|
|
2374
|
-
this.sendEvent("
|
|
2400
|
+
this.sendEvent("toolResponse", toolResultMessage);
|
|
2375
2401
|
this.log("Tool result sent", { toolName, toolId, result });
|
|
2376
2402
|
} catch (error) {
|
|
2377
2403
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
2378
2404
|
this.log("Tool execution failed", { toolName, error: errorMessage });
|
|
2379
2405
|
const errorResultMessage = {
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2406
|
+
toolResponse: {
|
|
2407
|
+
functionResponses: [
|
|
2408
|
+
{
|
|
2409
|
+
id: toolId,
|
|
2410
|
+
response: { error: errorMessage }
|
|
2411
|
+
}
|
|
2412
|
+
]
|
|
2383
2413
|
}
|
|
2384
2414
|
};
|
|
2385
|
-
this.sendEvent("
|
|
2415
|
+
this.sendEvent("toolResponse", errorResultMessage);
|
|
2386
2416
|
this.createAndEmitError("tool_execution_error" /* TOOL_EXECUTION_ERROR */, `Tool execution failed: ${errorMessage}`, {
|
|
2387
2417
|
toolName,
|
|
2388
2418
|
toolArgs,
|
|
@@ -2442,6 +2472,31 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
2442
2472
|
}
|
|
2443
2473
|
return "text";
|
|
2444
2474
|
}
|
|
2475
|
+
/**
|
|
2476
|
+
* Resolve Vertex AI location with sensible default
|
|
2477
|
+
* @private
|
|
2478
|
+
*/
|
|
2479
|
+
getVertexLocation() {
|
|
2480
|
+
return this.options.location?.trim() || "us-central1";
|
|
2481
|
+
}
|
|
2482
|
+
/**
|
|
2483
|
+
* Resolve the correct model identifier for Gemini API or Vertex AI
|
|
2484
|
+
* @private
|
|
2485
|
+
*/
|
|
2486
|
+
resolveModelIdentifier() {
|
|
2487
|
+
const model = this.options.model ?? DEFAULT_MODEL;
|
|
2488
|
+
if (!this.options.vertexAI) {
|
|
2489
|
+
return `models/${model}`;
|
|
2490
|
+
}
|
|
2491
|
+
if (!this.options.project) {
|
|
2492
|
+
throw this.createAndEmitError(
|
|
2493
|
+
"project_id_missing" /* PROJECT_ID_MISSING */,
|
|
2494
|
+
"Google Cloud project ID is required when using Vertex AI."
|
|
2495
|
+
);
|
|
2496
|
+
}
|
|
2497
|
+
const location = this.getVertexLocation();
|
|
2498
|
+
return `projects/${this.options.project}/locations/${location}/publishers/google/models/${model}`;
|
|
2499
|
+
}
|
|
2445
2500
|
/**
|
|
2446
2501
|
* Send initial configuration to Gemini Live API
|
|
2447
2502
|
* @private
|
|
@@ -2452,7 +2507,7 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
2452
2507
|
}
|
|
2453
2508
|
const setupMessage = {
|
|
2454
2509
|
setup: {
|
|
2455
|
-
model:
|
|
2510
|
+
model: this.resolveModelIdentifier()
|
|
2456
2511
|
}
|
|
2457
2512
|
};
|
|
2458
2513
|
if (this.options.instructions) {
|
|
@@ -2601,6 +2656,8 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
2601
2656
|
message = data;
|
|
2602
2657
|
} else if (type === "realtime_input" && data.realtime_input) {
|
|
2603
2658
|
message = data;
|
|
2659
|
+
} else if (type === "toolResponse" && data.toolResponse) {
|
|
2660
|
+
message = data;
|
|
2604
2661
|
} else if (type === "session.update" && data.session) {
|
|
2605
2662
|
message = data;
|
|
2606
2663
|
} else {
|
|
@@ -2626,14 +2683,14 @@ var GeminiLiveVoice = class _GeminiLiveVoice extends MastraVoice {
|
|
|
2626
2683
|
* inputSchema: z.object({
|
|
2627
2684
|
* location: z.string().describe("The city and state, e.g. San Francisco, CA"),
|
|
2628
2685
|
* }),
|
|
2629
|
-
* execute: async (
|
|
2686
|
+
* execute: async (inputData) => {
|
|
2630
2687
|
* // Fetch weather data from an API
|
|
2631
2688
|
* const response = await fetch(
|
|
2632
|
-
* `https://api.weather.com?location=${encodeURIComponent(
|
|
2689
|
+
* `https://api.weather.com?location=${encodeURIComponent(inputData.location)}`,
|
|
2633
2690
|
* );
|
|
2634
2691
|
* const data = await response.json();
|
|
2635
2692
|
* return {
|
|
2636
|
-
* message: `The current temperature in ${
|
|
2693
|
+
* message: `The current temperature in ${inputData.location} is ${data.temperature}°F with ${data.conditions}.`,
|
|
2637
2694
|
* };
|
|
2638
2695
|
* },
|
|
2639
2696
|
* });
|