@loonylabs/tts-middleware 0.7.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.
Files changed (42) hide show
  1. package/README.md +61 -2
  2. package/dist/middleware/services/tts/index.d.ts +3 -3
  3. package/dist/middleware/services/tts/index.d.ts.map +1 -1
  4. package/dist/middleware/services/tts/index.js +7 -1
  5. package/dist/middleware/services/tts/index.js.map +1 -1
  6. package/dist/middleware/services/tts/providers/fish-audio-provider.js +2 -2
  7. package/dist/middleware/services/tts/providers/fish-audio-provider.js.map +1 -1
  8. package/dist/middleware/services/tts/providers/gemini-provider.d.ts +142 -0
  9. package/dist/middleware/services/tts/providers/gemini-provider.d.ts.map +1 -0
  10. package/dist/middleware/services/tts/providers/gemini-provider.js +358 -0
  11. package/dist/middleware/services/tts/providers/gemini-provider.js.map +1 -0
  12. package/dist/middleware/services/tts/providers/google-cloud-tts-provider.d.ts.map +1 -1
  13. package/dist/middleware/services/tts/providers/google-cloud-tts-provider.js +0 -9
  14. package/dist/middleware/services/tts/providers/google-cloud-tts-provider.js.map +1 -1
  15. package/dist/middleware/services/tts/providers/index.d.ts +2 -0
  16. package/dist/middleware/services/tts/providers/index.d.ts.map +1 -1
  17. package/dist/middleware/services/tts/providers/index.js +5 -1
  18. package/dist/middleware/services/tts/providers/index.js.map +1 -1
  19. package/dist/middleware/services/tts/providers/inworld-provider.d.ts +100 -0
  20. package/dist/middleware/services/tts/providers/inworld-provider.d.ts.map +1 -0
  21. package/dist/middleware/services/tts/providers/inworld-provider.js +212 -0
  22. package/dist/middleware/services/tts/providers/inworld-provider.js.map +1 -0
  23. package/dist/middleware/services/tts/tts.service.d.ts.map +1 -1
  24. package/dist/middleware/services/tts/tts.service.js +26 -0
  25. package/dist/middleware/services/tts/tts.service.js.map +1 -1
  26. package/dist/middleware/services/tts/types/common.types.d.ts +11 -2
  27. package/dist/middleware/services/tts/types/common.types.d.ts.map +1 -1
  28. package/dist/middleware/services/tts/types/common.types.js +2 -0
  29. package/dist/middleware/services/tts/types/common.types.js.map +1 -1
  30. package/dist/middleware/services/tts/types/index.d.ts +2 -2
  31. package/dist/middleware/services/tts/types/index.d.ts.map +1 -1
  32. package/dist/middleware/services/tts/types/index.js +3 -1
  33. package/dist/middleware/services/tts/types/index.js.map +1 -1
  34. package/dist/middleware/services/tts/types/provider-options.types.d.ts +83 -62
  35. package/dist/middleware/services/tts/types/provider-options.types.d.ts.map +1 -1
  36. package/dist/middleware/services/tts/types/provider-options.types.js +28 -7
  37. package/dist/middleware/services/tts/types/provider-options.types.js.map +1 -1
  38. package/dist/middleware/shared/config/tts.config.d.ts +33 -0
  39. package/dist/middleware/shared/config/tts.config.d.ts.map +1 -1
  40. package/dist/middleware/shared/config/tts.config.js +24 -0
  41. package/dist/middleware/shared/config/tts.config.js.map +1 -1
  42. 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, and Fish Audio. Features EU data residency via Azure and Google Cloud, pluggable logging, character-based billing, and comprehensive error handling.*
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
  [![npm version](https://img.shields.io/npm/v/@loonylabs/tts-middleware.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@loonylabs/tts-middleware)
@@ -42,6 +42,8 @@
42
42
  - **EdenAI**: Aggregator with access to Google, OpenAI, Amazon, IBM, ElevenLabs
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
+ - **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)
45
47
  - **Ready for:** OpenAI, ElevenLabs, Deepgram (interfaces prepared)
46
48
  - **GDPR/DSGVO Compliance**: Built-in EU region support for Azure and Google Cloud
47
49
  - **SSML Abstraction**: Auto-generates provider-specific SSML from simple JSON options
@@ -128,6 +130,22 @@ const fish = await ttsService.synthesize({
128
130
  voice: { id: '90042f762dbf49baa2e7776d011eee6b' },
129
131
  providerOptions: { model: 's1' },
130
132
  });
133
+
134
+ // Inworld AI (test/admin only)
135
+ const inworld = await ttsService.synthesize({
136
+ text: 'Hello from Inworld AI!',
137
+ provider: TTSProvider.INWORLD,
138
+ voice: { id: 'Ashley' },
139
+ providerOptions: { modelId: 'inworld-tts-1.5-max', temperature: 1.1 },
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
+ });
131
149
  ```
132
150
 
133
151
  </details>
@@ -228,6 +246,13 @@ GOOGLE_TTS_REGION=eu
228
246
  # Fish Audio (test/admin only – no EU data residency)
229
247
  FISH_AUDIO_API_KEY=your-fish-audio-api-key
230
248
 
249
+ # Inworld AI (test/admin only – no EU data residency)
250
+ INWORLD_API_KEY=your-inworld-api-key
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
+
231
256
  # Logging
232
257
  TTS_DEBUG=false
233
258
  LOG_LEVEL=info
@@ -280,6 +305,31 @@ LOG_LEVEL=info
280
305
  | **Pricing** | $15/1M UTF-8 bytes |
281
306
  | **EU Compliance** | No data residency guarantees |
282
307
 
308
+ ### Inworld AI (Test/Admin Only)
309
+
310
+ | Feature | Details |
311
+ |---------|---------|
312
+ | **Models** | TTS 1.5 Max (~200ms latency), TTS 1.5 Mini (~120ms latency) |
313
+ | **Languages** | 15 languages |
314
+ | **Voices** | Instant voice cloning + professional voice cloning |
315
+ | **Audio** | MP3, LINEAR16, OGG_OPUS, ALAW, MULAW, FLAC |
316
+ | **Controls** | temperature, speakingRate, timestamps, text normalization |
317
+ | **Pricing** | $10/1M chars (Max), $5/1M chars (Mini) |
318
+ | **EU Compliance** | No data residency guarantees |
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
+
283
333
  ## GDPR / Compliance
284
334
 
285
335
  ### Provider Compliance Overview
@@ -290,6 +340,8 @@ LOG_LEVEL=info
290
340
  | **Google Cloud** | Yes | Yes | Yes (EU multi-region) | Full EU endpoint support |
291
341
  | **EdenAI** | Yes | Depends* | Depends* | Depends on underlying provider |
292
342
  | **Fish Audio** | No | No | No | Test/admin only |
343
+ | **Inworld AI** | No | No | No | Test/admin only |
344
+ | **Gemini TTS** | No | No | No | Test/admin only |
293
345
 
294
346
  *EdenAI is an aggregator - compliance depends on the underlying provider.
295
347
 
@@ -457,6 +509,7 @@ const PROVIDER_RATES = {
457
509
  [TTSProvider.AZURE]: 16 / 1_000_000,
458
510
  [TTSProvider.GOOGLE]: 16 / 1_000_000,
459
511
  [TTSProvider.FISH_AUDIO]: 15 / 1_000_000,
512
+ [TTSProvider.INWORLD]: 10 / 1_000_000, // Max model; Mini: $5/1M
460
513
  };
461
514
 
462
515
  const response = await ttsService.synthesize({ /* ... */ });
@@ -476,11 +529,15 @@ graph TD
476
529
  Registry -->|Select| GCloud[GoogleCloudTTSProvider]
477
530
  Registry -->|Select| Eden[EdenAIProvider]
478
531
  Registry -->|Select| Fish[FishAudioProvider]
532
+ Registry -->|Select| Inworld[InworldProvider]
533
+ Registry -->|Select| Gemini[GeminiProvider]
479
534
 
480
535
  Azure -->|SSML/SDK| AzureAPI[Azure Speech API]
481
536
  GCloud -->|gRPC/SDK| GoogleAPI[Google Cloud TTS API]
482
537
  Eden -->|REST| EdenAPI[EdenAI API]
483
538
  Fish -->|REST| FishAPI[Fish Audio API]
539
+ Inworld -->|REST| InworldAPI[Inworld AI API]
540
+ Gemini -->|REST/OAuth2| GeminiAPI[Vertex AI Gemini API]
484
541
 
485
542
  GoogleAPI -->|EU Endpoint| EU[eu-texttospeech.googleapis.com]
486
543
  EdenAPI -.-> OpenAI[OpenAI TTS]
@@ -490,7 +547,7 @@ graph TD
490
547
  ## Testing
491
548
 
492
549
  ```bash
493
- # Run all tests (523 tests, >90% coverage)
550
+ # Run all tests (540+ tests, >90% coverage)
494
551
  npm test
495
552
 
496
553
  # Unit tests only
@@ -506,6 +563,8 @@ npm run test:coverage
506
563
  npx ts-node scripts/manual-test-edenai.ts
507
564
  npx ts-node scripts/manual-test-google-cloud-tts.ts
508
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]
509
568
 
