@loonylabs/tts-middleware 0.8.0 → 0.9.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 +33 -2
- package/dist/middleware/services/tts/index.d.ts +3 -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 +1 -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/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 +2 -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 +38 -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 +12 -0
- package/dist/middleware/services/tts/types/provider-options.types.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
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# TTS Middleware
|
|
4
4
|
|
|
5
|
-
*Provider-agnostic Text-to-Speech middleware with **GDPR compliance** support. Currently supports Azure Speech Services, EdenAI, Google Cloud TTS, Fish Audio, and
|
|
5
|
+
*Provider-agnostic Text-to-Speech middleware with **GDPR compliance** support. Currently supports Azure Speech Services, EdenAI, Google Cloud TTS, Fish Audio, Inworld AI, and Gemini TTS. Features EU data residency via Azure and Google Cloud, pluggable logging, character-based billing, and comprehensive error handling.*
|
|
6
6
|
|
|
7
7
|
<!-- Horizontal Badge Navigation Bar -->
|
|
8
8
|
[](https://www.npmjs.com/package/@loonylabs/tts-middleware)
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
- **Google Cloud TTS**: Neural2, WaveNet, Studio voices with EU data residency
|
|
44
44
|
- **Fish Audio**: S1 model with 13 languages & 64+ emotions (test/admin only)
|
|
45
45
|
- **Inworld AI**: TTS 1.5 Max/Mini with 15 languages & voice cloning (test/admin only)
|
|
46
|
+
- **Gemini TTS**: Flash/Pro models with 30 voices, 90+ languages & style prompts (test/admin only)
|
|
46
47
|
- **Ready for:** OpenAI, ElevenLabs, Deepgram (interfaces prepared)
|
|
47
48
|
- **GDPR/DSGVO Compliance**: Built-in EU region support for Azure and Google Cloud
|
|
48
49
|
- **SSML Abstraction**: Auto-generates provider-specific SSML from simple JSON options
|
|
@@ -137,6 +138,14 @@ const inworld = await ttsService.synthesize({
|
|
|
137
138
|
voice: { id: 'Ashley' },
|
|
138
139
|
providerOptions: { modelId: 'inworld-tts-1.5-max', temperature: 1.1 },
|
|
139
140
|
});
|
|
141
|
+
|
|
142
|
+
// Gemini TTS via Vertex AI (test/admin only)
|
|
143
|
+
const gemini = await ttsService.synthesize({
|
|
144
|
+
text: 'Have a wonderful day!',
|
|
145
|
+
provider: TTSProvider.GEMINI,
|
|
146
|
+
voice: { id: 'Kore' },
|
|
147
|
+
providerOptions: { model: 'gemini-2.5-flash-preview-tts', stylePrompt: 'Say cheerfully:' },
|
|
148
|
+
});
|
|
140
149
|
```
|
|
141
150
|
|
|
142
151
|
</details>
|
|
@@ -240,6 +249,10 @@ FISH_AUDIO_API_KEY=your-fish-audio-api-key
|
|
|
240
249
|
# Inworld AI (test/admin only – no EU data residency)
|
|
241
250
|
INWORLD_API_KEY=your-inworld-api-key
|
|
242
251
|
|
|
252
|
+
# Gemini TTS via Vertex AI (test/admin only – no EU data residency)
|
|
253
|
+
# Reuses GOOGLE_APPLICATION_CREDENTIALS and GOOGLE_CLOUD_PROJECT from above
|
|
254
|
+
GEMINI_REGION=us-central1
|
|
255
|
+
|
|
243
256
|
# Logging
|
|
244
257
|
TTS_DEBUG=false
|
|
245
258
|
LOG_LEVEL=info
|
|
@@ -304,6 +317,19 @@ LOG_LEVEL=info
|
|
|
304
317
|
| **Pricing** | $10/1M chars (Max), $5/1M chars (Mini) |
|
|
305
318
|
| **EU Compliance** | No data residency guarantees |
|
|
306
319
|
|
|
320
|
+
### Gemini TTS (Test/Admin Only)
|
|
321
|
+
|
|
322
|
+
| Feature | Details |
|
|
323
|
+
|---------|---------|
|
|
324
|
+
| **Models** | Flash (budget, fast) and Pro (premium, natural) |
|
|
325
|
+
| **Languages** | 90+ with auto-detection |
|
|
326
|
+
| **Voices** | 30 multilingual: Kore, Puck, Charon, Zephyr, Fenrir, Sulafat, etc. |
|
|
327
|
+
| **Style Control** | Natural language prompts: "Say cheerfully:", "Read in a spooky whisper:" |
|
|
328
|
+
| **Audio** | MP3 (via ffmpeg), WAV (fallback) |
|
|
329
|
+
| **Auth** | Vertex AI Service Account (reuses `GOOGLE_APPLICATION_CREDENTIALS`) |
|
|
330
|
+
| **Pricing** | $0.50-1.00/M input tokens + $10-20/M audio output tokens |
|
|
331
|
+
| **EU Compliance** | No data residency guarantees |
|
|
332
|
+
|
|
307
333
|
## GDPR / Compliance
|
|
308
334
|
|
|
309
335
|
### Provider Compliance Overview
|
|
@@ -315,6 +341,7 @@ LOG_LEVEL=info
|
|
|
315
341
|
| **EdenAI** | Yes | Depends* | Depends* | Depends on underlying provider |
|
|
316
342
|
| **Fish Audio** | No | No | No | Test/admin only |
|
|
317
343
|
| **Inworld AI** | No | No | No | Test/admin only |
|
|
344
|
+
| **Gemini TTS** | No | No | No | Test/admin only |
|
|
318
345
|
|
|
319
346
|
*EdenAI is an aggregator - compliance depends on the underlying provider.
|
|
320
347
|
|
|
@@ -503,12 +530,14 @@ graph TD
|
|
|
503
530
|
Registry -->|Select| Eden[EdenAIProvider]
|
|
504
531
|
Registry -->|Select| Fish[FishAudioProvider]
|
|
505
532
|
Registry -->|Select| Inworld[InworldProvider]
|
|
533
|
+
Registry -->|Select| Gemini[GeminiProvider]
|
|
506
534
|
|
|
507
535
|
Azure -->|SSML/SDK| AzureAPI[Azure Speech API]
|
|
508
536
|
GCloud -->|gRPC/SDK| GoogleAPI[Google Cloud TTS API]
|
|
509
537
|
Eden -->|REST| EdenAPI[EdenAI API]
|
|
510
538
|
Fish -->|REST| FishAPI[Fish Audio API]
|
|
511
539
|
Inworld -->|REST| InworldAPI[Inworld AI API]
|
|
540
|
+
Gemini -->|REST/OAuth2| GeminiAPI[Vertex AI Gemini API]
|
|
512
541
|
|
|
513
542
|
GoogleAPI -->|EU Endpoint| EU[eu-texttospeech.googleapis.com]
|
|
514
543
|
EdenAPI -.-> OpenAI[OpenAI TTS]
|
|
@@ -518,7 +547,7 @@ graph TD
|
|
|
518
547
|
## Testing
|
|
519
548
|
|
|
520
549
|
```bash
|
|
521
|
-
# Run all tests (
|
|
550
|
+
# Run all tests (540+ tests, >90% coverage)
|
|
522
551
|
npm test
|
|
523
552
|
|
|
524
553
|
# Unit tests only
|
|
@@ -534,6 +563,8 @@ npm run test:coverage
|
|
|
534
563
|
npx ts-node scripts/manual-test-edenai.ts
|
|
535
564
|
npx ts-node scripts/manual-test-google-cloud-tts.ts
|
|
536
565
|
npx ts-node scripts/manual-test-fish-audio.ts [en] [de]
|
|
566
|
+
npx ts-node scripts/manual-test-inworld.ts [en] [de] [mini]
|
|
567
|
+
npx ts-node scripts/manual-test-gemini.ts [en] [de] [pro] [style]
|
|
537
568
|
|
|
538
569
|
# List available Google Cloud voices
|
|
539
570
|
npx ts-node scripts/list-google-voices.ts de-DE
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
*/
|
|
21
21
|
export { TTSService, ttsService } from './tts.service';
|
|
22
22
|
export { TTSProvider, TTSErrorCode, AudioFormat, } from './types';
|
|
23
|
-
export type { AudioOptions, VoiceConfig, TTSSynthesizeRequest, TTSResponse, TTSResponseMetadata, TTSBillingInfo, TTSVoice, TTSVoiceMetadata, AzureProviderOptions, OpenAIProviderOptions, ElevenLabsProviderOptions, GoogleCloudProviderOptions, GoogleCloudTTSProviderOptions, DeepgramProviderOptions, EdenAIProviderOptions, FishAudioProviderOptions, InworldProviderOptions, ProviderOptions, } from './types';
|
|
24
|
-
export { isAzureOptions, isOpenAIOptions, isElevenLabsOptions, isGoogleCloudOptions, isGoogleCloudTTSOptions, isDeepgramOptions, isEdenAIOptions, isFishAudioOptions, isInworldOptions, } from './types';
|
|
25
|
-
export { BaseTTSProvider, AzureProvider, EdenAIProvider, FishAudioProvider, GoogleCloudTTSProvider, InworldProvider, } from './providers';
|
|
23
|
+
export type { AudioOptions, VoiceConfig, TTSSynthesizeRequest, TTSResponse, TTSResponseMetadata, TTSBillingInfo, TTSVoice, TTSVoiceMetadata, AzureProviderOptions, OpenAIProviderOptions, ElevenLabsProviderOptions, GoogleCloudProviderOptions, GoogleCloudTTSProviderOptions, DeepgramProviderOptions, EdenAIProviderOptions, FishAudioProviderOptions, InworldProviderOptions, GeminiProviderOptions, ProviderOptions, } from './types';
|
|
24
|
+
export { isAzureOptions, isOpenAIOptions, isElevenLabsOptions, isGoogleCloudOptions, isGoogleCloudTTSOptions, isDeepgramOptions, isEdenAIOptions, isFishAudioOptions, isInworldOptions, isGeminiOptions, } from './types';
|
|
25
|
+
export { BaseTTSProvider, AzureProvider, EdenAIProvider, FishAudioProvider, GoogleCloudTTSProvider, InworldProvider, GeminiProvider, } from './providers';
|
|
26
26
|
export type { GoogleCloudTTSRegion, GoogleCloudTTSConfig, } from './providers';
|
|
27
27
|
export { TTSError, InvalidConfigError, InvalidVoiceError, QuotaExceededError, ProviderUnavailableError, SynthesisFailedError, NetworkError, } from './providers';
|
|
28
28
|
export { countCharacters, countCharactersWithoutSSML, validateCharacterCount, countBillableCharacters, estimateAudioDuration, formatCharacterCount, } from './utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/services/tts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/services/tts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* @module @loonylabs/tts-middleware
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.DEFAULT_RETRY_CONFIG = exports.isRetryableError = exports.executeWithRetry = exports.silentLogger = exports.getLogLevel = exports.setLogLevel = exports.resetLogger = exports.getLogger = exports.setLogger = exports.formatCharacterCount = exports.estimateAudioDuration = exports.countBillableCharacters = exports.validateCharacterCount = exports.countCharactersWithoutSSML = exports.countCharacters = exports.NetworkError = exports.SynthesisFailedError = exports.ProviderUnavailableError = exports.QuotaExceededError = exports.InvalidVoiceError = exports.InvalidConfigError = exports.TTSError = exports.InworldProvider = exports.GoogleCloudTTSProvider = exports.FishAudioProvider = exports.EdenAIProvider = exports.AzureProvider = exports.BaseTTSProvider = exports.isInworldOptions = exports.isFishAudioOptions = exports.isEdenAIOptions = exports.isDeepgramOptions = exports.isGoogleCloudTTSOptions = exports.isGoogleCloudOptions = exports.isElevenLabsOptions = exports.isOpenAIOptions = exports.isAzureOptions = exports.TTSErrorCode = exports.TTSProvider = exports.ttsService = exports.TTSService = void 0;
|
|
23
|
+
exports.DEFAULT_RETRY_CONFIG = exports.isRetryableError = exports.executeWithRetry = exports.silentLogger = exports.getLogLevel = exports.setLogLevel = exports.resetLogger = exports.getLogger = exports.setLogger = exports.formatCharacterCount = exports.estimateAudioDuration = exports.countBillableCharacters = exports.validateCharacterCount = exports.countCharactersWithoutSSML = exports.countCharacters = exports.NetworkError = exports.SynthesisFailedError = exports.ProviderUnavailableError = exports.QuotaExceededError = exports.InvalidVoiceError = exports.InvalidConfigError = exports.TTSError = exports.GeminiProvider = exports.InworldProvider = exports.GoogleCloudTTSProvider = exports.FishAudioProvider = exports.EdenAIProvider = exports.AzureProvider = exports.BaseTTSProvider = exports.isGeminiOptions = exports.isInworldOptions = exports.isFishAudioOptions = exports.isEdenAIOptions = exports.isDeepgramOptions = exports.isGoogleCloudTTSOptions = exports.isGoogleCloudOptions = exports.isElevenLabsOptions = exports.isOpenAIOptions = exports.isAzureOptions = exports.TTSErrorCode = exports.TTSProvider = exports.ttsService = exports.TTSService = void 0;
|
|
24
24
|
// ===== Main Service =====
|
|
25
25
|
var tts_service_1 = require("./tts.service");
|
|
26
26
|
Object.defineProperty(exports, "TTSService", { enumerable: true, get: function () { return tts_service_1.TTSService; } });
|
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "isDeepgramOptions", { enumerable: true, get: fun
|
|
|
39
39
|
Object.defineProperty(exports, "isEdenAIOptions", { enumerable: true, get: function () { return types_2.isEdenAIOptions; } });
|
|
40
40
|
Object.defineProperty(exports, "isFishAudioOptions", { enumerable: true, get: function () { return types_2.isFishAudioOptions; } });
|
|
41
41
|
Object.defineProperty(exports, "isInworldOptions", { enumerable: true, get: function () { return types_2.isInworldOptions; } });
|
|
42
|
+
Object.defineProperty(exports, "isGeminiOptions", { enumerable: true, get: function () { return types_2.isGeminiOptions; } });
|
|
42
43
|
// ===== Providers =====
|
|
43
44
|
var providers_1 = require("./providers");
|
|
44
45
|
Object.defineProperty(exports, "BaseTTSProvider", { enumerable: true, get: function () { return providers_1.BaseTTSProvider; } });
|
|
@@ -47,6 +48,7 @@ Object.defineProperty(exports, "EdenAIProvider", { enumerable: true, get: functi
|
|
|
47
48
|
Object.defineProperty(exports, "FishAudioProvider", { enumerable: true, get: function () { return providers_1.FishAudioProvider; } });
|
|
48
49
|
Object.defineProperty(exports, "GoogleCloudTTSProvider", { enumerable: true, get: function () { return providers_1.GoogleCloudTTSProvider; } });
|
|
49
50
|
Object.defineProperty(exports, "InworldProvider", { enumerable: true, get: function () { return providers_1.InworldProvider; } });
|
|
51
|
+
Object.defineProperty(exports, "GeminiProvider", { enumerable: true, get: function () { return providers_1.GeminiProvider; } });
|
|
50
52
|
// ===== Errors =====
|
|
51
53
|
var providers_2 = require("./providers");
|
|
52
54
|
Object.defineProperty(exports, "TTSError", { enumerable: true, get: function () { return providers_2.TTSError; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/middleware/services/tts/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,2BAA2B;AAC3B,6CAAuD;AAA9C,yGAAA,UAAU,OAAA;AAAE,yGAAA,UAAU,OAAA;AAE/B,oBAAoB;AACpB,iCAIiB;AAHf,oGAAA,WAAW,OAAA;AACX,qGAAA,YAAY,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/middleware/services/tts/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,2BAA2B;AAC3B,6CAAuD;AAA9C,yGAAA,UAAU,OAAA;AAAE,yGAAA,UAAU,OAAA;AAE/B,oBAAoB;AACpB,iCAIiB;AAHf,oGAAA,WAAW,OAAA;AACX,qGAAA,YAAY,OAAA;AA0Bd,iCAWiB;AAVf,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,4GAAA,mBAAmB,OAAA;AACnB,6GAAA,oBAAoB,OAAA;AACpB,gHAAA,uBAAuB,OAAA;AACvB,0GAAA,iBAAiB,OAAA;AACjB,wGAAA,eAAe,OAAA;AACf,2GAAA,kBAAkB,OAAA;AAClB,yGAAA,gBAAgB,OAAA;AAChB,wGAAA,eAAe,OAAA;AAGjB,wBAAwB;AACxB,yCAQqB;AAPnB,4GAAA,eAAe,OAAA;AACf,0GAAA,aAAa,OAAA;AACb,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,mHAAA,sBAAsB,OAAA;AACtB,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AAQhB,qBAAqB;AACrB,yCAQqB;AAPnB,qGAAA,QAAQ,OAAA;AACR,+GAAA,kBAAkB,OAAA;AAClB,8GAAA,iBAAiB,OAAA;AACjB,+GAAA,kBAAkB,OAAA;AAClB,qHAAA,wBAAwB,OAAA;AACxB,iHAAA,oBAAoB,OAAA;AACpB,yGAAA,YAAY,OAAA;AAGd,wBAAwB;AACxB,iCAOiB;AANf,wGAAA,eAAe,OAAA;AACf,mHAAA,0BAA0B,OAAA;AAC1B,+GAAA,sBAAsB,OAAA;AACtB,gHAAA,uBAAuB,OAAA;AACvB,8GAAA,qBAAqB,OAAA;AACrB,6GAAA,oBAAoB,OAAA;AAGtB,qBAAqB;AACrB,iCAOiB;AANf,kGAAA,SAAS,OAAA;AACT,kGAAA,SAAS,OAAA;AACT,oGAAA,WAAW,OAAA;AACX,oGAAA,WAAW,OAAA;AACX,oGAAA,WAAW,OAAA;AACX,qGAAA,YAAY,OAAA;AAKd,oBAAoB;AACpB,iCAIiB;AAHf,yGAAA,gBAAgB,OAAA;AAChB,yGAAA,gBAAgB,OAAA;AAChB,6GAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini TTS Provider
|
|
3
|
+
*
|
|
4
|
+
* @description Provider for Google Gemini TTS via Vertex AI, using 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
|
+
/**
|
|
19
|
+
* Gemini TTS configuration (Vertex AI)
|
|
20
|
+
*/
|
|
21
|
+
export interface GeminiConfig {
|
|
22
|
+
/**
|
|
23
|
+
* Path to Service Account JSON file
|
|
24
|
+
* @env GOOGLE_APPLICATION_CREDENTIALS
|
|
25
|
+
*/
|
|
26
|
+
keyFilename?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Google Cloud Project ID
|
|
29
|
+
* @env GOOGLE_CLOUD_PROJECT
|
|
30
|
+
*/
|
|
31
|
+
projectId?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Vertex AI region
|
|
34
|
+
* @env GEMINI_REGION
|
|
35
|
+
* @default 'us-central1'
|
|
36
|
+
*/
|
|
37
|
+
region?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Gemini TTS provider implementation
|
|
41
|
+
*
|
|
42
|
+
* @description Provides TTS synthesis using Google's Gemini generateContent API
|
|
43
|
+
* via Vertex AI. Authenticates with Service Account OAuth2 (same credentials as
|
|
44
|
+
* Google Cloud TTS). Gemini outputs raw PCM which is converted to MP3 (via ffmpeg)
|
|
45
|
+
* or WAV (pure Node.js fallback).
|
|
46
|
+
*
|
|
47
|
+
* Billing: Token-based ($0.50-1.00/M input + $10-20/M audio output tokens).
|
|
48
|
+
* For billing compatibility, reports character count like all other providers.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const provider = new GeminiProvider();
|
|
53
|
+
* const response = await provider.synthesize(
|
|
54
|
+
* "Hello World",
|
|
55
|
+
* "Kore",
|
|
56
|
+
* {
|
|
57
|
+
* text: "Hello World",
|
|
58
|
+
* voice: { id: "Kore" },
|
|
59
|
+
* audio: { format: "mp3" },
|
|
60
|
+
* providerOptions: {
|
|
61
|
+
* model: "gemini-2.5-flash-preview-tts",
|
|
62
|
+
* stylePrompt: "Say cheerfully:"
|
|
63
|
+
* }
|
|
64
|
+
* }
|
|
65
|
+
* );
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare class GeminiProvider extends BaseTTSProvider {
|
|
69
|
+
private config;
|
|
70
|
+
private authClient;
|
|
71
|
+
/**
|
|
72
|
+
* Creates a new Gemini TTS provider
|
|
73
|
+
*
|
|
74
|
+
* @param config - Optional configuration (uses env vars if not provided)
|
|
75
|
+
* @throws {InvalidConfigError} If credentials are missing
|
|
76
|
+
*/
|
|
77
|
+
constructor(config?: Partial<GeminiConfig>);
|
|
78
|
+
/**
|
|
79
|
+
* Validate Gemini configuration
|
|
80
|
+
*
|
|
81
|
+
* @private
|
|
82
|
+
* @throws {InvalidConfigError} If configuration is invalid
|
|
83
|
+
*/
|
|
84
|
+
private validateGeminiConfig;
|
|
85
|
+
/**
|
|
86
|
+
* Get an authenticated access token via Service Account
|
|
87
|
+
*
|
|
88
|
+
* @private
|
|
89
|
+
* @returns OAuth2 access token
|
|
90
|
+
*/
|
|
91
|
+
private getAccessToken;
|
|
92
|
+
/**
|
|
93
|
+
* Synthesize text to speech using Gemini TTS
|
|
94
|
+
*
|
|
95
|
+
* @param text - The input text to synthesize
|
|
96
|
+
* @param voiceId - The voice name (e.g. "Kore", "Puck", "Charon")
|
|
97
|
+
* @param request - The full synthesis request with options
|
|
98
|
+
* @returns Promise resolving to the synthesis response
|
|
99
|
+
*/
|
|
100
|
+
synthesize(text: string, voiceId: string, request: TTSSynthesizeRequest): Promise<TTSResponse>;
|
|
101
|
+
/**
|
|
102
|
+
* Build Gemini generateContent request payload
|
|
103
|
+
*
|
|
104
|
+
* @private
|
|
105
|
+
*/
|
|
106
|
+
private buildRequest;
|
|
107
|
+
/**
|
|
108
|
+
* Call Gemini generateContent API via Vertex AI
|
|
109
|
+
*
|
|
110
|
+
* @private
|
|
111
|
+
* @param requestBody - The request payload
|
|
112
|
+
* @param model - The Gemini model to use
|
|
113
|
+
* @returns Promise resolving to raw PCM audio buffer
|
|
114
|
+
*/
|
|
115
|
+
private callAPI;
|
|
116
|
+
/**
|
|
117
|
+
* Convert raw PCM audio to the requested format
|
|
118
|
+
*
|
|
119
|
+
* @private
|
|
120
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
121
|
+
* @param requestedFormat - The desired output format ('mp3', 'wav', etc.)
|
|
122
|
+
* @returns The converted audio buffer and actual format used
|
|
123
|
+
*/
|
|
124
|
+
private convertPcmAudio;
|
|
125
|
+
/**
|
|
126
|
+
* Convert raw PCM to MP3 using ffmpeg via child_process
|
|
127
|
+
*
|
|
128
|
+
* @private
|
|
129
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
130
|
+
* @returns Promise resolving to MP3 buffer
|
|
131
|
+
*/
|
|
132
|
+
private pcmToMp3;
|
|
133
|
+
/**
|
|
134
|
+
* Convert raw PCM to WAV by prepending a 44-byte WAV header
|
|
135
|
+
*
|
|
136
|
+
* @private
|
|
137
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
138
|
+
* @returns WAV buffer
|
|
139
|
+
*/
|
|
140
|
+
private pcmToWav;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=gemini-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-provider.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/gemini-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;AAG7B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAA6E;IAE/F;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAkB1C;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;;;;OAKG;YACW,cAAc;IAqB5B;;;;;;;OAOG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC;IAsDvB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;;;;OAOG;YACW,OAAO;IA6CrB;;;;;;;OAOG;YACW,eAAe;IA0B7B;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAkChB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAwBjB"}
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Gemini TTS Provider
|
|
4
|
+
*
|
|
5
|
+
* @description Provider for Google Gemini TTS via Vertex AI, using 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.GeminiProvider = 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 DEFAULT_MODEL = 'gemini-2.5-flash-preview-tts';
|
|
57
|
+
const DEFAULT_SAMPLE_RATE = 24000;
|
|
58
|
+
const DEFAULT_REGION = 'us-central1';
|
|
59
|
+
/**
|
|
60
|
+
* Gemini TTS provider implementation
|
|
61
|
+
*
|
|
62
|
+
* @description Provides TTS synthesis using Google's Gemini generateContent API
|
|
63
|
+
* via Vertex AI. Authenticates with Service Account OAuth2 (same credentials as
|
|
64
|
+
* Google Cloud TTS). Gemini outputs raw PCM which is converted to MP3 (via ffmpeg)
|
|
65
|
+
* 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 GeminiProvider();
|
|
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 GeminiProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
89
|
+
/**
|
|
90
|
+
* Creates a new Gemini 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.GEMINI);
|
|
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.GEMINI_REGION || DEFAULT_REGION,
|
|
102
|
+
};
|
|
103
|
+
this.validateGeminiConfig();
|
|
104
|
+
this.log('info', 'Gemini TTS provider initialized', {
|
|
105
|
+
hasCredentials: !!this.config.keyFilename,
|
|
106
|
+
projectId: this.config.projectId ? '***' : undefined,
|
|
107
|
+
region: this.config.region,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Validate Gemini configuration
|
|
112
|
+
*
|
|
113
|
+
* @private
|
|
114
|
+
* @throws {InvalidConfigError} If configuration is invalid
|
|
115
|
+
*/
|
|
116
|
+
validateGeminiConfig() {
|
|
117
|
+
if (!this.config.keyFilename) {
|
|
118
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Google Cloud credentials are required for Gemini TTS (GOOGLE_APPLICATION_CREDENTIALS)');
|
|
119
|
+
}
|
|
120
|
+
if (!this.config.projectId) {
|
|
121
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Google Cloud Project ID is required for Gemini TTS (GOOGLE_CLOUD_PROJECT)');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get an authenticated access token via Service Account
|
|
126
|
+
*
|
|
127
|
+
* @private
|
|
128
|
+
* @returns OAuth2 access token
|
|
129
|
+
*/
|
|
130
|
+
async getAccessToken() {
|
|
131
|
+
if (!this.authClient) {
|
|
132
|
+
const { GoogleAuth } = await Promise.resolve().then(() => __importStar(require('google-auth-library')));
|
|
133
|
+
const auth = new GoogleAuth({
|
|
134
|
+
keyFilename: this.config.keyFilename,
|
|
135
|
+
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
|
|
136
|
+
});
|
|
137
|
+
this.authClient = await auth.getClient();
|
|
138
|
+
}
|
|
139
|
+
const tokenResponse = await this.authClient.getAccessToken();
|
|
140
|
+
if (!tokenResponse.token) {
|
|
141
|
+
throw new base_tts_provider_1.InvalidConfigError(this.providerName, 'Failed to obtain access token from Service Account');
|
|
142
|
+
}
|
|
143
|
+
return tokenResponse.token;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Synthesize text to speech using Gemini TTS
|
|
147
|
+
*
|
|
148
|
+
* @param text - The input text to synthesize
|
|
149
|
+
* @param voiceId - The voice name (e.g. "Kore", "Puck", "Charon")
|
|
150
|
+
* @param request - The full synthesis request with options
|
|
151
|
+
* @returns Promise resolving to the synthesis response
|
|
152
|
+
*/
|
|
153
|
+
async synthesize(text, voiceId, request) {
|
|
154
|
+
this.validateConfig(request);
|
|
155
|
+
const startTime = Date.now();
|
|
156
|
+
const options = (request.providerOptions || {});
|
|
157
|
+
const model = options.model || DEFAULT_MODEL;
|
|
158
|
+
const requestedFormat = request.audio?.format || 'mp3';
|
|
159
|
+
const requestBody = this.buildRequest(text, voiceId, options);
|
|
160
|
+
this.log('debug', 'Synthesizing with Gemini TTS', {
|
|
161
|
+
voiceId,
|
|
162
|
+
model,
|
|
163
|
+
textLength: text.length,
|
|
164
|
+
requestedFormat,
|
|
165
|
+
});
|
|
166
|
+
try {
|
|
167
|
+
const pcmBuffer = await this.callAPI(requestBody, model);
|
|
168
|
+
const { audioBuffer, audioFormat } = await this.convertPcmAudio(pcmBuffer, requestedFormat);
|
|
169
|
+
const duration = Date.now() - startTime;
|
|
170
|
+
this.log('info', 'Synthesis successful', {
|
|
171
|
+
voiceId,
|
|
172
|
+
characters: text.length,
|
|
173
|
+
duration,
|
|
174
|
+
audioSize: audioBuffer.length,
|
|
175
|
+
audioFormat,
|
|
176
|
+
});
|
|
177
|
+
return {
|
|
178
|
+
audio: audioBuffer,
|
|
179
|
+
metadata: {
|
|
180
|
+
provider: this.providerName,
|
|
181
|
+
voice: voiceId,
|
|
182
|
+
duration,
|
|
183
|
+
audioDuration: audioFormat === 'mp3' ? (0, mp3_duration_utils_1.getMp3Duration)(audioBuffer) : undefined,
|
|
184
|
+
audioFormat,
|
|
185
|
+
sampleRate: DEFAULT_SAMPLE_RATE,
|
|
186
|
+
},
|
|
187
|
+
billing: {
|
|
188
|
+
characters: this.countCharacters(text),
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
this.log('error', 'Synthesis failed', {
|
|
194
|
+
voiceId,
|
|
195
|
+
error: error.message,
|
|
196
|
+
});
|
|
197
|
+
throw this.handleError(error, 'during Gemini TTS API call');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Build Gemini generateContent request payload
|
|
202
|
+
*
|
|
203
|
+
* @private
|
|
204
|
+
*/
|
|
205
|
+
buildRequest(text, voiceId, options) {
|
|
206
|
+
const synthesisText = options.stylePrompt
|
|
207
|
+
? `${options.stylePrompt} ${text}`
|
|
208
|
+
: text;
|
|
209
|
+
return {
|
|
210
|
+
contents: [
|
|
211
|
+
{
|
|
212
|
+
role: 'user',
|
|
213
|
+
parts: [{ text: synthesisText }],
|
|
214
|
+
},
|
|
215
|
+
],
|
|
216
|
+
generationConfig: {
|
|
217
|
+
responseModalities: ['AUDIO'],
|
|
218
|
+
speechConfig: {
|
|
219
|
+
voiceConfig: {
|
|
220
|
+
prebuiltVoiceConfig: {
|
|
221
|
+
voiceName: voiceId,
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Call Gemini generateContent API via Vertex AI
|
|
230
|
+
*
|
|
231
|
+
* @private
|
|
232
|
+
* @param requestBody - The request payload
|
|
233
|
+
* @param model - The Gemini model to use
|
|
234
|
+
* @returns Promise resolving to raw PCM audio buffer
|
|
235
|
+
*/
|
|
236
|
+
async callAPI(requestBody, model) {
|
|
237
|
+
const accessToken = await this.getAccessToken();
|
|
238
|
+
const region = this.config.region || DEFAULT_REGION;
|
|
239
|
+
const projectId = this.config.projectId;
|
|
240
|
+
const url = `https://${region}-aiplatform.googleapis.com/v1/projects/${projectId}/locations/${region}/publishers/google/models/${model}:generateContent`;
|
|
241
|
+
const response = await fetch(url, {
|
|
242
|
+
method: 'POST',
|
|
243
|
+
headers: {
|
|
244
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
245
|
+
'Content-Type': 'application/json',
|
|
246
|
+
},
|
|
247
|
+
body: JSON.stringify(requestBody),
|
|
248
|
+
});
|
|
249
|
+
if (!response.ok) {
|
|
250
|
+
const errorText = await response.text();
|
|
251
|
+
throw new Error(`Gemini API error (${response.status}): ${errorText}`);
|
|
252
|
+
}
|
|
253
|
+
const responseJson = await response.json();
|
|
254
|
+
const inlineData = responseJson.candidates?.[0]?.content?.parts?.[0]?.inlineData;
|
|
255
|
+
if (!inlineData?.data) {
|
|
256
|
+
throw new Error('Gemini API returned no audio data');
|
|
257
|
+
}
|
|
258
|
+
return Buffer.from(inlineData.data, 'base64');
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Convert raw PCM audio to the requested format
|
|
262
|
+
*
|
|
263
|
+
* @private
|
|
264
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
265
|
+
* @param requestedFormat - The desired output format ('mp3', 'wav', etc.)
|
|
266
|
+
* @returns The converted audio buffer and actual format used
|
|
267
|
+
*/
|
|
268
|
+
async convertPcmAudio(pcmBuffer, requestedFormat) {
|
|
269
|
+
if (requestedFormat === 'wav') {
|
|
270
|
+
return {
|
|
271
|
+
audioBuffer: this.pcmToWav(pcmBuffer),
|
|
272
|
+
audioFormat: 'wav',
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
// For mp3 (and any other format), try ffmpeg first, fall back to WAV
|
|
276
|
+
try {
|
|
277
|
+
const mp3Buffer = await this.pcmToMp3(pcmBuffer);
|
|
278
|
+
return { audioBuffer: mp3Buffer, audioFormat: 'mp3' };
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
this.log('warn', 'ffmpeg not available, falling back to WAV output', {
|
|
282
|
+
error: error.message,
|
|
283
|
+
});
|
|
284
|
+
return {
|
|
285
|
+
audioBuffer: this.pcmToWav(pcmBuffer),
|
|
286
|
+
audioFormat: 'wav',
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Convert raw PCM to MP3 using ffmpeg via child_process
|
|
292
|
+
*
|
|
293
|
+
* @private
|
|
294
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
295
|
+
* @returns Promise resolving to MP3 buffer
|
|
296
|
+
*/
|
|
297
|
+
pcmToMp3(pcmBuffer) {
|
|
298
|
+
return new Promise((resolve, reject) => {
|
|
299
|
+
const ffmpeg = (0, child_process_1.spawn)('ffmpeg', [
|
|
300
|
+
'-f', 's16le',
|
|
301
|
+
'-ar', String(DEFAULT_SAMPLE_RATE),
|
|
302
|
+
'-ac', '1',
|
|
303
|
+
'-i', 'pipe:0',
|
|
304
|
+
'-codec:a', 'libmp3lame',
|
|
305
|
+
'-b:a', '128k',
|
|
306
|
+
'-f', 'mp3',
|
|
307
|
+
'pipe:1',
|
|
308
|
+
]);
|
|
309
|
+
const chunks = [];
|
|
310
|
+
ffmpeg.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
311
|
+
ffmpeg.stderr.on('data', () => { });
|
|
312
|
+
ffmpeg.on('error', (err) => {
|
|
313
|
+
reject(new Error(`ffmpeg spawn failed: ${err.message}`));
|
|
314
|
+
});
|
|
315
|
+
ffmpeg.on('close', (code) => {
|
|
316
|
+
if (code === 0) {
|
|
317
|
+
resolve(Buffer.concat(chunks));
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
reject(new Error(`ffmpeg exited with code ${code}`));
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
ffmpeg.stdin.write(pcmBuffer);
|
|
324
|
+
ffmpeg.stdin.end();
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Convert raw PCM to WAV by prepending a 44-byte WAV header
|
|
329
|
+
*
|
|
330
|
+
* @private
|
|
331
|
+
* @param pcmBuffer - Raw PCM buffer (24kHz, 16-bit, mono, little-endian)
|
|
332
|
+
* @returns WAV buffer
|
|
333
|
+
*/
|
|
334
|
+
pcmToWav(pcmBuffer) {
|
|
335
|
+
const channels = 1;
|
|
336
|
+
const bitsPerSample = 16;
|
|
337
|
+
const byteRate = DEFAULT_SAMPLE_RATE * channels * (bitsPerSample / 8);
|
|
338
|
+
const blockAlign = channels * (bitsPerSample / 8);
|
|
339
|
+
const dataLength = pcmBuffer.length;
|
|
340
|
+
const header = Buffer.alloc(44);
|
|
341
|
+
header.write('RIFF', 0);
|
|
342
|
+
header.writeUInt32LE(36 + dataLength, 4);
|
|
343
|
+
header.write('WAVE', 8);
|
|
344
|
+
header.write('fmt ', 12);
|
|
345
|
+
header.writeUInt32LE(16, 16); // PCM chunk size
|
|
346
|
+
header.writeUInt16LE(1, 20); // PCM format
|
|
347
|
+
header.writeUInt16LE(channels, 22);
|
|
348
|
+
header.writeUInt32LE(DEFAULT_SAMPLE_RATE, 24);
|
|
349
|
+
header.writeUInt32LE(byteRate, 28);
|
|
350
|
+
header.writeUInt16LE(blockAlign, 32);
|
|
351
|
+
header.writeUInt16LE(bitsPerSample, 34);
|
|
352
|
+
header.write('data', 36);
|
|
353
|
+
header.writeUInt32LE(dataLength, 40);
|
|
354
|
+
return Buffer.concat([header, pcmBuffer]);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
exports.GeminiProvider = GeminiProvider;
|
|
358
|
+
//# sourceMappingURL=gemini-provider.js.map
|
|
@@ -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,5 @@ 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 { GeminiProvider } from './gemini-provider';
|
|
13
14
|
//# 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,cAAc,EAAE,MAAM,mBAAmB,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.GeminiProvider = 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 gemini_provider_1 = require("./gemini-provider");
|
|
31
|
+
Object.defineProperty(exports, "GeminiProvider", { enumerable: true, get: function () { return gemini_provider_1.GeminiProvider; } });
|
|
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,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAEvB,yDAAyD;AACzD,sDAAsD;AACtD,8DAA8D;AAC9D,0DAA0D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tts.service.d.ts","sourceRoot":"","sources":["../../../../src/middleware/services/tts/tts.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"tts.service.d.ts","sourceRoot":"","sources":["../../../../src/middleware/services/tts/tts.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAarE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,UAAU;IACrB;;OAEG;IACH,OAAO,CAAC,SAAS,CAAoC;IAErD;;OAEG;IACH,OAAO,CAAC,eAAe,CAAc;IAErC;;;;;OAKG;;IAiBH;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAkF3B;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;;;;;;;;;;;;;;;;OAkBG;IACG,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAqDrE;;;;;;;;;;;OAWG;IACI,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe;IAa1D;;;;;;;;;;OAUG;IACI,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAgBtD;;;;;;;;;;OAUG;IACI,kBAAkB,IAAI,WAAW;IAIxC;;;;;;;;;;OAUG;IACI,qBAAqB,IAAI,WAAW,EAAE;IAI7C;;;;;;;;;;;;OAYG;IACI,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO;IAI1D;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG;CAcZ;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,YAAmB,CAAC"}
|
|
@@ -15,6 +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 gemini_provider_1 = require("./providers/gemini-provider");
|
|
18
19
|
const retry_utils_1 = require("./utils/retry.utils");
|
|
19
20
|
/**
|
|
20
21
|
* TTS Service - Main orchestrator for TTS operations
|
|
@@ -120,6 +121,17 @@ class TTSService {
|
|
|
120
121
|
error: error.message,
|
|
121
122
|
});
|
|
122
123
|
}
|
|
124
|
+
try {
|
|
125
|
+
// Initialize Gemini TTS provider (test/admin only)
|
|
126
|
+
const geminiProvider = new gemini_provider_1.GeminiProvider();
|
|
127
|
+
this.providers.set(types_1.TTSProvider.GEMINI, geminiProvider);
|
|
128
|
+
this.log('debug', 'Gemini TTS provider initialized');
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
this.log('warn', 'Failed to initialize Gemini TTS provider', {
|
|
132
|
+
error: error.message,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
123
135
|
// Future providers will be initialized here:
|
|
124
136
|
// try {
|
|
125
137
|
// const openaiProvider = new OpenAIProvider();
|
|
@@ -149,6 +161,7 @@ class TTSService {
|
|
|
149
161
|
deepgram: types_1.TTSProvider.DEEPGRAM,
|
|
150
162
|
fish_audio: types_1.TTSProvider.FISH_AUDIO,
|
|
151
163
|
inworld: types_1.TTSProvider.INWORLD,
|
|
164
|
+
gemini: types_1.TTSProvider.GEMINI,
|
|
152
165
|
};
|
|
153
166
|
return providerMap[normalized];
|
|
154
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tts.service.js","sourceRoot":"","sources":["../../../../src/middleware/services/tts/tts.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tts.service.js","sourceRoot":"","sources":["../../../../src/middleware/services/tts/tts.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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,6 +27,7 @@ var TTSProvider;
|
|
|
27
27
|
TTSProvider["DEEPGRAM"] = "deepgram";
|
|
28
28
|
TTSProvider["FISH_AUDIO"] = "fish_audio";
|
|
29
29
|
TTSProvider["INWORLD"] = "inworld";
|
|
30
|
+
TTSProvider["GEMINI"] = "gemini";
|
|
30
31
|
})(TTSProvider || (exports.TTSProvider = TTSProvider = {}));
|
|
31
32
|
/**
|
|
32
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,
|
|
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,gCAAiB,CAAA;AACnB,CAAC,EAVW,WAAW,2BAAX,WAAW,QAUtB;AAuVD;;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, ProviderOptions, } from './provider-options.types';
|
|
11
|
+
GoogleCloudTTSRegion, DeepgramProviderOptions, EdenAIProviderOptions, FishAudioProviderOptions, InworldProviderOptions, GeminiProviderOptions, ProviderOptions, } from './provider-options.types';
|
|
12
12
|
export { isAzureOptions, isOpenAIOptions, isElevenLabsOptions, isGoogleCloudTTSOptions, isGoogleCloudOptions, // deprecated alias
|
|
13
|
-
isDeepgramOptions, isEdenAIOptions, isFishAudioOptions, isInworldOptions, } from './provider-options.types';
|
|
13
|
+
isDeepgramOptions, isEdenAIOptions, isFishAudioOptions, isInworldOptions, isGeminiOptions, } 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,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,
|
|
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,qBAAqB,EACrB,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,eAAe,GAChB,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.isInworldOptions = exports.isFishAudioOptions = exports.isEdenAIOptions = exports.isDeepgramOptions = exports.isGoogleCloudOptions = exports.isGoogleCloudTTSOptions = exports.isElevenLabsOptions = exports.isOpenAIOptions = exports.isAzureOptions = exports.TTSErrorCode = exports.TTSProvider = void 0;
|
|
24
|
+
exports.isGeminiOptions = 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,6 +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, "isGeminiOptions", { enumerable: true, get: function () { return provider_options_types_1.isGeminiOptions; } });
|
|
39
40
|
/**
|
|
40
41
|
* Re-export all types for convenience
|
|
41
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;
|
|
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,yHAAA,eAAe,OAAA;AAGjB;;;;;;;GAOG;AACH,iDAA+B;AAC/B,2DAAyC"}
|
|
@@ -509,12 +509,45 @@ export interface InworldProviderOptions {
|
|
|
509
509
|
*/
|
|
510
510
|
applyTextNormalization?: 'APPLY_TEXT_NORMALIZATION_UNSPECIFIED' | 'ON' | 'OFF';
|
|
511
511
|
}
|
|
512
|
+
/**
|
|
513
|
+
* Gemini TTS provider options
|
|
514
|
+
*
|
|
515
|
+
* @provider Gemini TTS API (Google AI)
|
|
516
|
+
* @description Gemini 2.5 TTS models using the generateContent endpoint with audio output.
|
|
517
|
+
* Supports 30 voices with 90+ languages (auto-detect). Style control via natural language prompts.
|
|
518
|
+
* Test/Admin only – no EU data residency guarantees.
|
|
519
|
+
*
|
|
520
|
+
* @see https://ai.google.dev/gemini-api/docs/text-to-speech
|
|
521
|
+
*/
|
|
522
|
+
export interface GeminiProviderOptions {
|
|
523
|
+
/**
|
|
524
|
+
* TTS model to use
|
|
525
|
+
*
|
|
526
|
+
* @options
|
|
527
|
+
* - 'gemini-2.5-flash-preview-tts': Budget, fast ($0.50/M input + $10/M audio output tokens)
|
|
528
|
+
* - 'gemini-2.5-pro-preview-tts': Premium, natural ($1.00/M input + $20/M audio output tokens)
|
|
529
|
+
*
|
|
530
|
+
* @default 'gemini-2.5-flash-preview-tts'
|
|
531
|
+
*/
|
|
532
|
+
model?: 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts';
|
|
533
|
+
/**
|
|
534
|
+
* Natural language style instruction prepended to the text
|
|
535
|
+
*
|
|
536
|
+
* @description Controls voice style/emotion via prompt engineering.
|
|
537
|
+
* The instruction is prepended to the synthesis text, e.g. "Say cheerfully: {text}".
|
|
538
|
+
*
|
|
539
|
+
* @example 'Say in a spooky whisper:'
|
|
540
|
+
* @example 'Read this cheerfully:'
|
|
541
|
+
* @example 'Speak in a calm, professional tone:'
|
|
542
|
+
*/
|
|
543
|
+
stylePrompt?: string;
|
|
544
|
+
}
|
|
512
545
|
/**
|
|
513
546
|
* Union type of all provider options
|
|
514
547
|
*
|
|
515
548
|
* @description Use this type when you need to accept any provider options
|
|
516
549
|
*/
|
|
517
|
-
export type ProviderOptions = AzureProviderOptions | OpenAIProviderOptions | ElevenLabsProviderOptions | GoogleCloudTTSProviderOptions | DeepgramProviderOptions | EdenAIProviderOptions | FishAudioProviderOptions | InworldProviderOptions;
|
|
550
|
+
export type ProviderOptions = AzureProviderOptions | OpenAIProviderOptions | ElevenLabsProviderOptions | GoogleCloudTTSProviderOptions | DeepgramProviderOptions | EdenAIProviderOptions | FishAudioProviderOptions | InworldProviderOptions | GeminiProviderOptions;
|
|
518
551
|
/**
|
|
519
552
|
* Type guard to check if options are for Azure
|
|
520
553
|
*/
|
|
@@ -551,4 +584,8 @@ export declare function isFishAudioOptions(options: unknown): options is FishAud
|
|
|
551
584
|
* Type guard to check if options are for Inworld AI
|
|
552
585
|
*/
|
|
553
586
|
export declare function isInworldOptions(options: unknown): options is InworldProviderOptions;
|
|
587
|
+
/**
|
|
588
|
+
* Type guard to check if options are for Gemini TTS
|
|
589
|
+
*/
|
|
590
|
+
export declare function isGeminiOptions(options: unknown): options is GeminiProviderOptions;
|
|
554
591
|
//# sourceMappingURL=provider-options.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-options.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/provider-options.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider-options.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/provider-options.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EACJ,KAAK,GACL,OAAO,GACP,UAAU,GACV,UAAU,GACV,WAAW,GACX,UAAU,GACV,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,MAAM,GACN,SAAS,GACT,aAAa,GACb,SAAS,GACT,WAAW,GACX,aAAa,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EACF,MAAM,GACN,iBAAiB,GACjB,UAAU,GACV,WAAW,GACX,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,SAAS,GACT,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,2BAA2B,CAAC;IAEhC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAEjD;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CAClD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,aAAa,GACb,QAAQ,CAAC;AAEb;;;;;;;;GAQG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAE9B;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAE7B;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,6BAA6B,CAAC;AAEvE;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAElE;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAE5C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EACL,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,WAAW,GACX,QAAQ,GACR,YAAY,CAAC;IAEjB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE9C;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC;IAE3C;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;IAExC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IAE5B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,qBAAqB,GAAG,sBAAsB,CAAC;IAEzD;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,4BAA4B,GAAG,MAAM,GAAG,WAAW,CAAC;IAEpE;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,sCAAsC,GAAG,IAAI,GAAG,KAAK,CAAC;CAChF;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,8BAA8B,GAAG,4BAA4B,CAAC;IAEtE;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,qBAAqB,GACrB,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,sBAAsB,GACtB,qBAAqB,CAAC;AAE1B;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,oBAAoB,CAMjC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,qBAAqB,CAOlC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,yBAAyB,CAMtC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,6BAA6B,CAM1C;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,gCAA0B,CAAC;AAE5D;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,uBAAuB,CAMpC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,qBAAqB,CASlC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,wBAAwB,CASrC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,sBAAsB,CAQnC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,qBAAqB,CASlC"}
|
|
@@ -18,6 +18,7 @@ exports.isDeepgramOptions = isDeepgramOptions;
|
|
|
18
18
|
exports.isEdenAIOptions = isEdenAIOptions;
|
|
19
19
|
exports.isFishAudioOptions = isFishAudioOptions;
|
|
20
20
|
exports.isInworldOptions = isInworldOptions;
|
|
21
|
+
exports.isGeminiOptions = isGeminiOptions;
|
|
21
22
|
/**
|
|
22
23
|
* Type guard to check if options are for Azure
|
|
23
24
|
*/
|
|
@@ -95,4 +96,15 @@ function isInworldOptions(options) {
|
|
|
95
96
|
'timestampType' in options ||
|
|
96
97
|
'applyTextNormalization' in options));
|
|
97
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Type guard to check if options are for Gemini TTS
|
|
101
|
+
*/
|
|
102
|
+
function isGeminiOptions(options) {
|
|
103
|
+
return (typeof options === 'object' &&
|
|
104
|
+
options !== null &&
|
|
105
|
+
('stylePrompt' in options ||
|
|
106
|
+
('model' in options &&
|
|
107
|
+
typeof options.model === 'string' &&
|
|
108
|
+
options.model.startsWith('gemini-'))));
|
|
109
|
+
}
|
|
98
110
|
//# sourceMappingURL=provider-options.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-options.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/provider-options.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"provider-options.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/types/provider-options.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAwoBH,wCAQC;AAKD,0CASC;AAKD,kDAQC;AAKD,0DAQC;AAUD,8CAQC;AAKD,0CAWC;AAKD,gDAWC;AAKD,4CAUC;AAKD,0CAWC;AApID;;GAEG;AACH,SAAgB,cAAc,CAC5B,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,SAAS,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,CAC7C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,OAAO,IAAI,OAAO;QAClB,OAAQ,OAA8B,CAAC,KAAK,KAAK,QAAQ,CAC1D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,WAAW,IAAI,OAAO,IAAI,kBAAkB,IAAI,OAAO,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CACrC,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,kBAAkB,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,CAAC,CACvD,CAAC;AACJ,CAAC;AAED;;GAEG;AACU,QAAA,oBAAoB,GAAG,uBAAuB,CAAC;AAE5D;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,UAAU,IAAI,OAAO,IAAI,WAAW,IAAI,OAAO,CAAC,CAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,oBAAoB,IAAI,OAAO;YAC9B,aAAa,IAAI,OAAO;YACxB,QAAQ,IAAI,OAAO;YACnB,UAAU,IAAI,OAAO,CAAC,CACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,aAAa,IAAI,OAAO;YACvB,MAAM,IAAI,OAAO;YACjB,mBAAmB,IAAI,OAAO;YAC9B,aAAa,IAAI,OAAO,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,SAAS,IAAI,OAAO;YACnB,eAAe,IAAI,OAAO;YAC1B,wBAAwB,IAAI,OAAO,CAAC,CACvC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,OAAgB;IAEhB,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,aAAa,IAAI,OAAO;YACvB,CAAC,OAAO,IAAI,OAAO;gBACjB,OAAQ,OAA8B,CAAC,KAAK,KAAK,QAAQ;gBACxD,OAA6B,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC"}
|
|
@@ -118,6 +118,19 @@ export interface InworldConfig {
|
|
|
118
118
|
*/
|
|
119
119
|
API_KEY: string;
|
|
120
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Gemini TTS Configuration (via Vertex AI)
|
|
123
|
+
* Reuses Google Cloud credentials (GOOGLE_APPLICATION_CREDENTIALS).
|
|
124
|
+
* Test/Admin only – no EU data residency guarantees.
|
|
125
|
+
*/
|
|
126
|
+
export interface GeminiConfig {
|
|
127
|
+
/**
|
|
128
|
+
* Vertex AI region for Gemini TTS
|
|
129
|
+
* @env GEMINI_REGION
|
|
130
|
+
* @default 'us-central1'
|
|
131
|
+
*/
|
|
132
|
+
REGION: string;
|
|
133
|
+
}
|
|
121
134
|
/**
|
|
122
135
|
* TTS Middleware Configuration Object
|
|
123
136
|
*/
|
|
@@ -148,6 +161,10 @@ export interface TTSConfig {
|
|
|
148
161
|
* Inworld AI configuration (test/admin only)
|
|
149
162
|
*/
|
|
150
163
|
INWORLD: InworldConfig;
|
|
164
|
+
/**
|
|
165
|
+
* Gemini TTS configuration (test/admin only)
|
|
166
|
+
*/
|
|
167
|
+
GEMINI: GeminiConfig;
|
|
151
168
|
/**
|
|
152
169
|
* Enable debug logging
|
|
153
170
|
* @env TTS_DEBUG
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tts.config.d.ts","sourceRoot":"","sources":["../../../../src/middleware/shared/config/tts.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,aAAa,GACb,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,MAAM,EAAE,oBAAoB,CAAC;IAE7B;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,gBAAgB,EAAE,WAAW,CAAC;IAE9B;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,oBAAoB,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,eAAe,CAAC;IAE5B;;OAEG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,oBAAoB,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7C;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"tts.config.d.ts","sourceRoot":"","sources":["../../../../src/middleware/shared/config/tts.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,aAAa,GACb,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,MAAM,EAAE,oBAAoB,CAAC;IAE7B;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,gBAAgB,EAAE,WAAW,CAAC;IAE9B;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,oBAAoB,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,eAAe,CAAC;IAE5B;;OAEG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,oBAAoB,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7C;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,IAAI,SAAS,CA0ExC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmHzD;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,EAAE,SAA0B,CAAC"}
|
|
@@ -35,6 +35,7 @@ function getTTSConfig() {
|
|
|
35
35
|
const googleCredentialsPath = process.env.GOOGLE_APPLICATION_CREDENTIALS || '';
|
|
36
36
|
const fishAudioApiKey = process.env.FISH_AUDIO_API_KEY || '';
|
|
37
37
|
const inworldApiKey = process.env.INWORLD_API_KEY || '';
|
|
38
|
+
const geminiRegion = process.env.GEMINI_REGION || 'us-central1';
|
|
38
39
|
const defaultProvider = process.env.TTS_DEFAULT_PROVIDER || types_1.TTSProvider.AZURE;
|
|
39
40
|
const debug = process.env.TTS_DEBUG === 'true';
|
|
40
41
|
// Determine DSGVO compliance based on Azure region
|
|
@@ -83,6 +84,9 @@ function getTTSConfig() {
|
|
|
83
84
|
INWORLD: {
|
|
84
85
|
API_KEY: inworldApiKey,
|
|
85
86
|
},
|
|
87
|
+
GEMINI: {
|
|
88
|
+
REGION: geminiRegion,
|
|
89
|
+
},
|
|
86
90
|
DEBUG: debug,
|
|
87
91
|
MAX_TEXT_LENGTH: 3000,
|
|
88
92
|
DEFAULT_AUDIO_FORMAT: 'mp3',
|
|
@@ -164,6 +168,16 @@ function validateTTSConfig(config) {
|
|
|
164
168
|
errors.push('INWORLD_API_KEY is required when using Inworld AI provider (set in environment variable)');
|
|
165
169
|
}
|
|
166
170
|
}
|
|
171
|
+
// Validate Gemini TTS configuration (if used as default provider)
|
|
172
|
+
// Gemini reuses Google Cloud credentials (GOOGLE_APPLICATION_CREDENTIALS + GOOGLE_CLOUD_PROJECT)
|
|
173
|
+
if (config.DEFAULT_PROVIDER === types_1.TTSProvider.GEMINI) {
|
|
174
|
+
if (!config.GOOGLE.CREDENTIALS_PATH) {
|
|
175
|
+
errors.push('GOOGLE_APPLICATION_CREDENTIALS is required when using Gemini TTS provider (set in environment variable)');
|
|
176
|
+
}
|
|
177
|
+
if (!config.GOOGLE.PROJECT_ID) {
|
|
178
|
+
errors.push('GOOGLE_CLOUD_PROJECT is required when using Gemini TTS provider (set in environment variable)');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
167
181
|
// Validate numeric values
|
|
168
182
|
if (config.MAX_TEXT_LENGTH <= 0) {
|
|
169
183
|
errors.push('MAX_TEXT_LENGTH must be greater than 0');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tts.config.js","sourceRoot":"","sources":["../../../../src/middleware/shared/config/tts.config.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;
|
|
1
|
+
{"version":3,"file":"tts.config.js","sourceRoot":"","sources":["../../../../src/middleware/shared/config/tts.config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loonylabs/tts-middleware",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Provider-agnostic Text-to-Speech middleware for Azure, OpenAI, ElevenLabs, Google Cloud, Deepgram, Fish Audio, and
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "Provider-agnostic Text-to-Speech middleware for Azure, OpenAI, ElevenLabs, Google Cloud, Deepgram, Fish Audio, Inworld AI, and Gemini TTS",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"google-cloud",
|
|
34
34
|
"deepgram",
|
|
35
35
|
"fish-audio",
|
|
36
|
+
"gemini",
|
|
36
37
|
"middleware",
|
|
37
38
|
"provider-agnostic",
|
|
38
39
|
"speech-synthesis",
|