@mastra/voice-google 0.14.2 → 0.14.3
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/_types/@internal_voice/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +253 -42
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +69 -2
- package/dist/_types/@internal_voice/dist/_types/zod/v3/ZodError.d.ts +1 -1
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/checks.d.ts +1 -1
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/compat.d.ts +9 -11
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/deep-partial.d.ts +14 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/errors.d.ts +3 -4
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/external.d.ts +5 -2
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/in-out.d.ts +8 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/index.d.ts +1 -2
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/iso.d.ts +2 -17
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/parse.d.ts +17 -4
- package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/schemas.d.ts +68 -19
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/api.d.ts +22 -12
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/checks.d.ts +29 -13
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/compile.d.ts +65 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/core.d.ts +16 -4
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/doc.d.ts +3 -1
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/errors.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/index.d.ts +3 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema-generator.d.ts +2 -2
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema-processors.d.ts +16 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema.d.ts +2 -1
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/memoizer.d.ts +15 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/parse.d.ts +14 -11
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/regexes.d.ts +5 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/schemas.d.ts +126 -35
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/to-json-schema.d.ts +45 -5
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/util.d.ts +81 -1
- package/dist/_types/@internal_voice/dist/_types/zod/v4/core/versions.d.ts +1 -1
- package/dist/_types/@internal_voice/dist/_types/zod/v4/index.d.cts +2 -2
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/bn.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ckb.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/gu.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/hi.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/index.d.ts +11 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/kn.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ne.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/nn.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/pt-BR.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/sk.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/tg.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/tk.d.ts +4 -0
- package/dist/_types/@internal_voice/dist/index.d.ts +2 -2
- package/dist/_types/@internal_voice/dist/voice/aisdk/speech.d.ts +1 -1
- package/dist/_types/@internal_voice/dist/voice/aisdk/transcription.d.ts +1 -1
- package/dist/_types/@internal_voice/dist/voice/composite-voice.d.ts +2 -2
- package/dist/_types/@internal_voice/dist/voice/voice.d.ts +2 -2
- package/dist/_types/@internal_voice/package.json +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/integrations-voice-google.md +6 -0
- package/dist/docs/references/reference-voice-overview.md +25 -0
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +9 -10
- package/dist/_types/@internal_voice/dist/_types/zod/v3/index.d.cts +0 -4
|
@@ -2,7 +2,9 @@ export { default as ar } from "./ar.js";
|
|
|
2
2
|
export { default as az } from "./az.js";
|
|
3
3
|
export { default as be } from "./be.js";
|
|
4
4
|
export { default as bg } from "./bg.js";
|
|
5
|
+
export { default as bn } from "./bn.js";
|
|
5
6
|
export { default as ca } from "./ca.js";
|
|
7
|
+
export { default as ckb } from "./ckb.js";
|
|
6
8
|
export { default as cs } from "./cs.js";
|
|
7
9
|
export { default as da } from "./da.js";
|
|
8
10
|
export { default as de } from "./de.js";
|
|
@@ -14,7 +16,9 @@ export { default as fa } from "./fa.js";
|
|
|
14
16
|
export { default as fi } from "./fi.js";
|
|
15
17
|
export { default as fr } from "./fr.js";
|
|
16
18
|
export { default as frCA } from "./fr-CA.js";
|
|
19
|
+
export { default as gu } from "./gu.js";
|
|
17
20
|
export { default as he } from "./he.js";
|
|
21
|
+
export { default as hi } from "./hi.js";
|
|
18
22
|
export { default as hr } from "./hr.js";
|
|
19
23
|
export { default as hu } from "./hu.js";
|
|
20
24
|
export { default as hy } from "./hy.js";
|
|
@@ -25,22 +29,29 @@ export { default as ja } from "./ja.js";
|
|
|
25
29
|
export { default as ka } from "./ka.js";
|
|
26
30
|
export { default as kh } from "./kh.js";
|
|
27
31
|
export { default as km } from "./km.js";
|
|
32
|
+
export { default as kn } from "./kn.js";
|
|
28
33
|
export { default as ko } from "./ko.js";
|
|
29
34
|
export { default as lt } from "./lt.js";
|
|
30
35
|
export { default as mk } from "./mk.js";
|
|
31
36
|
export { default as ms } from "./ms.js";
|
|
37
|
+
export { default as ne } from "./ne.js";
|
|
32
38
|
export { default as nl } from "./nl.js";
|
|
39
|
+
export { default as nn } from "./nn.js";
|
|
33
40
|
export { default as no } from "./no.js";
|
|
34
41
|
export { default as ota } from "./ota.js";
|
|
35
42
|
export { default as ps } from "./ps.js";
|
|
36
43
|
export { default as pl } from "./pl.js";
|
|
37
44
|
export { default as pt } from "./pt.js";
|
|
45
|
+
export { default as ptBR } from "./pt-BR.js";
|
|
38
46
|
export { default as ro } from "./ro.js";
|
|
39
47
|
export { default as ru } from "./ru.js";
|
|
48
|
+
export { default as sk } from "./sk.js";
|
|
40
49
|
export { default as sl } from "./sl.js";
|
|
41
50
|
export { default as sv } from "./sv.js";
|
|
42
51
|
export { default as ta } from "./ta.js";
|
|
52
|
+
export { default as tg } from "./tg.js";
|
|
43
53
|
export { default as th } from "./th.js";
|
|
54
|
+
export { default as tk } from "./tk.js";
|
|
44
55
|
export { default as tr } from "./tr.js";
|
|
45
56
|
export { default as ua } from "./ua.js";
|
|
46
57
|
export { default as uk } from "./uk.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './voice/index.js';
|
|
2
|
-
export type { RequestContext } from './_types/@internal_core/dist/request-context/index.
|
|
3
|
-
export type { ToolsInput } from './_types/@internal_core/dist/types/index.
|
|
2
|
+
export type { RequestContext } from './_types/@internal_core/dist/request-context/index.js';
|
|
3
|
+
export type { ToolsInput } from './_types/@internal_core/dist/types/index.js';
|
|
4
4
|
type InferToolInput<TInputSchema> = TInputSchema extends {
|
|
5
5
|
_input: infer TInput;
|
|
6
6
|
} ? TInput : unknown;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SpeechModel } from '../../_types/@internal_ai-sdk-v5/dist/index.
|
|
1
|
+
import type { SpeechModel } from '../../_types/@internal_ai-sdk-v5/dist/index.js';
|
|
2
2
|
import { MastraVoice } from '../voice.js';
|
|
3
3
|
export declare class AISDKSpeech extends MastraVoice {
|
|
4
4
|
private model;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TranscriptionModel } from '../../_types/@internal_ai-sdk-v5/dist/index.
|
|
1
|
+
import type { TranscriptionModel } from '../../_types/@internal_ai-sdk-v5/dist/index.js';
|
|
2
2
|
import { MastraVoice } from '../voice.js';
|
|
3
3
|
export declare class AISDKTranscription extends MastraVoice {
|
|
4
4
|
private model;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { TranscriptionModel, SpeechModel } from '../_types/@internal_ai-sdk-v5/dist/index.
|
|
2
|
-
import type { ToolsInput } from '../_types/@internal_core/dist/types/index.
|
|
1
|
+
import type { TranscriptionModel, SpeechModel } from '../_types/@internal_ai-sdk-v5/dist/index.js';
|
|
2
|
+
import type { ToolsInput } from '../_types/@internal_core/dist/types/index.js';
|
|
3
3
|
import { MastraVoice } from './voice.js';
|
|
4
4
|
import type { VoiceEventType, VoiceEventMap } from '.';
|
|
5
5
|
export declare class CompositeVoice extends MastraVoice<unknown, unknown, unknown, ToolsInput, VoiceEventMap> {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MastraBase } from '../_types/@internal_core/dist/base/index.
|
|
2
|
-
import type { ToolsInput } from '../_types/@internal_core/dist/types/index.
|
|
1
|
+
import { MastraBase } from '../_types/@internal_core/dist/base/index.js';
|
|
2
|
+
import type { ToolsInput } from '../_types/@internal_core/dist/types/index.js';
|
|
3
3
|
export type VoiceEventType = 'speaking' | 'writing' | 'error' | string;
|
|
4
4
|
export interface VoiceEventMap {
|
|
5
5
|
speaker: NodeJS.ReadableStream;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: mastra-voice-google
|
|
|
3
3
|
description: Documentation for @mastra/voice-google. Use when working with @mastra/voice-google APIs, configuration, or implementation.
|
|
4
4
|
metadata:
|
|
5
5
|
package: "@mastra/voice-google"
|
|
6
|
-
version: "0.14.
|
|
6
|
+
version: "0.14.3"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
@@ -397,6 +397,12 @@ voice.close()
|
|
|
397
397
|
|
|
398
398
|
**sessionConfig.contextCompression** (`boolean`): Enable automatic context compression.
|
|
399
399
|
|
|
400
|
+
**inputAudioTranscription** (`GeminiAudioTranscriptionConfig`): Transcription settings for the user's speech. Set languageCodes to BCP-47 hints (for example \['es-ES']) so short or accented utterances aren't transcribed in the wrong language. Without hints, the server auto-detects the language. Applied when the session connects.
|
|
401
|
+
|
|
402
|
+
**inputAudioTranscription.languageCodes** (`string[]`): BCP-47 language codes present in the audio.
|
|
403
|
+
|
|
404
|
+
**outputAudioTranscription** (`GeminiAudioTranscriptionConfig`): Transcription settings for the model's speech. Takes the same languageCodes hints as inputAudioTranscription. Applied when the session connects.
|
|
405
|
+
|
|
400
406
|
**debug** (`boolean`): Enable debug logging for troubleshooting. (Default: `false`)
|
|
401
407
|
|
|
402
408
|
### Methods
|
|
@@ -882,6 +882,18 @@ const voice = new DeepgramVoice({
|
|
|
882
882
|
|
|
883
883
|
Visit the [Deepgram Voice Reference](https://mastra.ai/integrations/voice/deepgram) for more information on the Deepgram voice provider.
|
|
884
884
|
|
|
885
|
+
**Gladia**:
|
|
886
|
+
|
|
887
|
+
```typescript
|
|
888
|
+
const voice = new GladiaVoice({
|
|
889
|
+
listeningModel: {
|
|
890
|
+
apiKey: process.env.GLADIA_API_KEY,
|
|
891
|
+
},
|
|
892
|
+
})
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
Visit the [Gladia Voice integration](https://mastra.ai/integrations/voice/gladia) for configuration and transcription options.
|
|
896
|
+
|
|
885
897
|
**Inworld**:
|
|
886
898
|
|
|
887
899
|
```typescript
|
|
@@ -965,6 +977,19 @@ const voice = new MurfVoice({
|
|
|
965
977
|
|
|
966
978
|
Visit the [Murf Voice Reference](https://mastra.ai/integrations/voice/murf) for more information on the Murf voice provider.
|
|
967
979
|
|
|
980
|
+
**ModelsLab**:
|
|
981
|
+
|
|
982
|
+
```typescript
|
|
983
|
+
const voice = new ModelsLabVoice({
|
|
984
|
+
speechModel: {
|
|
985
|
+
apiKey: process.env.MODELSLAB_API_KEY,
|
|
986
|
+
},
|
|
987
|
+
speaker: '5',
|
|
988
|
+
})
|
|
989
|
+
```
|
|
990
|
+
|
|
991
|
+
Visit the [ModelsLab Voice integration](https://mastra.ai/integrations/voice/modelslab) for configuration and synthesis options.
|
|
992
|
+
|
|
968
993
|
**OpenAI Realtime**:
|
|
969
994
|
|
|
970
995
|
```typescript
|
package/dist/index.cjs
CHANGED
|
@@ -535,9 +535,9 @@ var GoogleVoice = class extends MastraVoice {
|
|
|
535
535
|
languageCodes: voice.languageCodes
|
|
536
536
|
}));
|
|
537
537
|
}
|
|
538
|
-
async streamToString(stream
|
|
538
|
+
async streamToString(stream) {
|
|
539
539
|
const chunks = [];
|
|
540
|
-
for await (const chunk of stream
|
|
540
|
+
for await (const chunk of stream) if (typeof chunk === "string") chunks.push(Buffer.from(chunk));
|
|
541
541
|
else chunks.push(chunk);
|
|
542
542
|
return Buffer.concat(chunks).toString("utf-8");
|
|
543
543
|
}
|
|
@@ -570,9 +570,9 @@ var GoogleVoice = class extends MastraVoice {
|
|
|
570
570
|
const [response] = await this.ttsClient.synthesizeSpeech(request);
|
|
571
571
|
if (!response.audioContent) throw new Error("No audio content returned.");
|
|
572
572
|
if (typeof response.audioContent === "string") throw new Error("Audio content is a string.");
|
|
573
|
-
const stream$
|
|
574
|
-
stream$
|
|
575
|
-
return stream$
|
|
573
|
+
const stream$1 = new stream.PassThrough();
|
|
574
|
+
stream$1.end(Buffer.from(response.audioContent));
|
|
575
|
+
return stream$1;
|
|
576
576
|
}
|
|
577
577
|
/**
|
|
578
578
|
* Checks if listening capabilities are enabled.
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["#adapterContext","#correlate","#export","#rawConfig","TextToSpeechClient","SpeechClient","v2","stream","PassThrough"],"sources":["../../../packages/_internal-core/dist/logger/index.js","../../../packages/_internal-core/dist/base/index.js","../../../packages/_internals/voice/dist/aisdk-C_K-VCwq.js","../src/index.ts"],"sourcesContent":["import { Transform } from \"stream\";\n//#region src/logger/adapter.ts\nfunction isAdaptableLogger(logger) {\n\treturn typeof logger.__attachObservability === \"function\";\n}\n/**\n* Export a tracked exception through the adapter sink, mirroring the\n* DualLogger dual-write shape (`errorId`/`domain`/`category`/`details`/`cause`\n* when present on a MastraError-like value). Never throws into the caller.\n*/\nfunction exportTrackedException(ctx, error, metadata) {\n\tif (!ctx?.options.export) return;\n\ttry {\n\t\tconst mastraError = error;\n\t\tctx.getLogSink()?.error(error.message, {\n\t\t\t...mastraError.id !== void 0 ? { errorId: mastraError.id } : {},\n\t\t\t...mastraError.domain !== void 0 ? { domain: mastraError.domain } : {},\n\t\t\t...mastraError.category !== void 0 ? { category: mastraError.category } : {},\n\t\t\t...mastraError.details !== void 0 ? { details: mastraError.details } : {},\n\t\t\t...error.cause instanceof Error ? { cause: error.cause.message } : {},\n\t\t\t...metadata\n\t\t});\n\t} catch {}\n}\n/**\n* Adapt IMastraLogger's variadic args into the structured `data` payload of\n* an exported log record. Extracts the first plain object as data,\n* serializes an Error arg, and collects remaining primitives under `args`\n* so the derived record preserves all context from the native call.\n*/\nfunction buildLogRecordData(args) {\n\tconst objectData = args.find((arg) => arg !== null && typeof arg === \"object\" && !Array.isArray(arg) && !(arg instanceof Error));\n\tconst errorArg = args.find((arg) => arg instanceof Error);\n\tconst extraArgs = args.filter((arg) => arg !== objectData && arg !== errorArg);\n\tif (!objectData && !errorArg && extraArgs.length === 0) return void 0;\n\treturn {\n\t\t...objectData ?? {},\n\t\t...errorArg ? { error: {\n\t\t\tname: errorArg.name,\n\t\t\tmessage: errorArg.message,\n\t\t\tstack: errorArg.stack\n\t\t} } : {},\n\t\t...extraArgs.length > 0 ? { args: extraArgs } : {}\n\t};\n}\n//#endregion\n//#region src/logger/index.ts\nconst RegisteredLogger = {\n\tAGENT: \"AGENT\",\n\tOBSERVABILITY: \"OBSERVABILITY\",\n\tAUTH: \"AUTH\",\n\tBROWSER: \"BROWSER\",\n\tNETWORK: \"NETWORK\",\n\tWORKFLOW: \"WORKFLOW\",\n\tLLM: \"LLM\",\n\tTTS: \"TTS\",\n\tVOICE: \"VOICE\",\n\tVECTOR: \"VECTOR\",\n\tBUNDLER: \"BUNDLER\",\n\tDEPLOYER: \"DEPLOYER\",\n\tMEMORY: \"MEMORY\",\n\tSTORAGE: \"STORAGE\",\n\tEMBEDDINGS: \"EMBEDDINGS\",\n\tMCP_SERVER: \"MCP_SERVER\",\n\tSERVER_CACHE: \"SERVER_CACHE\",\n\tSERVER: \"SERVER\",\n\tWORKSPACE: \"WORKSPACE\",\n\tCHANNEL: \"CHANNEL\"\n};\nconst LogLevel = {\n\tDEBUG: \"debug\",\n\tINFO: \"info\",\n\tWARN: \"warn\",\n\tERROR: \"error\",\n\tNONE: \"silent\"\n};\nvar LoggerTransport = class extends Transform {\n\tconstructor(opts = {}) {\n\t\tsuper({\n\t\t\t...opts,\n\t\t\tobjectMode: true\n\t\t});\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogs(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nconst createCustomTransport = (stream, listLogs, listLogsByRunId) => {\n\tlet transport = stream;\n\tif (listLogs) transport.listLogs = listLogs;\n\tif (listLogsByRunId) transport.listLogsByRunId = listLogsByRunId;\n\treturn transport;\n};\nvar MastraLogger = class {\n\tname;\n\tlevel;\n\ttransports;\n\tconstructor(options = {}) {\n\t\tthis.name = options.name || \"Mastra\";\n\t\tthis.level = options.level || LogLevel.ERROR;\n\t\tthis.transports = new Map(Object.entries(options.transports || {}));\n\t}\n\tgetTransports() {\n\t\treturn this.transports;\n\t}\n\ttrackException(_error, _metadata) {}\n\tasync listLogs(transportId, params) {\n\t\tif (!transportId || !this.transports.has(transportId)) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogs?.(params) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId({ transportId, runId, fromDate, toDate, logLevel, filters, page, perPage }) {\n\t\tif (!transportId || !this.transports.has(transportId) || !runId) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogsByRunId?.({\n\t\t\trunId,\n\t\t\tfromDate,\n\t\t\ttoDate,\n\t\t\tlogLevel,\n\t\t\tfilters,\n\t\t\tpage,\n\t\t\tperPage\n\t\t}) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nvar ConsoleLogger = class ConsoleLogger extends MastraLogger {\n\tcomponent;\n\tfilter;\n\t#adapterContext;\n\tconstructor(options = {}) {\n\t\tsuper(options);\n\t\tthis.component = options.component;\n\t\tthis.filter = options.filter;\n\t}\n\t/**\n\t* Adapter hook (see `AdaptableLogger`): enables native trace correlation\n\t* (trace_id/span_id appended to console output) and observability export\n\t* derived from the same record. Called by Mastra during setup.\n\t*/\n\t__attachObservability(ctx) {\n\t\tthis.#adapterContext = ctx;\n\t}\n\tchild(componentOrBindings) {\n\t\tconst component = typeof componentOrBindings === \"string\" ? componentOrBindings : componentOrBindings?.component ?? this.component;\n\t\tconst child = new ConsoleLogger({\n\t\t\tname: this.name,\n\t\t\tlevel: this.level,\n\t\t\tcomponent,\n\t\t\tfilter: this.filter\n\t\t});\n\t\tif (this.#adapterContext) child.__attachObservability(this.#adapterContext);\n\t\treturn child;\n\t}\n\t/**\n\t* Native-record correlation: when a span is active, append the trace\n\t* fields object to the console args so every destination sees them.\n\t*/\n\t#correlate(args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.correlation) return args;\n\t\ttry {\n\t\t\tconst fields = ctx.resolveTraceFields();\n\t\t\treturn fields ? [...args, fields] : args;\n\t\t} catch {\n\t\t\treturn args;\n\t\t}\n\t}\n\t/**\n\t* Export the record derived from the same native call to observability.\n\t* Mirrors DualLogger semantics: export is independent of the console\n\t* level filter, and never throws into the caller.\n\t*/\n\t#export(level, message, args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.export) return;\n\t\ttry {\n\t\t\tctx.getLogSink()?.[level](message, buildLogRecordData(args));\n\t\t} catch {}\n\t}\n\tshouldLog(level, message, args) {\n\t\tif (!this.filter) return true;\n\t\ttry {\n\t\t\treturn this.filter({\n\t\t\t\tcomponent: this.component,\n\t\t\t\tlevel,\n\t\t\t\tmessage,\n\t\t\t\targs\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconsole.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n\t\t\treturn true;\n\t\t}\n\t}\n\tprefix() {\n\t\treturn this.component ? `[${this.component}] ` : \"\";\n\t}\n\tdebug(message, ...args) {\n\t\tif (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"debug\", message, args);\n\t}\n\tinfo(message, ...args) {\n\t\tif ((this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.INFO, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"info\", message, args);\n\t}\n\twarn(message, ...args) {\n\t\tif ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) console.warn(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"warn\", message, args);\n\t}\n\terror(message, ...args) {\n\t\tif ((this.level === LogLevel.ERROR || this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.ERROR, message, args)) console.error(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"error\", message, args);\n\t}\n\ttrackException(error, metadata) {\n\t\texportTrackedException(this.#adapterContext, error, metadata);\n\t}\n\tasync listLogs(_transportId, _params) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _params?.page ?? 1,\n\t\t\tperPage: _params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args.page ?? 1,\n\t\t\tperPage: _args.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\n//#endregion\nexport { ConsoleLogger, LogLevel, LoggerTransport, MastraLogger, RegisteredLogger, buildLogRecordData, createCustomTransport, exportTrackedException, isAdaptableLogger };\n\n//# sourceMappingURL=index.js.map","import { ConsoleLogger, RegisteredLogger } from \"../logger/index.js\";\n//#region src/base/MastraBase.ts\nvar MastraBase = class {\n\tcomponent = RegisteredLogger.LLM;\n\tlogger;\n\tname;\n\t#rawConfig;\n\tconstructor({ component, name, rawConfig }) {\n\t\tthis.component = component || RegisteredLogger.LLM;\n\t\tthis.name = name;\n\t\tthis.#rawConfig = rawConfig;\n\t\tthis.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n\t}\n\t/**\n\t* Returns the raw storage configuration this primitive was created from,\n\t* or undefined if it was created from code.\n\t*/\n\ttoRawConfig() {\n\t\treturn this.#rawConfig;\n\t}\n\t/**\n\t* Sets the raw storage configuration for this primitive.\n\t* @internal\n\t*/\n\t__setRawConfig(rawConfig) {\n\t\tthis.#rawConfig = rawConfig;\n\t}\n\t/**\n\t* Set the logger for the agent\n\t* @param logger\n\t*/\n\t__setLogger(logger) {\n\t\tthis.logger = \"child\" in logger && typeof logger.child === \"function\" ? logger.child({ component: this.component }) : logger;\n\t}\n};\n//#endregion\nexport { MastraBase };\n\n//# sourceMappingURL=index.js.map","import { MastraBase } from \"@internal/core/base\";\nimport { PassThrough } from \"stream\";\nimport { experimental_generateSpeech, experimental_transcribe } from \"@internal/ai-sdk-v5\";\n//#region src/voice/voice.ts\nvar MastraVoice = class extends MastraBase {\n\tlisteningModel;\n\tspeechModel;\n\tspeaker;\n\trealtimeConfig;\n\tconstructor({ listeningModel, speechModel, speaker, realtimeConfig, name } = {}) {\n\t\tsuper({\n\t\t\tcomponent: \"VOICE\",\n\t\t\tname\n\t\t});\n\t\tthis.listeningModel = listeningModel;\n\t\tthis.speechModel = speechModel;\n\t\tthis.speaker = speaker;\n\t\tthis.realtimeConfig = realtimeConfig;\n\t}\n\t/**\n\t* Custom serialization for tracing/observability spans.\n\t* Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n\t* and any provider-specific state held by subclasses. Subclasses that\n\t* need to expose additional non-sensitive fields can override.\n\t*/\n\tserializeForSpan() {\n\t\treturn {\n\t\t\tcomponent: \"VOICE\",\n\t\t\tname: this.name,\n\t\t\tspeaker: this.speaker,\n\t\t\tlisteningModel: this.listeningModel ? { name: this.listeningModel.name } : void 0,\n\t\t\tspeechModel: this.speechModel ? { name: this.speechModel.name } : void 0,\n\t\t\trealtimeModel: this.realtimeConfig?.model\n\t\t};\n\t}\n\tupdateConfig(_options) {\n\t\tthis.logger.debug(\"updateConfig not implemented by this voice provider\");\n\t}\n\t/**\n\t* Initializes a WebSocket or WebRTC connection for real-time communication\n\t* @returns Promise that resolves when the connection is established\n\t*/\n\tasync connect(_options) {\n\t\tthis.logger.debug(\"connect not implemented by this voice provider\");\n\t}\n\t/**\n\t* Relay audio data to the voice provider for real-time processing\n\t* @param audioData Audio data to relay\n\t*/\n\tasync send(_audioData) {\n\t\tthis.logger.debug(\"relay not implemented by this voice provider\");\n\t}\n\t/**\n\t* Trigger voice providers to respond\n\t*/\n\tasync answer(_options) {\n\t\tthis.logger.debug(\"answer not implemented by this voice provider\");\n\t}\n\t/**\n\t* Equip the voice provider with instructions\n\t* @param instructions Instructions to add\n\t*/\n\taddInstructions(_instructions) {}\n\t/**\n\t* Equip the voice provider with tools\n\t* @param tools Array of tools to add\n\t*/\n\taddTools(_tools) {}\n\t/**\n\t* Disconnect from the WebSocket or WebRTC connection\n\t*/\n\tclose() {\n\t\tthis.logger.debug(\"close not implemented by this voice provider\");\n\t}\n\t/**\n\t* Register an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function that receives event data\n\t*/\n\ton(_event, _callback) {\n\t\tthis.logger.debug(\"on not implemented by this voice provider\");\n\t}\n\t/**\n\t* Remove an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function to remove\n\t*/\n\toff(_event, _callback) {\n\t\tthis.logger.debug(\"off not implemented by this voice provider\");\n\t}\n\t/**\n\t* Get available speakers/voices\n\t* @returns Array of available voice IDs and their metadata\n\t*/\n\tgetSpeakers() {\n\t\tthis.logger.debug(\"getSpeakers not implemented by this voice provider\");\n\t\treturn Promise.resolve([]);\n\t}\n\t/**\n\t* Get available speakers/voices\n\t* @returns Array of available voice IDs and their metadata\n\t*/\n\tgetListener() {\n\t\tthis.logger.debug(\"getListener not implemented by this voice provider\");\n\t\treturn Promise.resolve({ enabled: false });\n\t}\n};\n//#endregion\n//#region src/voice/aisdk/speech.ts\nvar AISDKSpeech = class extends MastraVoice {\n\tmodel;\n\tdefaultVoice;\n\tconstructor(model, options) {\n\t\tsuper({ name: \"ai-sdk-speech\" });\n\t\tthis.model = model;\n\t\tthis.defaultVoice = options?.voice;\n\t}\n\tasync speak(input, options) {\n\t\tconst text = typeof input === \"string\" ? input : await this.streamToText(input);\n\t\tconst result = await experimental_generateSpeech({\n\t\t\tmodel: this.model,\n\t\t\ttext,\n\t\t\tvoice: options?.speaker || this.defaultVoice,\n\t\t\tlanguage: options?.language,\n\t\t\tproviderOptions: options?.providerOptions,\n\t\t\tabortSignal: options?.abortSignal,\n\t\t\theaders: options?.headers\n\t\t});\n\t\tconst stream = new PassThrough();\n\t\tstream.end(Buffer.from(result.audio.uint8Array));\n\t\treturn stream;\n\t}\n\tasync listen() {\n\t\tthrow new Error(\"AI SDK speech models do not support transcription. Use AISDKTranscription instead.\");\n\t}\n\tasync getSpeakers() {\n\t\treturn [];\n\t}\n\tasync getListener() {\n\t\treturn { enabled: false };\n\t}\n\tasync streamToText(stream) {\n\t\tconst chunks = [];\n\t\tfor await (const chunk of stream) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n\t\treturn Buffer.concat(chunks).toString(\"utf-8\");\n\t}\n};\n//#endregion\n//#region src/voice/aisdk/transcription.ts\nvar AISDKTranscription = class extends MastraVoice {\n\tmodel;\n\tconstructor(model) {\n\t\tsuper({ name: \"ai-sdk-transcription\" });\n\t\tthis.model = model;\n\t}\n\tasync speak() {\n\t\tthrow new Error(\"AI SDK transcription models do not support text-to-speech. Use AISDKSpeech instead.\");\n\t}\n\tasync getSpeakers() {\n\t\treturn [];\n\t}\n\tasync getListener() {\n\t\treturn { enabled: true };\n\t}\n\t/**\n\t* Transcribe audio to text\n\t* For enhanced metadata (segments, language, duration), use AI SDK's transcribe() directly\n\t*/\n\tasync listen(audioStream, options) {\n\t\tconst audioBuffer = await this.convertToBuffer(audioStream);\n\t\treturn (await experimental_transcribe({\n\t\t\tmodel: this.model,\n\t\t\taudio: audioBuffer,\n\t\t\tproviderOptions: options?.providerOptions,\n\t\t\tabortSignal: options?.abortSignal,\n\t\t\theaders: options?.headers\n\t\t})).text;\n\t}\n\tasync convertToBuffer(audio) {\n\t\tif (Buffer.isBuffer(audio)) return audio;\n\t\tif (audio instanceof Uint8Array) return Buffer.from(audio);\n\t\tif (typeof audio === \"string\") return Buffer.from(audio, \"base64\");\n\t\tconst chunks = [];\n\t\tfor await (const chunk of audio) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n\t\treturn Buffer.concat(chunks);\n\t}\n};\n//#endregion\nexport { AISDKSpeech as n, MastraVoice as r, AISDKTranscription as t };\n\n//# sourceMappingURL=aisdk-C_K-VCwq.js.map","import { PassThrough } from 'node:stream';\n\nimport { SpeechClient, v2 } from '@google-cloud/speech';\nimport type { google as SpeechTypes } from '@google-cloud/speech/build/protos/protos';\nimport { TextToSpeechClient } from '@google-cloud/text-to-speech';\nimport type { google as TextToSpeechTypes } from '@google-cloud/text-to-speech/build/protos/protos';\nimport { MastraVoice } from '@internal/voice';\n\n/**\n * Configuration for Google Cloud Voice models\n * @interface GoogleModelConfig\n * @property {string} [apiKey] - Optional Google Cloud API key. If not provided, will use GOOGLE_API_KEY environment variable\n * @property {string} [keyFilename] - Optional path to a service account key file. If not provided, will use GOOGLE_APPLICATION_CREDENTIALS environment variable\n * @property {{ client_email?: string; private_key?: string }} [credentials] - Optional in-memory service account credentials\n */\nexport interface GoogleModelConfig {\n apiKey?: string;\n keyFilename?: string;\n credentials?: {\n client_email?: string;\n private_key?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Configuration options for GoogleVoice\n * @interface GoogleVoiceConfig\n */\nexport interface GoogleVoiceConfig {\n /** Configuration for speech synthesis (TTS) */\n speechModel?: GoogleModelConfig;\n /** Configuration for speech recognition (STT) */\n listeningModel?: GoogleModelConfig;\n /** Default voice ID to use for speech synthesis */\n speaker?: string;\n /**\n * Enable Vertex AI mode for enterprise deployments.\n * When true, uses Google Cloud project-based authentication instead of API keys.\n * Requires `project` to be set or GOOGLE_CLOUD_PROJECT environment variable.\n */\n vertexAI?: boolean;\n /**\n * Google Cloud project ID (required when vertexAI is true).\n * Falls back to GOOGLE_CLOUD_PROJECT environment variable.\n */\n project?: string;\n /**\n * Google Cloud region for Vertex AI endpoints.\n * Falls back to GOOGLE_CLOUD_LOCATION environment variable.\n * @default 'us-central1'\n */\n location?: string;\n}\n\ntype AuthConfig = Pick<GoogleModelConfig, 'apiKey' | 'keyFilename' | 'credentials'> & {\n projectId?: string;\n};\n\ntype GoogleClientOptions = AuthConfig;\n\nconst resolveAuthConfig = (\n modelConfig: GoogleModelConfig | undefined,\n fallback: AuthConfig,\n vertexConfig?: { vertexAI?: boolean; project?: string },\n): AuthConfig => {\n const resolved: AuthConfig = {};\n\n // For Vertex AI, prioritize project-based auth over API keys\n if (vertexConfig?.vertexAI) {\n const projectId = vertexConfig.project || process.env.GOOGLE_CLOUD_PROJECT;\n if (projectId) {\n resolved.projectId = projectId;\n }\n }\n\n const apiKey = modelConfig?.apiKey ?? fallback.apiKey;\n // Only use API key if not in Vertex AI mode\n if (apiKey && !vertexConfig?.vertexAI) {\n resolved.apiKey = apiKey;\n }\n\n const keyFilename = modelConfig?.keyFilename ?? fallback.keyFilename;\n if (keyFilename) {\n resolved.keyFilename = keyFilename;\n }\n\n const credentials = modelConfig?.credentials ?? fallback.credentials;\n if (credentials) {\n resolved.credentials = credentials;\n }\n\n return resolved;\n};\n\nconst buildAuthOptions = (\n config: AuthConfig,\n vertexConfig?: { vertexAI?: boolean; location?: string },\n): GoogleClientOptions => {\n const options: GoogleClientOptions = {};\n\n if (config.credentials) {\n options.credentials = config.credentials;\n }\n\n if (config.keyFilename) {\n options.keyFilename = config.keyFilename;\n }\n\n // Only use API key if not using Vertex AI\n if (config.apiKey && !vertexConfig?.vertexAI) {\n options.apiKey = config.apiKey;\n }\n\n // For Vertex AI, set the project ID\n if (config.projectId) {\n options.projectId = config.projectId;\n }\n\n return options;\n};\n\ntype V2RecognitionConfig = SpeechTypes.cloud.speech.v2.IRecognitionConfig;\n\nexport interface GoogleListenOptionsV1 {\n stream?: boolean;\n config?: SpeechTypes.cloud.speech.v1.IRecognitionConfig;\n}\n\nexport interface GoogleListenOptionsV2 {\n stream?: boolean;\n v2: true;\n config?: V2RecognitionConfig;\n recognizer?: string;\n}\n\nexport type GoogleListenOptions = GoogleListenOptionsV1 | GoogleListenOptionsV2;\n\ntype ISynthesizeSpeechRequest = TextToSpeechTypes.cloud.texttospeech.v1.ISynthesizeSpeechRequest;\n\nexport interface GoogleSpeakOptions {\n speaker?: string;\n languageCode?: string;\n input?: ISynthesizeSpeechRequest['input'];\n voice?: ISynthesizeSpeechRequest['voice'];\n audioConfig?: ISynthesizeSpeechRequest['audioConfig'];\n}\n\nconst DEFAULT_VOICE = 'en-US-Casual-K';\n\n/**\n * GoogleVoice class provides Text-to-Speech and Speech-to-Text capabilities using Google Cloud services.\n * Supports both standard Google Cloud API authentication and Vertex AI mode for enterprise deployments.\n *\n * @class GoogleVoice\n * @extends MastraVoice\n *\n * @example Standard usage with API key\n * ```typescript\n * const voice = new GoogleVoice({\n * speechModel: { apiKey: 'your-api-key' },\n * speaker: 'en-US-Studio-O',\n * });\n * ```\n *\n * @example Vertex AI mode (recommended for production)\n * ```typescript\n * const voice = new GoogleVoice({\n * vertexAI: true,\n * project: 'your-gcp-project',\n * location: 'us-central1',\n * speaker: 'en-US-Studio-O',\n * });\n * ```\n *\n * @example Vertex AI with service account\n * ```typescript\n * const voice = new GoogleVoice({\n * vertexAI: true,\n * project: 'your-gcp-project',\n * speechModel: {\n * keyFilename: '/path/to/service-account.json',\n * },\n * });\n * ```\n */\nexport class GoogleVoice extends MastraVoice {\n private ttsClient: TextToSpeechClient;\n private speechClient: SpeechClient;\n private speechClientV2?: v2.SpeechClient;\n private readonly speechOptionsV2: GoogleClientOptions;\n private readonly vertexAI: boolean;\n private readonly project?: string;\n private readonly location: string;\n\n /**\n * Creates an instance of GoogleVoice\n * @param {GoogleVoiceConfig} config - Configuration options\n * @param {GoogleModelConfig} [config.speechModel] - Configuration for speech synthesis\n * @param {GoogleModelConfig} [config.listeningModel] - Configuration for speech recognition\n * @param {string} [config.speaker] - Default voice ID to use for speech synthesis\n * @param {boolean} [config.vertexAI] - Enable Vertex AI mode\n * @param {string} [config.project] - Google Cloud project ID (required for Vertex AI)\n * @param {string} [config.location] - Google Cloud region (default: 'us-central1')\n */\n constructor({ listeningModel, speechModel, speaker, vertexAI = false, project, location }: GoogleVoiceConfig = {}) {\n const defaultApiKey = process.env.GOOGLE_API_KEY;\n const defaultKeyFilename = process.env.GOOGLE_APPLICATION_CREDENTIALS;\n const defaultSpeaker = DEFAULT_VOICE;\n\n // Resolve Vertex AI configuration\n const resolvedProject = project || process.env.GOOGLE_CLOUD_PROJECT;\n const resolvedLocation = location || process.env.GOOGLE_CLOUD_LOCATION || 'us-central1';\n\n // Validate Vertex AI configuration\n if (vertexAI && !resolvedProject) {\n throw new Error(\n 'Google Cloud project ID is required when using Vertex AI. ' +\n 'Set GOOGLE_CLOUD_PROJECT environment variable or pass project to constructor.',\n );\n }\n\n const vertexConfig = { vertexAI, project: resolvedProject };\n\n const sharedFallback: AuthConfig = {\n apiKey: defaultApiKey ?? speechModel?.apiKey ?? listeningModel?.apiKey,\n keyFilename: defaultKeyFilename ?? speechModel?.keyFilename ?? listeningModel?.keyFilename,\n credentials: speechModel?.credentials ?? listeningModel?.credentials,\n projectId: resolvedProject,\n };\n\n const speechAuthConfig = resolveAuthConfig(speechModel, sharedFallback, vertexConfig);\n const listeningAuthConfig = resolveAuthConfig(listeningModel, sharedFallback, vertexConfig);\n\n super({\n speechModel: {\n name: '',\n apiKey: speechAuthConfig.apiKey ?? defaultApiKey,\n },\n listeningModel: {\n name: '',\n apiKey: listeningAuthConfig.apiKey ?? defaultApiKey,\n },\n speaker: speaker ?? defaultSpeaker,\n });\n\n this.vertexAI = vertexAI;\n this.project = resolvedProject;\n this.location = resolvedLocation;\n\n const ttsOptions = buildAuthOptions(speechAuthConfig, { vertexAI, location: resolvedLocation });\n const speechOptions = buildAuthOptions(listeningAuthConfig, { vertexAI, location: resolvedLocation });\n\n this.ttsClient = new TextToSpeechClient(ttsOptions);\n this.speechClient = new SpeechClient(speechOptions);\n this.speechOptionsV2 = speechOptions;\n }\n\n private getV2SpeechClient(): v2.SpeechClient {\n if (!this.speechClientV2) {\n this.speechClientV2 = new v2.SpeechClient(this.speechOptionsV2);\n }\n return this.speechClientV2;\n }\n\n /**\n * Check if Vertex AI mode is enabled\n * @returns {boolean} True if using Vertex AI\n */\n isUsingVertexAI(): boolean {\n return this.vertexAI;\n }\n\n /**\n * Get the configured Google Cloud project ID\n * @returns {string | undefined} The project ID or undefined if not set\n */\n getProject(): string | undefined {\n return this.project;\n }\n\n /**\n * Get the configured Google Cloud location/region\n * @returns {string} The location (default: 'us-central1')\n */\n getLocation(): string {\n return this.location;\n }\n\n /**\n * Gets a list of available voices\n * @returns {Promise<Array<{voiceId: string, languageCodes: string[]}>>} List of available voices and their supported languages. Default language is en-US.\n */\n async getSpeakers({ languageCode = 'en-US' }: { languageCode?: string } = {}) {\n const [response] = await this.ttsClient.listVoices({ languageCode: languageCode });\n return (response?.voices || [])\n .filter(voice => voice.name && voice.languageCodes)\n .map(voice => ({\n voiceId: voice.name!,\n languageCodes: voice.languageCodes!,\n }));\n }\n\n private async streamToString(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n\n /**\n * Converts text to speech.\n *\n * When `input` is a string or stream, builds a text-only request (existing behaviour).\n * Pass `options.input` to send richer proto fields (ssml, markup, prompt,\n * customPronunciations, multiSpeakerMarkup) and `options.voice` for fields\n * like modelName or multiSpeakerVoiceConfig.\n *\n * @param {string | NodeJS.ReadableStream} input - Text or stream to convert to speech\n * @param {GoogleSpeakOptions} [options] - Speech synthesis options\n * @returns {Promise<NodeJS.ReadableStream>} Stream of synthesised audio. Default encoding is LINEAR16.\n */\n async speak(input: string | NodeJS.ReadableStream, options?: GoogleSpeakOptions): Promise<NodeJS.ReadableStream> {\n const defaultVoiceName = options?.speaker || this.speaker;\n const defaultLanguageCode = options?.languageCode || defaultVoiceName?.split('-').slice(0, 2).join('-') || 'en-US';\n\n const requestInput: ISynthesizeSpeechRequest['input'] = options?.input\n ? { ...options.input }\n : { text: typeof input === 'string' ? input : await this.streamToString(input) };\n\n // When the caller provides a rich input object but no explicit text field,\n // populate it from the positional `input` argument for convenience.\n if (\n options?.input &&\n !options.input.text &&\n !options.input.ssml &&\n !options.input.markup &&\n !options.input.multiSpeakerMarkup\n ) {\n requestInput!.text = typeof input === 'string' ? input : await this.streamToString(input);\n }\n\n const request: ISynthesizeSpeechRequest = {\n input: requestInput,\n voice: {\n name: defaultVoiceName,\n languageCode: defaultLanguageCode,\n ...options?.voice,\n },\n audioConfig: options?.audioConfig || { audioEncoding: 'LINEAR16' },\n };\n\n const [response] = await this.ttsClient.synthesizeSpeech(request);\n\n if (!response.audioContent) {\n throw new Error('No audio content returned.');\n }\n\n if (typeof response.audioContent === 'string') {\n throw new Error('Audio content is a string.');\n }\n\n const stream = new PassThrough();\n stream.end(Buffer.from(response.audioContent));\n return stream;\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Converts speech to text using Cloud Speech-to-Text v1 or v2.\n *\n * Pass `{ v2: true }` in options to use the v2 API, which supports additional\n * audio formats like AAC-in-MP4 (iOS Safari) via `autoDecodingConfig` or\n * `explicitDecodingConfig`. The v1 path remains the default.\n *\n * @param {NodeJS.ReadableStream} audioStream - Audio stream to transcribe. Default encoding is LINEAR16.\n * @param {GoogleListenOptions} [options] - Recognition options\n * @returns {Promise<string>} Transcribed text\n */\n async listen(audioStream: NodeJS.ReadableStream, options?: GoogleListenOptions): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n const buffer = Buffer.concat(chunks);\n\n if (options && 'v2' in options && options.v2) {\n return this.recognizeV2(buffer, options);\n }\n\n return this.recognizeV1(buffer, options as GoogleListenOptionsV1 | undefined);\n }\n\n private async recognizeV1(buffer: Buffer, options?: GoogleListenOptionsV1): Promise<string> {\n const request = {\n config: {\n encoding: 'LINEAR16',\n languageCode: 'en-US',\n ...options?.config,\n },\n audio: {\n content: buffer.toString('base64'),\n },\n };\n const [response] = await this.speechClient.recognize(request as SpeechTypes.cloud.speech.v1.IRecognizeRequest);\n return this.extractTranscription(response?.results);\n }\n\n private async recognizeV2(buffer: Buffer, options: GoogleListenOptionsV2): Promise<string> {\n const config: V2RecognitionConfig = { ...options.config };\n // Default to auto-decoding if neither decoding config is specified\n if (!config.autoDecodingConfig && !config.explicitDecodingConfig) {\n config.autoDecodingConfig = {};\n }\n if (!config.languageCodes || config.languageCodes.length === 0) {\n config.languageCodes = ['en-US'];\n }\n if (!config.model) {\n config.model = 'long';\n }\n\n let recognizer = options.recognizer;\n if (!recognizer) {\n const project = this.project || (await this.getV2SpeechClient().getProjectId());\n recognizer = `projects/${project}/locations/global/recognizers/_`;\n }\n\n const request: SpeechTypes.cloud.speech.v2.IRecognizeRequest = {\n recognizer,\n config,\n content: buffer,\n };\n\n const client = this.getV2SpeechClient();\n const [response] = await client.recognize(request);\n return this.extractTranscription(response?.results);\n }\n\n private extractTranscription(\n results:\n | SpeechTypes.cloud.speech.v1.ISpeechRecognitionResult[]\n | SpeechTypes.cloud.speech.v2.ISpeechRecognitionResult[]\n | null\n | undefined,\n ): string {\n if (!results || results.length === 0) {\n throw new Error('No transcription results returned');\n }\n\n const transcription = results\n .map((result: any) => {\n if (!result.alternatives || result.alternatives.length === 0) {\n return '';\n }\n return result.alternatives[0].transcript || '';\n })\n .filter((text: string) => text.length > 0)\n .join(' ');\n\n if (!transcription) {\n throw new Error('No valid transcription found in results');\n }\n\n return transcription;\n }\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAS,uBAAuB,KAAK,OAAO,UAAU;CACrD,IAAI,CAAC,KAAK,QAAQ,QAAQ;CAC1B,IAAI;EACH,MAAM,cAAc;EACpB,IAAI,WAAW,CAAC,EAAE,MAAM,MAAM,SAAS;GACtC,GAAG,YAAY,OAAO,KAAK,IAAI,EAAE,SAAS,YAAY,GAAG,IAAI,CAAC;GAC9D,GAAG,YAAY,WAAW,KAAK,IAAI,EAAE,QAAQ,YAAY,OAAO,IAAI,CAAC;GACrE,GAAG,YAAY,aAAa,KAAK,IAAI,EAAE,UAAU,YAAY,SAAS,IAAI,CAAC;GAC3E,GAAG,YAAY,YAAY,KAAK,IAAI,EAAE,SAAS,YAAY,QAAQ,IAAI,CAAC;GACxE,GAAG,MAAM,iBAAiB,QAAQ,EAAE,OAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;GACpE,GAAG;EACJ,CAAC;CACF,QAAQ,CAAC;AACV;;;;;;;AAOA,SAAS,mBAAmB,MAAM;CACjC,MAAM,aAAa,KAAK,MAAM,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,eAAe,MAAM;CAC/H,MAAM,WAAW,KAAK,MAAM,QAAQ,eAAe,KAAK;CACxD,MAAM,YAAY,KAAK,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,QAAQ;CAC7E,IAAI,CAAC,cAAc,CAAC,YAAY,UAAU,WAAW,GAAG,OAAO,KAAK;CACpE,OAAO;EACN,GAAG,cAAc,CAAC;EAClB,GAAG,WAAW,EAAE,OAAO;GACtB,MAAM,SAAS;GACf,SAAS,SAAS;GAClB,OAAO,SAAS;EACjB,EAAE,IAAI,CAAC;EACP,GAAG,UAAU,SAAS,IAAI,EAAE,MAAM,UAAU,IAAI,CAAC;CAClD;AACD;AAGA,MAAM,mBAAmB;CACxB,OAAO;CACP,eAAe;CACf,MAAM;CACN,SAAS;CACT,SAAS;CACT,UAAU;CACV,KAAK;CACL,KAAK;CACL,OAAO;CACP,QAAQ;CACR,SAAS;CACT,UAAU;CACV,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,cAAc;CACd,QAAQ;CACR,WAAW;CACX,SAAS;AACV;AACA,MAAM,WAAW;CAChB,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,MAAM;AACP;AAiCA,IAAI,eAAe,MAAM;CACxB;CACA;CACA;CACA,YAAY,UAAU,CAAC,GAAG;EACzB,KAAK,OAAO,QAAQ,QAAQ;EAC5B,KAAK,QAAQ,QAAQ,SAAS,SAAS;EACvC,KAAK,aAAa,IAAI,IAAI,OAAO,QAAQ,QAAQ,cAAc,CAAC,CAAC,CAAC;CACnE;CACA,gBAAgB;EACf,OAAO,KAAK;CACb;CACA,eAAe,QAAQ,WAAW,CAAC;CACnC,MAAM,SAAS,aAAa,QAAQ;EACnC,IAAI,CAAC,eAAe,CAAC,KAAK,WAAW,IAAI,WAAW,GAAG,OAAO;GAC7D,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ,QAAQ;GACtB,SAAS,QAAQ,WAAW;GAC5B,SAAS;EACV;EACA,OAAO,KAAK,WAAW,IAAI,WAAW,CAAC,CAAC,WAAW,MAAM,KAAK;GAC7D,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ,QAAQ;GACtB,SAAS,QAAQ,WAAW;GAC5B,SAAS;EACV;CACD;CACA,MAAM,gBAAgB,EAAE,aAAa,OAAO,UAAU,QAAQ,UAAU,SAAS,MAAM,WAAW;EACjG,IAAI,CAAC,eAAe,CAAC,KAAK,WAAW,IAAI,WAAW,KAAK,CAAC,OAAO,OAAO;GACvE,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ;GACd,SAAS,WAAW;GACpB,SAAS;EACV;EACA,OAAO,KAAK,WAAW,IAAI,WAAW,CAAC,CAAC,kBAAkB;GACzD;GACA;GACA;GACA;GACA;GACA;GACA;EACD,CAAC,KAAK;GACL,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ;GACd,SAAS,WAAW;GACpB,SAAS;EACV;CACD;AACD;AACA,IAAI,gBAAgB,MAAM,sBAAsB,aAAa;CAC5D;CACA;CACA;CACA,YAAY,UAAU,CAAC,GAAG;EACzB,MAAM,OAAO;EACb,KAAK,YAAY,QAAQ;EACzB,KAAK,SAAS,QAAQ;CACvB;;;;;;CAMA,sBAAsB,KAAK;EAC1B,KAAKA,kBAAkB;CACxB;CACA,MAAM,qBAAqB;EAC1B,MAAM,YAAY,OAAO,wBAAwB,WAAW,sBAAsB,qBAAqB,aAAa,KAAK;EACzH,MAAM,QAAQ,IAAI,cAAc;GAC/B,MAAM,KAAK;GACX,OAAO,KAAK;GACZ;GACA,QAAQ,KAAK;EACd,CAAC;EACD,IAAI,KAAKA,iBAAiB,MAAM,sBAAsB,KAAKA,eAAe;EAC1E,OAAO;CACR;;;;;CAKA,WAAW,MAAM;EAChB,MAAM,MAAM,KAAKA;EACjB,IAAI,CAAC,KAAK,QAAQ,aAAa,OAAO;EACtC,IAAI;GACH,MAAM,SAAS,IAAI,mBAAmB;GACtC,OAAO,SAAS,CAAC,GAAG,MAAM,MAAM,IAAI;EACrC,QAAQ;GACP,OAAO;EACR;CACD;;;;;;CAMA,QAAQ,OAAO,SAAS,MAAM;EAC7B,MAAM,MAAM,KAAKA;EACjB,IAAI,CAAC,KAAK,QAAQ,QAAQ;EAC1B,IAAI;GACH,IAAI,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,mBAAmB,IAAI,CAAC;EAC5D,QAAQ,CAAC;CACV;CACA,UAAU,OAAO,SAAS,MAAM;EAC/B,IAAI,CAAC,KAAK,QAAQ,OAAO;EACzB,IAAI;GACH,OAAO,KAAK,OAAO;IAClB,WAAW,KAAK;IAChB;IACA;IACA;GACD,CAAC;EACF,SAAS,GAAG;GACX,QAAQ,MAAM,uCAAuC,KAAK,UAAU,SAAS,MAAM,IAAI,CAAC;GACxF,OAAO;EACR;CACD;CACA,SAAS;EACR,OAAO,KAAK,YAAY,IAAI,KAAK,UAAU,MAAM;CAClD;CACA,MAAM,SAAS,GAAG,MAAM;EACvB,IAAI,KAAK,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS,OAAO,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAKC,WAAW,IAAI,CAAC;EACvJ,KAAKC,QAAQ,SAAS,SAAS,IAAI;CACpC;CACA,KAAK,SAAS,GAAG,MAAM;EACtB,KAAK,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,MAAM,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAKD,WAAW,IAAI,CAAC;EACxL,KAAKC,QAAQ,QAAQ,SAAS,IAAI;CACnC;CACA,KAAK,SAAS,GAAG,MAAM;EACtB,KAAK,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,MAAM,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAKD,WAAW,IAAI,CAAC;EACxN,KAAKC,QAAQ,QAAQ,SAAS,IAAI;CACnC;CACA,MAAM,SAAS,GAAG,MAAM;EACvB,KAAK,KAAK,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,OAAO,SAAS,IAAI,GAAG,QAAQ,MAAM,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAKD,WAAW,IAAI,CAAC;EAC3P,KAAKC,QAAQ,SAAS,SAAS,IAAI;CACpC;CACA,eAAe,OAAO,UAAU;EAC/B,uBAAuB,KAAKF,iBAAiB,OAAO,QAAQ;CAC7D;CACA,MAAM,SAAS,cAAc,SAAS;EACrC,OAAO;GACN,MAAM,CAAC;GACP,OAAO;GACP,MAAM,SAAS,QAAQ;GACvB,SAAS,SAAS,WAAW;GAC7B,SAAS;EACV;CACD;CACA,MAAM,gBAAgB,OAAO;EAC5B,OAAO;GACN,MAAM,CAAC;GACP,OAAO;GACP,MAAM,MAAM,QAAQ;GACpB,SAAS,MAAM,WAAW;GAC1B,SAAS;EACV;CACD;AACD;;;AC5QA,IAAI,aAAa,MAAM;CACtB,YAAY,iBAAiB;CAC7B;CACA;CACA;CACA,YAAY,EAAE,WAAW,MAAM,aAAa;EAC3C,KAAK,YAAY,aAAa,iBAAiB;EAC/C,KAAK,OAAO;EACZ,KAAKG,aAAa;EAClB,KAAK,SAAS,IAAI,cAAc,EAAE,MAAM,GAAG,KAAK,UAAU,KAAK,KAAK,OAAO,CAAC;CAC7E;;;;;CAKA,cAAc;EACb,OAAO,KAAKA;CACb;;;;;CAKA,eAAe,WAAW;EACzB,KAAKA,aAAa;CACnB;;;;;CAKA,YAAY,QAAQ;EACnB,KAAK,SAAS,WAAW,UAAU,OAAO,OAAO,UAAU,aAAa,OAAO,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC,IAAI;CACvH;AACD;;;AC9BA,IAAI,cAAc,cAAc,WAAW;CAC1C;CACA;CACA;CACA;CACA,YAAY,EAAE,gBAAgB,aAAa,SAAS,gBAAgB,SAAS,CAAC,GAAG;EAChF,MAAM;GACL,WAAW;GACX;EACD,CAAC;EACD,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,UAAU;EACf,KAAK,iBAAiB;CACvB;;;;;;;CAOA,mBAAmB;EAClB,OAAO;GACN,WAAW;GACX,MAAM,KAAK;GACX,SAAS,KAAK;GACd,gBAAgB,KAAK,iBAAiB,EAAE,MAAM,KAAK,eAAe,KAAK,IAAI,KAAK;GAChF,aAAa,KAAK,cAAc,EAAE,MAAM,KAAK,YAAY,KAAK,IAAI,KAAK;GACvE,eAAe,KAAK,gBAAgB;EACrC;CACD;CACA,aAAa,UAAU;EACtB,KAAK,OAAO,MAAM,qDAAqD;CACxE;;;;;CAKA,MAAM,QAAQ,UAAU;EACvB,KAAK,OAAO,MAAM,gDAAgD;CACnE;;;;;CAKA,MAAM,KAAK,YAAY;EACtB,KAAK,OAAO,MAAM,8CAA8C;CACjE;;;;CAIA,MAAM,OAAO,UAAU;EACtB,KAAK,OAAO,MAAM,+CAA+C;CAClE;;;;;CAKA,gBAAgB,eAAe,CAAC;;;;;CAKhC,SAAS,QAAQ,CAAC;;;;CAIlB,QAAQ;EACP,KAAK,OAAO,MAAM,8CAA8C;CACjE;;;;;;CAMA,GAAG,QAAQ,WAAW;EACrB,KAAK,OAAO,MAAM,2CAA2C;CAC9D;;;;;;CAMA,IAAI,QAAQ,WAAW;EACtB,KAAK,OAAO,MAAM,4CAA4C;CAC/D;;;;;CAKA,cAAc;EACb,KAAK,OAAO,MAAM,oDAAoD;EACtE,OAAO,QAAQ,QAAQ,CAAC,CAAC;CAC1B;;;;;CAKA,cAAc;EACb,KAAK,OAAO,MAAM,oDAAoD;EACtE,OAAO,QAAQ,QAAQ,EAAE,SAAS,MAAM,CAAC;CAC1C;AACD;;;AC7CA,MAAM,qBACJ,aACA,UACA,iBACe;CACf,MAAM,WAAuB,CAAC;CAG9B,IAAI,cAAc,UAAU;EAC1B,MAAM,YAAY,aAAa,WAAW,QAAQ,IAAI;EACtD,IAAI,WACF,SAAS,YAAY;CAEzB;CAEA,MAAM,SAAS,aAAa,UAAU,SAAS;CAE/C,IAAI,UAAU,CAAC,cAAc,UAC3B,SAAS,SAAS;CAGpB,MAAM,cAAc,aAAa,eAAe,SAAS;CACzD,IAAI,aACF,SAAS,cAAc;CAGzB,MAAM,cAAc,aAAa,eAAe,SAAS;CACzD,IAAI,aACF,SAAS,cAAc;CAGzB,OAAO;AACT;AAEA,MAAM,oBACJ,QACA,iBACwB;CACxB,MAAM,UAA+B,CAAC;CAEtC,IAAI,OAAO,aACT,QAAQ,cAAc,OAAO;CAG/B,IAAI,OAAO,aACT,QAAQ,cAAc,OAAO;CAI/B,IAAI,OAAO,UAAU,CAAC,cAAc,UAClC,QAAQ,SAAS,OAAO;CAI1B,IAAI,OAAO,WACT,QAAQ,YAAY,OAAO;CAG7B,OAAO;AACT;AA4BA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCtB,IAAa,cAAb,cAAiC,YAAY;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;;;;;;;;;;;CAYA,YAAY,EAAE,gBAAgB,aAAa,SAAS,WAAW,OAAO,SAAS,aAAgC,CAAC,GAAG;EACjH,MAAM,gBAAgB,QAAQ,IAAI;EAClC,MAAM,qBAAqB,QAAQ,IAAI;EACvC,MAAM,iBAAiB;EAGvB,MAAM,kBAAkB,WAAW,QAAQ,IAAI;EAC/C,MAAM,mBAAmB,YAAY,QAAQ,IAAI,yBAAyB;EAG1E,IAAI,YAAY,CAAC,iBACf,MAAM,IAAI,MACR,yIAEF;EAGF,MAAM,eAAe;GAAE;GAAU,SAAS;EAAgB;EAE1D,MAAM,iBAA6B;GACjC,QAAQ,iBAAiB,aAAa,UAAU,gBAAgB;GAChE,aAAa,sBAAsB,aAAa,eAAe,gBAAgB;GAC/E,aAAa,aAAa,eAAe,gBAAgB;GACzD,WAAW;EACb;EAEA,MAAM,mBAAmB,kBAAkB,aAAa,gBAAgB,YAAY;EACpF,MAAM,sBAAsB,kBAAkB,gBAAgB,gBAAgB,YAAY;EAE1F,MAAM;GACJ,aAAa;IACX,MAAM;IACN,QAAQ,iBAAiB,UAAU;GACrC;GACA,gBAAgB;IACd,MAAM;IACN,QAAQ,oBAAoB,UAAU;GACxC;GACA,SAAS,WAAW;EACtB,CAAC;EAED,KAAK,WAAW;EAChB,KAAK,UAAU;EACf,KAAK,WAAW;EAEhB,MAAM,aAAa,iBAAiB,kBAAkB;GAAE;GAAU,UAAU;EAAiB,CAAC;EAC9F,MAAM,gBAAgB,iBAAiB,qBAAqB;GAAE;GAAU,UAAU;EAAiB,CAAC;EAEpG,KAAK,YAAY,IAAIC,6BAAAA,mBAAmB,UAAU;EAClD,KAAK,eAAe,IAAIC,qBAAAA,aAAa,aAAa;EAClD,KAAK,kBAAkB;CACzB;CAEA,oBAA6C;EAC3C,IAAI,CAAC,KAAK,gBACR,KAAK,iBAAiB,IAAIC,qBAAAA,GAAG,aAAa,KAAK,eAAe;EAEhE,OAAO,KAAK;CACd;;;;;CAMA,kBAA2B;EACzB,OAAO,KAAK;CACd;;;;;CAMA,aAAiC;EAC/B,OAAO,KAAK;CACd;;;;;CAMA,cAAsB;EACpB,OAAO,KAAK;CACd;;;;;CAMA,MAAM,YAAY,EAAE,eAAe,YAAuC,CAAC,GAAG;EAC5E,MAAM,CAAC,YAAY,MAAM,KAAK,UAAU,WAAW,EAAgB,aAAa,CAAC;EACjF,QAAQ,UAAU,UAAU,CAAC,EAAA,CAC1B,QAAO,UAAS,MAAM,QAAQ,MAAM,aAAa,CAAC,CAClD,KAAI,WAAU;GACb,SAAS,MAAM;GACf,eAAe,MAAM;EACvB,EAAE;CACN;CAEA,MAAc,eAAe,UAAgD;EAC3E,MAAM,SAAmB,CAAC;EAC1B,WAAW,MAAM,SAASC,UACxB,IAAI,OAAO,UAAU,UACnB,OAAO,KAAK,OAAO,KAAK,KAAK,CAAC;OAE9B,OAAO,KAAK,KAAK;EAGrB,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,OAAO;CAC/C;;;;;;;;;;;;;CAcA,MAAM,MAAM,OAAuC,SAA8D;EAC/G,MAAM,mBAAmB,SAAS,WAAW,KAAK;EAClD,MAAM,sBAAsB,SAAS,gBAAgB,kBAAkB,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK;EAE3G,MAAM,eAAkD,SAAS,QAC7D,EAAE,GAAG,QAAQ,MAAM,IACnB,EAAE,MAAM,OAAO,UAAU,WAAW,QAAQ,MAAM,KAAK,eAAe,KAAK,EAAE;EAIjF,IACE,SAAS,SACT,CAAC,QAAQ,MAAM,QACf,CAAC,QAAQ,MAAM,QACf,CAAC,QAAQ,MAAM,UACf,CAAC,QAAQ,MAAM,oBAEf,aAAc,OAAO,OAAO,UAAU,WAAW,QAAQ,MAAM,KAAK,eAAe,KAAK;EAG1F,MAAM,UAAoC;GACxC,OAAO;GACP,OAAO;IACL,MAAM;IACN,cAAc;IACd,GAAG,SAAS;GACd;GACA,aAAa,SAAS,eAAe,EAAE,eAAe,WAAW;EACnE;EAEA,MAAM,CAAC,YAAY,MAAM,KAAK,UAAU,iBAAiB,OAAO;EAEhE,IAAI,CAAC,SAAS,cACZ,MAAM,IAAI,MAAM,4BAA4B;EAG9C,IAAI,OAAO,SAAS,iBAAiB,UACnC,MAAM,IAAI,MAAM,4BAA4B;EAG9C,MAAMA,WAAS,IAAIC,OAAAA,YAAY;EAC/B,SAAO,IAAI,OAAO,KAAK,SAAS,YAAY,CAAC;EAC7C,OAAOD;CACT;;;;;;CAOA,MAAM,cAAc;EAClB,OAAO,EAAE,SAAS,KAAK;CACzB;;;;;;;;;;;;CAaA,MAAM,OAAO,aAAoC,SAAgD;EAC/F,MAAM,SAAmB,CAAC;EAC1B,WAAW,MAAM,SAAS,aACxB,IAAI,OAAO,UAAU,UACnB,OAAO,KAAK,OAAO,KAAK,KAAK,CAAC;OAE9B,OAAO,KAAK,KAAK;EAGrB,MAAM,SAAS,OAAO,OAAO,MAAM;EAEnC,IAAI,WAAW,QAAQ,WAAW,QAAQ,IACxC,OAAO,KAAK,YAAY,QAAQ,OAAO;EAGzC,OAAO,KAAK,YAAY,QAAQ,OAA4C;CAC9E;CAEA,MAAc,YAAY,QAAgB,SAAkD;EAC1F,MAAM,UAAU;GACd,QAAQ;IACN,UAAU;IACV,cAAc;IACd,GAAG,SAAS;GACd;GACA,OAAO,EACL,SAAS,OAAO,SAAS,QAAQ,EACnC;EACF;EACA,MAAM,CAAC,YAAY,MAAM,KAAK,aAAa,UAAU,OAAwD;EAC7G,OAAO,KAAK,qBAAqB,UAAU,OAAO;CACpD;CAEA,MAAc,YAAY,QAAgB,SAAiD;EACzF,MAAM,SAA8B,EAAE,GAAG,QAAQ,OAAO;EAExD,IAAI,CAAC,OAAO,sBAAsB,CAAC,OAAO,wBACxC,OAAO,qBAAqB,CAAC;EAE/B,IAAI,CAAC,OAAO,iBAAiB,OAAO,cAAc,WAAW,GAC3D,OAAO,gBAAgB,CAAC,OAAO;EAEjC,IAAI,CAAC,OAAO,OACV,OAAO,QAAQ;EAGjB,IAAI,aAAa,QAAQ;EACzB,IAAI,CAAC,YAEH,aAAa,YADG,KAAK,WAAY,MAAM,KAAK,kBAAkB,CAAC,CAAC,aAAa,EAC5C;EAGnC,MAAM,UAAyD;GAC7D;GACA;GACA,SAAS;EACX;EAGA,MAAM,CAAC,YAAY,MADJ,KAAK,kBACU,CAAC,CAAC,UAAU,OAAO;EACjD,OAAO,KAAK,qBAAqB,UAAU,OAAO;CACpD;CAEA,qBACE,SAKQ;EACR,IAAI,CAAC,WAAW,QAAQ,WAAW,GACjC,MAAM,IAAI,MAAM,mCAAmC;EAGrD,MAAM,gBAAgB,QACnB,KAAK,WAAgB;GACpB,IAAI,CAAC,OAAO,gBAAgB,OAAO,aAAa,WAAW,GACzD,OAAO;GAET,OAAO,OAAO,aAAa,EAAE,CAAC,cAAc;EAC9C,CAAC,CAAC,CACD,QAAQ,SAAiB,KAAK,SAAS,CAAC,CAAC,CACzC,KAAK,GAAG;EAEX,IAAI,CAAC,eACH,MAAM,IAAI,MAAM,yCAAyC;EAG3D,OAAO;CACT;AACF"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["TextToSpeechClient","SpeechClient","v2","stream","PassThrough"],"sources":["../../../packages/_internal-core/dist/logger/index.js","../../../packages/_internal-core/dist/base/index.js","../../../packages/_internals/voice/dist/aisdk-C_K-VCwq.js","../src/index.ts"],"sourcesContent":["import { Transform } from \"stream\";\n//#region src/logger/adapter.ts\nfunction isAdaptableLogger(logger) {\n\treturn typeof logger.__attachObservability === \"function\";\n}\n/**\n* Export a tracked exception through the adapter sink, mirroring the\n* DualLogger dual-write shape (`errorId`/`domain`/`category`/`details`/`cause`\n* when present on a MastraError-like value). Never throws into the caller.\n*/\nfunction exportTrackedException(ctx, error, metadata) {\n\tif (!ctx?.options.export) return;\n\ttry {\n\t\tconst mastraError = error;\n\t\tctx.getLogSink()?.error(error.message, {\n\t\t\t...mastraError.id !== void 0 ? { errorId: mastraError.id } : {},\n\t\t\t...mastraError.domain !== void 0 ? { domain: mastraError.domain } : {},\n\t\t\t...mastraError.category !== void 0 ? { category: mastraError.category } : {},\n\t\t\t...mastraError.details !== void 0 ? { details: mastraError.details } : {},\n\t\t\t...error.cause instanceof Error ? { cause: error.cause.message } : {},\n\t\t\t...metadata\n\t\t});\n\t} catch {}\n}\n/**\n* Adapt IMastraLogger's variadic args into the structured `data` payload of\n* an exported log record. Extracts the first plain object as data,\n* serializes an Error arg, and collects remaining primitives under `args`\n* so the derived record preserves all context from the native call.\n*/\nfunction buildLogRecordData(args) {\n\tconst objectData = args.find((arg) => arg !== null && typeof arg === \"object\" && !Array.isArray(arg) && !(arg instanceof Error));\n\tconst errorArg = args.find((arg) => arg instanceof Error);\n\tconst extraArgs = args.filter((arg) => arg !== objectData && arg !== errorArg);\n\tif (!objectData && !errorArg && extraArgs.length === 0) return void 0;\n\treturn {\n\t\t...objectData ?? {},\n\t\t...errorArg ? { error: {\n\t\t\tname: errorArg.name,\n\t\t\tmessage: errorArg.message,\n\t\t\tstack: errorArg.stack\n\t\t} } : {},\n\t\t...extraArgs.length > 0 ? { args: extraArgs } : {}\n\t};\n}\n//#endregion\n//#region src/logger/index.ts\nconst RegisteredLogger = {\n\tAGENT: \"AGENT\",\n\tOBSERVABILITY: \"OBSERVABILITY\",\n\tAUTH: \"AUTH\",\n\tBROWSER: \"BROWSER\",\n\tNETWORK: \"NETWORK\",\n\tWORKFLOW: \"WORKFLOW\",\n\tLLM: \"LLM\",\n\tTTS: \"TTS\",\n\tVOICE: \"VOICE\",\n\tVECTOR: \"VECTOR\",\n\tBUNDLER: \"BUNDLER\",\n\tDEPLOYER: \"DEPLOYER\",\n\tMEMORY: \"MEMORY\",\n\tSTORAGE: \"STORAGE\",\n\tEMBEDDINGS: \"EMBEDDINGS\",\n\tMCP_SERVER: \"MCP_SERVER\",\n\tSERVER_CACHE: \"SERVER_CACHE\",\n\tSERVER: \"SERVER\",\n\tWORKSPACE: \"WORKSPACE\",\n\tCHANNEL: \"CHANNEL\"\n};\nconst LogLevel = {\n\tDEBUG: \"debug\",\n\tINFO: \"info\",\n\tWARN: \"warn\",\n\tERROR: \"error\",\n\tNONE: \"silent\"\n};\nvar LoggerTransport = class extends Transform {\n\tconstructor(opts = {}) {\n\t\tsuper({\n\t\t\t...opts,\n\t\t\tobjectMode: true\n\t\t});\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogs(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nconst createCustomTransport = (stream, listLogs, listLogsByRunId) => {\n\tlet transport = stream;\n\tif (listLogs) transport.listLogs = listLogs;\n\tif (listLogsByRunId) transport.listLogsByRunId = listLogsByRunId;\n\treturn transport;\n};\nvar MastraLogger = class {\n\tname;\n\tlevel;\n\ttransports;\n\tconstructor(options = {}) {\n\t\tthis.name = options.name || \"Mastra\";\n\t\tthis.level = options.level || LogLevel.ERROR;\n\t\tthis.transports = new Map(Object.entries(options.transports || {}));\n\t}\n\tgetTransports() {\n\t\treturn this.transports;\n\t}\n\ttrackException(_error, _metadata) {}\n\tasync listLogs(transportId, params) {\n\t\tif (!transportId || !this.transports.has(transportId)) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogs?.(params) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId({ transportId, runId, fromDate, toDate, logLevel, filters, page, perPage }) {\n\t\tif (!transportId || !this.transports.has(transportId) || !runId) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogsByRunId?.({\n\t\t\trunId,\n\t\t\tfromDate,\n\t\t\ttoDate,\n\t\t\tlogLevel,\n\t\t\tfilters,\n\t\t\tpage,\n\t\t\tperPage\n\t\t}) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nvar ConsoleLogger = class ConsoleLogger extends MastraLogger {\n\tcomponent;\n\tfilter;\n\t#adapterContext;\n\tconstructor(options = {}) {\n\t\tsuper(options);\n\t\tthis.component = options.component;\n\t\tthis.filter = options.filter;\n\t}\n\t/**\n\t* Adapter hook (see `AdaptableLogger`): enables native trace correlation\n\t* (trace_id/span_id appended to console output) and observability export\n\t* derived from the same record. Called by Mastra during setup.\n\t*/\n\t__attachObservability(ctx) {\n\t\tthis.#adapterContext = ctx;\n\t}\n\tchild(componentOrBindings) {\n\t\tconst component = typeof componentOrBindings === \"string\" ? componentOrBindings : componentOrBindings?.component ?? this.component;\n\t\tconst child = new ConsoleLogger({\n\t\t\tname: this.name,\n\t\t\tlevel: this.level,\n\t\t\tcomponent,\n\t\t\tfilter: this.filter\n\t\t});\n\t\tif (this.#adapterContext) child.__attachObservability(this.#adapterContext);\n\t\treturn child;\n\t}\n\t/**\n\t* Native-record correlation: when a span is active, append the trace\n\t* fields object to the console args so every destination sees them.\n\t*/\n\t#correlate(args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.correlation) return args;\n\t\ttry {\n\t\t\tconst fields = ctx.resolveTraceFields();\n\t\t\treturn fields ? [...args, fields] : args;\n\t\t} catch {\n\t\t\treturn args;\n\t\t}\n\t}\n\t/**\n\t* Export the record derived from the same native call to observability.\n\t* Mirrors DualLogger semantics: export is independent of the console\n\t* level filter, and never throws into the caller.\n\t*/\n\t#export(level, message, args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.export) return;\n\t\ttry {\n\t\t\tctx.getLogSink()?.[level](message, buildLogRecordData(args));\n\t\t} catch {}\n\t}\n\tshouldLog(level, message, args) {\n\t\tif (!this.filter) return true;\n\t\ttry {\n\t\t\treturn this.filter({\n\t\t\t\tcomponent: this.component,\n\t\t\t\tlevel,\n\t\t\t\tmessage,\n\t\t\t\targs\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconsole.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n\t\t\treturn true;\n\t\t}\n\t}\n\tprefix() {\n\t\treturn this.component ? `[${this.component}] ` : \"\";\n\t}\n\tdebug(message, ...args) {\n\t\tif (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"debug\", message, args);\n\t}\n\tinfo(message, ...args) {\n\t\tif ((this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.INFO, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"info\", message, args);\n\t}\n\twarn(message, ...args) {\n\t\tif ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) console.warn(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"warn\", message, args);\n\t}\n\terror(message, ...args) {\n\t\tif ((this.level === LogLevel.ERROR || this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.ERROR, message, args)) console.error(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"error\", message, args);\n\t}\n\ttrackException(error, metadata) {\n\t\texportTrackedException(this.#adapterContext, error, metadata);\n\t}\n\tasync listLogs(_transportId, _params) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _params?.page ?? 1,\n\t\t\tperPage: _params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args.page ?? 1,\n\t\t\tperPage: _args.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\n//#endregion\nexport { ConsoleLogger, LogLevel, LoggerTransport, MastraLogger, RegisteredLogger, buildLogRecordData, createCustomTransport, exportTrackedException, isAdaptableLogger };\n\n//# sourceMappingURL=index.js.map","import { ConsoleLogger, RegisteredLogger } from \"../logger/index.js\";\n//#region src/base/MastraBase.ts\nvar MastraBase = class {\n\tcomponent = RegisteredLogger.LLM;\n\tlogger;\n\tname;\n\t#rawConfig;\n\tconstructor({ component, name, rawConfig }) {\n\t\tthis.component = component || RegisteredLogger.LLM;\n\t\tthis.name = name;\n\t\tthis.#rawConfig = rawConfig;\n\t\tthis.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n\t}\n\t/**\n\t* Returns the raw storage configuration this primitive was created from,\n\t* or undefined if it was created from code.\n\t*/\n\ttoRawConfig() {\n\t\treturn this.#rawConfig;\n\t}\n\t/**\n\t* Sets the raw storage configuration for this primitive.\n\t* @internal\n\t*/\n\t__setRawConfig(rawConfig) {\n\t\tthis.#rawConfig = rawConfig;\n\t}\n\t/**\n\t* Set the logger for the agent\n\t* @param logger\n\t*/\n\t__setLogger(logger) {\n\t\tthis.logger = \"child\" in logger && typeof logger.child === \"function\" ? logger.child({ component: this.component }) : logger;\n\t}\n};\n//#endregion\nexport { MastraBase };\n\n//# sourceMappingURL=index.js.map","import { MastraBase } from \"@internal/core/base\";\nimport { PassThrough } from \"stream\";\nimport { experimental_generateSpeech, experimental_transcribe } from \"@internal/ai-sdk-v5\";\n//#region src/voice/voice.ts\nvar MastraVoice = class extends MastraBase {\n\tlisteningModel;\n\tspeechModel;\n\tspeaker;\n\trealtimeConfig;\n\tconstructor({ listeningModel, speechModel, speaker, realtimeConfig, name } = {}) {\n\t\tsuper({\n\t\t\tcomponent: \"VOICE\",\n\t\t\tname\n\t\t});\n\t\tthis.listeningModel = listeningModel;\n\t\tthis.speechModel = speechModel;\n\t\tthis.speaker = speaker;\n\t\tthis.realtimeConfig = realtimeConfig;\n\t}\n\t/**\n\t* Custom serialization for tracing/observability spans.\n\t* Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n\t* and any provider-specific state held by subclasses. Subclasses that\n\t* need to expose additional non-sensitive fields can override.\n\t*/\n\tserializeForSpan() {\n\t\treturn {\n\t\t\tcomponent: \"VOICE\",\n\t\t\tname: this.name,\n\t\t\tspeaker: this.speaker,\n\t\t\tlisteningModel: this.listeningModel ? { name: this.listeningModel.name } : void 0,\n\t\t\tspeechModel: this.speechModel ? { name: this.speechModel.name } : void 0,\n\t\t\trealtimeModel: this.realtimeConfig?.model\n\t\t};\n\t}\n\tupdateConfig(_options) {\n\t\tthis.logger.debug(\"updateConfig not implemented by this voice provider\");\n\t}\n\t/**\n\t* Initializes a WebSocket or WebRTC connection for real-time communication\n\t* @returns Promise that resolves when the connection is established\n\t*/\n\tasync connect(_options) {\n\t\tthis.logger.debug(\"connect not implemented by this voice provider\");\n\t}\n\t/**\n\t* Relay audio data to the voice provider for real-time processing\n\t* @param audioData Audio data to relay\n\t*/\n\tasync send(_audioData) {\n\t\tthis.logger.debug(\"relay not implemented by this voice provider\");\n\t}\n\t/**\n\t* Trigger voice providers to respond\n\t*/\n\tasync answer(_options) {\n\t\tthis.logger.debug(\"answer not implemented by this voice provider\");\n\t}\n\t/**\n\t* Equip the voice provider with instructions\n\t* @param instructions Instructions to add\n\t*/\n\taddInstructions(_instructions) {}\n\t/**\n\t* Equip the voice provider with tools\n\t* @param tools Array of tools to add\n\t*/\n\taddTools(_tools) {}\n\t/**\n\t* Disconnect from the WebSocket or WebRTC connection\n\t*/\n\tclose() {\n\t\tthis.logger.debug(\"close not implemented by this voice provider\");\n\t}\n\t/**\n\t* Register an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function that receives event data\n\t*/\n\ton(_event, _callback) {\n\t\tthis.logger.debug(\"on not implemented by this voice provider\");\n\t}\n\t/**\n\t* Remove an event listener\n\t* @param event Event name (e.g., 'speaking', 'writing', 'error')\n\t* @param callback Callback function to remove\n\t*/\n\toff(_event, _callback) {\n\t\tthis.logger.debug(\"off not implemented by this voice provider\");\n\t}\n\t/**\n\t* Get available speakers/voices\n\t* @returns Array of available voice IDs and their metadata\n\t*/\n\tgetSpeakers() {\n\t\tthis.logger.debug(\"getSpeakers not implemented by this voice provider\");\n\t\treturn Promise.resolve([]);\n\t}\n\t/**\n\t* Get available speakers/voices\n\t* @returns Array of available voice IDs and their metadata\n\t*/\n\tgetListener() {\n\t\tthis.logger.debug(\"getListener not implemented by this voice provider\");\n\t\treturn Promise.resolve({ enabled: false });\n\t}\n};\n//#endregion\n//#region src/voice/aisdk/speech.ts\nvar AISDKSpeech = class extends MastraVoice {\n\tmodel;\n\tdefaultVoice;\n\tconstructor(model, options) {\n\t\tsuper({ name: \"ai-sdk-speech\" });\n\t\tthis.model = model;\n\t\tthis.defaultVoice = options?.voice;\n\t}\n\tasync speak(input, options) {\n\t\tconst text = typeof input === \"string\" ? input : await this.streamToText(input);\n\t\tconst result = await experimental_generateSpeech({\n\t\t\tmodel: this.model,\n\t\t\ttext,\n\t\t\tvoice: options?.speaker || this.defaultVoice,\n\t\t\tlanguage: options?.language,\n\t\t\tproviderOptions: options?.providerOptions,\n\t\t\tabortSignal: options?.abortSignal,\n\t\t\theaders: options?.headers\n\t\t});\n\t\tconst stream = new PassThrough();\n\t\tstream.end(Buffer.from(result.audio.uint8Array));\n\t\treturn stream;\n\t}\n\tasync listen() {\n\t\tthrow new Error(\"AI SDK speech models do not support transcription. Use AISDKTranscription instead.\");\n\t}\n\tasync getSpeakers() {\n\t\treturn [];\n\t}\n\tasync getListener() {\n\t\treturn { enabled: false };\n\t}\n\tasync streamToText(stream) {\n\t\tconst chunks = [];\n\t\tfor await (const chunk of stream) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n\t\treturn Buffer.concat(chunks).toString(\"utf-8\");\n\t}\n};\n//#endregion\n//#region src/voice/aisdk/transcription.ts\nvar AISDKTranscription = class extends MastraVoice {\n\tmodel;\n\tconstructor(model) {\n\t\tsuper({ name: \"ai-sdk-transcription\" });\n\t\tthis.model = model;\n\t}\n\tasync speak() {\n\t\tthrow new Error(\"AI SDK transcription models do not support text-to-speech. Use AISDKSpeech instead.\");\n\t}\n\tasync getSpeakers() {\n\t\treturn [];\n\t}\n\tasync getListener() {\n\t\treturn { enabled: true };\n\t}\n\t/**\n\t* Transcribe audio to text\n\t* For enhanced metadata (segments, language, duration), use AI SDK's transcribe() directly\n\t*/\n\tasync listen(audioStream, options) {\n\t\tconst audioBuffer = await this.convertToBuffer(audioStream);\n\t\treturn (await experimental_transcribe({\n\t\t\tmodel: this.model,\n\t\t\taudio: audioBuffer,\n\t\t\tproviderOptions: options?.providerOptions,\n\t\t\tabortSignal: options?.abortSignal,\n\t\t\theaders: options?.headers\n\t\t})).text;\n\t}\n\tasync convertToBuffer(audio) {\n\t\tif (Buffer.isBuffer(audio)) return audio;\n\t\tif (audio instanceof Uint8Array) return Buffer.from(audio);\n\t\tif (typeof audio === \"string\") return Buffer.from(audio, \"base64\");\n\t\tconst chunks = [];\n\t\tfor await (const chunk of audio) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n\t\treturn Buffer.concat(chunks);\n\t}\n};\n//#endregion\nexport { AISDKSpeech as n, MastraVoice as r, AISDKTranscription as t };\n\n//# sourceMappingURL=aisdk-C_K-VCwq.js.map","import { PassThrough } from 'node:stream';\n\nimport { SpeechClient, v2 } from '@google-cloud/speech';\nimport type { google as SpeechTypes } from '@google-cloud/speech/build/protos/protos';\nimport { TextToSpeechClient } from '@google-cloud/text-to-speech';\nimport type { google as TextToSpeechTypes } from '@google-cloud/text-to-speech/build/protos/protos';\nimport { MastraVoice } from '@internal/voice';\n\n/**\n * Configuration for Google Cloud Voice models\n * @interface GoogleModelConfig\n * @property {string} [apiKey] - Optional Google Cloud API key. If not provided, will use GOOGLE_API_KEY environment variable\n * @property {string} [keyFilename] - Optional path to a service account key file. If not provided, will use GOOGLE_APPLICATION_CREDENTIALS environment variable\n * @property {{ client_email?: string; private_key?: string }} [credentials] - Optional in-memory service account credentials\n */\nexport interface GoogleModelConfig {\n apiKey?: string;\n keyFilename?: string;\n credentials?: {\n client_email?: string;\n private_key?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Configuration options for GoogleVoice\n * @interface GoogleVoiceConfig\n */\nexport interface GoogleVoiceConfig {\n /** Configuration for speech synthesis (TTS) */\n speechModel?: GoogleModelConfig;\n /** Configuration for speech recognition (STT) */\n listeningModel?: GoogleModelConfig;\n /** Default voice ID to use for speech synthesis */\n speaker?: string;\n /**\n * Enable Vertex AI mode for enterprise deployments.\n * When true, uses Google Cloud project-based authentication instead of API keys.\n * Requires `project` to be set or GOOGLE_CLOUD_PROJECT environment variable.\n */\n vertexAI?: boolean;\n /**\n * Google Cloud project ID (required when vertexAI is true).\n * Falls back to GOOGLE_CLOUD_PROJECT environment variable.\n */\n project?: string;\n /**\n * Google Cloud region for Vertex AI endpoints.\n * Falls back to GOOGLE_CLOUD_LOCATION environment variable.\n * @default 'us-central1'\n */\n location?: string;\n}\n\ntype AuthConfig = Pick<GoogleModelConfig, 'apiKey' | 'keyFilename' | 'credentials'> & {\n projectId?: string;\n};\n\ntype GoogleClientOptions = AuthConfig;\n\nconst resolveAuthConfig = (\n modelConfig: GoogleModelConfig | undefined,\n fallback: AuthConfig,\n vertexConfig?: { vertexAI?: boolean; project?: string },\n): AuthConfig => {\n const resolved: AuthConfig = {};\n\n // For Vertex AI, prioritize project-based auth over API keys\n if (vertexConfig?.vertexAI) {\n const projectId = vertexConfig.project || process.env.GOOGLE_CLOUD_PROJECT;\n if (projectId) {\n resolved.projectId = projectId;\n }\n }\n\n const apiKey = modelConfig?.apiKey ?? fallback.apiKey;\n // Only use API key if not in Vertex AI mode\n if (apiKey && !vertexConfig?.vertexAI) {\n resolved.apiKey = apiKey;\n }\n\n const keyFilename = modelConfig?.keyFilename ?? fallback.keyFilename;\n if (keyFilename) {\n resolved.keyFilename = keyFilename;\n }\n\n const credentials = modelConfig?.credentials ?? fallback.credentials;\n if (credentials) {\n resolved.credentials = credentials;\n }\n\n return resolved;\n};\n\nconst buildAuthOptions = (\n config: AuthConfig,\n vertexConfig?: { vertexAI?: boolean; location?: string },\n): GoogleClientOptions => {\n const options: GoogleClientOptions = {};\n\n if (config.credentials) {\n options.credentials = config.credentials;\n }\n\n if (config.keyFilename) {\n options.keyFilename = config.keyFilename;\n }\n\n // Only use API key if not using Vertex AI\n if (config.apiKey && !vertexConfig?.vertexAI) {\n options.apiKey = config.apiKey;\n }\n\n // For Vertex AI, set the project ID\n if (config.projectId) {\n options.projectId = config.projectId;\n }\n\n return options;\n};\n\ntype V2RecognitionConfig = SpeechTypes.cloud.speech.v2.IRecognitionConfig;\n\nexport interface GoogleListenOptionsV1 {\n stream?: boolean;\n config?: SpeechTypes.cloud.speech.v1.IRecognitionConfig;\n}\n\nexport interface GoogleListenOptionsV2 {\n stream?: boolean;\n v2: true;\n config?: V2RecognitionConfig;\n recognizer?: string;\n}\n\nexport type GoogleListenOptions = GoogleListenOptionsV1 | GoogleListenOptionsV2;\n\ntype ISynthesizeSpeechRequest = TextToSpeechTypes.cloud.texttospeech.v1.ISynthesizeSpeechRequest;\n\nexport interface GoogleSpeakOptions {\n speaker?: string;\n languageCode?: string;\n input?: ISynthesizeSpeechRequest['input'];\n voice?: ISynthesizeSpeechRequest['voice'];\n audioConfig?: ISynthesizeSpeechRequest['audioConfig'];\n}\n\nconst DEFAULT_VOICE = 'en-US-Casual-K';\n\n/**\n * GoogleVoice class provides Text-to-Speech and Speech-to-Text capabilities using Google Cloud services.\n * Supports both standard Google Cloud API authentication and Vertex AI mode for enterprise deployments.\n *\n * @class GoogleVoice\n * @extends MastraVoice\n *\n * @example Standard usage with API key\n * ```typescript\n * const voice = new GoogleVoice({\n * speechModel: { apiKey: 'your-api-key' },\n * speaker: 'en-US-Studio-O',\n * });\n * ```\n *\n * @example Vertex AI mode (recommended for production)\n * ```typescript\n * const voice = new GoogleVoice({\n * vertexAI: true,\n * project: 'your-gcp-project',\n * location: 'us-central1',\n * speaker: 'en-US-Studio-O',\n * });\n * ```\n *\n * @example Vertex AI with service account\n * ```typescript\n * const voice = new GoogleVoice({\n * vertexAI: true,\n * project: 'your-gcp-project',\n * speechModel: {\n * keyFilename: '/path/to/service-account.json',\n * },\n * });\n * ```\n */\nexport class GoogleVoice extends MastraVoice {\n private ttsClient: TextToSpeechClient;\n private speechClient: SpeechClient;\n private speechClientV2?: v2.SpeechClient;\n private readonly speechOptionsV2: GoogleClientOptions;\n private readonly vertexAI: boolean;\n private readonly project?: string;\n private readonly location: string;\n\n /**\n * Creates an instance of GoogleVoice\n * @param {GoogleVoiceConfig} config - Configuration options\n * @param {GoogleModelConfig} [config.speechModel] - Configuration for speech synthesis\n * @param {GoogleModelConfig} [config.listeningModel] - Configuration for speech recognition\n * @param {string} [config.speaker] - Default voice ID to use for speech synthesis\n * @param {boolean} [config.vertexAI] - Enable Vertex AI mode\n * @param {string} [config.project] - Google Cloud project ID (required for Vertex AI)\n * @param {string} [config.location] - Google Cloud region (default: 'us-central1')\n */\n constructor({ listeningModel, speechModel, speaker, vertexAI = false, project, location }: GoogleVoiceConfig = {}) {\n const defaultApiKey = process.env.GOOGLE_API_KEY;\n const defaultKeyFilename = process.env.GOOGLE_APPLICATION_CREDENTIALS;\n const defaultSpeaker = DEFAULT_VOICE;\n\n // Resolve Vertex AI configuration\n const resolvedProject = project || process.env.GOOGLE_CLOUD_PROJECT;\n const resolvedLocation = location || process.env.GOOGLE_CLOUD_LOCATION || 'us-central1';\n\n // Validate Vertex AI configuration\n if (vertexAI && !resolvedProject) {\n throw new Error(\n 'Google Cloud project ID is required when using Vertex AI. ' +\n 'Set GOOGLE_CLOUD_PROJECT environment variable or pass project to constructor.',\n );\n }\n\n const vertexConfig = { vertexAI, project: resolvedProject };\n\n const sharedFallback: AuthConfig = {\n apiKey: defaultApiKey ?? speechModel?.apiKey ?? listeningModel?.apiKey,\n keyFilename: defaultKeyFilename ?? speechModel?.keyFilename ?? listeningModel?.keyFilename,\n credentials: speechModel?.credentials ?? listeningModel?.credentials,\n projectId: resolvedProject,\n };\n\n const speechAuthConfig = resolveAuthConfig(speechModel, sharedFallback, vertexConfig);\n const listeningAuthConfig = resolveAuthConfig(listeningModel, sharedFallback, vertexConfig);\n\n super({\n speechModel: {\n name: '',\n apiKey: speechAuthConfig.apiKey ?? defaultApiKey,\n },\n listeningModel: {\n name: '',\n apiKey: listeningAuthConfig.apiKey ?? defaultApiKey,\n },\n speaker: speaker ?? defaultSpeaker,\n });\n\n this.vertexAI = vertexAI;\n this.project = resolvedProject;\n this.location = resolvedLocation;\n\n const ttsOptions = buildAuthOptions(speechAuthConfig, { vertexAI, location: resolvedLocation });\n const speechOptions = buildAuthOptions(listeningAuthConfig, { vertexAI, location: resolvedLocation });\n\n this.ttsClient = new TextToSpeechClient(ttsOptions);\n this.speechClient = new SpeechClient(speechOptions);\n this.speechOptionsV2 = speechOptions;\n }\n\n private getV2SpeechClient(): v2.SpeechClient {\n if (!this.speechClientV2) {\n this.speechClientV2 = new v2.SpeechClient(this.speechOptionsV2);\n }\n return this.speechClientV2;\n }\n\n /**\n * Check if Vertex AI mode is enabled\n * @returns {boolean} True if using Vertex AI\n */\n isUsingVertexAI(): boolean {\n return this.vertexAI;\n }\n\n /**\n * Get the configured Google Cloud project ID\n * @returns {string | undefined} The project ID or undefined if not set\n */\n getProject(): string | undefined {\n return this.project;\n }\n\n /**\n * Get the configured Google Cloud location/region\n * @returns {string} The location (default: 'us-central1')\n */\n getLocation(): string {\n return this.location;\n }\n\n /**\n * Gets a list of available voices\n * @returns {Promise<Array<{voiceId: string, languageCodes: string[]}>>} List of available voices and their supported languages. Default language is en-US.\n */\n async getSpeakers({ languageCode = 'en-US' }: { languageCode?: string } = {}) {\n const [response] = await this.ttsClient.listVoices({ languageCode: languageCode });\n return (response?.voices || [])\n .filter(voice => voice.name && voice.languageCodes)\n .map(voice => ({\n voiceId: voice.name!,\n languageCodes: voice.languageCodes!,\n }));\n }\n\n private async streamToString(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n\n /**\n * Converts text to speech.\n *\n * When `input` is a string or stream, builds a text-only request (existing behaviour).\n * Pass `options.input` to send richer proto fields (ssml, markup, prompt,\n * customPronunciations, multiSpeakerMarkup) and `options.voice` for fields\n * like modelName or multiSpeakerVoiceConfig.\n *\n * @param {string | NodeJS.ReadableStream} input - Text or stream to convert to speech\n * @param {GoogleSpeakOptions} [options] - Speech synthesis options\n * @returns {Promise<NodeJS.ReadableStream>} Stream of synthesised audio. Default encoding is LINEAR16.\n */\n async speak(input: string | NodeJS.ReadableStream, options?: GoogleSpeakOptions): Promise<NodeJS.ReadableStream> {\n const defaultVoiceName = options?.speaker || this.speaker;\n const defaultLanguageCode = options?.languageCode || defaultVoiceName?.split('-').slice(0, 2).join('-') || 'en-US';\n\n const requestInput: ISynthesizeSpeechRequest['input'] = options?.input\n ? { ...options.input }\n : { text: typeof input === 'string' ? input : await this.streamToString(input) };\n\n // When the caller provides a rich input object but no explicit text field,\n // populate it from the positional `input` argument for convenience.\n if (\n options?.input &&\n !options.input.text &&\n !options.input.ssml &&\n !options.input.markup &&\n !options.input.multiSpeakerMarkup\n ) {\n requestInput!.text = typeof input === 'string' ? input : await this.streamToString(input);\n }\n\n const request: ISynthesizeSpeechRequest = {\n input: requestInput,\n voice: {\n name: defaultVoiceName,\n languageCode: defaultLanguageCode,\n ...options?.voice,\n },\n audioConfig: options?.audioConfig || { audioEncoding: 'LINEAR16' },\n };\n\n const [response] = await this.ttsClient.synthesizeSpeech(request);\n\n if (!response.audioContent) {\n throw new Error('No audio content returned.');\n }\n\n if (typeof response.audioContent === 'string') {\n throw new Error('Audio content is a string.');\n }\n\n const stream = new PassThrough();\n stream.end(Buffer.from(response.audioContent));\n return stream;\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n /**\n * Converts speech to text using Cloud Speech-to-Text v1 or v2.\n *\n * Pass `{ v2: true }` in options to use the v2 API, which supports additional\n * audio formats like AAC-in-MP4 (iOS Safari) via `autoDecodingConfig` or\n * `explicitDecodingConfig`. The v1 path remains the default.\n *\n * @param {NodeJS.ReadableStream} audioStream - Audio stream to transcribe. Default encoding is LINEAR16.\n * @param {GoogleListenOptions} [options] - Recognition options\n * @returns {Promise<string>} Transcribed text\n */\n async listen(audioStream: NodeJS.ReadableStream, options?: GoogleListenOptions): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n const buffer = Buffer.concat(chunks);\n\n if (options && 'v2' in options && options.v2) {\n return this.recognizeV2(buffer, options);\n }\n\n return this.recognizeV1(buffer, options as GoogleListenOptionsV1 | undefined);\n }\n\n private async recognizeV1(buffer: Buffer, options?: GoogleListenOptionsV1): Promise<string> {\n const request = {\n config: {\n encoding: 'LINEAR16',\n languageCode: 'en-US',\n ...options?.config,\n },\n audio: {\n content: buffer.toString('base64'),\n },\n };\n const [response] = await this.speechClient.recognize(request as SpeechTypes.cloud.speech.v1.IRecognizeRequest);\n return this.extractTranscription(response?.results);\n }\n\n private async recognizeV2(buffer: Buffer, options: GoogleListenOptionsV2): Promise<string> {\n const config: V2RecognitionConfig = { ...options.config };\n // Default to auto-decoding if neither decoding config is specified\n if (!config.autoDecodingConfig && !config.explicitDecodingConfig) {\n config.autoDecodingConfig = {};\n }\n if (!config.languageCodes || config.languageCodes.length === 0) {\n config.languageCodes = ['en-US'];\n }\n if (!config.model) {\n config.model = 'long';\n }\n\n let recognizer = options.recognizer;\n if (!recognizer) {\n const project = this.project || (await this.getV2SpeechClient().getProjectId());\n recognizer = `projects/${project}/locations/global/recognizers/_`;\n }\n\n const request: SpeechTypes.cloud.speech.v2.IRecognizeRequest = {\n recognizer,\n config,\n content: buffer,\n };\n\n const client = this.getV2SpeechClient();\n const [response] = await client.recognize(request);\n return this.extractTranscription(response?.results);\n }\n\n private extractTranscription(\n results:\n | SpeechTypes.cloud.speech.v1.ISpeechRecognitionResult[]\n | SpeechTypes.cloud.speech.v2.ISpeechRecognitionResult[]\n | null\n | undefined,\n ): string {\n if (!results || results.length === 0) {\n throw new Error('No transcription results returned');\n }\n\n const transcription = results\n .map((result: any) => {\n if (!result.alternatives || result.alternatives.length === 0) {\n return '';\n }\n return result.alternatives[0].transcript || '';\n })\n .filter((text: string) => text.length > 0)\n .join(' ');\n\n if (!transcription) {\n throw new Error('No valid transcription found in results');\n }\n\n return transcription;\n }\n}\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { google as SpeechTypes } from '@google-cloud/speech/build/protos/protos';
|
|
2
2
|
import type { google as TextToSpeechTypes } from '@google-cloud/text-to-speech/build/protos/protos';
|
|
3
|
-
import { MastraVoice } from './_types/@internal_voice/dist/index.
|
|
3
|
+
import { MastraVoice } from './_types/@internal_voice/dist/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Configuration for Google Cloud Voice models
|
|
6
6
|
* @interface GoogleModelConfig
|