510
569
  # List available Google Cloud voices
511
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, ProviderOptions, } from './types';
24
- export { isAzureOptions, isOpenAIOptions, isElevenLabsOptions, isGoogleCloudOptions, isGoogleCloudTTSOptions, isDeepgramOptions, isEdenAIOptions, } from './types';
25
- export { BaseTTSProvider, AzureProvider, EdenAIProvider, GoogleCloudTTSProvider, } 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,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,GAChB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,sBAAsB,GACvB,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"}
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.GoogleCloudTTSProvider = exports.EdenAIProvider = exports.AzureProvider = exports.BaseTTSProvider = 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; } });
@@ -37,12 +37,18 @@ Object.defineProperty(exports, "isGoogleCloudOptions", { enumerable: true, get:
37
37
  Object.defineProperty(exports, "isGoogleCloudTTSOptions", { enumerable: true, get: function () { return types_2.isGoogleCloudTTSOptions; } });
38
38
  Object.defineProperty(exports, "isDeepgramOptions", { enumerable: true, get: function () { return types_2.isDeepgramOptions; } });
39
39
  Object.defineProperty(exports, "isEdenAIOptions", { enumerable: true, get: function () { return types_2.isEdenAIOptions; } });
40
+ Object.defineProperty(exports, "isFishAudioOptions", { enumerable: true, get: function () { return types_2.isFishAudioOptions; } });
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; } });
40
43
  // ===== Providers =====
