@loonylabs/tts-middleware 0.12.0 → 0.12.2
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 +46 -0
- package/dist/middleware/services/tts/providers/base-tts-provider.d.ts +44 -0
- package/dist/middleware/services/tts/providers/base-tts-provider.d.ts.map +1 -1
- package/dist/middleware/services/tts/providers/base-tts-provider.js +49 -0
- package/dist/middleware/services/tts/providers/base-tts-provider.js.map +1 -1
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.d.ts +20 -3
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.d.ts.map +1 -1
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.js +210 -22
- package/dist/middleware/services/tts/providers/vertex-ai-tts-provider.js.map +1 -1
- package/dist/middleware/services/tts/utils/index.d.ts +2 -0
- package/dist/middleware/services/tts/utils/index.d.ts.map +1 -1
- package/dist/middleware/services/tts/utils/index.js +5 -1
- package/dist/middleware/services/tts/utils/index.js.map +1 -1
- package/dist/middleware/services/tts/utils/request-logger.utils.d.ts +96 -0
- package/dist/middleware/services/tts/utils/request-logger.utils.d.ts.map +1 -0
- package/dist/middleware/services/tts/utils/request-logger.utils.js +194 -0
- package/dist/middleware/services/tts/utils/request-logger.utils.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -432,6 +432,11 @@ the correct request shape (`prebuiltVoiceConfig` vs `multiSpeakerVoiceConfig`).
|
|
|
432
432
|
Segments with >2 distinct speakers throw `InvalidConfigError` with guidance
|
|
433
433
|
to split the segment.
|
|
434
434
|
|
|
435
|
+
**Debugging dialog requests:** Set `DEBUG_TTS_REQUESTS=true` to have one
|
|
436
|
+
Markdown file written per segment under `logs/tts/requests/`, capturing the
|
|
437
|
+
exact request body, selected shape, speaker→voice mapping, HTTP status, and
|
|
438
|
+
timing. See [Request Debug Logging](#advanced-features) below.
|
|
439
|
+
|
|
435
440
|
## GDPR / Compliance
|
|
436
441
|
|
|
437
442
|
### Provider Compliance Overview
|
|
@@ -529,6 +534,47 @@ setLogLevel('warn');
|
|
|
529
534
|
|
|
530
535
|
</details>
|
|
531
536
|
|
|
537
|
+
<details>
|
|
538
|
+
<summary><strong>Request Debug Logging</strong></summary>
|
|
539
|
+
|
|
540
|
+
For debugging, you can have the middleware write one Markdown file per upstream
|
|
541
|
+
TTS API call (e.g. per Google Vertex AI `generateContent` invocation). This is
|
|
542
|
+
especially useful for the dialog mode: each segment is one Google request, and
|
|
543
|
+
the log shows the exact request body that was sent — so you can verify the
|
|
544
|
+
auto-selected `prebuiltVoiceConfig` vs `multiSpeakerVoiceConfig` shape,
|
|
545
|
+
speaker→voice mapping, style prompt, and temperature.
|
|
546
|
+
|
|
547
|
+
```bash
|
|
548
|
+
# Enable per-request debug logs
|
|
549
|
+
export DEBUG_TTS_REQUESTS=true
|
|
550
|
+
|
|
551
|
+
# Optional: override log directory (default: <cwd>/logs/tts/requests)
|
|
552
|
+
export TTS_REQUEST_LOG_DIR=/tmp/my-tts-logs
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
Each call produces a file named like:
|
|
556
|
+
|
|
557
|
+
```
|
|
558
|
+
2026-04-17T14-30-00-000Z_vertex-ai_dialog-segment_seg0_multi-speaker.md
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
Contents include: timestamp, model, region, endpoint URL, HTTP status, duration,
|
|
562
|
+
dialog context (segment index, request shape, speaker→voice mapping), the full
|
|
563
|
+
request body (no truncation), response metadata (mime type, audio byte count,
|
|
564
|
+
candidate count), and any error body.
|
|
565
|
+
|
|
566
|
+
**What is *not* logged:** the audio bytes themselves — only metadata — so logs
|
|
567
|
+
stay small and safe to inspect.
|
|
568
|
+
|
|
569
|
+
When the env var is unset (or not truthy), logging is a complete no-op with no
|
|
570
|
+
runtime cost.
|
|
571
|
+
|
|
572
|
+
The logging hook lives on `BaseTTSProvider.logRequest()`, so any provider can
|
|
573
|
+
opt in. Currently wired up for `VertexAITTSProvider` (`synthesize()` and
|
|
574
|
+
`synthesizeDialog()`); other providers log on demand when they add the hook.
|
|
575
|
+
|
|
576
|
+
</details>
|
|
577
|
+
|
|
532
578
|
<details>
|
|
533
579
|
<summary><strong>Retry with Exponential Backoff</strong></summary>
|
|
534
580
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @abstract
|
|
8
8
|
*/
|
|
9
9
|
import type { TTSProvider, TTSSynthesizeRequest, TTSResponse, TTSErrorCode } from '../types';
|
|
10
|
+
import { type TTSRequestLogEntry } from '../utils/request-logger.utils';
|
|
10
11
|
/**
|
|
11
12
|
* Base error class for all TTS errors
|
|
12
13
|
*/
|
|
@@ -213,5 +214,48 @@ export declare abstract class BaseTTSProvider {
|
|
|
213
214
|
* ```
|
|
214
215
|
*/
|
|
215
216
|
protected log(level: 'info' | 'warn' | 'error' | 'debug', message: string, meta?: Record<string, unknown>): void;
|
|
217
|
+
/**
|
|
218
|
+
* Check if per-request debug logging is enabled.
|
|
219
|
+
*
|
|
220
|
+
* @protected
|
|
221
|
+
* @returns true when `DEBUG_TTS_REQUESTS` is truthy in the environment.
|
|
222
|
+
*
|
|
223
|
+
* @description Providers can gate expensive body capture/cloning behind this
|
|
224
|
+
* flag to avoid overhead when logging is disabled.
|
|
225
|
+
*/
|
|
226
|
+
protected isRequestLoggingEnabled(): boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Write a debug Markdown log file for a single upstream API call.
|
|
229
|
+
*
|
|
230
|
+
* @protected
|
|
231
|
+
* @param entry - Log entry data. The provider name is injected automatically
|
|
232
|
+
* if omitted. No-op when `DEBUG_TTS_REQUESTS` is disabled.
|
|
233
|
+
*
|
|
234
|
+
* @description Provider-agnostic request logger. Each call produces exactly
|
|
235
|
+
* one `.md` file under `<cwd>/logs/tts/requests/` (override via
|
|
236
|
+
* `TTS_REQUEST_LOG_DIR`). Use this to capture exactly what was sent to and
|
|
237
|
+
* received from an upstream TTS API (Vertex AI, Azure, etc.).
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```typescript
|
|
241
|
+
* this.logRequest({
|
|
242
|
+
* kind: 'dialog-segment',
|
|
243
|
+
* timestamp: new Date().toISOString(),
|
|
244
|
+
* model,
|
|
245
|
+
* region,
|
|
246
|
+
* endpointUrl: url,
|
|
247
|
+
* segmentIndex: i,
|
|
248
|
+
* speakers: usedSpeakers,
|
|
249
|
+
* requestShape: 'multi-speaker',
|
|
250
|
+
* requestBody,
|
|
251
|
+
* httpStatus: response.status,
|
|
252
|
+
* durationMs: Date.now() - startedAt,
|
|
253
|
+
* responseBody: { audioBytes: buf.length, mimeType: 'audio/pcm' },
|
|
254
|
+
* });
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
protected logRequest(entry: Omit<TTSRequestLogEntry, 'provider'> & {
|
|
258
|
+
provider?: string;
|
|
259
|
+
}): void;
|
|
216
260
|
}
|
|
217
261
|
//# sourceMappingURL=base-tts-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-tts-provider.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/base-tts-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"base-tts-provider.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/base-tts-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
11
|
exports.BaseTTSProvider = exports.PayloadTooLargeError = exports.NetworkError = exports.SynthesisFailedError = exports.ProviderUnavailableError = exports.QuotaExceededError = exports.InvalidVoiceError = exports.InvalidConfigError = exports.TTSError = void 0;
|
|
12
12
|
const logger_utils_1 = require("../utils/logger.utils");
|
|
13
|
+
const request_logger_utils_1 = require("../utils/request-logger.utils");
|
|
13
14
|
/**
|
|
14
15
|
* Base error class for all TTS errors
|
|
15
16
|
*/
|
|
@@ -279,6 +280,54 @@ class BaseTTSProvider {
|
|
|
279
280
|
log(level, message, meta) {
|
|
280
281
|
(0, logger_utils_1.log)(this.providerName, level, message, meta);
|
|
281
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* Check if per-request debug logging is enabled.
|
|
285
|
+
*
|
|
286
|
+
* @protected
|
|
287
|
+
* @returns true when `DEBUG_TTS_REQUESTS` is truthy in the environment.
|
|
288
|
+
*
|
|
289
|
+
* @description Providers can gate expensive body capture/cloning behind this
|
|
290
|
+
* flag to avoid overhead when logging is disabled.
|
|
291
|
+
*/
|
|
292
|
+
isRequestLoggingEnabled() {
|
|
293
|
+
return (0, request_logger_utils_1.isRequestLoggingEnabled)();
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Write a debug Markdown log file for a single upstream API call.
|
|
297
|
+
*
|
|
298
|
+
* @protected
|
|
299
|
+
* @param entry - Log entry data. The provider name is injected automatically
|
|
300
|
+
* if omitted. No-op when `DEBUG_TTS_REQUESTS` is disabled.
|
|
301
|
+
*
|
|
302
|
+
* @description Provider-agnostic request logger. Each call produces exactly
|
|
303
|
+
* one `.md` file under `<cwd>/logs/tts/requests/` (override via
|
|
304
|
+
* `TTS_REQUEST_LOG_DIR`). Use this to capture exactly what was sent to and
|
|
305
|
+
* received from an upstream TTS API (Vertex AI, Azure, etc.).
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* ```typescript
|
|
309
|
+
* this.logRequest({
|
|
310
|
+
* kind: 'dialog-segment',
|
|
311
|
+
* timestamp: new Date().toISOString(),
|
|
312
|
+
* model,
|
|
313
|
+
* region,
|
|
314
|
+
* endpointUrl: url,
|
|
315
|
+
* segmentIndex: i,
|
|
316
|
+
* speakers: usedSpeakers,
|
|
317
|
+
* requestShape: 'multi-speaker',
|
|
318
|
+
* requestBody,
|
|
319
|
+
* httpStatus: response.status,
|
|
320
|
+
* durationMs: Date.now() - startedAt,
|
|
321
|
+
* responseBody: { audioBytes: buf.length, mimeType: 'audio/pcm' },
|
|
322
|
+
* });
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
325
|
+
logRequest(entry) {
|
|
326
|
+
(0, request_logger_utils_1.writeRequestLog)({
|
|
327
|
+
...entry,
|
|
328
|
+
provider: entry.provider ?? this.providerName,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
282
331
|
}
|
|
283
332
|
exports.BaseTTSProvider = BaseTTSProvider;
|
|
284
333
|
//# sourceMappingURL=base-tts-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-tts-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/base-tts-provider.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAQH,wDAAuD;
|
|
1
|
+
{"version":3,"file":"base-tts-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/base-tts-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -157,9 +157,13 @@ export declare class VertexAITTSProvider extends BaseTTSProvider {
|
|
|
157
157
|
* Count billable characters for a single dialog segment
|
|
158
158
|
*
|
|
159
159
|
* @private
|
|
160
|
-
* @description Counts
|
|
161
|
-
*
|
|
162
|
-
*
|
|
160
|
+
* @description Counts exactly what `buildDialogRequest()` places in the
|
|
161
|
+
* `contents[0].parts[0].text` string sent to Gemini:
|
|
162
|
+
* - The stylePrompt (if any)
|
|
163
|
+
* - Each turn's text
|
|
164
|
+
* - The `"Speaker: "` prefix is added ONLY for multi-speaker segments
|
|
165
|
+
* (matching the prefix logic in `buildDialogRequest`), since Google's
|
|
166
|
+
* documented single-voice TTS format uses plain text without a label.
|
|
163
167
|
*/
|
|
164
168
|
private countSegmentCharacters;
|
|
165
169
|
/**
|
|
@@ -179,6 +183,16 @@ export declare class VertexAITTSProvider extends BaseTTSProvider {
|
|
|
179
183
|
* - >2 speakers → InvalidConfigError (split the segment so each sub-segment has ≤2 speakers)
|
|
180
184
|
*/
|
|
181
185
|
private buildDialogRequest;
|
|
186
|
+
/**
|
|
187
|
+
* Build a debug log context for one dialog segment.
|
|
188
|
+
*
|
|
189
|
+
* @private
|
|
190
|
+
* @description Inspects the already-built request body so the logged shape
|
|
191
|
+
* and speaker mapping exactly match what will be sent upstream. Reading the
|
|
192
|
+
* body (instead of re-deriving from `segment.turns`) ensures the log stays
|
|
193
|
+
* truthful if `buildDialogRequest()` evolves.
|
|
194
|
+
*/
|
|
195
|
+
private buildDialogLogContext;
|
|
182
196
|
/**
|
|
183
197
|
* Validate payload byte limits before sending to Vertex AI
|
|
184
198
|
*
|
|
@@ -203,6 +217,9 @@ export declare class VertexAITTSProvider extends BaseTTSProvider {
|
|
|
203
217
|
* @param requestBody - The request payload
|
|
204
218
|
* @param model - The model to use
|
|
205
219
|
* @param region - The Vertex AI region to use
|
|
220
|
+
* @param logContext - Optional debug context. When provided (and
|
|
221
|
+
* `DEBUG_TTS_REQUESTS` is enabled), this call writes a Markdown log file
|
|
222
|
+
* with the full request body, response metadata, timing, and any error.
|
|
206
223
|
* @returns Promise resolving to raw PCM audio buffer
|
|
207
224
|
*/
|
|
208
225
|
private callAPI;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-ai-tts-provider.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/vertex-ai-tts-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EACL,eAAe,EAGhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAEV,oBAAoB,EAGpB,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"vertex-ai-tts-provider.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/vertex-ai-tts-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EACL,eAAe,EAGhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAEV,oBAAoB,EAGpB,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AAgCzC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAkBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAA6E;IAC/F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAsB/C;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;;;;OAKG;YACW,cAAc;IAqB5B;;;;;;;OAOG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC;IAuEvB;;;;;;;;;;;;;;;;;OAiBG;IACG,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwF9E;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAgE7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAqCpB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAwF1B;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAmD7B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAyCjC;;;;;;;;OAQG;YACW,yBAAyB;IAuDvC;;;;;;;;;;;OAWG;YACW,OAAO;IA+IrB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;;;;;OAOG;YACW,eAAe;IA0B7B;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAkChB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAwBjB"}
|
|
@@ -56,6 +56,20 @@ const types_1 = require("../types");
|
|
|
56
56
|
const mp3_duration_utils_1 = require("../utils/mp3-duration.utils");
|
|
57
57
|
const base_tts_provider_1 = require("./base-tts-provider");
|
|
58
58
|
const retry_utils_1 = require("../utils/retry.utils");
|
|
59
|
+
/**
|
|
60
|
+
* Try to extract a JSON-parseable object from an HTTP response error body.
|
|
61
|
+
* Falls back to returning the raw text.
|
|
62
|
+
*/
|
|
63
|
+
function parseErrorBody(raw) {
|
|
64
|
+
if (!raw)
|
|
65
|
+
return raw;
|
|
66
|
+
try {
|
|
67
|
+
return JSON.parse(raw);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return raw;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
59
73
|
const DEFAULT_MODEL = 'gemini-2.5-flash-preview-tts';
|
|
60
74
|
const DEFAULT_DIALOG_MODEL = 'gemini-3.1-flash-tts-preview';
|
|
61
75
|
const DEFAULT_SAMPLE_RATE = 24000;
|
|
@@ -179,8 +193,17 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
179
193
|
textLength: text.length,
|
|
180
194
|
requestedFormat,
|
|
181
195
|
});
|
|
196
|
+
const logContext = {
|
|
197
|
+
kind: 'single-synthesize',
|
|
198
|
+
requestShape: 'single-voice',
|
|
199
|
+
speakers: [{ speaker: 'default', voice: voiceId }],
|
|
200
|
+
extras: {
|
|
201
|
+
textLength: text.length,
|
|
202
|
+
requestedFormat,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
182
205
|
try {
|
|
183
|
-
const { pcmBuffer, region: usedRegion } = await this.callAPIWithRegionRotation(requestBody, model, options.region);
|
|
206
|
+
const { pcmBuffer, region: usedRegion } = await this.callAPIWithRegionRotation(requestBody, model, options.region, logContext);
|
|
184
207
|
const { audioBuffer, audioFormat } = await this.convertPcmAudio(pcmBuffer, requestedFormat);
|
|
185
208
|
const duration = Date.now() - startTime;
|
|
186
209
|
this.log('info', 'Synthesis successful', {
|
|
@@ -250,8 +273,12 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
250
273
|
for (let i = 0; i < request.segments.length; i++) {
|
|
251
274
|
const segment = request.segments[i];
|
|
252
275
|
const requestBody = this.buildDialogRequest(segment, request.speakers, options, i);
|
|
276
|
+
// Derive log context from the actually-built request body so what we log
|
|
277
|
+
// is exactly what callAPI() will send. Shape is inferred from the
|
|
278
|
+
// speechConfig variant chosen by buildDialogRequest().
|
|
279
|
+
const logContext = this.buildDialogLogContext(requestBody, segment, request.speakers, i);
|
|
253
280
|
try {
|
|
254
|
-
const { pcmBuffer, region } = await this.callAPIWithRegionRotation(requestBody, model, options.region);
|
|
281
|
+
const { pcmBuffer, region } = await this.callAPIWithRegionRotation(requestBody, model, options.region, logContext);
|
|
255
282
|
pcmChunks.push(pcmBuffer);
|
|
256
283
|
segmentBillings.push({
|
|
257
284
|
characters: this.countSegmentCharacters(segment),
|
|
@@ -338,12 +365,18 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
338
365
|
* Count billable characters for a single dialog segment
|
|
339
366
|
*
|
|
340
367
|
* @private
|
|
341
|
-
* @description Counts
|
|
342
|
-
*
|
|
343
|
-
*
|
|
368
|
+
* @description Counts exactly what `buildDialogRequest()` places in the
|
|
369
|
+
* `contents[0].parts[0].text` string sent to Gemini:
|
|
370
|
+
* - The stylePrompt (if any)
|
|
371
|
+
* - Each turn's text
|
|
372
|
+
* - The `"Speaker: "` prefix is added ONLY for multi-speaker segments
|
|
373
|
+
* (matching the prefix logic in `buildDialogRequest`), since Google's
|
|
374
|
+
* documented single-voice TTS format uses plain text without a label.
|
|
344
375
|
*/
|
|
345
376
|
countSegmentCharacters(segment) {
|
|
346
|
-
const
|
|
377
|
+
const distinctSpeakers = new Set(segment.turns.map((t) => t.speaker)).size;
|
|
378
|
+
const includeSpeakerPrefix = distinctSpeakers > 1;
|
|
379
|
+
const turnsChars = segment.turns.reduce((sum, t) => sum + (includeSpeakerPrefix ? `${t.speaker}: ${t.text}`.length : t.text.length), 0);
|
|
347
380
|
const promptChars = segment.stylePrompt?.length ?? 0;
|
|
348
381
|
return turnsChars + promptChars;
|
|
349
382
|
}
|
|
@@ -391,8 +424,21 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
391
424
|
* - >2 speakers → InvalidConfigError (split the segment so each sub-segment has ≤2 speakers)
|
|
392
425
|
*/
|
|
393
426
|
buildDialogRequest(segment, speakers, options, segmentIndex) {
|
|
427
|
+
// The `"Speaker: "` prefix is ONLY needed for multi-speaker segments, where
|
|
428
|
+
// Gemini uses the label to look up the matching `speakerVoiceConfigs` entry
|
|
429
|
+
// and route each turn to the correct voice. For single-speaker segments
|
|
430
|
+
// there is nothing to route — the prefix becomes an unrecognized token
|
|
431
|
+
// that Gemini's speech-synthesis classifier can mistakenly render aloud
|
|
432
|
+
// (e.g. pronouncing "Alice" as part of the audio).
|
|
433
|
+
//
|
|
434
|
+
// This mirrors Google's documented single-voice format, which uses plain
|
|
435
|
+
// text without any speaker label:
|
|
436
|
+
// - https://ai.google.dev/gemini-api/docs/speech-generation
|
|
437
|
+
// - https://docs.cloud.google.com/text-to-speech/docs/gemini-tts
|
|
438
|
+
const distinctSpeakers = new Set(segment.turns.map((t) => t.speaker)).size;
|
|
439
|
+
const includeSpeakerPrefix = distinctSpeakers > 1;
|
|
394
440
|
const turnsText = segment.turns
|
|
395
|
-
.map((t) => `${t.speaker}: ${t.text}`)
|
|
441
|
+
.map((t) => (includeSpeakerPrefix ? `${t.speaker}: ${t.text}` : t.text))
|
|
396
442
|
.join('\n');
|
|
397
443
|
const synthesisText = segment.stylePrompt
|
|
398
444
|
? `${segment.stylePrompt}\n${turnsText}`
|
|
@@ -442,6 +488,50 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
442
488
|
generationConfig,
|
|
443
489
|
};
|
|
444
490
|
}
|
|
491
|
+
/**
|
|
492
|
+
* Build a debug log context for one dialog segment.
|
|
493
|
+
*
|
|
494
|
+
* @private
|
|
495
|
+
* @description Inspects the already-built request body so the logged shape
|
|
496
|
+
* and speaker mapping exactly match what will be sent upstream. Reading the
|
|
497
|
+
* body (instead of re-deriving from `segment.turns`) ensures the log stays
|
|
498
|
+
* truthful if `buildDialogRequest()` evolves.
|
|
499
|
+
*/
|
|
500
|
+
buildDialogLogContext(requestBody, segment, speakers, segmentIndex) {
|
|
501
|
+
const speechConfig = requestBody.generationConfig?.speechConfig;
|
|
502
|
+
let requestShape = 'single-voice';
|
|
503
|
+
let loggedSpeakers = [];
|
|
504
|
+
const multi = speechConfig?.multiSpeakerVoiceConfig;
|
|
505
|
+
if (multi?.speakerVoiceConfigs && multi.speakerVoiceConfigs.length > 0) {
|
|
506
|
+
requestShape = 'multi-speaker';
|
|
507
|
+
loggedSpeakers = multi.speakerVoiceConfigs.map((c) => ({
|
|
508
|
+
speaker: c.speaker,
|
|
509
|
+
voice: c.voiceConfig?.prebuiltVoiceConfig?.voiceName ?? '(unknown)',
|
|
510
|
+
}));
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
const single = speechConfig?.voiceConfig;
|
|
514
|
+
const voiceName = single?.prebuiltVoiceConfig?.voiceName;
|
|
515
|
+
// Find the alias that maps to this voice (for readability in the log)
|
|
516
|
+
const usedAliases = new Set(segment.turns.map((t) => t.speaker));
|
|
517
|
+
const usedSpeaker = speakers.find((s) => usedAliases.has(s.speaker) && s.voice === voiceName);
|
|
518
|
+
loggedSpeakers = voiceName
|
|
519
|
+
? [{ speaker: usedSpeaker?.speaker ?? '(unknown)', voice: voiceName }]
|
|
520
|
+
: [];
|
|
521
|
+
}
|
|
522
|
+
return {
|
|
523
|
+
kind: 'dialog-segment',
|
|
524
|
+
segmentIndex,
|
|
525
|
+
requestShape,
|
|
526
|
+
speakers: loggedSpeakers,
|
|
527
|
+
extras: {
|
|
528
|
+
turnCount: segment.turns.length,
|
|
529
|
+
hasStylePrompt: !!segment.stylePrompt,
|
|
530
|
+
stylePromptBytes: segment.stylePrompt ? Buffer.byteLength(segment.stylePrompt, 'utf8') : 0,
|
|
531
|
+
temperature: requestBody.generationConfig?.temperature,
|
|
532
|
+
},
|
|
533
|
+
};
|
|
534
|
+
}
|
|
445
535
|
/**
|
|
446
536
|
* Validate payload byte limits before sending to Vertex AI
|
|
447
537
|
*
|
|
@@ -472,17 +562,17 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
472
562
|
* @param regionOverride - Optional per-request region override (skips rotation)
|
|
473
563
|
* @returns The PCM audio buffer and the region that processed the request
|
|
474
564
|
*/
|
|
475
|
-
async callAPIWithRegionRotation(requestBody, model, regionOverride) {
|
|
565
|
+
async callAPIWithRegionRotation(requestBody, model, regionOverride, logContext) {
|
|
476
566
|
// Per-request override: skip rotation entirely
|
|
477
567
|
if (regionOverride) {
|
|
478
|
-
const pcmBuffer = await this.callAPI(requestBody, model, regionOverride);
|
|
568
|
+
const pcmBuffer = await this.callAPI(requestBody, model, regionOverride, logContext);
|
|
479
569
|
return { pcmBuffer, region: regionOverride };
|
|
480
570
|
}
|
|
481
571
|
const rotationConfig = this.config.regionRotation;
|
|
482
572
|
// No rotation configured: use static region from constructor config
|
|
483
573
|
if (!rotationConfig) {
|
|
484
574
|
const region = this.config.region || DEFAULT_REGION;
|
|
485
|
-
const pcmBuffer = await this.callAPI(requestBody, model, region);
|
|
575
|
+
const pcmBuffer = await this.callAPI(requestBody, model, region, logContext);
|
|
486
576
|
return { pcmBuffer, region };
|
|
487
577
|
}
|
|
488
578
|
// Region rotation: try each region in order, rotate on quota errors only
|
|
@@ -490,7 +580,7 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
490
580
|
let lastQuotaError = null;
|
|
491
581
|
for (const region of regionsToTry) {
|
|
492
582
|
try {
|
|
493
|
-
const pcmBuffer = await this.callAPI(requestBody, model, region);
|
|
583
|
+
const pcmBuffer = await this.callAPI(requestBody, model, region, logContext);
|
|
494
584
|
return { pcmBuffer, region };
|
|
495
585
|
}
|
|
496
586
|
catch (error) {
|
|
@@ -507,7 +597,7 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
507
597
|
// Bonus attempt: try fallback one more time (alwaysTryFallback default: true)
|
|
508
598
|
if (rotationConfig.alwaysTryFallback !== false) {
|
|
509
599
|
try {
|
|
510
|
-
const pcmBuffer = await this.callAPI(requestBody, model, rotationConfig.fallback);
|
|
600
|
+
const pcmBuffer = await this.callAPI(requestBody, model, rotationConfig.fallback, logContext);
|
|
511
601
|
return { pcmBuffer, region: rotationConfig.fallback };
|
|
512
602
|
}
|
|
513
603
|
catch (error) {
|
|
@@ -525,30 +615,128 @@ class VertexAITTSProvider extends base_tts_provider_1.BaseTTSProvider {
|
|
|
525
615
|
* @param requestBody - The request payload
|
|
526
616
|
* @param model - The model to use
|
|
527
617
|
* @param region - The Vertex AI region to use
|
|
618
|
+
* @param logContext - Optional debug context. When provided (and
|
|
619
|
+
* `DEBUG_TTS_REQUESTS` is enabled), this call writes a Markdown log file
|
|
620
|
+
* with the full request body, response metadata, timing, and any error.
|
|
528
621
|
* @returns Promise resolving to raw PCM audio buffer
|
|
529
622
|
*/
|
|
530
|
-
async callAPI(requestBody, model, region) {
|
|
623
|
+
async callAPI(requestBody, model, region, logContext) {
|
|
531
624
|
const accessToken = await this.getAccessToken();
|
|
532
625
|
const projectId = this.config.projectId;
|
|
533
626
|
const url = `https://${region}-aiplatform.googleapis.com/v1/projects/${projectId}/locations/${region}/publishers/google/models/${model}:generateContent`;
|
|
534
|
-
const
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
627
|
+
const logEnabled = !!logContext && this.isRequestLoggingEnabled();
|
|
628
|
+
const timestamp = new Date().toISOString();
|
|
629
|
+
const startedAt = Date.now();
|
|
630
|
+
let response;
|
|
631
|
+
try {
|
|
632
|
+
response = await fetch(url, {
|
|
633
|
+
method: 'POST',
|
|
634
|
+
headers: {
|
|
635
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
636
|
+
'Content-Type': 'application/json',
|
|
637
|
+
},
|
|
638
|
+
body: JSON.stringify(requestBody),
|
|
639
|
+
});
|
|
640
|
+
}
|
|
641
|
+
catch (err) {
|
|
642
|
+
// Network-level failure (no response received)
|
|
643
|
+
if (logEnabled) {
|
|
644
|
+
this.logRequest({
|
|
645
|
+
kind: logContext.kind,
|
|
646
|
+
timestamp,
|
|
647
|
+
model,
|
|
648
|
+
region,
|
|
649
|
+
endpointUrl: url,
|
|
650
|
+
httpMethod: 'POST',
|
|
651
|
+
segmentIndex: logContext.segmentIndex,
|
|
652
|
+
speakers: logContext.speakers,
|
|
653
|
+
requestShape: logContext.requestShape,
|
|
654
|
+
requestBody,
|
|
655
|
+
durationMs: Date.now() - startedAt,
|
|
656
|
+
error: {
|
|
657
|
+
name: err.name,
|
|
658
|
+
message: err.message,
|
|
659
|
+
stack: err.stack,
|
|
660
|
+
},
|
|
661
|
+
extras: logContext.extras,
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
throw err;
|
|
665
|
+
}
|
|
542
666
|
if (!response.ok) {
|
|
543
667
|
const errorText = await response.text();
|
|
668
|
+
if (logEnabled) {
|
|
669
|
+
this.logRequest({
|
|
670
|
+
kind: logContext.kind,
|
|
671
|
+
timestamp,
|
|
672
|
+
model,
|
|
673
|
+
region,
|
|
674
|
+
endpointUrl: url,
|
|
675
|
+
httpMethod: 'POST',
|
|
676
|
+
segmentIndex: logContext.segmentIndex,
|
|
677
|
+
speakers: logContext.speakers,
|
|
678
|
+
requestShape: logContext.requestShape,
|
|
679
|
+
requestBody,
|
|
680
|
+
httpStatus: response.status,
|
|
681
|
+
responseBody: parseErrorBody(errorText),
|
|
682
|
+
durationMs: Date.now() - startedAt,
|
|
683
|
+
error: {
|
|
684
|
+
message: `Vertex AI API error (${response.status})`,
|
|
685
|
+
},
|
|
686
|
+
extras: logContext.extras,
|
|
687
|
+
});
|
|
688
|
+
}
|
|
544
689
|
throw new Error(`Vertex AI API error (${response.status}): ${errorText}`);
|
|
545
690
|
}
|
|
546
691
|
const responseJson = await response.json();
|
|
547
692
|
const inlineData = responseJson.candidates?.[0]?.content?.parts?.[0]?.inlineData;
|
|
548
693
|
if (!inlineData?.data) {
|
|
694
|
+
if (logEnabled) {
|
|
695
|
+
this.logRequest({
|
|
696
|
+
kind: logContext.kind,
|
|
697
|
+
timestamp,
|
|
698
|
+
model,
|
|
699
|
+
region,
|
|
700
|
+
endpointUrl: url,
|
|
701
|
+
httpMethod: 'POST',
|
|
702
|
+
segmentIndex: logContext.segmentIndex,
|
|
703
|
+
speakers: logContext.speakers,
|
|
704
|
+
requestShape: logContext.requestShape,
|
|
705
|
+
requestBody,
|
|
706
|
+
httpStatus: response.status,
|
|
707
|
+
responseBody: responseJson,
|
|
708
|
+
durationMs: Date.now() - startedAt,
|
|
709
|
+
error: { message: 'Vertex AI API returned no audio data' },
|
|
710
|
+
extras: logContext.extras,
|
|
711
|
+
});
|
|
712
|
+
}
|
|
549
713
|
throw new Error('Vertex AI API returned no audio data');
|
|
550
714
|
}
|
|
551
|
-
|
|
715
|
+
const pcmBuffer = Buffer.from(inlineData.data, 'base64');
|
|
716
|
+
if (logEnabled) {
|
|
717
|
+
this.logRequest({
|
|
718
|
+
kind: logContext.kind,
|
|
719
|
+
timestamp,
|
|
720
|
+
model,
|
|
721
|
+
region,
|
|
722
|
+
endpointUrl: url,
|
|
723
|
+
httpMethod: 'POST',
|
|
724
|
+
segmentIndex: logContext.segmentIndex,
|
|
725
|
+
speakers: logContext.speakers,
|
|
726
|
+
requestShape: logContext.requestShape,
|
|
727
|
+
requestBody,
|
|
728
|
+
httpStatus: response.status,
|
|
729
|
+
responseBody: {
|
|
730
|
+
mimeType: inlineData.mimeType,
|
|
731
|
+
audioBytes: pcmBuffer.length,
|
|
732
|
+
audioBase64Length: inlineData.data.length,
|
|
733
|
+
candidateCount: responseJson.candidates?.length ?? 0,
|
|
734
|
+
},
|
|
735
|
+
durationMs: Date.now() - startedAt,
|
|
736
|
+
extras: logContext.extras,
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
return pcmBuffer;
|
|
552
740
|
}
|
|
553
741
|
/**
|
|
554
742
|
* Resolve ffmpeg binary path with fallback chain:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-ai-tts-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/vertex-ai-tts-provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertex-ai-tts-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/providers/vertex-ai-tts-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,4 +9,6 @@ export { setLogger, getLogger, resetLogger, setLogLevel, getLogLevel, silentLogg
|
|
|
9
9
|
export type { TTSLogger, LogLevel } from './logger.utils';
|
|
10
10
|
export { executeWithRetry, isRetryableError, calculateDelay, DEFAULT_RETRY_CONFIG, } from './retry.utils';
|
|
11
11
|
export type { RetryConfig, RetryLogger } from './retry.utils';
|
|
12
|
+
export { writeRequestLog, isRequestLoggingEnabled, } from './request-logger.utils';
|
|
13
|
+
export type { TTSRequestLogEntry, TTSRequestLogKind, } from './request-logger.utils';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,GAAG,GACJ,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,GAAG,GACJ,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EACL,eAAe,EACf,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Export all utility functions for TTS operations
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.DEFAULT_RETRY_CONFIG = exports.calculateDelay = exports.isRetryableError = exports.executeWithRetry = exports.log = exports.silentLogger = exports.getLogLevel = exports.setLogLevel = exports.resetLogger = exports.getLogger = exports.setLogger = exports.getMp3Duration = exports.formatCharacterCount = exports.estimateAudioDuration = exports.countBillableCharacters = exports.validateCharacterCount = exports.countCharactersWithoutSSML = exports.countCharacters = void 0;
|
|
8
|
+
exports.isRequestLoggingEnabled = exports.writeRequestLog = exports.DEFAULT_RETRY_CONFIG = exports.calculateDelay = exports.isRetryableError = exports.executeWithRetry = exports.log = exports.silentLogger = exports.getLogLevel = exports.setLogLevel = exports.resetLogger = exports.getLogger = exports.setLogger = exports.getMp3Duration = exports.formatCharacterCount = exports.estimateAudioDuration = exports.countBillableCharacters = exports.validateCharacterCount = exports.countCharactersWithoutSSML = exports.countCharacters = void 0;
|
|
9
9
|
var character_counter_utils_1 = require("./character-counter.utils");
|
|
10
10
|
Object.defineProperty(exports, "countCharacters", { enumerable: true, get: function () { return character_counter_utils_1.countCharacters; } });
|
|
11
11
|
Object.defineProperty(exports, "countCharactersWithoutSSML", { enumerable: true, get: function () { return character_counter_utils_1.countCharactersWithoutSSML; } });
|
|
@@ -30,4 +30,8 @@ Object.defineProperty(exports, "executeWithRetry", { enumerable: true, get: func
|
|
|
30
30
|
Object.defineProperty(exports, "isRetryableError", { enumerable: true, get: function () { return retry_utils_1.isRetryableError; } });
|
|
31
31
|
Object.defineProperty(exports, "calculateDelay", { enumerable: true, get: function () { return retry_utils_1.calculateDelay; } });
|
|
32
32
|
Object.defineProperty(exports, "DEFAULT_RETRY_CONFIG", { enumerable: true, get: function () { return retry_utils_1.DEFAULT_RETRY_CONFIG; } });
|
|
33
|
+
// Request logger (per-call Markdown debug logs, gated by DEBUG_TTS_REQUESTS)
|
|
34
|
+
var request_logger_utils_1 = require("./request-logger.utils");
|
|
35
|
+
Object.defineProperty(exports, "writeRequestLog", { enumerable: true, get: function () { return request_logger_utils_1.writeRequestLog; } });
|
|
36
|
+
Object.defineProperty(exports, "isRequestLoggingEnabled", { enumerable: true, get: function () { return request_logger_utils_1.isRequestLoggingEnabled; } });
|
|
33
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/utils/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,qEAOmC;AANjC,0HAAA,eAAe,OAAA;AACf,qIAAA,0BAA0B,OAAA;AAC1B,iIAAA,sBAAsB,OAAA;AACtB,kIAAA,uBAAuB,OAAA;AACvB,gIAAA,qBAAqB,OAAA;AACrB,+HAAA,oBAAoB,OAAA;AAGtB,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AAEvB,mBAAmB;AACnB,+CAQwB;AAPtB,yGAAA,SAAS,OAAA;AACT,yGAAA,SAAS,OAAA;AACT,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,4GAAA,YAAY,OAAA;AACZ,mGAAA,GAAG,OAAA;AAKL,kBAAkB;AAClB,6CAKuB;AAJrB,+GAAA,gBAAgB,OAAA;AAChB,+GAAA,gBAAgB,OAAA;AAChB,6GAAA,cAAc,OAAA;AACd,mHAAA,oBAAoB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/utils/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,qEAOmC;AANjC,0HAAA,eAAe,OAAA;AACf,qIAAA,0BAA0B,OAAA;AAC1B,iIAAA,sBAAsB,OAAA;AACtB,kIAAA,uBAAuB,OAAA;AACvB,gIAAA,qBAAqB,OAAA;AACrB,+HAAA,oBAAoB,OAAA;AAGtB,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AAEvB,mBAAmB;AACnB,+CAQwB;AAPtB,yGAAA,SAAS,OAAA;AACT,yGAAA,SAAS,OAAA;AACT,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,4GAAA,YAAY,OAAA;AACZ,mGAAA,GAAG,OAAA;AAKL,kBAAkB;AAClB,6CAKuB;AAJrB,+GAAA,gBAAgB,OAAA;AAChB,+GAAA,gBAAgB,OAAA;AAChB,6GAAA,cAAc,OAAA;AACd,mHAAA,oBAAoB,OAAA;AAKtB,6EAA6E;AAC7E,+DAGgC;AAF9B,uHAAA,eAAe,OAAA;AACf,+HAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTS Request Logger
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic request/response logger that writes one Markdown file per
|
|
5
|
+
* upstream API call (e.g. per Google Vertex AI generateContent invocation).
|
|
6
|
+
*
|
|
7
|
+
* Activated via the `DEBUG_TTS_REQUESTS` environment variable. When disabled,
|
|
8
|
+
* `writeRequestLog()` is a no-op so instrumentation adds zero cost.
|
|
9
|
+
*
|
|
10
|
+
* Files are written to `<cwd>/logs/tts/requests/` (override via
|
|
11
|
+
* `TTS_REQUEST_LOG_DIR`). Filename pattern:
|
|
12
|
+
* `{ISO_TIMESTAMP}_{provider}_{kind}[_{suffix}].md`
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Kind of upstream call being logged.
|
|
16
|
+
*
|
|
17
|
+
* - `dialog-segment` — one segment of a multi-speaker dialog synthesis
|
|
18
|
+
* - `single-synthesize` — a single-speaker synthesis
|
|
19
|
+
* - `other` — anything else a provider wants to log
|
|
20
|
+
*/
|
|
21
|
+
export type TTSRequestLogKind = 'dialog-segment' | 'single-synthesize' | 'other';
|
|
22
|
+
/**
|
|
23
|
+
* Context describing a single upstream TTS API call.
|
|
24
|
+
*
|
|
25
|
+
* Providers populate this before the network call (request side) and, after the
|
|
26
|
+
* call completes, fill in the response-side fields. The logger then serialises
|
|
27
|
+
* the whole entry to a Markdown file.
|
|
28
|
+
*/
|
|
29
|
+
export interface TTSRequestLogEntry {
|
|
30
|
+
/** Provider identifier, e.g. `vertex-ai` */
|
|
31
|
+
provider: string;
|
|
32
|
+
/** What kind of call this is */
|
|
33
|
+
kind: TTSRequestLogKind;
|
|
34
|
+
/** ISO 8601 timestamp when the request was issued */
|
|
35
|
+
timestamp: string;
|
|
36
|
+
/** Model / deployment / variant being called, when known */
|
|
37
|
+
model?: string;
|
|
38
|
+
/** Region / datacenter, when known */
|
|
39
|
+
region?: string;
|
|
40
|
+
/** Full endpoint URL the request was sent to */
|
|
41
|
+
endpointUrl?: string;
|
|
42
|
+
/** HTTP method (default implied: POST) */
|
|
43
|
+
httpMethod?: string;
|
|
44
|
+
/** Dialog segment index (only for `dialog-segment`) */
|
|
45
|
+
segmentIndex?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Speaker → voice mapping actually used for this specific call (after filtering
|
|
48
|
+
* to speakers that appear in the segment's turns).
|
|
49
|
+
*/
|
|
50
|
+
speakers?: Array<{
|
|
51
|
+
speaker: string;
|
|
52
|
+
voice: string;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Shape of the request body (provider-specific). For Vertex AI dialog:
|
|
56
|
+
* `single-voice` or `multi-speaker`.
|
|
57
|
+
*/
|
|
58
|
+
requestShape?: string;
|
|
59
|
+
/** The final request body that was serialised and sent upstream */
|
|
60
|
+
requestBody: unknown;
|
|
61
|
+
/** HTTP status code (populated after the call) */
|
|
62
|
+
httpStatus?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Response body. On success store lightweight metadata (audio size, mime type,
|
|
65
|
+
* durations). On error store the full error payload for debugging.
|
|
66
|
+
*/
|
|
67
|
+
responseBody?: unknown;
|
|
68
|
+
/** Total duration of the upstream call in milliseconds */
|
|
69
|
+
durationMs?: number;
|
|
70
|
+
/** Set when the call failed */
|
|
71
|
+
error?: {
|
|
72
|
+
message: string;
|
|
73
|
+
stack?: string;
|
|
74
|
+
name?: string;
|
|
75
|
+
};
|
|
76
|
+
/** Free-form extra fields the caller wants to record */
|
|
77
|
+
extras?: Record<string, unknown>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check whether request logging is enabled via the `DEBUG_TTS_REQUESTS` env var.
|
|
81
|
+
*
|
|
82
|
+
* Truthy values: `1`, `true`, `yes`, `on` (case-insensitive). Anything else is
|
|
83
|
+
* treated as disabled.
|
|
84
|
+
*/
|
|
85
|
+
export declare function isRequestLoggingEnabled(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Write a request log entry as Markdown.
|
|
88
|
+
*
|
|
89
|
+
* No-op when `DEBUG_TTS_REQUESTS` is not enabled. Never throws — logging failures
|
|
90
|
+
* must not break TTS synthesis. Errors are reported on stderr for visibility.
|
|
91
|
+
*
|
|
92
|
+
* @returns The absolute file path of the written log, or `null` when disabled
|
|
93
|
+
* or the write failed.
|
|
94
|
+
*/
|
|
95
|
+
export declare function writeRequestLog(entry: TTSRequestLogEntry): string | null;
|
|
96
|
+
//# sourceMappingURL=request-logger.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.utils.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/utils/request-logger.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,OAAO,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,IAAI,EAAE,iBAAiB,CAAC;IACxB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAElB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,mEAAmE;IACnE,WAAW,EAAE,OAAO,CAAC;IAErB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,+BAA+B;IAC/B,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAKjD;AAuJD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAgBxE"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TTS Request Logger
|
|
4
|
+
*
|
|
5
|
+
* Provider-agnostic request/response logger that writes one Markdown file per
|
|
6
|
+
* upstream API call (e.g. per Google Vertex AI generateContent invocation).
|
|
7
|
+
*
|
|
8
|
+
* Activated via the `DEBUG_TTS_REQUESTS` environment variable. When disabled,
|
|
9
|
+
* `writeRequestLog()` is a no-op so instrumentation adds zero cost.
|
|
10
|
+
*
|
|
11
|
+
* Files are written to `<cwd>/logs/tts/requests/` (override via
|
|
12
|
+
* `TTS_REQUEST_LOG_DIR`). Filename pattern:
|
|
13
|
+
* `{ISO_TIMESTAMP}_{provider}_{kind}[_{suffix}].md`
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.isRequestLoggingEnabled = isRequestLoggingEnabled;
|
|
17
|
+
exports.writeRequestLog = writeRequestLog;
|
|
18
|
+
const fs_1 = require("fs");
|
|
19
|
+
const path_1 = require("path");
|
|
20
|
+
/**
|
|
21
|
+
* Check whether request logging is enabled via the `DEBUG_TTS_REQUESTS` env var.
|
|
22
|
+
*
|
|
23
|
+
* Truthy values: `1`, `true`, `yes`, `on` (case-insensitive). Anything else is
|
|
24
|
+
* treated as disabled.
|
|
25
|
+
*/
|
|
26
|
+
function isRequestLoggingEnabled() {
|
|
27
|
+
const raw = process.env.DEBUG_TTS_REQUESTS;
|
|
28
|
+
if (!raw)
|
|
29
|
+
return false;
|
|
30
|
+
const v = raw.trim().toLowerCase();
|
|
31
|
+
return v === '1' || v === 'true' || v === 'yes' || v === 'on';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the directory where log files are written.
|
|
35
|
+
*
|
|
36
|
+
* Override via `TTS_REQUEST_LOG_DIR`. Defaults to `<cwd>/logs/tts/requests`.
|
|
37
|
+
*/
|
|
38
|
+
function resolveLogDir() {
|
|
39
|
+
const override = process.env.TTS_REQUEST_LOG_DIR;
|
|
40
|
+
if (override && override.trim().length > 0) {
|
|
41
|
+
return (0, path_1.resolve)(override.trim());
|
|
42
|
+
}
|
|
43
|
+
return (0, path_1.resolve)(process.cwd(), 'logs', 'tts', 'requests');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Make a string safe to embed in a filename across Windows/macOS/Linux.
|
|
47
|
+
* Replaces reserved characters with `-` and collapses repeats.
|
|
48
|
+
*/
|
|
49
|
+
function sanitiseForFilename(value) {
|
|
50
|
+
return value
|
|
51
|
+
// eslint-disable-next-line no-control-regex
|
|
52
|
+
.replace(/[<>:"/\\|?*\x00-\x1F]/g, '-')
|
|
53
|
+
.replace(/-+/g, '-')
|
|
54
|
+
.replace(/^-+|-+$/g, '')
|
|
55
|
+
.slice(0, 80);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build the filename for a log entry.
|
|
59
|
+
*
|
|
60
|
+
* Pattern: `{ISO}_{provider}_{kind}[_{suffix}].md` where `ISO` has colons and
|
|
61
|
+
* dots replaced so it works on Windows.
|
|
62
|
+
*/
|
|
63
|
+
function buildFilename(entry) {
|
|
64
|
+
const isoSafe = entry.timestamp.replace(/[:.]/g, '-');
|
|
65
|
+
const parts = [isoSafe, sanitiseForFilename(entry.provider), sanitiseForFilename(entry.kind)];
|
|
66
|
+
if (entry.kind === 'dialog-segment' && typeof entry.segmentIndex === 'number') {
|
|
67
|
+
parts.push(`seg${entry.segmentIndex}`);
|
|
68
|
+
}
|
|
69
|
+
if (entry.requestShape) {
|
|
70
|
+
parts.push(sanitiseForFilename(entry.requestShape));
|
|
71
|
+
}
|
|
72
|
+
return `${parts.join('_')}.md`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Serialise unknown data to a fenced JSON code block.
|
|
76
|
+
*
|
|
77
|
+
* Handles circular references and BigInts without throwing; text content is
|
|
78
|
+
* written verbatim (no truncation) so the full upstream payload is preserved.
|
|
79
|
+
*/
|
|
80
|
+
function toJsonBlock(label, data) {
|
|
81
|
+
let json;
|
|
82
|
+
try {
|
|
83
|
+
json = JSON.stringify(data, (_key, value) => (typeof value === 'bigint' ? value.toString() : value), 2);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
json = `/* Failed to stringify ${label}: ${err.message} */`;
|
|
87
|
+
}
|
|
88
|
+
return ['```json', json, '```'].join('\n');
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Render a log entry to Markdown. The output includes every field that is
|
|
92
|
+
* populated; no truncation is performed.
|
|
93
|
+
*/
|
|
94
|
+
function renderMarkdown(entry) {
|
|
95
|
+
const lines = [];
|
|
96
|
+
lines.push(`# TTS Request Log — ${entry.provider} / ${entry.kind}`);
|
|
97
|
+
lines.push('');
|
|
98
|
+
lines.push('## Meta');
|
|
99
|
+
lines.push(`- **Timestamp**: ${entry.timestamp}`);
|
|
100
|
+
lines.push(`- **Provider**: ${entry.provider}`);
|
|
101
|
+
lines.push(`- **Kind**: ${entry.kind}`);
|
|
102
|
+
if (entry.model)
|
|
103
|
+
lines.push(`- **Model**: ${entry.model}`);
|
|
104
|
+
if (entry.region)
|
|
105
|
+
lines.push(`- **Region**: ${entry.region}`);
|
|
106
|
+
if (entry.endpointUrl)
|
|
107
|
+
lines.push(`- **Endpoint**: ${entry.endpointUrl}`);
|
|
108
|
+
if (entry.httpMethod)
|
|
109
|
+
lines.push(`- **HTTP Method**: ${entry.httpMethod}`);
|
|
110
|
+
if (typeof entry.durationMs === 'number') {
|
|
111
|
+
lines.push(`- **Duration**: ${entry.durationMs} ms`);
|
|
112
|
+
}
|
|
113
|
+
if (typeof entry.httpStatus === 'number') {
|
|
114
|
+
lines.push(`- **HTTP Status**: ${entry.httpStatus}`);
|
|
115
|
+
}
|
|
116
|
+
lines.push('');
|
|
117
|
+
if (typeof entry.segmentIndex === 'number' ||
|
|
118
|
+
entry.requestShape ||
|
|
119
|
+
(entry.speakers && entry.speakers.length > 0)) {
|
|
120
|
+
lines.push('## Dialog Context');
|
|
121
|
+
if (typeof entry.segmentIndex === 'number') {
|
|
122
|
+
lines.push(`- **Segment Index**: ${entry.segmentIndex}`);
|
|
123
|
+
}
|
|
124
|
+
if (entry.requestShape) {
|
|
125
|
+
lines.push(`- **Request Shape**: ${entry.requestShape}`);
|
|
126
|
+
}
|
|
127
|
+
if (entry.speakers && entry.speakers.length > 0) {
|
|
128
|
+
lines.push(`- **Speaker Count**: ${entry.speakers.length}`);
|
|
129
|
+
lines.push('- **Speaker → Voice**:');
|
|
130
|
+
for (const s of entry.speakers) {
|
|
131
|
+
lines.push(` - \`${s.speaker}\` → \`${s.voice}\``);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
lines.push('');
|
|
135
|
+
}
|
|
136
|
+
lines.push('## Request Body');
|
|
137
|
+
lines.push(toJsonBlock('requestBody', entry.requestBody));
|
|
138
|
+
lines.push('');
|
|
139
|
+
if (entry.responseBody !== undefined) {
|
|
140
|
+
lines.push('## Response');
|
|
141
|
+
lines.push(toJsonBlock('responseBody', entry.responseBody));
|
|
142
|
+
lines.push('');
|
|
143
|
+
}
|
|
144
|
+
if (entry.error) {
|
|
145
|
+
lines.push('## Error');
|
|
146
|
+
if (entry.error.name)
|
|
147
|
+
lines.push(`- **Name**: ${entry.error.name}`);
|
|
148
|
+
lines.push(`- **Message**: ${entry.error.message}`);
|
|
149
|
+
if (entry.error.stack) {
|
|
150
|
+
lines.push('');
|
|
151
|
+
lines.push('```');
|
|
152
|
+
lines.push(entry.error.stack);
|
|
153
|
+
lines.push('```');
|
|
154
|
+
}
|
|
155
|
+
lines.push('');
|
|
156
|
+
}
|
|
157
|
+
if (entry.extras && Object.keys(entry.extras).length > 0) {
|
|
158
|
+
lines.push('## Extras');
|
|
159
|
+
lines.push(toJsonBlock('extras', entry.extras));
|
|
160
|
+
lines.push('');
|
|
161
|
+
}
|
|
162
|
+
lines.push('---');
|
|
163
|
+
lines.push(`*Generated on ${new Date().toISOString()}*`);
|
|
164
|
+
lines.push('');
|
|
165
|
+
return lines.join('\n');
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Write a request log entry as Markdown.
|
|
169
|
+
*
|
|
170
|
+
* No-op when `DEBUG_TTS_REQUESTS` is not enabled. Never throws — logging failures
|
|
171
|
+
* must not break TTS synthesis. Errors are reported on stderr for visibility.
|
|
172
|
+
*
|
|
173
|
+
* @returns The absolute file path of the written log, or `null` when disabled
|
|
174
|
+
* or the write failed.
|
|
175
|
+
*/
|
|
176
|
+
function writeRequestLog(entry) {
|
|
177
|
+
if (!isRequestLoggingEnabled())
|
|
178
|
+
return null;
|
|
179
|
+
try {
|
|
180
|
+
const dir = resolveLogDir();
|
|
181
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
182
|
+
const filename = buildFilename(entry);
|
|
183
|
+
const fullPath = (0, path_1.join)(dir, filename);
|
|
184
|
+
(0, fs_1.writeFileSync)(fullPath, renderMarkdown(entry), 'utf8');
|
|
185
|
+
return fullPath;
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
// Never let logging break the main flow.
|
|
189
|
+
// eslint-disable-next-line no-console
|
|
190
|
+
console.error('[tts-request-logger] Failed to write log:', err.message);
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=request-logger.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.utils.js","sourceRoot":"","sources":["../../../../../src/middleware/services/tts/utils/request-logger.utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loonylabs/tts-middleware",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.2",
|
|
4
4
|
"description": "Provider-agnostic Text-to-Speech middleware for Azure, OpenAI, ElevenLabs, Google Cloud, Deepgram, Fish Audio, Inworld AI, and Vertex AI TTS",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|