@mastra/voice-google 0.14.3 → 0.14.4
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 +65 -13
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/base/index.d.ts +2 -5
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/{index-Biaf3BmX.d.ts → index-TNVgGNjs.d.ts} +1 -5
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +13 -15
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/types/index.d.ts +1 -4
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/integrations-voice-google.md +11 -11
- package/dist/docs/references/reference-voice-overview.md +24 -24
- package/dist/index.cjs +4 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -8
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
|
@@ -1537,6 +1537,10 @@ export declare class EmptyResponseBodyError extends AISDKError {
|
|
|
1537
1537
|
static isInstance(error: unknown): error is EmptyResponseBodyError;
|
|
1538
1538
|
}
|
|
1539
1539
|
|
|
1540
|
+
declare type EnforcedToolChoice = Extract<LanguageModelV2ToolChoice, {
|
|
1541
|
+
type: 'none';
|
|
1542
|
+
}>;
|
|
1543
|
+
|
|
1540
1544
|
export declare type ErrorHandler = (error: unknown) => void;
|
|
1541
1545
|
|
|
1542
1546
|
/**
|
|
@@ -1578,7 +1582,7 @@ declare interface EventSourceMessage {
|
|
|
1578
1582
|
* const eventStream =
|
|
1579
1583
|
* response.body
|
|
1580
1584
|
* .pipeThrough(new TextDecoderStream())
|
|
1581
|
-
* .pipeThrough(new EventSourceParserStream({
|
|
1585
|
+
* .pipeThrough(new EventSourceParserStream({onError: 'terminate'}))
|
|
1582
1586
|
* ```
|
|
1583
1587
|
*
|
|
1584
1588
|
* @public
|
|
@@ -1587,7 +1591,7 @@ declare class EventSourceParserStream extends TransformStream<
|
|
|
1587
1591
|
string,
|
|
1588
1592
|
EventSourceMessage
|
|
1589
1593
|
> {
|
|
1590
|
-
constructor({ onError, onRetry, onComment }?: StreamOptions);
|
|
1594
|
+
constructor({ onError, onRetry, onComment, maxBufferSize }?: StreamOptions);
|
|
1591
1595
|
}
|
|
1592
1596
|
|
|
1593
1597
|
/**
|
|
@@ -3400,7 +3404,7 @@ declare function injectJsonInstructionIntoMessages({ messages, schema, schemaPre
|
|
|
3400
3404
|
}): LanguageModelV2Prompt;
|
|
3401
3405
|
|
|
3402
3406
|
export declare class InvalidArgumentError extends AISDKError {
|
|
3403
|
-
private readonly [symbol$
|
|
3407
|
+
private readonly [symbol$d_2];
|
|
3404
3408
|
readonly parameter: string;
|
|
3405
3409
|
readonly value: unknown;
|
|
3406
3410
|
constructor({ parameter, value, message, }: {
|
|
@@ -3462,7 +3466,7 @@ export declare class InvalidResponseDataError extends AISDKError {
|
|
|
3462
3466
|
}
|
|
3463
3467
|
|
|
3464
3468
|
export declare class InvalidStreamPartError extends AISDKError {
|
|
3465
|
-
private readonly [symbol$
|
|
3469
|
+
private readonly [symbol$c_2];
|
|
3466
3470
|
readonly chunk: SingleRequestTextStreamPart<any>;
|
|
3467
3471
|
constructor({ chunk, message, }: {
|
|
3468
3472
|
chunk: SingleRequestTextStreamPart<any>;
|
|
@@ -3472,7 +3476,7 @@ export declare class InvalidStreamPartError extends AISDKError {
|
|
|
3472
3476
|
}
|
|
3473
3477
|
|
|
3474
3478
|
export declare class InvalidToolInputError extends AISDKError {
|
|
3475
|
-
private readonly [symbol$
|
|
3479
|
+
private readonly [symbol$f];
|
|
3476
3480
|
readonly toolName: string;
|
|
3477
3481
|
readonly toolInput: string;
|
|
3478
3482
|
constructor({ toolInput, toolName, cause, message, }: {
|
|
@@ -4663,7 +4667,7 @@ export declare class NoContentGeneratedError extends AISDKError {
|
|
|
4663
4667
|
- The model generated a response that could not be parsed.
|
|
4664
4668
|
*/
|
|
4665
4669
|
export declare class NoImageGeneratedError extends AISDKError {
|
|
4666
|
-
private readonly [symbol$
|
|
4670
|
+
private readonly [symbol$b_2];
|
|
4667
4671
|
/**
|
|
4668
4672
|
The response metadata for each call.
|
|
4669
4673
|
*/
|
|
@@ -4688,7 +4692,7 @@ export declare class NoImageGeneratedError extends AISDKError {
|
|
|
4688
4692
|
- `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.
|
|
4689
4693
|
*/
|
|
4690
4694
|
export declare class NoObjectGeneratedError extends AISDKError {
|
|
4691
|
-
private readonly [symbol$
|
|
4695
|
+
private readonly [symbol$a];
|
|
4692
4696
|
/**
|
|
4693
4697
|
The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.
|
|
4694
4698
|
*/
|
|
@@ -4720,7 +4724,7 @@ export declare class NoObjectGeneratedError extends AISDKError {
|
|
|
4720
4724
|
Thrown when no LLM output was generated, e.g. because of errors.
|
|
4721
4725
|
*/
|
|
4722
4726
|
export declare class NoOutputGeneratedError extends AISDKError {
|
|
4723
|
-
private readonly [symbol$
|
|
4727
|
+
private readonly [symbol$9_2];
|
|
4724
4728
|
constructor({ message, cause, }?: {
|
|
4725
4729
|
message?: string;
|
|
4726
4730
|
cause?: Error;
|
|
@@ -4732,7 +4736,7 @@ export declare class NoOutputGeneratedError extends AISDKError {
|
|
|
4732
4736
|
Thrown when no output type is specified and output-related methods are called.
|
|
4733
4737
|
*/
|
|
4734
4738
|
export declare class NoOutputSpecifiedError extends AISDKError {
|
|
4735
|
-
private readonly [symbol$
|
|
4739
|
+
private readonly [symbol$8_2];
|
|
4736
4740
|
constructor({ message }?: {
|
|
4737
4741
|
message?: string;
|
|
4738
4742
|
});
|
|
@@ -4786,7 +4790,7 @@ export declare class NoSuchProviderError extends NoSuchModelError {
|
|
|
4786
4790
|
}
|
|
4787
4791
|
|
|
4788
4792
|
export declare class NoSuchToolError extends AISDKError {
|
|
4789
|
-
private readonly [symbol$
|
|
4793
|
+
private readonly [symbol$e];
|
|
4790
4794
|
readonly toolName: string;
|
|
4791
4795
|
readonly availableTools: string[] | undefined;
|
|
4792
4796
|
constructor({ toolName, availableTools, message, }: {
|
|
@@ -7005,6 +7009,16 @@ declare interface StreamOptions {
|
|
|
7005
7009
|
* @param comment - The comment encountered in the stream.
|
|
7006
7010
|
*/
|
|
7007
7011
|
onComment?: ((comment: string) => void) | undefined;
|
|
7012
|
+
/**
|
|
7013
|
+
* Maximum number of characters the parser is allowed to buffer across calls to `feed()`.
|
|
7014
|
+
* See {@link ParserConfig.maxBufferSize} for details.
|
|
7015
|
+
*
|
|
7016
|
+
* When the limit is exceeded, the stream is always errored (regardless of the `onError`
|
|
7017
|
+
* setting) since the underlying parser is unrecoverable without a `reset()`.
|
|
7018
|
+
*
|
|
7019
|
+
* @defaultValue `undefined` (unbounded)
|
|
7020
|
+
*/
|
|
7021
|
+
maxBufferSize?: number | undefined;
|
|
7008
7022
|
}
|
|
7009
7023
|
|
|
7010
7024
|
/**
|
|
@@ -7489,6 +7503,8 @@ declare const symbol$d_2: unique symbol;
|
|
|
7489
7503
|
|
|
7490
7504
|
declare const symbol$e: unique symbol;
|
|
7491
7505
|
|
|
7506
|
+
declare const symbol$f: unique symbol;
|
|
7507
|
+
|
|
7492
7508
|
declare const symbol: unique symbol;
|
|
7493
7509
|
|
|
7494
7510
|
declare const symbol_2: unique symbol;
|
|
@@ -7855,7 +7871,7 @@ export declare interface ToolCallPart {
|
|
|
7855
7871
|
}
|
|
7856
7872
|
|
|
7857
7873
|
export declare class ToolCallRepairError extends AISDKError {
|
|
7858
|
-
private readonly [symbol$
|
|
7874
|
+
private readonly [symbol$7_2];
|
|
7859
7875
|
readonly originalError: NoSuchToolError | InvalidToolInputError;
|
|
7860
7876
|
constructor({ cause, originalError, message, }: {
|
|
7861
7877
|
message?: string;
|
|
@@ -7902,6 +7918,42 @@ export declare type ToolChoice<TOOLS extends Record<string, unknown>> = 'auto' |
|
|
|
7902
7918
|
toolName: Extract<keyof TOOLS, string>;
|
|
7903
7919
|
};
|
|
7904
7920
|
|
|
7921
|
+
/**
|
|
7922
|
+
* Thrown when a model response does not satisfy an enforced tool choice.
|
|
7923
|
+
*/
|
|
7924
|
+
export declare class ToolChoiceViolationError extends AISDKError {
|
|
7925
|
+
private readonly [symbol$6_2];
|
|
7926
|
+
/**
|
|
7927
|
+
* The tool choice that the model response did not satisfy.
|
|
7928
|
+
*/
|
|
7929
|
+
readonly toolChoice: EnforcedToolChoice;
|
|
7930
|
+
/**
|
|
7931
|
+
* Reason why the model finished generating the response.
|
|
7932
|
+
*/
|
|
7933
|
+
readonly finishReason: FinishReason;
|
|
7934
|
+
/**
|
|
7935
|
+
* The provider that returned the response.
|
|
7936
|
+
*/
|
|
7937
|
+
readonly provider: string;
|
|
7938
|
+
/**
|
|
7939
|
+
* The model that returned the response.
|
|
7940
|
+
*/
|
|
7941
|
+
readonly modelId: string;
|
|
7942
|
+
/**
|
|
7943
|
+
* The normalized content returned by the model.
|
|
7944
|
+
*/
|
|
7945
|
+
readonly content: Array<LanguageModelV2Content>;
|
|
7946
|
+
constructor({ toolChoice, finishReason, provider, modelId, content, message, }: {
|
|
7947
|
+
toolChoice: EnforcedToolChoice;
|
|
7948
|
+
finishReason: FinishReason;
|
|
7949
|
+
provider: string;
|
|
7950
|
+
modelId: string;
|
|
7951
|
+
content: Array<LanguageModelV2Content>;
|
|
7952
|
+
message?: string;
|
|
7953
|
+
});
|
|
7954
|
+
static isInstance(error: unknown): error is ToolChoiceViolationError;
|
|
7955
|
+
}
|
|
7956
|
+
|
|
7905
7957
|
/**
|
|
7906
7958
|
Content of a tool message. It is an array of tool result parts.
|
|
7907
7959
|
*/
|
|
@@ -8987,5 +9039,5 @@ export declare function zodSchema<OBJECT>(zodSchema: z4.core.$ZodType<OBJECT, an
|
|
|
8987
9039
|
}): Schema<OBJECT>;
|
|
8988
9040
|
|
|
8989
9041
|
export { }
|
|
8990
|
-
export { GatewayProviderSettings as GatewayProviderSettings, GatewayProvider as GatewayProvider, ParseResult as ParseResult, FlexibleValidator as FlexibleValidator, ValidationResult as ValidationResult, LanguageModelV2ToolResultOutput as LanguageModelV2ToolResultOutput, ProviderOptions as ProviderOptions, ReasoningPart as ReasoningPart, ToolOutputProperties as ToolOutputProperties, LanguageModelV2ToolResultPart as LanguageModelV2ToolResultPart, FlexibleSchema as FlexibleSchema, ImageModelV2CallWarning as ImageModelV2CallWarning, SpeechModelV2CallWarning as SpeechModelV2CallWarning, TranscriptionModelV2CallWarning as TranscriptionModelV2CallWarning, AttributeValue as AttributeValue, Tracer as Tracer, EmbeddingModelV2Embedding as EmbeddingModelV2Embedding, ImageModelV2ProviderMetadata as ImageModelV2ProviderMetadata, GlobalProviderModelId as GlobalProviderModelId, LanguageModelV2FinishReason as LanguageModelV2FinishReason, LanguageModelV2CallWarning as LanguageModelV2CallWarning, LanguageModelV2Middleware as LanguageModelV2Middleware, SharedV2ProviderMetadata as SharedV2ProviderMetadata, LanguageModelV2Usage as LanguageModelV2Usage, Source as Source, ResponseMessage as ResponseMessage, DeepPartialInternal as DeepPartialInternal, LanguageModelV2ToolCall as LanguageModelV2ToolCall, StreamTextOnAbortCallback as StreamTextOnAbortCallback, ValueOf as ValueOf, asUITool as asUITool, _ai_sdk_provider_utils as _ai_sdk_provider_utils, DataUIMessageChunk as DataUIMessageChunk, ConsumeStreamOptions as ConsumeStreamOptions, InferAgentTools as InferAgentTools, SingleRequestTextStreamPart as SingleRequestTextStreamPart, RetryErrorReason as RetryErrorReason, InferSchema as InferSchema, Job as Job, StreamObjectOnErrorCallback as StreamObjectOnErrorCallback, JSONValue_2 as JSONValue_2, LanguageModelV2CallOptions as LanguageModelV2CallOptions, LanguageModelV2 as LanguageModelV2, EmbeddingModelV2 as EmbeddingModelV2, ImageModelV2 as ImageModelV2, TranscriptionModelV2 as TranscriptionModelV2, SpeechModelV2 as SpeechModelV2, ExtractModelId as ExtractModelId, ExtractLiteralUnion as ExtractLiteralUnion, ProviderV2 as ProviderV2, getOriginalFetch as getOriginalFetch, UIMessageStreamResponseInit as UIMessageStreamResponseInit, InferUIMessageToolCall as InferUIMessageToolCall, Validator as Validator, StandardSchemaV1 as StandardSchemaV1, UIDataTypesToSchemas as UIDataTypesToSchemas, InferUIMessageData as InferUIMessageData, InferUIMessageMetadata as InferUIMessageMetadata, InferUIMessageTools as InferUIMessageTools, Resolvable as Resolvable, FetchFunction as FetchFunction, ValidateUIMessagesOptions as ValidateUIMessagesOptions };
|
|
8991
|
-
export { EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL, schemaSymbol, symbol$1, symbol$1_2, symbol$2, symbol$2_2, symbol$3, symbol$3_2, symbol$4, symbol$4_2, symbol$5, symbol$5_2, symbol$6, symbol$6_2, symbol$7, symbol$7_2, symbol$8, symbol$8_2, symbol$9, symbol$9_2, symbol$a, symbol$b, symbol$b_2, symbol$c, symbol$c_2, symbol$d, symbol$d_2, symbol$e, symbol, symbol_2, symbol_3, validatorSymbol };
|
|
9042
|
+
export { GatewayProviderSettings as GatewayProviderSettings, GatewayProvider as GatewayProvider, ParseResult as ParseResult, FlexibleValidator as FlexibleValidator, ValidationResult as ValidationResult, LanguageModelV2ToolResultOutput as LanguageModelV2ToolResultOutput, ProviderOptions as ProviderOptions, ReasoningPart as ReasoningPart, ToolOutputProperties as ToolOutputProperties, LanguageModelV2ToolResultPart as LanguageModelV2ToolResultPart, FlexibleSchema as FlexibleSchema, ImageModelV2CallWarning as ImageModelV2CallWarning, SpeechModelV2CallWarning as SpeechModelV2CallWarning, TranscriptionModelV2CallWarning as TranscriptionModelV2CallWarning, AttributeValue as AttributeValue, Tracer as Tracer, EmbeddingModelV2Embedding as EmbeddingModelV2Embedding, ImageModelV2ProviderMetadata as ImageModelV2ProviderMetadata, GlobalProviderModelId as GlobalProviderModelId, LanguageModelV2FinishReason as LanguageModelV2FinishReason, LanguageModelV2CallWarning as LanguageModelV2CallWarning, LanguageModelV2Middleware as LanguageModelV2Middleware, SharedV2ProviderMetadata as SharedV2ProviderMetadata, LanguageModelV2Usage as LanguageModelV2Usage, Source as Source, ResponseMessage as ResponseMessage, DeepPartialInternal as DeepPartialInternal, LanguageModelV2ToolCall as LanguageModelV2ToolCall, StreamTextOnAbortCallback as StreamTextOnAbortCallback, ValueOf as ValueOf, asUITool as asUITool, _ai_sdk_provider_utils as _ai_sdk_provider_utils, DataUIMessageChunk as DataUIMessageChunk, ConsumeStreamOptions as ConsumeStreamOptions, InferAgentTools as InferAgentTools, SingleRequestTextStreamPart as SingleRequestTextStreamPart, EnforcedToolChoice as EnforcedToolChoice, LanguageModelV2Content as LanguageModelV2Content, RetryErrorReason as RetryErrorReason, InferSchema as InferSchema, Job as Job, StreamObjectOnErrorCallback as StreamObjectOnErrorCallback, JSONValue_2 as JSONValue_2, LanguageModelV2CallOptions as LanguageModelV2CallOptions, LanguageModelV2 as LanguageModelV2, EmbeddingModelV2 as EmbeddingModelV2, ImageModelV2 as ImageModelV2, TranscriptionModelV2 as TranscriptionModelV2, SpeechModelV2 as SpeechModelV2, ExtractModelId as ExtractModelId, ExtractLiteralUnion as ExtractLiteralUnion, ProviderV2 as ProviderV2, getOriginalFetch as getOriginalFetch, UIMessageStreamResponseInit as UIMessageStreamResponseInit, InferUIMessageToolCall as InferUIMessageToolCall, Validator as Validator, StandardSchemaV1 as StandardSchemaV1, UIDataTypesToSchemas as UIDataTypesToSchemas, InferUIMessageData as InferUIMessageData, InferUIMessageMetadata as InferUIMessageMetadata, InferUIMessageTools as InferUIMessageTools, Resolvable as Resolvable, FetchFunction as FetchFunction, ValidateUIMessagesOptions as ValidateUIMessagesOptions };
|
|
9043
|
+
export { EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL, schemaSymbol, symbol$1, symbol$1_2, symbol$2, symbol$2_2, symbol$3, symbol$3_2, symbol$4, symbol$4_2, symbol$5, symbol$5_2, symbol$6, symbol$6_2, symbol$7, symbol$7_2, symbol$8, symbol$8_2, symbol$9, symbol$9_2, symbol$a, symbol$b, symbol$b_2, symbol$c, symbol$c_2, symbol$d, symbol$d_2, symbol$e, symbol$f, symbol, symbol_2, symbol_3, validatorSymbol };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { i as IMastraLogger, u as RegisteredLogger } from "../index-
|
|
2
|
-
|
|
3
|
-
declare class MastraBase {
|
|
1
|
+
import { i as IMastraLogger, u as RegisteredLogger } from "../index-TNVgGNjs.js";
|
|
2
|
+
export declare class MastraBase {
|
|
4
3
|
#private;
|
|
5
4
|
component: RegisteredLogger;
|
|
6
5
|
protected logger: IMastraLogger;
|
|
@@ -26,6 +25,4 @@ declare class MastraBase {
|
|
|
26
25
|
*/
|
|
27
26
|
__setLogger(logger: IMastraLogger): void;
|
|
28
27
|
}
|
|
29
|
-
//#endregion
|
|
30
|
-
export { MastraBase };
|
|
31
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Transform } from "stream";
|
|
2
|
-
//#region src/logger/adapter.d.ts
|
|
3
2
|
/**
|
|
4
3
|
* OpenTelemetry-compatible trace correlation fields, injected at the top
|
|
5
4
|
* level of a logger's native record.
|
|
@@ -91,8 +90,6 @@ declare function exportTrackedException(ctx: LoggerAdapterContext | undefined, e
|
|
|
91
90
|
* so the derived record preserves all context from the native call.
|
|
92
91
|
*/
|
|
93
92
|
declare function buildLogRecordData(args: unknown[]): Record<string, unknown> | undefined;
|
|
94
|
-
//#endregion
|
|
95
|
-
//#region src/logger/index.d.ts
|
|
96
93
|
declare const RegisteredLogger: {
|
|
97
94
|
readonly AGENT: 'AGENT';
|
|
98
95
|
readonly OBSERVABILITY: 'OBSERVABILITY';
|
|
@@ -314,6 +311,5 @@ declare class ConsoleLogger extends MastraLogger {
|
|
|
314
311
|
hasMore: boolean;
|
|
315
312
|
}>;
|
|
316
313
|
}
|
|
317
|
-
//#endregion
|
|
318
314
|
export { buildLogRecordData as _, LogFilter as a, LoggerTransport as c, createCustomTransport as d, AdaptableLogger as f, TraceFields as g, LoggerAdapterOptions as h, IMastraLogger as i, MastraLogger as l, LoggerAdapterContext as m, ConsoleLogger as n, LogFilterContext as o, AdapterLogSink as p, ConsoleLoggerOptions as r, LogLevel as s, BaseLogMessage as t, RegisteredLogger as u, exportTrackedException as v, isAdaptableLogger as y };
|
|
319
|
-
//# sourceMappingURL=index-
|
|
315
|
+
//# sourceMappingURL=index-TNVgGNjs.d.ts.map
|
package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
//#region src/request-context/index.d.ts
|
|
2
1
|
type RecordToTuple<T> = { [K in keyof T]: [K, T[K]]; }[keyof T][];
|
|
3
2
|
/**
|
|
4
3
|
* Reserved key for setting resourceId from middleware.
|
|
@@ -12,7 +11,7 @@ type RecordToTuple<T> = { [K in keyof T]: [K, T[K]]; }[keyof T][];
|
|
|
12
11
|
* requestContext.set(MASTRA_RESOURCE_ID_KEY, authenticatedUser.id);
|
|
13
12
|
* ```
|
|
14
13
|
*/
|
|
15
|
-
declare const MASTRA_RESOURCE_ID_KEY = "mastra__resourceId";
|
|
14
|
+
export declare const MASTRA_RESOURCE_ID_KEY = "mastra__resourceId";
|
|
16
15
|
/**
|
|
17
16
|
* Reserved key for setting threadId from middleware.
|
|
18
17
|
* When set in RequestContext, this takes precedence over client-provided values
|
|
@@ -25,7 +24,7 @@ declare const MASTRA_RESOURCE_ID_KEY = "mastra__resourceId";
|
|
|
25
24
|
* requestContext.set(MASTRA_THREAD_ID_KEY, threadId);
|
|
26
25
|
* ```
|
|
27
26
|
*/
|
|
28
|
-
declare const MASTRA_THREAD_ID_KEY = "mastra__threadId";
|
|
27
|
+
export declare const MASTRA_THREAD_ID_KEY = "mastra__threadId";
|
|
29
28
|
/**
|
|
30
29
|
* Reserved key for setting agent scopes from middleware.
|
|
31
30
|
*
|
|
@@ -46,7 +45,7 @@ declare const MASTRA_THREAD_ID_KEY = "mastra__threadId";
|
|
|
46
45
|
* requestContext.set(MASTRA_SCOPES_KEY, [`org:${user.orgId}`, `resource:${user.id}`]);
|
|
47
46
|
* ```
|
|
48
47
|
*/
|
|
49
|
-
declare const MASTRA_SCOPES_KEY = "mastra__scopes";
|
|
48
|
+
export declare const MASTRA_SCOPES_KEY = "mastra__scopes";
|
|
50
49
|
/**
|
|
51
50
|
* Reserved key for storing version overrides on RequestContext.
|
|
52
51
|
* When set, sub-agent delegation resolves versioned agents from these overrides.
|
|
@@ -58,13 +57,13 @@ declare const MASTRA_SCOPES_KEY = "mastra__scopes";
|
|
|
58
57
|
* });
|
|
59
58
|
* ```
|
|
60
59
|
*/
|
|
61
|
-
declare const MASTRA_VERSIONS_KEY = "mastra__versions";
|
|
60
|
+
export declare const MASTRA_VERSIONS_KEY = "mastra__versions";
|
|
62
61
|
/**
|
|
63
62
|
* Reserved key for storing the raw auth token from the incoming request.
|
|
64
63
|
* Used by the editor to forward authentication when connecting to MCP servers
|
|
65
64
|
* that require the same auth as the Mastra server itself.
|
|
66
65
|
*/
|
|
67
|
-
declare const MASTRA_AUTH_TOKEN_KEY = "mastra__authToken";
|
|
66
|
+
export declare const MASTRA_AUTH_TOKEN_KEY = "mastra__authToken";
|
|
68
67
|
/**
|
|
69
68
|
* Reserved key carrying a delegating agent's `MastraMemory` into a delegated
|
|
70
69
|
* run, so a sub-agent without its own memory can persist that run's transcript
|
|
@@ -75,7 +74,7 @@ declare const MASTRA_AUTH_TOKEN_KEY = "mastra__authToken";
|
|
|
75
74
|
* from the durable request-context snapshot and is not copied into further
|
|
76
75
|
* nested delegated runs. Internal to delegation — do not set it yourself.
|
|
77
76
|
*/
|
|
78
|
-
declare const MASTRA_INHERITED_MEMORY_KEY = "mastra__inheritedMemory";
|
|
77
|
+
export declare const MASTRA_INHERITED_MEMORY_KEY = "mastra__inheritedMemory";
|
|
79
78
|
/**
|
|
80
79
|
* Reserved key naming who sent a user message: `{ id, name?, avatarUrl? }`.
|
|
81
80
|
* Set by the host that authenticated the request; the agent-controller copies
|
|
@@ -88,7 +87,7 @@ declare const MASTRA_INHERITED_MEMORY_KEY = "mastra__inheritedMemory";
|
|
|
88
87
|
* requestContext.setRaw(MASTRA_MESSAGE_AUTHOR_KEY, { id: user.id, name: user.name, avatarUrl: user.avatarUrl });
|
|
89
88
|
* ```
|
|
90
89
|
*/
|
|
91
|
-
declare const MASTRA_MESSAGE_AUTHOR_KEY = "mastra__messageAuthor";
|
|
90
|
+
export declare const MASTRA_MESSAGE_AUTHOR_KEY = "mastra__messageAuthor";
|
|
92
91
|
/**
|
|
93
92
|
* Whether a request-context key is reserved for Mastra itself.
|
|
94
93
|
*
|
|
@@ -98,18 +97,18 @@ declare const MASTRA_MESSAGE_AUTHOR_KEY = "mastra__messageAuthor";
|
|
|
98
97
|
* Reserved keys are framework state rather than caller-provided data, so they
|
|
99
98
|
* are left out of span serialization.
|
|
100
99
|
*/
|
|
101
|
-
declare function isReservedRequestContextKey(key: string): boolean;
|
|
102
|
-
type VersionSelector = {
|
|
100
|
+
export declare function isReservedRequestContextKey(key: string): boolean;
|
|
101
|
+
export type VersionSelector = {
|
|
103
102
|
versionId: string;
|
|
104
103
|
} | {
|
|
105
104
|
status: 'draft' | 'published';
|
|
106
105
|
};
|
|
107
|
-
type VersionOverrides = {
|
|
106
|
+
export type VersionOverrides = {
|
|
108
107
|
agents?: Record<string, VersionSelector>;
|
|
109
108
|
/** Fallback status for sub-agents (and future primitives) without an explicit entry. */
|
|
110
109
|
defaultStatus?: 'draft' | 'published';
|
|
111
110
|
};
|
|
112
|
-
declare function mergeVersionOverrides(base?: VersionOverrides, overrides?: VersionOverrides): VersionOverrides | undefined;
|
|
111
|
+
export declare function mergeVersionOverrides(base?: VersionOverrides, overrides?: VersionOverrides): VersionOverrides | undefined;
|
|
113
112
|
/**
|
|
114
113
|
* Carries typed, request-specific values through agents, tools, and workflows.
|
|
115
114
|
* Pass the instance as `requestContext` when starting an operation.
|
|
@@ -131,7 +130,7 @@ declare function mergeVersionOverrides(base?: VersionOverrides, overrides?: Vers
|
|
|
131
130
|
* @see [Request context documentation](https://mastra.ai/docs/server/request-context)
|
|
132
131
|
* if packaged docs are unavailable.
|
|
133
132
|
*/
|
|
134
|
-
declare class RequestContext<Values extends Record<string, any> | unknown = unknown> {
|
|
133
|
+
export declare class RequestContext<Values extends Record<string, any> | unknown = unknown> {
|
|
135
134
|
private registry;
|
|
136
135
|
constructor(iterable?: Values extends Record<string, any> ? RecordToTuple<Partial<Values>> : Iterable<readonly [string, unknown]>);
|
|
137
136
|
/**
|
|
@@ -281,6 +280,5 @@ declare class RequestContext<Values extends Record<string, any> | unknown = unkn
|
|
|
281
280
|
*/
|
|
282
281
|
get all(): Values extends Record<string, any> ? Values : Record<string, any>;
|
|
283
282
|
}
|
|
284
|
-
|
|
285
|
-
export { MASTRA_AUTH_TOKEN_KEY, MASTRA_INHERITED_MEMORY_KEY, MASTRA_MESSAGE_AUTHOR_KEY, MASTRA_RESOURCE_ID_KEY, MASTRA_SCOPES_KEY, MASTRA_THREAD_ID_KEY, MASTRA_VERSIONS_KEY, RequestContext, VersionOverrides, VersionSelector, isReservedRequestContextKey, mergeVersionOverrides };
|
|
283
|
+
export {};
|
|
286
284
|
//# sourceMappingURL=index.d.ts.map
|
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.4"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
@@ -53,27 +53,27 @@ const voices = await voice.getSpeakers({ languageCode: 'en-US' })
|
|
|
53
53
|
|
|
54
54
|
**speechModel** (`GoogleModelConfig`): Configuration for text-to-speech functionality (Default: `{ apiKey: process.env.GOOGLE_API_KEY }`)
|
|
55
55
|
|
|
56
|
-
**speechModel.apiKey** (`string`): Google Cloud API key. Falls back to
|
|
56
|
+
**speechModel.apiKey** (`string`): Google Cloud API key. Falls back to GOOGLE_API_KEY environment variable. Not used when vertexAI is true.
|
|
57
57
|
|
|
58
|
-
**speechModel.keyFilename** (`string`): Path to service account JSON key file. Falls back to
|
|
58
|
+
**speechModel.keyFilename** (`string`): Path to service account JSON key file. Falls back to GOOGLE_APPLICATION_CREDENTIALS environment variable.
|
|
59
59
|
|
|
60
|
-
**speechModel.credentials** (`object`): In-memory service account credentials object with
|
|
60
|
+
**speechModel.credentials** (`object`): In-memory service account credentials object with client_email and private_key properties.
|
|
61
61
|
|
|
62
62
|
**listeningModel** (`GoogleModelConfig`): Configuration for speech-to-text functionality (Default: `{ apiKey: process.env.GOOGLE_API_KEY }`)
|
|
63
63
|
|
|
64
|
-
**listeningModel.apiKey** (`string`): Google Cloud API key. Falls back to
|
|
64
|
+
**listeningModel.apiKey** (`string`): Google Cloud API key. Falls back to GOOGLE_API_KEY environment variable. Not used when vertexAI is true.
|
|
65
65
|
|
|
66
|
-
**listeningModel.keyFilename** (`string`): Path to service account JSON key file. Falls back to
|
|
66
|
+
**listeningModel.keyFilename** (`string`): Path to service account JSON key file. Falls back to GOOGLE_APPLICATION_CREDENTIALS environment variable.
|
|
67
67
|
|
|
68
|
-
**listeningModel.credentials** (`object`): In-memory service account credentials object with
|
|
68
|
+
**listeningModel.credentials** (`object`): In-memory service account credentials object with client_email and private_key properties.
|
|
69
69
|
|
|
70
70
|
**speaker** (`string`): Default voice ID to use for text-to-speech (Default: `'en-US-Casual-K'`)
|
|
71
71
|
|
|
72
72
|
**vertexAI** (`boolean`): Enable Vertex AI mode for enterprise deployments. Uses project-based authentication instead of API keys. Requires 'project' to be set. (Default: `false`)
|
|
73
73
|
|
|
74
|
-
**project** (`string`): Google Cloud project ID (required when vertexAI is true). Falls back to
|
|
74
|
+
**project** (`string`): Google Cloud project ID (required when vertexAI is true). Falls back to GOOGLE_CLOUD_PROJECT environment variable.
|
|
75
75
|
|
|
76
|
-
**location** (`string`): Google Cloud region for Vertex AI. Falls back to
|
|
76
|
+
**location** (`string`): Google Cloud region for Vertex AI. Falls back to GOOGLE_CLOUD_LOCATION environment variable. (Default: `'us-central1'`)
|
|
77
77
|
|
|
78
78
|
### Methods
|
|
79
79
|
|
|
@@ -128,9 +128,9 @@ const transcript = await voice.listen(iosSafariAacStream, {
|
|
|
128
128
|
|
|
129
129
|
**options.v2** (`true`): Enables the v2 API path
|
|
130
130
|
|
|
131
|
-
**options.config** (`v2.IRecognitionConfig`): v2 recognition configuration. Defaults to auto-decoding with languageCodes: \['en-US'] and model: 'long'. Set autoDecodingConfig: {} to auto-detect the audio format, or use explicitDecodingConfig to specify an encoding like
|
|
131
|
+
**options.config** (`v2.IRecognitionConfig`): v2 recognition configuration. Defaults to auto-decoding with languageCodes: \['en-US'] and model: 'long'. Set autoDecodingConfig: {} to auto-detect the audio format, or use explicitDecodingConfig to specify an encoding like MP4_AAC, M4A_AAC, or MOV_AAC.
|
|
132
132
|
|
|
133
|
-
**options.recognizer** (`string`): v2 recognizer resource path. Defaults to projects/{project}/locations/global/recognizers/\_ where {project} is resolved from the constructor project option,
|
|
133
|
+
**options.recognizer** (`string`): v2 recognizer resource path. Defaults to projects/{project}/locations/global/recognizers/\_ where {project} is resolved from the constructor project option, GOOGLE_CLOUD_PROJECT, or the client's default project.
|
|
134
134
|
|
|
135
135
|
Returns: `Promise<string>`
|
|
136
136
|
|
|
@@ -549,7 +549,7 @@ The GeminiLiveVoice class emits the following events:
|
|
|
549
549
|
|
|
550
550
|
**speaking** (`event`): Emitted with audio metadata. Callback receives { audioData?: Int16Array, sampleRate?: number }.
|
|
551
551
|
|
|
552
|
-
**writing** (`event`): Emitted when transcribed text is available. Callback receives { text: string, role: 'assistant' | 'user' }. On native-audio models the assistant transcript is driven by the server's
|
|
552
|
+
**writing** (`event`): Emitted when transcribed text is available. Callback receives { text: string, role: 'assistant' | 'user' }. On native-audio models the assistant transcript is driven by the server's output_audio_transcription channel rather than modelTurn.parts.text.
|
|
553
553
|
|
|
554
554
|
**thinking** (`event`): Emitted on native-audio models with the model's chain-of-thought / reasoning text from modelTurn.parts.text. Callback receives { text: string }. Does not fire on non-native-audio models, where modelTurn.parts.text is the spoken response and is emitted as writing instead.
|
|
555
555
|
|
|
@@ -20,7 +20,7 @@ const voiceAgent = new Agent({
|
|
|
20
20
|
id: 'voice-agent',
|
|
21
21
|
name: 'Voice Agent',
|
|
22
22
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
23
|
-
model: 'openai/gpt-
|
|
23
|
+
model: 'openai/gpt-6.1-sol',
|
|
24
24
|
voice: new OpenAIVoice(),
|
|
25
25
|
})
|
|
26
26
|
```
|
|
@@ -44,7 +44,7 @@ const voiceAgent = new Agent({
|
|
|
44
44
|
id: 'voice-agent',
|
|
45
45
|
name: 'Voice Agent',
|
|
46
46
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
47
|
-
model: 'openai/gpt-
|
|
47
|
+
model: 'openai/gpt-6.1-sol',
|
|
48
48
|
voice: new OpenAIVoice(),
|
|
49
49
|
})
|
|
50
50
|
|
|
@@ -72,7 +72,7 @@ const voiceAgent = new Agent({
|
|
|
72
72
|
id: 'voice-agent',
|
|
73
73
|
name: 'Voice Agent',
|
|
74
74
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
75
|
-
model: 'openai/gpt-
|
|
75
|
+
model: 'openai/gpt-6.1-sol',
|
|
76
76
|
voice: new AzureVoice(),
|
|
77
77
|
})
|
|
78
78
|
|
|
@@ -99,7 +99,7 @@ const voiceAgent = new Agent({
|
|
|
99
99
|
id: 'voice-agent',
|
|
100
100
|
name: 'Voice Agent',
|
|
101
101
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
102
|
-
model: 'openai/gpt-
|
|
102
|
+
model: 'openai/gpt-6.1-sol',
|
|
103
103
|
voice: new ElevenLabsVoice(),
|
|
104
104
|
})
|
|
105
105
|
|
|
@@ -126,7 +126,7 @@ const voiceAgent = new Agent({
|
|
|
126
126
|
id: 'voice-agent',
|
|
127
127
|
name: 'Voice Agent',
|
|
128
128
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
129
|
-
model: 'openai/gpt-
|
|
129
|
+
model: 'openai/gpt-6.1-sol',
|
|
130
130
|
voice: new GoogleVoice(),
|
|
131
131
|
})
|
|
132
132
|
|
|
@@ -153,7 +153,7 @@ const voiceAgent = new Agent({
|
|
|
153
153
|
id: 'voice-agent',
|
|
154
154
|
name: 'Voice Agent',
|
|
155
155
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
156
|
-
model: 'openai/gpt-
|
|
156
|
+
model: 'openai/gpt-6.1-sol',
|
|
157
157
|
voice: new CloudflareVoice(),
|
|
158
158
|
})
|
|
159
159
|
|
|
@@ -180,7 +180,7 @@ const voiceAgent = new Agent({
|
|
|
180
180
|
id: 'voice-agent',
|
|
181
181
|
name: 'Voice Agent',
|
|
182
182
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
183
|
-
model: 'openai/gpt-
|
|
183
|
+
model: 'openai/gpt-6.1-sol',
|
|
184
184
|
voice: new DeepgramVoice(),
|
|
185
185
|
})
|
|
186
186
|
|
|
@@ -207,7 +207,7 @@ const voiceAgent = new Agent({
|
|
|
207
207
|
id: 'voice-agent',
|
|
208
208
|
name: 'Voice Agent',
|
|
209
209
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
210
|
-
model: 'openai/gpt-
|
|
210
|
+
model: 'openai/gpt-6.1-sol',
|
|
211
211
|
voice: new InworldVoice(),
|
|
212
212
|
})
|
|
213
213
|
|
|
@@ -234,7 +234,7 @@ const voiceAgent = new Agent({
|
|
|
234
234
|
id: 'voice-agent',
|
|
235
235
|
name: 'Voice Agent',
|
|
236
236
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
237
|
-
model: 'openai/gpt-
|
|
237
|
+
model: 'openai/gpt-6.1-sol',
|
|
238
238
|
voice: new SpeechifyVoice(),
|
|
239
239
|
})
|
|
240
240
|
|
|
@@ -261,7 +261,7 @@ const voiceAgent = new Agent({
|
|
|
261
261
|
id: 'voice-agent',
|
|
262
262
|
name: 'Voice Agent',
|
|
263
263
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
264
|
-
model: 'openai/gpt-
|
|
264
|
+
model: 'openai/gpt-6.1-sol',
|
|
265
265
|
voice: new SarvamVoice(),
|
|
266
266
|
})
|
|
267
267
|
|
|
@@ -288,7 +288,7 @@ const voiceAgent = new Agent({
|
|
|
288
288
|
id: 'voice-agent',
|
|
289
289
|
name: 'Voice Agent',
|
|
290
290
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
291
|
-
model: 'openai/gpt-
|
|
291
|
+
model: 'openai/gpt-6.1-sol',
|
|
292
292
|
voice: new MurfVoice(),
|
|
293
293
|
})
|
|
294
294
|
|
|
@@ -323,7 +323,7 @@ const voiceAgent = new Agent({
|
|
|
323
323
|
id: 'voice-agent',
|
|
324
324
|
name: 'Voice Agent',
|
|
325
325
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
326
|
-
model: 'openai/gpt-
|
|
326
|
+
model: 'openai/gpt-6.1-sol',
|
|
327
327
|
voice: new OpenAIVoice(),
|
|
328
328
|
})
|
|
329
329
|
|
|
@@ -352,7 +352,7 @@ const voiceAgent = new Agent({
|
|
|
352
352
|
id: 'voice-agent',
|
|
353
353
|
name: 'Voice Agent',
|
|
354
354
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
355
|
-
model: 'openai/gpt-
|
|
355
|
+
model: 'openai/gpt-6.1-sol',
|
|
356
356
|
voice: new AzureVoice(),
|
|
357
357
|
})
|
|
358
358
|
|
|
@@ -380,7 +380,7 @@ const voiceAgent = new Agent({
|
|
|
380
380
|
id: 'voice-agent',
|
|
381
381
|
name: 'Voice Agent',
|
|
382
382
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
383
|
-
model: 'openai/gpt-
|
|
383
|
+
model: 'openai/gpt-6.1-sol',
|
|
384
384
|
voice: new ElevenLabsVoice(),
|
|
385
385
|
})
|
|
386
386
|
|
|
@@ -408,7 +408,7 @@ const voiceAgent = new Agent({
|
|
|
408
408
|
id: 'voice-agent',
|
|
409
409
|
name: 'Voice Agent',
|
|
410
410
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
411
|
-
model: 'openai/gpt-
|
|
411
|
+
model: 'openai/gpt-6.1-sol',
|
|
412
412
|
voice: new GoogleVoice(),
|
|
413
413
|
})
|
|
414
414
|
|
|
@@ -436,7 +436,7 @@ const voiceAgent = new Agent({
|
|
|
436
436
|
id: 'voice-agent',
|
|
437
437
|
name: 'Voice Agent',
|
|
438
438
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
439
|
-
model: 'openai/gpt-
|
|
439
|
+
model: 'openai/gpt-6.1-sol',
|
|
440
440
|
voice: new CloudflareVoice(),
|
|
441
441
|
})
|
|
442
442
|
|
|
@@ -464,7 +464,7 @@ const voiceAgent = new Agent({
|
|
|
464
464
|
id: 'voice-agent',
|
|
465
465
|
name: 'Voice Agent',
|
|
466
466
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
467
|
-
model: 'openai/gpt-
|
|
467
|
+
model: 'openai/gpt-6.1-sol',
|
|
468
468
|
voice: new DeepgramVoice(),
|
|
469
469
|
})
|
|
470
470
|
|
|
@@ -492,7 +492,7 @@ const voiceAgent = new Agent({
|
|
|
492
492
|
id: 'voice-agent',
|
|
493
493
|
name: 'Voice Agent',
|
|
494
494
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
495
|
-
model: 'openai/gpt-
|
|
495
|
+
model: 'openai/gpt-6.1-sol',
|
|
496
496
|
voice: new InworldVoice(),
|
|
497
497
|
})
|
|
498
498
|
|
|
@@ -520,7 +520,7 @@ const voiceAgent = new Agent({
|
|
|
520
520
|
id: 'voice-agent',
|
|
521
521
|
name: 'Voice Agent',
|
|
522
522
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
523
|
-
model: 'openai/gpt-
|
|
523
|
+
model: 'openai/gpt-6.1-sol',
|
|
524
524
|
voice: new SarvamVoice(),
|
|
525
525
|
})
|
|
526
526
|
|
|
@@ -552,7 +552,7 @@ const voiceAgent = new Agent({
|
|
|
552
552
|
id: 'voice-agent',
|
|
553
553
|
name: 'Voice Agent',
|
|
554
554
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
555
|
-
model: 'openai/gpt-
|
|
555
|
+
model: 'openai/gpt-6.1-sol',
|
|
556
556
|
voice: new OpenAIRealtimeVoice(),
|
|
557
557
|
})
|
|
558
558
|
|
|
@@ -582,7 +582,7 @@ const voiceAgent = new Agent({
|
|
|
582
582
|
id: 'voice-agent',
|
|
583
583
|
name: 'Voice Agent',
|
|
584
584
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
585
|
-
model: 'openai/gpt-
|
|
585
|
+
model: 'openai/gpt-6.1-sol',
|
|
586
586
|
voice: new GeminiLiveVoice({
|
|
587
587
|
// Live API mode
|
|
588
588
|
apiKey: process.env.GOOGLE_API_KEY,
|
|
@@ -631,7 +631,7 @@ const voiceAgent = new Agent({
|
|
|
631
631
|
id: 'voice-agent',
|
|
632
632
|
name: 'Voice Agent',
|
|
633
633
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
634
|
-
model: 'openai/gpt-
|
|
634
|
+
model: 'openai/gpt-6.1-sol',
|
|
635
635
|
voice: new NovaSonicVoice({
|
|
636
636
|
region: 'us-east-1',
|
|
637
637
|
speaker: 'matthew',
|
|
@@ -674,7 +674,7 @@ const voiceAgent = new Agent({
|
|
|
674
674
|
id: 'voice-agent',
|
|
675
675
|
name: 'Voice Agent',
|
|
676
676
|
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
677
|
-
model: 'openai/gpt-
|
|
677
|
+
model: 'openai/gpt-6.1-sol',
|
|
678
678
|
voice: new InworldRealtimeVoice({
|
|
679
679
|
apiKey: process.env.INWORLD_API_KEY,
|
|
680
680
|
model: 'inworld/models/gemma-4-26b-a4b-it',
|
|
@@ -1120,7 +1120,7 @@ const voiceAgent = new Agent({
|
|
|
1120
1120
|
id: 'aisdk-voice-agent',
|
|
1121
1121
|
name: 'AI SDK Voice Agent',
|
|
1122
1122
|
instructions: 'You are a helpful assistant with voice capabilities.',
|
|
1123
|
-
model: 'openai/gpt-
|
|
1123
|
+
model: 'openai/gpt-6.1-sol',
|
|
1124
1124
|
voice,
|
|
1125
1125
|
})
|
|
1126
1126
|
```
|
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
let stream = require("stream");
|
|
3
3
|
let _google_cloud_speech = require("@google-cloud/speech");
|
|
4
4
|
let _google_cloud_text_to_speech = require("@google-cloud/text-to-speech");
|
|
5
|
-
|
|
5
|
+
// ../../packages/_internal-core/dist/logger/index.js
|
|
6
6
|
/**
|
|
7
7
|
* Export a tracked exception through the adapter sink, mirroring the
|
|
8
8
|
* DualLogger dual-write shape (`errorId`/`domain`/`category`/`details`/`cause`
|
|
@@ -235,8 +235,7 @@ var ConsoleLogger = class ConsoleLogger extends MastraLogger {
|
|
|
235
235
|
};
|
|
236
236
|
}
|
|
237
237
|
};
|
|
238
|
-
|
|
239
|
-
//#region ../../packages/_internal-core/dist/base/index.js
|
|
238
|
+
// ../../packages/_internal-core/dist/base/index.js
|
|
240
239
|
var MastraBase = class {
|
|
241
240
|
component = RegisteredLogger.LLM;
|
|
242
241
|
logger;
|
|
@@ -270,8 +269,7 @@ var MastraBase = class {
|
|
|
270
269
|
this.logger = "child" in logger && typeof logger.child === "function" ? logger.child({ component: this.component }) : logger;
|
|
271
270
|
}
|
|
272
271
|
};
|
|
273
|
-
|
|
274
|
-
//#region ../../packages/_internals/voice/dist/aisdk-C_K-VCwq.js
|
|
272
|
+
// ../../packages/_internals/voice/dist/aisdk-c08VRfTf.js
|
|
275
273
|
var MastraVoice = class extends MastraBase {
|
|
276
274
|
listeningModel;
|
|
277
275
|
speechModel;
|
|
@@ -375,8 +373,7 @@ var MastraVoice = class extends MastraBase {
|
|
|
375
373
|
return Promise.resolve({ enabled: false });
|
|
376
374
|
}
|
|
377
375
|
};
|
|
378
|
-
|
|
379
|
-
//#region src/index.ts
|
|
376
|
+
// src/index.ts
|
|
380
377
|
const resolveAuthConfig = (modelConfig, fallback, vertexConfig) => {
|
|
381
378
|
const resolved = {};
|
|
382
379
|
if (vertexConfig?.vertexAI) {
|
|
@@ -638,7 +635,6 @@ var GoogleVoice = class extends MastraVoice {
|
|
|
638
635
|
return transcription;
|
|
639
636
|
}
|
|
640
637
|
};
|
|
641
|
-
//#endregion
|
|
642
638
|
exports.GoogleVoice = GoogleVoice;
|
|
643
639
|
|
|
644
640
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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-c08VRfTf.js","../src/index.ts"],"sourcesContent":["import { Transform } from \"stream\";\n// 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// 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};\nexport { ConsoleLogger, LogLevel, LoggerTransport, MastraLogger, RegisteredLogger, buildLogRecordData, createCustomTransport, exportTrackedException, isAdaptableLogger };\n\n//# sourceMappingURL=index.js.map","import { ConsoleLogger, RegisteredLogger } from \"../logger/index.js\";\n// 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};\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// 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// 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// 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};\nexport { AISDKSpeech as n, MastraVoice as r, AISDKTranscription as t };\n\n//# sourceMappingURL=aisdk-c08VRfTf.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.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PassThrough } from "stream";
|
|
2
2
|
import { SpeechClient, v2 } from "@google-cloud/speech";
|
|
3
3
|
import { TextToSpeechClient } from "@google-cloud/text-to-speech";
|
|
4
|
-
|
|
4
|
+
// ../../packages/_internal-core/dist/logger/index.js
|
|
5
5
|
/**
|
|
6
6
|
* Export a tracked exception through the adapter sink, mirroring the
|
|
7
7
|
* DualLogger dual-write shape (`errorId`/`domain`/`category`/`details`/`cause`
|
|
@@ -234,8 +234,7 @@ var ConsoleLogger = class ConsoleLogger extends MastraLogger {
|
|
|
234
234
|
};
|
|
235
235
|
}
|
|
236
236
|
};
|
|
237
|
-
|
|
238
|
-
//#region ../../packages/_internal-core/dist/base/index.js
|
|
237
|
+
// ../../packages/_internal-core/dist/base/index.js
|
|
239
238
|
var MastraBase = class {
|
|
240
239
|
component = RegisteredLogger.LLM;
|
|
241
240
|
logger;
|
|
@@ -269,8 +268,7 @@ var MastraBase = class {
|
|
|
269
268
|
this.logger = "child" in logger && typeof logger.child === "function" ? logger.child({ component: this.component }) : logger;
|
|
270
269
|
}
|
|
271
270
|
};
|
|
272
|
-
|
|
273
|
-
//#region ../../packages/_internals/voice/dist/aisdk-C_K-VCwq.js
|
|
271
|
+
// ../../packages/_internals/voice/dist/aisdk-c08VRfTf.js
|
|
274
272
|
var MastraVoice = class extends MastraBase {
|
|
275
273
|
listeningModel;
|
|
276
274
|
speechModel;
|
|
@@ -374,8 +372,7 @@ var MastraVoice = class extends MastraBase {
|
|
|
374
372
|
return Promise.resolve({ enabled: false });
|
|
375
373
|
}
|
|
376
374
|
};
|
|
377
|
-
|
|
378
|
-
//#region src/index.ts
|
|
375
|
+
// src/index.ts
|
|
379
376
|
const resolveAuthConfig = (modelConfig, fallback, vertexConfig) => {
|
|
380
377
|
const resolved = {};
|
|
381
378
|
if (vertexConfig?.vertexAI) {
|
|
@@ -637,7 +634,6 @@ var GoogleVoice = class extends MastraVoice {
|
|
|
637
634
|
return transcription;
|
|
638
635
|
}
|
|
639
636
|
};
|
|
640
|
-
//#endregion
|
|
641
637
|
export { GoogleVoice };
|
|
642
638
|
|
|
643
639
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"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,KAAK,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,KAAK,iBAAiB,MAAM,sBAAsB,KAAK,eAAe;EAC1E,OAAO;CACR;;;;;CAKA,WAAW,MAAM;EAChB,MAAM,MAAM,KAAK;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,KAAK;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,KAAK,WAAW,IAAI,CAAC;EACvJ,KAAK,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,KAAK,WAAW,IAAI,CAAC;EACxL,KAAK,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,KAAK,WAAW,IAAI,CAAC;EACxN,KAAK,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,KAAK,WAAW,IAAI,CAAC;EAC3P,KAAK,QAAQ,SAAS,SAAS,IAAI;CACpC;CACA,eAAe,OAAO,UAAU;EAC/B,uBAAuB,KAAK,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,KAAK,aAAa;EAClB,KAAK,SAAS,IAAI,cAAc,EAAE,MAAM,GAAG,KAAK,UAAU,KAAK,KAAK,OAAO,CAAC;CAC7E;;;;;CAKA,cAAc;EACb,OAAO,KAAK;CACb;;;;;CAKA,eAAe,WAAW;EACzB,KAAK,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,IAAI,mBAAmB,UAAU;EAClD,KAAK,eAAe,IAAI,aAAa,aAAa;EAClD,KAAK,kBAAkB;CACzB;CAEA,oBAA6C;EAC3C,IAAI,CAAC,KAAK,gBACR,KAAK,iBAAiB,IAAI,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,QAAgD;EAC3E,MAAM,SAAmB,CAAC;EAC1B,WAAW,MAAM,SAAS,QACxB,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,MAAM,SAAS,IAAI,YAAY;EAC/B,OAAO,IAAI,OAAO,KAAK,SAAS,YAAY,CAAC;EAC7C,OAAO;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.js","names":[],"sources":["../../../packages/_internal-core/dist/logger/index.js","../../../packages/_internal-core/dist/base/index.js","../../../packages/_internals/voice/dist/aisdk-c08VRfTf.js","../src/index.ts"],"sourcesContent":["import { Transform } from \"stream\";\n// 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// 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};\nexport { ConsoleLogger, LogLevel, LoggerTransport, MastraLogger, RegisteredLogger, buildLogRecordData, createCustomTransport, exportTrackedException, isAdaptableLogger };\n\n//# sourceMappingURL=index.js.map","import { ConsoleLogger, RegisteredLogger } from \"../logger/index.js\";\n// 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};\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// 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// 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// 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};\nexport { AISDKSpeech as n, MastraVoice as r, AISDKTranscription as t };\n\n//# sourceMappingURL=aisdk-c08VRfTf.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/voice-google",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.4",
|
|
4
4
|
"description": "Mastra Google voice integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
"@google-cloud/text-to-speech": "^6.4.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@types/node": "22.
|
|
31
|
-
"@vitest/coverage-v8": "4.1.
|
|
32
|
-
"@vitest/ui": "4.1.
|
|
33
|
-
"tsdown": "0.
|
|
34
|
-
"tsx": "^4.23.
|
|
30
|
+
"@types/node": "22.19.15",
|
|
31
|
+
"@vitest/coverage-v8": "4.1.12",
|
|
32
|
+
"@vitest/ui": "4.1.12",
|
|
33
|
+
"tsdown": "0.23.1",
|
|
34
|
+
"tsx": "^4.23.15",
|
|
35
35
|
"typescript": "^7.0.2",
|
|
36
|
-
"vitest": "4.1.
|
|
37
|
-
"@internal/lint": "0.0.
|
|
38
|
-
"@internal/types-builder": "0.0.
|
|
39
|
-
"@internal/voice": "0.0.
|
|
36
|
+
"vitest": "4.1.12",
|
|
37
|
+
"@internal/lint": "0.0.146",
|
|
38
|
+
"@internal/types-builder": "0.0.121",
|
|
39
|
+
"@internal/voice": "0.0.43"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"zod": "^3.25.0 || ^4.0.0"
|