41
44
  var providers_1 = require("./providers");
42
45
  Object.defineProperty(exports, "BaseTTSProvider", { enumerable: true, get: function () { return providers_1.BaseTTSProvider; } });
43
46
  Object.defineProperty(exports, "AzureProvider", { enumerable: true, get: function () { return providers_1.AzureProvider; } });
44
47
  Object.defineProperty(exports, "EdenAIProvider", { enumerable: true, get: function () { return providers_1.EdenAIProvider; } });
48
+ Object.defineProperty(exports, "FishAudioProvider", { enumerable: true, get: function () { return providers_1.FishAudioProvider; } });
45
49
  Object.defineProperty(exports, "GoogleCloudTTSProvider", { enumerable: true, get: function () { return providers_1.GoogleCloudTTSProvider; } });
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; } });
46
52
  // ===== Errors =====
47
53
  var providers_2 = require("./providers");
48
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;AAuBd,iCAQiB;AAPf,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;AAGjB,wBAAwB;AACxB,yCAKqB;AAJnB,4GAAA,eAAe,OAAA;AACf,0GAAA,aAAa,OAAA;AACb,2GAAA,cAAc,OAAA;AACd,mHAAA,sBAAsB,OAAA;AAQxB,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"}
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"}
@@ -140,8 +140,8 @@ class FishAudioProvider extends base_tts_provider_1.BaseTTSProvider {
140
140
  body.reference_id = referenceId;
141
141
  }
142
142
  // Quality parameters
143
- if (options.temperature !== undefined)
144
- body.temperature = options.temperature;
143
+ if (request.audio?.temperature !== undefined)
144
+ body.temperature = request.audio.temperature;
145
145
  if (options.topP !== undefined)
146
146
  body.top_p = options.topP;
147
147
  if (options.repetitionPenalty !== undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"fish-audio-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/fish-audio-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fish-audio-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/fish-audio-provider.ts"],"names":[],"mappings":"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"}
@@ -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"}