@loonylabs/tts-middleware 0.8.0 → 0.10.0
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/README.md +36 -2
- package/dist/middleware/services/tts/index.d.ts +4 -3
- package/dist/middleware/services/tts/index.d.ts.map +1 -1
- package/dist/middleware/services/tts/index.js +3 -1
- package/dist/middleware/services/tts/index.js.map +1 -1
- package/dist/middleware/services/tts/providers/gemini-provider.d.ts +142 -0
- package/dist/middleware/services/tts/providers/gemini-provider.d.ts.map +1 -0
- package/dist/middleware/services/tts/providers/gemini-provider.js +358 -0
- package/dist/middleware/services/tts/providers/gemini-provider.js.map +1 -0
- package/dist/middleware/services/tts/providers/index.d.ts +2 -0
- package/dist/middleware/services/tts/providers/index.d.ts.map +1 -1
- package/dist/middleware/services/tts/providers/index.js +3 -1
- package/dist/middleware/services/tts/providers/index.js.map +1 -1
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.d.ts +168 -0
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.d.ts.map +1 -0
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.js +416 -0
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.js.map +1 -0
- package/dist/middleware/services/tts/tts.service.d.ts.map +1 -1
- package/dist/middleware/services/tts/tts.service.js +13 -0
- package/dist/middleware/services/tts/tts.service.js.map +1 -1
- package/dist/middleware/services/tts/types/common.types.d.ts +12 -1
- package/dist/middleware/services/tts/types/common.types.d.ts.map +1 -1
- package/dist/middleware/services/tts/types/common.types.js +1 -0
- package/dist/middleware/services/tts/types/common.types.js.map +1 -1
- package/dist/middleware/services/tts/types/index.d.ts +2 -2
- package/dist/middleware/services/tts/types/index.d.ts.map +1 -1
- package/dist/middleware/services/tts/types/index.js +2 -1
- package/dist/middleware/services/tts/types/index.js.map +1 -1
- package/dist/middleware/services/tts/types/provider-options.types.d.ts +85 -1
- package/dist/middleware/services/tts/types/provider-options.types.d.ts.map +1 -1
- package/dist/middleware/services/tts/types/provider-options.types.js +13 -0
- package/dist/middleware/services/tts/types/provider-options.types.js.map +1 -1
- package/dist/middleware/services/tts/utils/retry.utils.d.ts +11 -0
- package/dist/middleware/services/tts/utils/retry.utils.d.ts.map +1 -1
- package/dist/middleware/services/tts/utils/retry.utils.js +23 -0
- package/dist/middleware/services/tts/utils/retry.utils.js.map +1 -1
- package/dist/middleware/shared/config/tts.config.d.ts +17 -0
- package/dist/middleware/shared/config/tts.config.d.ts.map +1 -1
- package/dist/middleware/shared/config/tts.config.js +14 -0
- package/dist/middleware/shared/config/tts.config.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/gemini-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,4 +10,6 @@ export { GoogleCloudTTSProvider } from './google-cloud-tts-provider';
|
|
|
10
10
|
export type { GoogleCloudTTSRegion, GoogleCloudTTSConfig } from './google-cloud-tts-provider';
|
|
11
11
|
export { FishAudioProvider } from './fish-audio-provider';
|
|
12
12
|
export { InworldProvider } from './inworld-provider';
|
|
13
|
+
export { VertexAITTSProvider } from './vertex-ai-tts-provider';
|
|
14
|
+
export type { VertexAITTSConfig } from './vertex-ai-tts-provider';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Export all provider classes and error types
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.InworldProvider = exports.FishAudioProvider = exports.GoogleCloudTTSProvider = exports.EdenAIProvider = exports.AzureProvider = exports.NetworkError = exports.SynthesisFailedError = exports.ProviderUnavailableError = exports.QuotaExceededError = exports.InvalidVoiceError = exports.InvalidConfigError = exports.TTSError = exports.BaseTTSProvider = void 0;
|
|
8
|
+
exports.VertexAITTSProvider = exports.InworldProvider = exports.FishAudioProvider = exports.GoogleCloudTTSProvider = exports.EdenAIProvider = exports.AzureProvider = exports.NetworkError = exports.SynthesisFailedError = exports.ProviderUnavailableError = exports.QuotaExceededError = exports.InvalidVoiceError = exports.InvalidConfigError = exports.TTSError = exports.BaseTTSProvider = void 0;
|
|
9
9
|
// Base provider and errors
|
|
10
10
|
var base_tts_provider_1 = require("./base-tts-provider");
|
|
11
11
|
Object.defineProperty(exports, "BaseTTSProvider", { enumerable: true, get: function () { return base_tts_provider_1.BaseTTSProvider; } });
|
|
@@ -27,6 +27,8 @@ var fish_audio_provider_1 = require("./fish-audio-provider");
|
|
|
27
27
|
Object.defineProperty(exports, "FishAudioProvider", { enumerable: true, get: function () { return fish_audio_provider_1.FishAudioProvider; } });
|
|
28
28
|
var inworld_provider_1 = require("./inworld-provider");
|
|
29
29
|
Object.defineProperty(exports, "InworldProvider", { enumerable: true, get: function () { return inworld_provider_1.InworldProvider; } });
|
|
30
|
+
var vertex_ai_tts_provider_1 = require("./vertex-ai-tts-provider");
|
|
31
|
+
Object.defineProperty(exports, "VertexAITTSProvider", { enumerable: true, get: function () { return vertex_ai_tts_provider_1.VertexAITTSProvider; } });
|
|
30
32
|
// Future provider implementations will be exported here:
|
|
31
33
|
// export { OpenAIProvider } from './openai-provider';
|
|
32
34
|
// export { ElevenLabsProvider } from './elevenlabs-provider';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,2BAA2B;AAC3B,yDAS6B;AAR3B,oHAAA,eAAe,OAAA;AACf,6GAAA,QAAQ,OAAA;AACR,uHAAA,kBAAkB,OAAA;AAClB,sHAAA,iBAAiB,OAAA;AACjB,uHAAA,kBAAkB,OAAA;AAClB,6HAAA,wBAAwB,OAAA;AACxB,yHAAA,oBAAoB,OAAA;AACpB,iHAAA,YAAY,OAAA;AAGd,2BAA2B;AAC3B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAE/B,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,2BAA2B;AAC3B,yDAS6B;AAR3B,oHAAA,eAAe,OAAA;AACf,6GAAA,QAAQ,OAAA;AACR,uHAAA,kBAAkB,OAAA;AAClB,sHAAA,iBAAiB,OAAA;AACjB,uHAAA,kBAAkB,OAAA;AAClB,6HAAA,wBAAwB,OAAA;AACxB,yHAAA,oBAAoB,OAAA;AACpB,iHAAA,YAAY,OAAA;AAGd,2BAA2B;AAC3B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAE/B,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,mEAA+D;AAAtD,6HAAA,mBAAmB,OAAA;AAG5B,yDAAyD;AACzD,sDAAsD;AACtD,8DAA8D;AAC9D,0DAA0D"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vertex AI TTS Provider
|
|
3
|
+
*
|
|
4
|
+
* @description Provider for Google Vertex AI TTS via the generateContent
|
|
5
|
+
* endpoint with responseModalities: ['AUDIO']. Authenticates via Service Account
|
|
6
|
+
* (same as Google Cloud TTS — reuses GOOGLE_APPLICATION_CREDENTIALS).
|
|
7
|
+
*
|
|
8
|
+
* Supports 30 multilingual voices with auto-detect language and natural language
|
|
9
|
+
* style control. Output is raw PCM (24kHz, 16-bit, mono) which is converted to
|
|
10
|
+
* MP3 via ffmpeg or WAV as fallback.
|
|
11
|
+
*
|
|
12
|
+
* Test/Admin only -- no EU data residency guarantees.
|
|
13
|
+
*
|
|
14
|
+
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/text-to-speech
|
|
15
|
+
*/
|
|
16
|
+
import type { TTSSynthesizeRequest, TTSResponse } from '../types';
|
|
17
|
+
import { BaseTTSProvider } from './base-tts-provider';
|
|
18
|
+
import type { RegionRotationConfig } from '../types/provider-options.types';
|
|
19
|
+
/**
|
|
20
|
+
* Vertex AI TTS configuration
|
|
21
|
+
*/
|
|
22
|
+
export interface VertexAITTSConfig {
|
|
23
|
+
/**
|
|
24
|
+
* Path to Service Account JSON file
|
|
25
|
+
* @env GOOGLE_APPLICATION_CREDENTIALS
|
|
26
|
+
*/
|
|
27
|
+
keyFilename?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Google Cloud Project ID
|
|
30
|
+
* @env GOOGLE_CLOUD_PROJECT
|
|
31
|
+
*/
|
|
32
|
+
projectId?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Vertex AI region
|
|
35
|
+
* @env VERTEX_AI_TTS_REGION
|
|
36
|
+
* @default 'us-central1'
|
|
37
|
+
*/
|
|
38
|
+
region?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Optional region rotation for quota management (429 / Resource Exhausted)
|
|
41
|
+
*
|
|
42
|
+
* @description When configured, the provider automatically rotates through the
|
|
43
|
+
* specified regions on quota errors. Same pattern as llm-middleware and tti-middleware.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* {
|
|
48
|
+
* regions: ['europe-west4', 'europe-west1'],
|
|
49
|
+
* fallback: 'us-central1',
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
regionRotation?: RegionRotationConfig;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Vertex AI TTS provider implementation
|
|
57
|
+
*
|
|
58
|
+
* @description Provides TTS synthesis using Google's Vertex AI generateContent API.
|
|
59
|
+
* Authenticates with Service Account OAuth2 (same credentials as Google Cloud TTS).
|
|
60
|
+
* Outputs raw PCM which is converted to MP3 (via ffmpeg) or WAV (pure Node.js fallback).
|
|
61
|
+
*
|
|
62
|
+
* Billing: Token-based ($0.50-1.00/M input + $10-20/M audio output tokens).
|
|
63
|
+
* For billing compatibility, reports character count like all other providers.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const provider = new VertexAITTSProvider();
|
|
68
|
+
* const response = await provider.synthesize(
|
|
69
|
+
* "Hello World",
|
|
70
|
+
* "Kore",
|
|
71
|
+
* {
|
|
72
|
+
* text: "Hello World",
|
|
73
|
+
* voice: { id: "Kore" },
|
|
74
|
+
* audio: { format: "mp3" },
|
|
75
|
+
* providerOptions: {
|
|
76
|
+
* model: "gemini-2.5-flash-preview-tts",
|
|
77
|
+
* stylePrompt: "Say cheerfully:"
|
|
78
|
+
* }
|
|
79
|
+
* }
|
|
80
|
+
* );
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare class VertexAITTSProvider extends BaseTTSProvider {
|
|
84
|
+
private config;
|
|
85
|
+
private authClient;
|
|
86
|
+
/**
|
|
87
|
+
* Creates a new Vertex AI TTS provider
|
|
88
|
+
*
|
|
89
|
+
* @param config - Optional configuration (uses env vars if not provided)
|
|
90
|
+
* @throws {InvalidConfigError} If credentials are missing
|
|
91
|
+
*/
|
|
92
|
+
constructor(config?: Partial<VertexAITTSConfig>);
|
|
93
|
+
/**
|
|
94
|
+
* Validate Vertex AI configuration
|
|
95
|
+
*
|
|
96
|
+
* @private
|
|
97
|
+
* @throws {InvalidConfigError} If configuration is invalid
|
|
98
|
+
*/
|
|
99
|
+
private validateVertexAIConfig;
|
|
100
|
+
/**
|
|
101
|
+
* Get an authenticated access token via Service Account
|
|
102
|
+
*
|
|
103
|
+
* @private
|
|
104
|
+
* @returns OAuth2 access token
|
|
105
|
+
*/
|
|
106
|
+
private getAccessToken;
|
|
107
|
+
/**
|
|
108
|
+
* Synthesize text to speech using Vertex AI TTS
|
|
109
|
+
*
|
|
110
|
+
* @param text - The input text to synthesize
|
|
111
|
+
* @param voiceId - The voice name (e.g. "Kore", "Puck", "Charon")
|
|
112
|
+
* @param request - The full synthesis request with options
|
|
113
|
+
* @returns Promise resolving to the synthesis response
|
|
114
|
+
*/
|
|
115
|
+
synthesize(text: string, voiceId: string, request: TTSSynthesizeRequest): Promise<TTSResponse>;
|
|
116
|
+
/**
|
|
117
|
+
* Build Vertex AI generateContent request payload
|
|
118
|
+
*
|
|
119
|
+
* @private
|
|
120
|
+
*/
|
|
121
|
+
private buildRequest;
|
|
122
|
+
/**
|
|
123
|
+
* Call the Vertex AI API with optional region rotation on quota errors
|
|
124
|
+
*
|
|
125
|
+
* @private
|
|
126
|
+
* @param requestBody - The request payload
|
|
127
|
+
* @param model - The model to use
|
|
128
|
+
* @param regionOverride - Optional per-request region override (skips rotation)
|
|
129
|
+
* @returns The PCM audio buffer and the region that processed the request
|
|
130
|
+
*/
|
|
131
|
+
private callAPIWithRegionRotation;
|
|
132
|
+
/**
|
|
133
|
+
* Call Vertex AI generateContent API
|
|
134
|
+
*
|
|
135
|
+
* @private
|
|
136
|
+
* @param requestBody - The request payload
|
|
137
|
+
* @param model - The model to use
|
|
138
|
+
* @param region - The Vertex AI region to use
|
|
139
|
+
* @returns Promise resolving to raw PCM audio buffer
|
|
140
|
+
*/
|
|
141
|
+
private callAPI;
|
|
142
|
+
/**
|
|
143
|
+
* Convert raw PCM audio to the requested format
|
|
144
|
+
*
|
|
145
|
+
* @private
|
|
146
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
147
|
+
* @param requestedFormat - The desired output format ('mp3', 'wav', etc.)
|
|
148
|
+
* @returns The converted audio buffer and actual format used
|
|
149
|
+
*/
|
|
150
|
+
private convertPcmAudio;
|
|
151
|
+
/**
|
|
152
|
+
* Convert raw PCM to MP3 using ffmpeg via child_process
|
|
153
|
+
*
|
|
154
|
+
* @private
|
|
155
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
156
|
+
* @returns Promise resolving to MP3 buffer
|
|
157
|
+
*/
|
|
158
|
+
private pcmToMp3;
|
|
159
|
+
/**
|
|
160
|
+
* Convert raw PCM to WAV by prepending a 44-byte WAV header
|
|
161
|
+
*
|
|
162
|
+
* @private
|
|
163
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
164
|
+
* @returns WAV buffer
|
|
165
|
+
*/
|
|
166
|
+
private pcmToWav;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=vertex-ai-tts-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex-ai-tts-provider.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/vertex-ai-tts-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EACL,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAA8B,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGxG;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAA6E;IAE/F;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAmB/C;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;;;;OAKG;YACW,cAAc;IAqB5B;;;;;;;OAOG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC;IA4DvB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;;;;;OAQG;YACW,yBAAyB;IAsDvC;;;;;;;;OAQG;YACW,OAAO;IA6CrB;;;;;;;OAOG;YACW,eAAe;IA0B7B;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAkChB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAwBjB"}
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vertex AI TTS Provider
|
|
4
|
+
*
|
|
5
|
+
* @description Provider for Google Vertex AI TTS via the generateContent
|
|
6
|
+
* endpoint with responseModalities: ['AUDIO']. Authenticates via Service Account
|
|
7
|
+
* (same as Google Cloud TTS — reuses GOOGLE_APPLICATION_CREDENTIALS).
|
|
8
|
+
*
|
|
9
|
+
* Supports 30 multilingual voices with auto-detect language and natural language
|
|
10
|
+
* style control. Output is raw PCM (24kHz, 16-bit, mono) which is converted to
|
|
11
|
+
* MP3 via ffmpeg or WAV as fallback.
|
|
12
|
+
*
|
|
13
|
+
* Test/Admin only -- no EU data residency guarantees.
|
|
14
|
+
*
|
|
15
|
+
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/text-to-speech
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.VertexAITTSProvider = void 0;
|
|
52
|
+
const child_process_1 = require("child_process");
|
|
53
|
+
const types_1 = require("../types");
|
|
54
|
+
const mp3_duration_utils_1 = require("../utils/mp3-duration.utils");
|
|
55
|
+
const base_tts_provider_1 = require("./base-tts-provider");
|
|
56
|
+
const retry_utils_1 = require("../utils/retry.utils");
|
|
57
|
+
const DEFAULT_MODEL = 'gemini-2.5-flash-preview-tts';
|
|
58
|
+
const DEFAULT_SAMPLE_RATE = 24000;
|
|
59
|
+
const DEFAULT_REGION = 'us-central1';
|
|
60
|
+
/**
|
|
61
|
+
* Vertex AI TTS provider implementation
|
|
62
|
+
*
|
|
63
|
+
* @description Provides TTS synthesis using Google's Vertex AI generateContent API.
|
|
64
|
+
* Authenticates with Service Account OAuth2 (same credentials as Google Cloud TTS).
|
|
65
|
+
* Outputs raw PCM which is converted to MP3 (via ffmpeg) or WAV (pure Node.js fallback).
|
|
66
|
+
*
|
|
67
|
+
* Billing: Token-based ($0.50-1.00/M input + $10-20/M audio output tokens).
|
|
68
|
+
* For billing compatibility, reports character count like all other providers.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const provider = new VertexAITTSProvider();
|
|
73
|
+
* const response = await provider.synthesize(
|
|
74
|
+
* "Hello World",
|
|
75
|
+
* "Kore",
|
|
76
|
+
* {
|
|
77
|
+
* text: "Hello World",
|
|
78
|
+
* voice: { id: "Kore" },
|
|
79
|
+
* audio: { format: "mp3" },
|
|
80
|
+
* providerOptions: {
|
|
81
|
+
* model: "gemini-2.5-flash-preview-tts",
|
|
82
|
+
* stylePrompt: "Say cheerfully:"
|
|
83
|
+
* }
|
|
84
|
+
* }
|
|
85
|
+
* );
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
89
|
+
/**
|
|
90
|
+
* Creates a new Vertex AI TTS provider
|
|
91
|
+
*
|
|
92
|
+
* @param config - Optional configuration (uses env vars if not provided)
|
|
93
|
+
* @throws {InvalidConfigError} If credentials are missing
|
|
94
|
+
*/
|
|
95
|
+
constructor(config) {
|
|
96
|
+
super(types_1.TTSProvider.VERTEX_AI);
|
|
97
|
+
this.authClient = null;
|
|
98
|
+
this.config = {
|
|
99
|
+
keyFilename: config?.keyFilename || process.env.GOOGLE_APPLICATION_CREDENTIALS,
|
|
100
|
+
projectId: config?.projectId || process.env.GOOGLE_CLOUD_PROJECT,
|
|
101
|
+
region: config?.region || process.env.VERTEX_AI_TTS_REGION || DEFAULT_REGION,
|
|
102
|
+
regionRotation: config?.regionRotation,
|
|
103
|
+
};
|
|
104
|
+
this.validateVertexAIConfig();
|
|
105
|
+
this.log('info', 'Vertex AI TTS provider initialized', {
|
|
106
|
+
hasCredentials: !!this.config.keyFilename,
|
|
107
|
+
projectId: this.config.projectId ? '***' : undefined,
|
|
108
|
+
region: this.config.region,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Validate Vertex AI configuration
|
|
113
|
+
*
|
|
114
|
+
* @private
|
|
115
|
+
* @throws {InvalidConfigError} If configuration is invalid
|
|
116
|
+
*/
|
|
117
|
+
validateVertexAIConfig() {
|
|
118
|
+
if (!this.config.keyFilename) {
|
|
119
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Google Cloud credentials are required for Vertex AI TTS (GOOGLE_APPLICATION_CREDENTIALS)');
|
|
120
|
+
}
|
|
121
|
+
if (!this.config.projectId) {
|
|
122
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Google Cloud Project ID is required for Vertex AI TTS (GOOGLE_CLOUD_PROJECT)');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get an authenticated access token via Service Account
|
|
127
|
+
*
|
|
128
|
+
* @private
|
|
129
|
+
* @returns OAuth2 access token
|
|
130
|
+
*/
|
|
131
|
+
async getAccessToken() {
|
|
132
|
+
if (!this.authClient) {
|
|
133
|
+
const { GoogleAuth } = await Promise.resolve().then(() => __importStar(require('google-auth-library')));
|
|
134
|
+
const auth = new GoogleAuth({
|
|
135
|
+
keyFilename: this.config.keyFilename,
|
|
136
|
+
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
|
|
137
|
+
});
|
|
138
|
+
this.authClient = await auth.getClient();
|
|
139
|
+
}
|
|
140
|
+
const tokenResponse = await this.authClient.getAccessToken();
|
|
141
|
+
if (!tokenResponse.token) {
|
|
142
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Failed to obtain access token from Service Account');
|
|
143
|
+
}
|
|
144
|
+
return tokenResponse.token;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Synthesize text to speech using Vertex AI TTS
|
|
148
|
+
*
|
|
149
|
+
* @param text - The input text to synthesize
|
|
150
|
+
* @param voiceId - The voice name (e.g. "Kore", "Puck", "Charon")
|
|
151
|
+
* @param request - The full synthesis request with options
|
|
152
|
+
* @returns Promise resolving to the synthesis response
|
|
153
|
+
*/
|
|
154
|
+
async synthesize(text, voiceId, request) {
|
|
155
|
+
this.validateConfig(request);
|
|
156
|
+
const startTime = Date.now();
|
|
157
|
+
const options = (request.providerOptions || {});
|
|
158
|
+
const model = options.model || DEFAULT_MODEL;
|
|
159
|
+
const requestedFormat = request.audio?.format || 'mp3';
|
|
160
|
+
const requestBody = this.buildRequest(text, voiceId, options);
|
|
161
|
+
this.log('debug', 'Synthesizing with Vertex AI TTS', {
|
|
162
|
+
voiceId,
|
|
163
|
+
model,
|
|
164
|
+
textLength: text.length,
|
|
165
|
+
requestedFormat,
|
|
166
|
+
});
|
|
167
|
+
try {
|
|
168
|
+
const { pcmBuffer, region: usedRegion } = await this.callAPIWithRegionRotation(requestBody, model, options.region);
|
|
169
|
+
const { audioBuffer, audioFormat } = await this.convertPcmAudio(pcmBuffer, requestedFormat);
|
|
170
|
+
const duration = Date.now() - startTime;
|
|
171
|
+
this.log('info', 'Synthesis successful', {
|
|
172
|
+
voiceId,
|
|
173
|
+
characters: text.length,
|
|
174
|
+
duration,
|
|
175
|
+
audioSize: audioBuffer.length,
|
|
176
|
+
audioFormat,
|
|
177
|
+
region: usedRegion,
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
audio: audioBuffer,
|
|
181
|
+
metadata: {
|
|
182
|
+
provider: this.providerName,
|
|
183
|
+
voice: voiceId,
|
|
184
|
+
duration,
|
|
185
|
+
audioDuration: audioFormat === 'mp3' ? (0, mp3_duration_utils_1.getMp3Duration)(audioBuffer) : undefined,
|
|
186
|
+
audioFormat,
|
|
187
|
+
sampleRate: DEFAULT_SAMPLE_RATE,
|
|
188
|
+
region: usedRegion,
|
|
189
|
+
},
|
|
190
|
+
billing: {
|
|
191
|
+
characters: this.countCharacters(text),
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
this.log('error', 'Synthesis failed', {
|
|
197
|
+
voiceId,
|
|
198
|
+
error: error.message,
|
|
199
|
+
});
|
|
200
|
+
throw this.handleError(error, 'during Vertex AI TTS API call');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Build Vertex AI generateContent request payload
|
|
205
|
+
*
|
|
206
|
+
* @private
|
|
207
|
+
*/
|
|
208
|
+
buildRequest(text, voiceId, options) {
|
|
209
|
+
const synthesisText = options.stylePrompt
|
|
210
|
+
? `${options.stylePrompt} ${text}`
|
|
211
|
+
: text;
|
|
212
|
+
return {
|
|
213
|
+
contents: [
|
|
214
|
+
{
|
|
215
|
+
role: 'user',
|
|
216
|
+
parts: [{ text: synthesisText }],
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
generationConfig: {
|
|
220
|
+
responseModalities: ['AUDIO'],
|
|
221
|
+
speechConfig: {
|
|
222
|
+
voiceConfig: {
|
|
223
|
+
prebuiltVoiceConfig: {
|
|
224
|
+
voiceName: voiceId,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Call the Vertex AI API with optional region rotation on quota errors
|
|
233
|
+
*
|
|
234
|
+
* @private
|
|
235
|
+
* @param requestBody - The request payload
|
|
236
|
+
* @param model - The model to use
|
|
237
|
+
* @param regionOverride - Optional per-request region override (skips rotation)
|
|
238
|
+
* @returns The PCM audio buffer and the region that processed the request
|
|
239
|
+
*/
|
|
240
|
+
async callAPIWithRegionRotation(requestBody, model, regionOverride) {
|
|
241
|
+
// Per-request override: skip rotation entirely
|
|
242
|
+
if (regionOverride) {
|
|
243
|
+
const pcmBuffer = await this.callAPI(requestBody, model, regionOverride);
|
|
244
|
+
return { pcmBuffer, region: regionOverride };
|
|
245
|
+
}
|
|
246
|
+
const rotationConfig = this.config.regionRotation;
|
|
247
|
+
// No rotation configured: use static region from constructor config
|
|
248
|
+
if (!rotationConfig) {
|
|
249
|
+
const region = this.config.region || DEFAULT_REGION;
|
|
250
|
+
const pcmBuffer = await this.callAPI(requestBody, model, region);
|
|
251
|
+
return { pcmBuffer, region };
|
|
252
|
+
}
|
|
253
|
+
// Region rotation: try each region in order, rotate on quota errors only
|
|
254
|
+
const regionsToTry = [...rotationConfig.regions, rotationConfig.fallback];
|
|
255
|
+
let lastQuotaError = null;
|
|
256
|
+
for (const region of regionsToTry) {
|
|
257
|
+
try {
|
|
258
|
+
const pcmBuffer = await this.callAPI(requestBody, model, region);
|
|
259
|
+
return { pcmBuffer, region };
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
if ((0, retry_utils_1.isQuotaError)(error)) {
|
|
263
|
+
this.log('warn', 'Quota exceeded, rotating to next region', {
|
|
264
|
+
failedRegion: region,
|
|
265
|
+
});
|
|
266
|
+
lastQuotaError = error;
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
throw error; // Non-quota errors: rethrow immediately
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Bonus attempt: try fallback one more time (alwaysTryFallback default: true)
|
|
273
|
+
if (rotationConfig.alwaysTryFallback !== false) {
|
|
274
|
+
try {
|
|
275
|
+
const pcmBuffer = await this.callAPI(requestBody, model, rotationConfig.fallback);
|
|
276
|
+
return { pcmBuffer, region: rotationConfig.fallback };
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
if (!(0, retry_utils_1.isQuotaError)(error))
|
|
280
|
+
throw error;
|
|
281
|
+
lastQuotaError = error;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
throw lastQuotaError ?? new Error('All Vertex AI TTS regions exhausted');
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Call Vertex AI generateContent API
|
|
288
|
+
*
|
|
289
|
+
* @private
|
|
290
|
+
* @param requestBody - The request payload
|
|
291
|
+
* @param model - The model to use
|
|
292
|
+
* @param region - The Vertex AI region to use
|
|
293
|
+
* @returns Promise resolving to raw PCM audio buffer
|
|
294
|
+
*/
|
|
295
|
+
async callAPI(requestBody, model, region) {
|
|
296
|
+
const accessToken = await this.getAccessToken();
|
|
297
|
+
const projectId = this.config.projectId;
|
|
298
|
+
const url = `https://${region}-aiplatform.googleapis.com/v1/projects/${projectId}/locations/${region}/publishers/google/models/${model}:generateContent`;
|
|
299
|
+
const response = await fetch(url, {
|
|
300
|
+
method: 'POST',
|
|
301
|
+
headers: {
|
|
302
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
303
|
+
'Content-Type': 'application/json',
|
|
304
|
+
},
|
|
305
|
+
body: JSON.stringify(requestBody),
|
|
306
|
+
});
|
|
307
|
+
if (!response.ok) {
|
|
308
|
+
const errorText = await response.text();
|
|
309
|
+
throw new Error(`Vertex AI API error (${response.status}): ${errorText}`);
|
|
310
|
+
}
|
|
311
|
+
const responseJson = await response.json();
|
|
312
|
+
const inlineData = responseJson.candidates?.[0]?.content?.parts?.[0]?.inlineData;
|
|
313
|
+
if (!inlineData?.data) {
|
|
314
|
+
throw new Error('Vertex AI API returned no audio data');
|
|
315
|
+
}
|
|
316
|
+
return Buffer.from(inlineData.data, 'base64');
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Convert raw PCM audio to the requested format
|
|
320
|
+
*
|
|
321
|
+
* @private
|
|
322
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
323
|
+
* @param requestedFormat - The desired output format ('mp3', 'wav', etc.)
|
|
324
|
+
* @returns The converted audio buffer and actual format used
|
|
325
|
+
*/
|
|
326
|
+
async convertPcmAudio(pcmBuffer, requestedFormat) {
|
|
327
|
+
if (requestedFormat === 'wav') {
|
|
328
|
+
return {
|
|
329
|
+
audioBuffer: this.pcmToWav(pcmBuffer),
|
|
330
|
+
audioFormat: 'wav',
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
// For mp3 (and any other format), try ffmpeg first, fall back to WAV
|
|
334
|
+
try {
|
|
335
|
+
const mp3Buffer = await this.pcmToMp3(pcmBuffer);
|
|
336
|
+
return { audioBuffer: mp3Buffer, audioFormat: 'mp3' };
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
this.log('warn', 'ffmpeg not available, falling back to WAV output', {
|
|
340
|
+
error: error.message,
|
|
341
|
+
});
|
|
342
|
+
return {
|
|
343
|
+
audioBuffer: this.pcmToWav(pcmBuffer),
|
|
344
|
+
audioFormat: 'wav',
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Convert raw PCM to MP3 using ffmpeg via child_process
|
|
350
|
+
*
|
|
351
|
+
* @private
|
|
352
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
353
|
+
* @returns Promise resolving to MP3 buffer
|
|
354
|
+
*/
|
|
355
|
+
pcmToMp3(pcmBuffer) {
|
|
356
|
+
return new Promise((resolve, reject) => {
|
|
357
|
+
const ffmpeg = (0, child_process_1.spawn)('ffmpeg', [
|
|
358
|
+
'-f', 's16le',
|
|
359
|
+
'-ar', String(DEFAULT_SAMPLE_RATE),
|
|
360
|
+
'-ac', '1',
|
|
361
|
+
'-i', 'pipe:0',
|
|
362
|
+
'-codec:a', 'libmp3lame',
|
|
363
|
+
'-b:a', '128k',
|
|
364
|
+
'-f', 'mp3',
|
|
365
|
+
'pipe:1',
|
|
366
|
+
]);
|
|
367
|
+
const chunks = [];
|
|
368
|
+
ffmpeg.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
369
|
+
ffmpeg.stderr.on('data', () => { });
|
|
370
|
+
ffmpeg.on('error', (err) => {
|
|
371
|
+
reject(new Error(`ffmpeg spawn failed: ${err.message}`));
|
|
372
|
+
});
|
|
373
|
+
ffmpeg.on('close', (code) => {
|
|
374
|
+
if (code === 0) {
|
|
375
|
+
resolve(Buffer.concat(chunks));
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
reject(new Error(`ffmpeg exited with code ${code}`));
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
ffmpeg.stdin.write(pcmBuffer);
|
|
382
|
+
ffmpeg.stdin.end();
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Convert raw PCM to WAV by prepending a 44-byte WAV header
|
|
387
|
+
*
|
|
388
|
+
* @private
|
|
389
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
390
|
+
* @returns WAV buffer
|
|
391
|
+
*/
|
|
392
|
+
pcmToWav(pcmBuffer) {
|
|
393
|
+
const channels = 1;
|
|
394
|
+
const bitsPerSample = 16;
|
|
395
|
+
const byteRate = DEFAULT_SAMPLE_RATE * channels * (bitsPerSample / 8);
|
|
396
|
+
const blockAlign = channels * (bitsPerSample / 8);
|
|
397
|
+
const dataLength = pcmBuffer.length;
|
|
398
|
+
const header = Buffer.alloc(44);
|
|
399
|
+
header.write('RIFF', 0);
|
|
400
|
+
header.writeUInt32LE(36 + dataLength, 4);
|
|
401
|
+
header.write('WAVE', 8);
|
|
402
|
+
header.write('fmt ', 12);
|
|
403
|
+
header.writeUInt32LE(16, 16); // PCM chunk size
|
|
404
|
+
header.writeUInt16LE(1, 20); // PCM format
|
|
405
|
+
header.writeUInt16LE(channels, 22);
|
|
406
|
+
header.writeUInt32LE(DEFAULT_SAMPLE_RATE, 24);
|
|
407
|
+
header.writeUInt32LE(byteRate, 28);
|
|
408
|
+
header.writeUInt16LE(blockAlign, 32);
|
|
409
|
+
header.writeUInt16LE(bitsPerSample, 34);
|
|
410
|
+
header.write('data', 36);
|
|
411
|
+
header.writeUInt32LE(dataLength, 40);
|
|
412
|
+
return Buffer.concat([header, pcmBuffer]);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
exports.VertexAITTSProvider = VertexAITTSProvider;
|
|
416
|
+
//# sourceMappingURL=vertex-ai-tts-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex-ai-tts-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/vertex-ai-tts-provider.ts"],"names":[],"mappings":"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"}
|