@loonylabs/tts-middleware 0.9.0 → 0.11.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 +44 -17
- 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 -3
- package/dist/middleware/services/tts/index.js.map +1 -1
- package/dist/middleware/services/tts/providers/index.d.ts +2 -1
- package/dist/middleware/services/tts/providers/index.d.ts.map +1 -1
- package/dist/middleware/services/tts/providers/index.js +3 -3
- package/dist/middleware/services/tts/providers/index.js.map +1 -1
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.d.ts +190 -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 +448 -0
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.js.map +1 -0
- package/dist/middleware/services/tts/tts.service.js +7 -7
- package/dist/middleware/services/tts/tts.service.js.map +1 -1
- package/dist/middleware/services/tts/types/common.types.d.ts +11 -1
- package/dist/middleware/services/tts/types/common.types.d.ts.map +1 -1
- package/dist/middleware/services/tts/types/common.types.js +1 -1
- 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 -2
- package/dist/middleware/services/tts/types/index.js.map +1 -1
- package/dist/middleware/services/tts/types/provider-options.types.d.ts +55 -8
- package/dist/middleware/services/tts/types/provider-options.types.d.ts.map +1 -1
- package/dist/middleware/services/tts/types/provider-options.types.js +4 -3
- 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 +6 -6
- package/dist/middleware/shared/config/tts.config.d.ts.map +1 -1
- package/dist/middleware/shared/config/tts.config.js +8 -8
- package/dist/middleware/shared/config/tts.config.js.map +1 -1
- package/package.json +11 -3
|
@@ -0,0 +1,448 @@
|
|
|
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 (auto-detected from ffmpeg-static, FFMPEG_PATH, config, or system PATH)
|
|
12
|
+
* or WAV as fallback.
|
|
13
|
+
*
|
|
14
|
+
* Test/Admin only -- no EU data residency guarantees.
|
|
15
|
+
*
|
|
16
|
+
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/text-to-speech
|
|
17
|
+
*/
|
|
18
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
+
}
|
|
24
|
+
Object.defineProperty(o, k2, desc);
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
30
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31
|
+
}) : function(o, v) {
|
|
32
|
+
o["default"] = v;
|
|
33
|
+
});
|
|
34
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
35
|
+
var ownKeys = function(o) {
|
|
36
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
37
|
+
var ar = [];
|
|
38
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
39
|
+
return ar;
|
|
40
|
+
};
|
|
41
|
+
return ownKeys(o);
|
|
42
|
+
};
|
|
43
|
+
return function (mod) {
|
|
44
|
+
if (mod && mod.__esModule) return mod;
|
|
45
|
+
var result = {};
|
|
46
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
47
|
+
__setModuleDefault(result, mod);
|
|
48
|
+
return result;
|
|
49
|
+
};
|
|
50
|
+
})();
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.VertexAITTSProvider = void 0;
|
|
53
|
+
const child_process_1 = require("child_process");
|
|
54
|
+
const types_1 = require("../types");
|
|
55
|
+
const mp3_duration_utils_1 = require("../utils/mp3-duration.utils");
|
|
56
|
+
const base_tts_provider_1 = require("./base-tts-provider");
|
|
57
|
+
const retry_utils_1 = require("../utils/retry.utils");
|
|
58
|
+
const DEFAULT_MODEL = 'gemini-2.5-flash-preview-tts';
|
|
59
|
+
const DEFAULT_SAMPLE_RATE = 24000;
|
|
60
|
+
const DEFAULT_REGION = 'us-central1';
|
|
61
|
+
/**
|
|
62
|
+
* Vertex AI TTS provider implementation
|
|
63
|
+
*
|
|
64
|
+
* @description Provides TTS synthesis using Google's Vertex AI generateContent API.
|
|
65
|
+
* Authenticates with Service Account OAuth2 (same credentials as Google Cloud TTS).
|
|
66
|
+
* Outputs raw PCM which is converted to MP3 (via ffmpeg) or WAV (pure Node.js fallback).
|
|
67
|
+
*
|
|
68
|
+
* Billing: Token-based ($0.50-1.00/M input + $10-20/M audio output tokens).
|
|
69
|
+
* For billing compatibility, reports character count like all other providers.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const provider = new VertexAITTSProvider();
|
|
74
|
+
* const response = await provider.synthesize(
|
|
75
|
+
* "Hello World",
|
|
76
|
+
* "Kore",
|
|
77
|
+
* {
|
|
78
|
+
* text: "Hello World",
|
|
79
|
+
* voice: { id: "Kore" },
|
|
80
|
+
* audio: { format: "mp3" },
|
|
81
|
+
* providerOptions: {
|
|
82
|
+
* model: "gemini-2.5-flash-preview-tts",
|
|
83
|
+
* stylePrompt: "Say cheerfully:"
|
|
84
|
+
* }
|
|
85
|
+
* }
|
|
86
|
+
* );
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
90
|
+
/**
|
|
91
|
+
* Creates a new Vertex AI TTS provider
|
|
92
|
+
*
|
|
93
|
+
* @param config - Optional configuration (uses env vars if not provided)
|
|
94
|
+
* @throws {InvalidConfigError} If credentials are missing
|
|
95
|
+
*/
|
|
96
|
+
constructor(config) {
|
|
97
|
+
super(types_1.TTSProvider.VERTEX_AI);
|
|
98
|
+
this.authClient = null;
|
|
99
|
+
this.config = {
|
|
100
|
+
keyFilename: config?.keyFilename || process.env.GOOGLE_APPLICATION_CREDENTIALS,
|
|
101
|
+
projectId: config?.projectId || process.env.GOOGLE_CLOUD_PROJECT,
|
|
102
|
+
region: config?.region || process.env.VERTEX_AI_TTS_REGION || DEFAULT_REGION,
|
|
103
|
+
regionRotation: config?.regionRotation,
|
|
104
|
+
};
|
|
105
|
+
this.ffmpegPath = this.resolveFfmpegPath(config?.ffmpegPath);
|
|
106
|
+
this.validateVertexAIConfig();
|
|
107
|
+
this.log('info', 'Vertex AI TTS provider initialized', {
|
|
108
|
+
hasCredentials: !!this.config.keyFilename,
|
|
109
|
+
projectId: this.config.projectId ? '***' : undefined,
|
|
110
|
+
region: this.config.region,
|
|
111
|
+
ffmpegPath: this.ffmpegPath,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Validate Vertex AI configuration
|
|
116
|
+
*
|
|
117
|
+
* @private
|
|
118
|
+
* @throws {InvalidConfigError} If configuration is invalid
|
|
119
|
+
*/
|
|
120
|
+
validateVertexAIConfig() {
|
|
121
|
+
if (!this.config.keyFilename) {
|
|
122
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Google Cloud credentials are required for Vertex AI TTS (GOOGLE_APPLICATION_CREDENTIALS)');
|
|
123
|
+
}
|
|
124
|
+
if (!this.config.projectId) {
|
|
125
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Google Cloud Project ID is required for Vertex AI TTS (GOOGLE_CLOUD_PROJECT)');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get an authenticated access token via Service Account
|
|
130
|
+
*
|
|
131
|
+
* @private
|
|
132
|
+
* @returns OAuth2 access token
|
|
133
|
+
*/
|
|
134
|
+
async getAccessToken() {
|
|
135
|
+
if (!this.authClient) {
|
|
136
|
+
const { GoogleAuth } = await Promise.resolve().then(() => __importStar(require('google-auth-library')));
|
|
137
|
+
const auth = new GoogleAuth({
|
|
138
|
+
keyFilename: this.config.keyFilename,
|
|
139
|
+
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
|
|
140
|
+
});
|
|
141
|
+
this.authClient = await auth.getClient();
|
|
142
|
+
}
|
|
143
|
+
const tokenResponse = await this.authClient.getAccessToken();
|
|
144
|
+
if (!tokenResponse.token) {
|
|
145
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Failed to obtain access token from Service Account');
|
|
146
|
+
}
|
|
147
|
+
return tokenResponse.token;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Synthesize text to speech using Vertex AI TTS
|
|
151
|
+
*
|
|
152
|
+
* @param text - The input text to synthesize
|
|
153
|
+
* @param voiceId - The voice name (e.g. "Kore", "Puck", "Charon")
|
|
154
|
+
* @param request - The full synthesis request with options
|
|
155
|
+
* @returns Promise resolving to the synthesis response
|
|
156
|
+
*/
|
|
157
|
+
async synthesize(text, voiceId, request) {
|
|
158
|
+
this.validateConfig(request);
|
|
159
|
+
const startTime = Date.now();
|
|
160
|
+
const options = (request.providerOptions || {});
|
|
161
|
+
const model = options.model || DEFAULT_MODEL;
|
|
162
|
+
const requestedFormat = request.audio?.format || 'mp3';
|
|
163
|
+
const requestBody = this.buildRequest(text, voiceId, options);
|
|
164
|
+
this.log('debug', 'Synthesizing with Vertex AI TTS', {
|
|
165
|
+
voiceId,
|
|
166
|
+
model,
|
|
167
|
+
textLength: text.length,
|
|
168
|
+
requestedFormat,
|
|
169
|
+
});
|
|
170
|
+
try {
|
|
171
|
+
const { pcmBuffer, region: usedRegion } = await this.callAPIWithRegionRotation(requestBody, model, options.region);
|
|
172
|
+
const { audioBuffer, audioFormat } = await this.convertPcmAudio(pcmBuffer, requestedFormat);
|
|
173
|
+
const duration = Date.now() - startTime;
|
|
174
|
+
this.log('info', 'Synthesis successful', {
|
|
175
|
+
voiceId,
|
|
176
|
+
characters: text.length,
|
|
177
|
+
duration,
|
|
178
|
+
audioSize: audioBuffer.length,
|
|
179
|
+
audioFormat,
|
|
180
|
+
region: usedRegion,
|
|
181
|
+
});
|
|
182
|
+
return {
|
|
183
|
+
audio: audioBuffer,
|
|
184
|
+
metadata: {
|
|
185
|
+
provider: this.providerName,
|
|
186
|
+
voice: voiceId,
|
|
187
|
+
duration,
|
|
188
|
+
audioDuration: audioFormat === 'mp3' ? (0, mp3_duration_utils_1.getMp3Duration)(audioBuffer) : undefined,
|
|
189
|
+
audioFormat,
|
|
190
|
+
sampleRate: DEFAULT_SAMPLE_RATE,
|
|
191
|
+
region: usedRegion,
|
|
192
|
+
},
|
|
193
|
+
billing: {
|
|
194
|
+
characters: this.countCharacters(text),
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
this.log('error', 'Synthesis failed', {
|
|
200
|
+
voiceId,
|
|
201
|
+
error: error.message,
|
|
202
|
+
});
|
|
203
|
+
throw this.handleError(error, 'during Vertex AI TTS API call');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Build Vertex AI generateContent request payload
|
|
208
|
+
*
|
|
209
|
+
* @private
|
|
210
|
+
*/
|
|
211
|
+
buildRequest(text, voiceId, options) {
|
|
212
|
+
const synthesisText = options.stylePrompt
|
|
213
|
+
? `${options.stylePrompt} ${text}`
|
|
214
|
+
: text;
|
|
215
|
+
return {
|
|
216
|
+
contents: [
|
|
217
|
+
{
|
|
218
|
+
role: 'user',
|
|
219
|
+
parts: [{ text: synthesisText }],
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
generationConfig: {
|
|
223
|
+
responseModalities: ['AUDIO'],
|
|
224
|
+
speechConfig: {
|
|
225
|
+
voiceConfig: {
|
|
226
|
+
prebuiltVoiceConfig: {
|
|
227
|
+
voiceName: voiceId,
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Call the Vertex AI API with optional region rotation on quota errors
|
|
236
|
+
*
|
|
237
|
+
* @private
|
|
238
|
+
* @param requestBody - The request payload
|
|
239
|
+
* @param model - The model to use
|
|
240
|
+
* @param regionOverride - Optional per-request region override (skips rotation)
|
|
241
|
+
* @returns The PCM audio buffer and the region that processed the request
|
|
242
|
+
*/
|
|
243
|
+
async callAPIWithRegionRotation(requestBody, model, regionOverride) {
|
|
244
|
+
// Per-request override: skip rotation entirely
|
|
245
|
+
if (regionOverride) {
|
|
246
|
+
const pcmBuffer = await this.callAPI(requestBody, model, regionOverride);
|
|
247
|
+
return { pcmBuffer, region: regionOverride };
|
|
248
|
+
}
|
|
249
|
+
const rotationConfig = this.config.regionRotation;
|
|
250
|
+
// No rotation configured: use static region from constructor config
|
|
251
|
+
if (!rotationConfig) {
|
|
252
|
+
const region = this.config.region || DEFAULT_REGION;
|
|
253
|
+
const pcmBuffer = await this.callAPI(requestBody, model, region);
|
|
254
|
+
return { pcmBuffer, region };
|
|
255
|
+
}
|
|
256
|
+
// Region rotation: try each region in order, rotate on quota errors only
|
|
257
|
+
const regionsToTry = [...rotationConfig.regions, rotationConfig.fallback];
|
|
258
|
+
let lastQuotaError = null;
|
|
259
|
+
for (const region of regionsToTry) {
|
|
260
|
+
try {
|
|
261
|
+
const pcmBuffer = await this.callAPI(requestBody, model, region);
|
|
262
|
+
return { pcmBuffer, region };
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
if ((0, retry_utils_1.isQuotaError)(error)) {
|
|
266
|
+
this.log('warn', 'Quota exceeded, rotating to next region', {
|
|
267
|
+
failedRegion: region,
|
|
268
|
+
});
|
|
269
|
+
lastQuotaError = error;
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
throw error; // Non-quota errors: rethrow immediately
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Bonus attempt: try fallback one more time (alwaysTryFallback default: true)
|
|
276
|
+
if (rotationConfig.alwaysTryFallback !== false) {
|
|
277
|
+
try {
|
|
278
|
+
const pcmBuffer = await this.callAPI(requestBody, model, rotationConfig.fallback);
|
|
279
|
+
return { pcmBuffer, region: rotationConfig.fallback };
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
if (!(0, retry_utils_1.isQuotaError)(error))
|
|
283
|
+
throw error;
|
|
284
|
+
lastQuotaError = error;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
throw lastQuotaError ?? new Error('All Vertex AI TTS regions exhausted');
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Call Vertex AI generateContent API
|
|
291
|
+
*
|
|
292
|
+
* @private
|
|
293
|
+
* @param requestBody - The request payload
|
|
294
|
+
* @param model - The model to use
|
|
295
|
+
* @param region - The Vertex AI region to use
|
|
296
|
+
* @returns Promise resolving to raw PCM audio buffer
|
|
297
|
+
*/
|
|
298
|
+
async callAPI(requestBody, model, region) {
|
|
299
|
+
const accessToken = await this.getAccessToken();
|
|
300
|
+
const projectId = this.config.projectId;
|
|
301
|
+
const url = `https://${region}-aiplatform.googleapis.com/v1/projects/${projectId}/locations/${region}/publishers/google/models/${model}:generateContent`;
|
|
302
|
+
const response = await fetch(url, {
|
|
303
|
+
method: 'POST',
|
|
304
|
+
headers: {
|
|
305
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
306
|
+
'Content-Type': 'application/json',
|
|
307
|
+
},
|
|
308
|
+
body: JSON.stringify(requestBody),
|
|
309
|
+
});
|
|
310
|
+
if (!response.ok) {
|
|
311
|
+
const errorText = await response.text();
|
|
312
|
+
throw new Error(`Vertex AI API error (${response.status}): ${errorText}`);
|
|
313
|
+
}
|
|
314
|
+
const responseJson = await response.json();
|
|
315
|
+
const inlineData = responseJson.candidates?.[0]?.content?.parts?.[0]?.inlineData;
|
|
316
|
+
if (!inlineData?.data) {
|
|
317
|
+
throw new Error('Vertex AI API returned no audio data');
|
|
318
|
+
}
|
|
319
|
+
return Buffer.from(inlineData.data, 'base64');
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Resolve ffmpeg binary path with fallback chain:
|
|
323
|
+
* 1. Explicit config value
|
|
324
|
+
* 2. FFMPEG_PATH environment variable
|
|
325
|
+
* 3. ffmpeg-static npm package (optional peer dependency)
|
|
326
|
+
* 4. System ffmpeg in PATH
|
|
327
|
+
*/
|
|
328
|
+
resolveFfmpegPath(configPath) {
|
|
329
|
+
if (configPath) {
|
|
330
|
+
this.log('info', 'Using ffmpeg from config', { path: configPath });
|
|
331
|
+
return configPath;
|
|
332
|
+
}
|
|
333
|
+
if (process.env.FFMPEG_PATH) {
|
|
334
|
+
this.log('info', 'Using ffmpeg from FFMPEG_PATH env var', { path: process.env.FFMPEG_PATH });
|
|
335
|
+
return process.env.FFMPEG_PATH;
|
|
336
|
+
}
|
|
337
|
+
try {
|
|
338
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
339
|
+
const ffmpegStatic = require('ffmpeg-static');
|
|
340
|
+
if (ffmpegStatic) {
|
|
341
|
+
this.log('info', 'Using ffmpeg from ffmpeg-static package', { path: ffmpegStatic });
|
|
342
|
+
return ffmpegStatic;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
// ffmpeg-static not installed — continue to system fallback
|
|
347
|
+
}
|
|
348
|
+
return 'ffmpeg';
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Convert raw PCM audio to the requested format
|
|
352
|
+
*
|
|
353
|
+
* @private
|
|
354
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
355
|
+
* @param requestedFormat - The desired output format ('mp3', 'wav', etc.)
|
|
356
|
+
* @returns The converted audio buffer and actual format used
|
|
357
|
+
*/
|
|
358
|
+
async convertPcmAudio(pcmBuffer, requestedFormat) {
|
|
359
|
+
if (requestedFormat === 'wav') {
|
|
360
|
+
return {
|
|
361
|
+
audioBuffer: this.pcmToWav(pcmBuffer),
|
|
362
|
+
audioFormat: 'wav',
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
// For mp3 (and any other format), try ffmpeg first, fall back to WAV
|
|
366
|
+
try {
|
|
367
|
+
const mp3Buffer = await this.pcmToMp3(pcmBuffer);
|
|
368
|
+
return { audioBuffer: mp3Buffer, audioFormat: 'mp3' };
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
this.log('warn', 'ffmpeg not available, falling back to WAV output', {
|
|
372
|
+
error: error.message,
|
|
373
|
+
});
|
|
374
|
+
return {
|
|
375
|
+
audioBuffer: this.pcmToWav(pcmBuffer),
|
|
376
|
+
audioFormat: 'wav',
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Convert raw PCM to MP3 using ffmpeg via child_process
|
|
382
|
+
*
|
|
383
|
+
* @private
|
|
384
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
385
|
+
* @returns Promise resolving to MP3 buffer
|
|
386
|
+
*/
|
|
387
|
+
pcmToMp3(pcmBuffer) {
|
|
388
|
+
return new Promise((resolve, reject) => {
|
|
389
|
+
const ffmpeg = (0, child_process_1.spawn)(this.ffmpegPath, [
|
|
390
|
+
'-f', 's16le',
|
|
391
|
+
'-ar', String(DEFAULT_SAMPLE_RATE),
|
|
392
|
+
'-ac', '1',
|
|
393
|
+
'-i', 'pipe:0',
|
|
394
|
+
'-codec:a', 'libmp3lame',
|
|
395
|
+
'-b:a', '128k',
|
|
396
|
+
'-f', 'mp3',
|
|
397
|
+
'pipe:1',
|
|
398
|
+
]);
|
|
399
|
+
const chunks = [];
|
|
400
|
+
ffmpeg.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
401
|
+
ffmpeg.stderr.on('data', () => { });
|
|
402
|
+
ffmpeg.on('error', (err) => {
|
|
403
|
+
reject(new Error(`ffmpeg spawn failed: ${err.message}`));
|
|
404
|
+
});
|
|
405
|
+
ffmpeg.on('close', (code) => {
|
|
406
|
+
if (code === 0) {
|
|
407
|
+
resolve(Buffer.concat(chunks));
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
reject(new Error(`ffmpeg exited with code ${code}`));
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
ffmpeg.stdin.write(pcmBuffer);
|
|
414
|
+
ffmpeg.stdin.end();
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Convert raw PCM to WAV by prepending a 44-byte WAV header
|
|
419
|
+
*
|
|
420
|
+
* @private
|
|
421
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
422
|
+
* @returns WAV buffer
|
|
423
|
+
*/
|
|
424
|
+
pcmToWav(pcmBuffer) {
|
|
425
|
+
const channels = 1;
|
|
426
|
+
const bitsPerSample = 16;
|
|
427
|
+
const byteRate = DEFAULT_SAMPLE_RATE * channels * (bitsPerSample / 8);
|
|
428
|
+
const blockAlign = channels * (bitsPerSample / 8);
|
|
429
|
+
const dataLength = pcmBuffer.length;
|
|
430
|
+
const header = Buffer.alloc(44);
|
|
431
|
+
header.write('RIFF', 0);
|
|
432
|
+
header.writeUInt32LE(36 + dataLength, 4);
|
|
433
|
+
header.write('WAVE', 8);
|
|
434
|
+
header.write('fmt ', 12);
|
|
435
|
+
header.writeUInt32LE(16, 16); // PCM chunk size
|
|
436
|
+
header.writeUInt16LE(1, 20); // PCM format
|
|
437
|
+
header.writeUInt16LE(channels, 22);
|
|
438
|
+
header.writeUInt32LE(DEFAULT_SAMPLE_RATE, 24);
|
|
439
|
+
header.writeUInt32LE(byteRate, 28);
|
|
440
|
+
header.writeUInt16LE(blockAlign, 32);
|
|
441
|
+
header.writeUInt16LE(bitsPerSample, 34);
|
|
442
|
+
header.write('data', 36);
|
|
443
|
+
header.writeUInt32LE(dataLength, 40);
|
|
444
|
+
return Buffer.concat([header, pcmBuffer]);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
exports.VertexAITTSProvider = VertexAITTSProvider;
|
|
448
|
+
//# 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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"}
|
|
@@ -15,7 +15,7 @@ const edenai_provider_1 = require("./providers/edenai-provider");
|
|
|
15
15
|
const google_cloud_tts_provider_1 = require("./providers/google-cloud-tts-provider");
|
|
16
16
|
const fish_audio_provider_1 = require("./providers/fish-audio-provider");
|
|
17
17
|
const inworld_provider_1 = require("./providers/inworld-provider");
|
|
18
|
-
const
|
|
18
|
+
const vertex_ai_tts_provider_1 = require("./providers/vertex-ai-tts-provider");
|
|
19
19
|
const retry_utils_1 = require("./utils/retry.utils");
|
|
20
20
|
/**
|
|
21
21
|
* TTS Service - Main orchestrator for TTS operations
|
|
@@ -122,13 +122,13 @@ class TTSService {
|
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
124
|
try {
|
|
125
|
-
// Initialize
|
|
126
|
-
const
|
|
127
|
-
this.providers.set(types_1.TTSProvider.
|
|
128
|
-
this.log('debug', '
|
|
125
|
+
// Initialize Vertex AI TTS provider (test/admin only)
|
|
126
|
+
const vertexAIProvider = new vertex_ai_tts_provider_1.VertexAITTSProvider();
|
|
127
|
+
this.providers.set(types_1.TTSProvider.VERTEX_AI, vertexAIProvider);
|
|
128
|
+
this.log('debug', 'Vertex AI TTS provider initialized');
|
|
129
129
|
}
|
|
130
130
|
catch (error) {
|
|
131
|
-
this.log('warn', 'Failed to initialize
|
|
131
|
+
this.log('warn', 'Failed to initialize Vertex AI TTS provider', {
|
|
132
132
|
error: error.message,
|
|
133
133
|
});
|
|
134
134
|
}
|
|
@@ -161,7 +161,7 @@ class TTSService {
|
|
|
161
161
|
deepgram: types_1.TTSProvider.DEEPGRAM,
|
|
162
162
|
fish_audio: types_1.TTSProvider.FISH_AUDIO,
|
|
163
163
|
inworld: types_1.TTSProvider.INWORLD,
|
|
164
|
-
|
|
164
|
+
vertex_ai: types_1.TTSProvider.VERTEX_AI,
|
|
165
165
|
};
|
|
166
166
|
return providerMap[normalized];
|
|
167
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tts.service.js","sourceRoot":"","sources":["../../../../src/middleware/services/tts/tts.service.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAGH,mCAAsC;AAEtC,+DAA2D;AAC3D,iEAA6D;AAC7D,qFAA+E;AAC/E,yEAAoE;AACpE,mEAA+D;AAC/D
|
|
1
|
+
{"version":3,"file":"tts.service.js","sourceRoot":"","sources":["../../../../src/middleware/services/tts/tts.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ export declare enum TTSProvider {
|
|
|
24
24
|
DEEPGRAM = "deepgram",
|
|
25
25
|
FISH_AUDIO = "fish_audio",
|
|
26
26
|
INWORLD = "inworld",
|
|
27
|
-
|
|
27
|
+
VERTEX_AI = "vertex_ai"
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Audio format options supported across providers
|
|
@@ -217,6 +217,16 @@ export interface TTSResponseMetadata {
|
|
|
217
217
|
* @MVP ✅ Implemented
|
|
218
218
|
*/
|
|
219
219
|
sampleRate: number;
|
|
220
|
+
/**
|
|
221
|
+
* GCP region that processed the request
|
|
222
|
+
*
|
|
223
|
+
* @description Set by Vertex AI-based providers (Vertex AI TTS).
|
|
224
|
+
* Useful for auditing data residency and diagnosing region rotation.
|
|
225
|
+
*
|
|
226
|
+
* @example 'europe-west4'
|
|
227
|
+
* @example 'us-central1'
|
|
228
|
+
*/
|
|
229
|
+
region?: string;
|
|
220
230
|
}
|
|
221
231
|
/**
|
|
222
232
|
* Billing information for the TTS request
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/common.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,
|
|
1
|
+
{"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/common.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ var TTSProvider;
|
|
|
27
27
|
TTSProvider["DEEPGRAM"] = "deepgram";
|
|
28
28
|
TTSProvider["FISH_AUDIO"] = "fish_audio";
|
|
29
29
|
TTSProvider["INWORLD"] = "inworld";
|
|
30
|
-
TTSProvider["
|
|
30
|
+
TTSProvider["VERTEX_AI"] = "vertex_ai";
|
|
31
31
|
})(TTSProvider || (exports.TTSProvider = TTSProvider = {}));
|
|
32
32
|
/**
|
|
33
33
|
* Error codes for TTS operations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/common.types.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,IAAY,WAUX;AAVD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,wCAAyB,CAAA;IACzB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;IACrB,wCAAyB,CAAA;IACzB,kCAAmB,CAAA;IACnB,
|
|
1
|
+
{"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/common.types.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,IAAY,WAUX;AAVD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,wCAAyB,CAAA;IACzB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;IACrB,wCAAyB,CAAA;IACzB,kCAAmB,CAAA;IACnB,sCAAuB,CAAA;AACzB,CAAC,EAVW,WAAW,2BAAX,WAAW,QAUtB;AAkWD;;GAEG;AACH,IAAY,YAQX;AARD,WAAY,YAAY;IACtB,iDAAiC,CAAA;IACjC,+CAA+B,CAAA;IAC/B,iDAAiC,CAAA;IACjC,6DAA6C,CAAA;IAC7C,qDAAqC,CAAA;IACrC,+CAA+B,CAAA;IAC/B,+CAA+B,CAAA;AACjC,CAAC,EARW,YAAY,4BAAZ,YAAY,QAQvB"}
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
export { TTSProvider, TTSErrorCode, AudioFormat, } from './common.types';
|
|
9
9
|
export type { AudioOptions, VoiceConfig, TTSSynthesizeRequest, TTSResponse, TTSResponseMetadata, TTSBillingInfo, TTSVoice, TTSVoiceMetadata, } from './common.types';
|
|
10
10
|
export type { AzureProviderOptions, OpenAIProviderOptions, ElevenLabsProviderOptions, GoogleCloudTTSProviderOptions, GoogleCloudProviderOptions, // deprecated alias
|
|
11
|
-
GoogleCloudTTSRegion, DeepgramProviderOptions, EdenAIProviderOptions, FishAudioProviderOptions, InworldProviderOptions,
|
|
11
|
+
GoogleCloudTTSRegion, DeepgramProviderOptions, EdenAIProviderOptions, FishAudioProviderOptions, InworldProviderOptions, VertexAITTSProviderOptions, ProviderOptions, } from './provider-options.types';
|
|
12
12
|
export { isAzureOptions, isOpenAIOptions, isElevenLabsOptions, isGoogleCloudTTSOptions, isGoogleCloudOptions, // deprecated alias
|
|
13
|
-
isDeepgramOptions, isEdenAIOptions, isFishAudioOptions, isInworldOptions,
|
|
13
|
+
isDeepgramOptions, isEdenAIOptions, isFishAudioOptions, isInworldOptions, isVertexAITTSOptions, } from './provider-options.types';
|
|
14
14
|
/**
|
|
15
15
|
* Re-export all types for convenience
|
|
16
16
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAAE,mBAAmB;AAC/C,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAAE,mBAAmB;AAC/C,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EAAE,mBAAmB;AACzC,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;GAOG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC"}
|
|
@@ -21,7 +21,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
21
21
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
22
|
};
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.
|
|
24
|
+
exports.isVertexAITTSOptions = exports.isInworldOptions = exports.isFishAudioOptions = exports.isEdenAIOptions = exports.isDeepgramOptions = exports.isGoogleCloudOptions = exports.isGoogleCloudTTSOptions = exports.isElevenLabsOptions = exports.isOpenAIOptions = exports.isAzureOptions = exports.TTSErrorCode = exports.TTSProvider = void 0;
|
|
25
25
|
// ===== Common Types (Universal) =====
|
|
26
26
|
var common_types_1 = require("./common.types");
|
|
27
27
|
Object.defineProperty(exports, "TTSProvider", { enumerable: true, get: function () { return common_types_1.TTSProvider; } });
|
|
@@ -36,7 +36,7 @@ Object.defineProperty(exports, "isDeepgramOptions", { enumerable: true, get: fun
|
|
|
36
36
|
Object.defineProperty(exports, "isEdenAIOptions", { enumerable: true, get: function () { return provider_options_types_1.isEdenAIOptions; } });
|
|
37
37
|
Object.defineProperty(exports, "isFishAudioOptions", { enumerable: true, get: function () { return provider_options_types_1.isFishAudioOptions; } });
|
|
38
38
|
Object.defineProperty(exports, "isInworldOptions", { enumerable: true, get: function () { return provider_options_types_1.isInworldOptions; } });
|
|
39
|
-
Object.defineProperty(exports, "
|
|
39
|
+
Object.defineProperty(exports, "isVertexAITTSOptions", { enumerable: true, get: function () { return provider_options_types_1.isVertexAITTSOptions; } });
|
|
40
40
|
/**
|
|
41
41
|
* Re-export all types for convenience
|
|
42
42
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAEH,uCAAuC;AACvC,+CAIwB;AAHtB,2GAAA,WAAW,OAAA;AACX,4GAAA,YAAY,OAAA;AA+Bd,mEAWkC;AAVhC,wHAAA,cAAc,OAAA;AACd,yHAAA,eAAe,OAAA;AACf,6HAAA,mBAAmB,OAAA;AACnB,iIAAA,uBAAuB,OAAA;AACvB,8HAAA,oBAAoB,OAAA;AACpB,2HAAA,iBAAiB,OAAA;AACjB,yHAAA,eAAe,OAAA;AACf,4HAAA,kBAAkB,OAAA;AAClB,0HAAA,gBAAgB,OAAA;AAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAEH,uCAAuC;AACvC,+CAIwB;AAHtB,2GAAA,WAAW,OAAA;AACX,4GAAA,YAAY,OAAA;AA+Bd,mEAWkC;AAVhC,wHAAA,cAAc,OAAA;AACd,yHAAA,eAAe,OAAA;AACf,6HAAA,mBAAmB,OAAA;AACnB,iIAAA,uBAAuB,OAAA;AACvB,8HAAA,oBAAoB,OAAA;AACpB,2HAAA,iBAAiB,OAAA;AACjB,yHAAA,eAAe,OAAA;AACf,4HAAA,kBAAkB,OAAA;AAClB,0HAAA,gBAAgB,OAAA;AAChB,8HAAA,oBAAoB,OAAA;AAGtB;;;;;;;GAOG;AACH,iDAA+B;AAC/B,2DAAyC"}
|