@framers/agentos 0.1.226 → 0.1.228

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 (79) hide show
  1. package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts.map +1 -1
  2. package/dist/core/llm/providers/implementations/AnthropicProvider.js +71 -12
  3. package/dist/core/llm/providers/implementations/AnthropicProvider.js.map +1 -1
  4. package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -1
  5. package/dist/core/llm/providers/implementations/OpenAIProvider.js +38 -11
  6. package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -1
  7. package/dist/media/images/face/ReplicateFaceEmbeddingService.d.ts +7 -0
  8. package/dist/media/images/face/ReplicateFaceEmbeddingService.d.ts.map +1 -1
  9. package/dist/media/images/face/ReplicateFaceEmbeddingService.js +32 -5
  10. package/dist/media/images/face/ReplicateFaceEmbeddingService.js.map +1 -1
  11. package/dist/voice-pipeline/AudioRingBuffer.d.ts +28 -0
  12. package/dist/voice-pipeline/AudioRingBuffer.d.ts.map +1 -0
  13. package/dist/voice-pipeline/AudioRingBuffer.js +43 -0
  14. package/dist/voice-pipeline/AudioRingBuffer.js.map +1 -0
  15. package/dist/voice-pipeline/CircuitBreaker.d.ts +42 -0
  16. package/dist/voice-pipeline/CircuitBreaker.d.ts.map +1 -0
  17. package/dist/voice-pipeline/CircuitBreaker.js +96 -0
  18. package/dist/voice-pipeline/CircuitBreaker.js.map +1 -0
  19. package/dist/voice-pipeline/HealthyProvider.d.ts +44 -0
  20. package/dist/voice-pipeline/HealthyProvider.d.ts.map +1 -0
  21. package/dist/voice-pipeline/HealthyProvider.js +29 -0
  22. package/dist/voice-pipeline/HealthyProvider.js.map +1 -0
  23. package/dist/voice-pipeline/TranscriptDedupe.d.ts +43 -0
  24. package/dist/voice-pipeline/TranscriptDedupe.d.ts.map +1 -0
  25. package/dist/voice-pipeline/TranscriptDedupe.js +96 -0
  26. package/dist/voice-pipeline/TranscriptDedupe.js.map +1 -0
  27. package/dist/voice-pipeline/VoiceMetricsReporter.d.ts +48 -0
  28. package/dist/voice-pipeline/VoiceMetricsReporter.d.ts.map +1 -0
  29. package/dist/voice-pipeline/VoiceMetricsReporter.js +33 -0
  30. package/dist/voice-pipeline/VoiceMetricsReporter.js.map +1 -0
  31. package/dist/voice-pipeline/VoicePipelineError.d.ts +44 -0
  32. package/dist/voice-pipeline/VoicePipelineError.d.ts.map +1 -0
  33. package/dist/voice-pipeline/VoicePipelineError.js +74 -0
  34. package/dist/voice-pipeline/VoicePipelineError.js.map +1 -0
  35. package/dist/voice-pipeline/env-constructor.d.ts +48 -0
  36. package/dist/voice-pipeline/env-constructor.d.ts.map +1 -0
  37. package/dist/voice-pipeline/env-constructor.js +85 -0
  38. package/dist/voice-pipeline/env-constructor.js.map +1 -0
  39. package/dist/voice-pipeline/index.d.ts +8 -1
  40. package/dist/voice-pipeline/index.d.ts.map +1 -1
  41. package/dist/voice-pipeline/index.js +9 -1
  42. package/dist/voice-pipeline/index.js.map +1 -1
  43. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.d.ts +24 -1
  44. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.d.ts.map +1 -1
  45. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.js +51 -0
  46. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.js.map +1 -1
  47. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.d.ts +17 -1
  48. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.d.ts.map +1 -1
  49. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.js +46 -0
  50. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.js.map +1 -1
  51. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.d.ts +16 -1
  52. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.d.ts.map +1 -1
  53. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.js +46 -0
  54. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.js.map +1 -1
  55. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.d.ts +16 -1
  56. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.d.ts.map +1 -1
  57. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.js +46 -0
  58. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.js.map +1 -1
  59. package/dist/voice-pipeline/providers/OpenAIBatchTTS.d.ts +16 -1
  60. package/dist/voice-pipeline/providers/OpenAIBatchTTS.d.ts.map +1 -1
  61. package/dist/voice-pipeline/providers/OpenAIBatchTTS.js +46 -0
  62. package/dist/voice-pipeline/providers/OpenAIBatchTTS.js.map +1 -1
  63. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.d.ts +16 -1
  64. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.d.ts.map +1 -1
  65. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.js +46 -0
  66. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.js.map +1 -1
  67. package/dist/voice-pipeline/providers/StreamingSTTChain.d.ts +78 -0
  68. package/dist/voice-pipeline/providers/StreamingSTTChain.d.ts.map +1 -0
  69. package/dist/voice-pipeline/providers/StreamingSTTChain.js +225 -0
  70. package/dist/voice-pipeline/providers/StreamingSTTChain.js.map +1 -0
  71. package/dist/voice-pipeline/providers/StreamingTTSChain.d.ts +67 -0
  72. package/dist/voice-pipeline/providers/StreamingTTSChain.d.ts.map +1 -0
  73. package/dist/voice-pipeline/providers/StreamingTTSChain.js +212 -0
  74. package/dist/voice-pipeline/providers/StreamingTTSChain.js.map +1 -0
  75. package/dist/voice-pipeline/providers/index.d.ts +2 -0
  76. package/dist/voice-pipeline/providers/index.d.ts.map +1 -1
  77. package/dist/voice-pipeline/providers/index.js +2 -0
  78. package/dist/voice-pipeline/providers/index.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @module voice-pipeline/env-constructor
3
+ *
4
+ * Batteries-included constructor for `StreamingSTTChain` +
5
+ * `StreamingTTSChain`. Reads provider keys from an env-like object and
6
+ * builds priority-ordered chains with shared circuit breaker and metrics
7
+ * reporter. Host apps can skip the manual wiring and use this factory as
8
+ * the default integration point.
9
+ */
10
+ import { StreamingSTTChain } from './providers/StreamingSTTChain.js';
11
+ import { StreamingTTSChain } from './providers/StreamingTTSChain.js';
12
+ import { CircuitBreaker } from './CircuitBreaker.js';
13
+ import { VoiceMetricsReporter } from './VoiceMetricsReporter.js';
14
+ export declare class NoVoiceProvidersAvailableError extends Error {
15
+ readonly checkedEnvVars: string[];
16
+ constructor(checked: string[]);
17
+ }
18
+ export interface VoiceProviderEnvConfig {
19
+ /** Environment source. Defaults to process.env. */
20
+ env?: Record<string, string | undefined>;
21
+ /** Prefer streaming-class providers for first-try. Default true. */
22
+ preferStreaming?: boolean;
23
+ /** Language hint — providers whose capabilities don't match are still
24
+ * included (capability filtering is host-app policy), but this value
25
+ * is passed through to StreamingTTSConfig / StreamingSTTConfig via
26
+ * startSession consumers. */
27
+ languageHint?: string;
28
+ /** Target cost tier. Reserved for future per-session routing; not used yet. */
29
+ tier?: 'cheap' | 'standard' | 'premium';
30
+ /** Whether the STT chain keeps a ring buffer + re-routes mid-utterance.
31
+ * Default true — this is the whole point of the resilience work. */
32
+ enableMidUtteranceFailover?: boolean;
33
+ /** Whether the TTS chain re-sends accumulated tokens on primary
34
+ * failure. Default true. */
35
+ enableMidSynthesisFailover?: boolean;
36
+ }
37
+ export interface VoiceProviderBundle {
38
+ stt: StreamingSTTChain;
39
+ tts: StreamingTTSChain;
40
+ metrics: VoiceMetricsReporter;
41
+ breaker: CircuitBreaker;
42
+ /** Release any global resources the bundle owns. Currently a no-op
43
+ * because sessions clean up themselves; exposed now so host apps can
44
+ * depend on the shape. */
45
+ dispose(): Promise<void>;
46
+ }
47
+ export declare function createVoiceProvidersFromEnv(config?: VoiceProviderEnvConfig): VoiceProviderBundle;
48
+ //# sourceMappingURL=env-constructor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-constructor.d.ts","sourceRoot":"","sources":["../../src/voice-pipeline/env-constructor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE;CAO9B;AAED,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,oEAAoE;IACpE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;kCAG8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACxC;yEACqE;IACrE,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;iCAC6B;IAC7B,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,iBAAiB,CAAC;IACvB,GAAG,EAAE,iBAAiB,CAAC;IACvB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB;;+BAE2B;IAC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAgB,2BAA2B,CACzC,MAAM,GAAE,sBAA2B,GAClC,mBAAmB,CA8ErB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @module voice-pipeline/env-constructor
3
+ *
4
+ * Batteries-included constructor for `StreamingSTTChain` +
5
+ * `StreamingTTSChain`. Reads provider keys from an env-like object and
6
+ * builds priority-ordered chains with shared circuit breaker and metrics
7
+ * reporter. Host apps can skip the manual wiring and use this factory as
8
+ * the default integration point.
9
+ */
10
+ import { DeepgramStreamingSTT } from './providers/DeepgramStreamingSTT.js';
11
+ import { ElevenLabsStreamingSTT } from './providers/ElevenLabsStreamingSTT.js';
12
+ import { ElevenLabsStreamingTTS } from './providers/ElevenLabsStreamingTTS.js';
13
+ import { OpenAIRealtimeTTS } from './providers/OpenAIRealtimeTTS.js';
14
+ import { ElevenLabsBatchTTS } from './providers/ElevenLabsBatchTTS.js';
15
+ import { OpenAIBatchTTS } from './providers/OpenAIBatchTTS.js';
16
+ import { StreamingSTTChain } from './providers/StreamingSTTChain.js';
17
+ import { StreamingTTSChain } from './providers/StreamingTTSChain.js';
18
+ import { CircuitBreaker } from './CircuitBreaker.js';
19
+ import { VoiceMetricsReporter } from './VoiceMetricsReporter.js';
20
+ export class NoVoiceProvidersAvailableError extends Error {
21
+ constructor(checked) {
22
+ super(`No voice providers available. Set any of: ${checked.join(', ')} in the server env.`);
23
+ this.name = 'NoVoiceProvidersAvailableError';
24
+ this.checkedEnvVars = checked;
25
+ }
26
+ }
27
+ export function createVoiceProvidersFromEnv(config = {}) {
28
+ const env = config.env ?? globalThis.process?.env ?? {};
29
+ const checkedKeys = [
30
+ 'DEEPGRAM_API_KEY',
31
+ 'ELEVENLABS_API_KEY',
32
+ 'OPENAI_API_KEY',
33
+ ];
34
+ const deepgramKey = env['DEEPGRAM_API_KEY'];
35
+ const elevenLabsKey = env['ELEVENLABS_API_KEY'];
36
+ const openaiKey = env['OPENAI_API_KEY'];
37
+ const metrics = new VoiceMetricsReporter();
38
+ const breaker = new CircuitBreaker({
39
+ failureThreshold: 3,
40
+ windowMs: 60000,
41
+ cooldownMs: 60000,
42
+ });
43
+ const sttProviders = [];
44
+ if (deepgramKey) {
45
+ sttProviders.push(new DeepgramStreamingSTT({ apiKey: deepgramKey, priority: 10 }));
46
+ }
47
+ if (elevenLabsKey) {
48
+ sttProviders.push(new ElevenLabsStreamingSTT({ apiKey: elevenLabsKey, priority: 20 }));
49
+ }
50
+ const ttsProviders = [];
51
+ if (elevenLabsKey) {
52
+ ttsProviders.push(new ElevenLabsStreamingTTS({ apiKey: elevenLabsKey, priority: 10 }));
53
+ }
54
+ if (openaiKey) {
55
+ ttsProviders.push(new OpenAIRealtimeTTS({ apiKey: openaiKey, priority: 20 }));
56
+ ttsProviders.push(new OpenAIBatchTTS({ apiKey: openaiKey, priority: 90 }));
57
+ }
58
+ if (elevenLabsKey) {
59
+ ttsProviders.push(new ElevenLabsBatchTTS({ apiKey: elevenLabsKey, priority: 80 }));
60
+ }
61
+ if (sttProviders.length === 0 || ttsProviders.length === 0) {
62
+ throw new NoVoiceProvidersAvailableError(checkedKeys);
63
+ }
64
+ const stt = new StreamingSTTChain(sttProviders, {
65
+ breaker,
66
+ metrics,
67
+ enableMidUtteranceFailover: config.enableMidUtteranceFailover ?? true,
68
+ ringBufferCapacityMs: 3000,
69
+ });
70
+ const tts = new StreamingTTSChain(ttsProviders, {
71
+ breaker,
72
+ metrics,
73
+ enableMidSynthesisFailover: config.enableMidSynthesisFailover ?? true,
74
+ });
75
+ return {
76
+ stt,
77
+ tts,
78
+ metrics,
79
+ breaker,
80
+ async dispose() {
81
+ /* Sessions clean themselves up; nothing global to release today. */
82
+ },
83
+ };
84
+ }
85
+ //# sourceMappingURL=env-constructor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-constructor.js","sourceRoot":"","sources":["../../src/voice-pipeline/env-constructor.ts"],"names":[],"mappings":"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"}
@@ -104,5 +104,12 @@ export { WebSocketStreamTransport } from './WebSocketStreamTransport.js';
104
104
  export { WebRTCStreamTransport, createWebRTCTransport } from './WebRTCStreamTransport.js';
105
105
  export { VoicePipelineOrchestrator } from './VoicePipelineOrchestrator.js';
106
106
  export { VoiceInterruptError } from './VoiceInterruptError.js';
107
- export { DeepgramStreamingSTT, type DeepgramStreamingSTTConfig, ElevenLabsStreamingSTT, type ElevenLabsStreamingSTTConfig, ElevenLabsStreamingTTS, type ElevenLabsStreamingTTSConfig, AgentSessionVoiceAdapter, } from './providers/index.js';
107
+ export { DeepgramStreamingSTT, type DeepgramStreamingSTTConfig, ElevenLabsStreamingSTT, type ElevenLabsStreamingSTTConfig, ElevenLabsStreamingTTS, type ElevenLabsStreamingTTSConfig, AgentSessionVoiceAdapter, StreamingSTTChain, type StreamingSTTChainOptions, type ProviderSelectedEvent, type ProviderFailedEvent, type ProviderFailoverEvent, StreamingTTSChain, type StreamingTTSChainOptions, type TTSProviderSelectedEvent, type TTSProviderFailedEvent, type TTSProviderFailoverEvent, } from './providers/index.js';
108
+ export { VoicePipelineError, AggregateVoiceError, type HealthErrorClass, type VoicePipelineErrorInit, } from './VoicePipelineError.js';
109
+ export { type HealthyProvider, type ProviderCapabilities, type HealthCheckResult, defaultCapabilities, supportsLanguage, } from './HealthyProvider.js';
110
+ export { CircuitBreaker, type BreakerState, type CircuitBreakerOptions, type StateChangeEvent, } from './CircuitBreaker.js';
111
+ export { AudioRingBuffer, type AudioRingBufferOptions } from './AudioRingBuffer.js';
112
+ export { TranscriptDedupe, type TranscriptObservation, type DedupeResult, } from './TranscriptDedupe.js';
113
+ export { VoiceMetricsReporter, type VoiceMetricEvent, type VoiceMetricListener, } from './VoiceMetricsReporter.js';
114
+ export { createVoiceProvidersFromEnv, NoVoiceProvidersAvailableError, type VoiceProviderEnvConfig, type VoiceProviderBundle, } from './env-constructor.js';
108
115
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/voice-pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AAIH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,wBAAwB,GACzB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/voice-pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AAIH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,GAC9B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC"}
@@ -113,5 +113,13 @@ export { VoicePipelineOrchestrator } from './VoicePipelineOrchestrator.js';
113
113
  // Typed error for barge-in interruptions
114
114
  export { VoiceInterruptError } from './VoiceInterruptError.js';
115
115
  // Streaming provider implementations
116
- export { DeepgramStreamingSTT, ElevenLabsStreamingSTT, ElevenLabsStreamingTTS, AgentSessionVoiceAdapter, } from './providers/index.js';
116
+ export { DeepgramStreamingSTT, ElevenLabsStreamingSTT, ElevenLabsStreamingTTS, AgentSessionVoiceAdapter, StreamingSTTChain, StreamingTTSChain, } from './providers/index.js';
117
+ // Resilience primitives
118
+ export { VoicePipelineError, AggregateVoiceError, } from './VoicePipelineError.js';
119
+ export { defaultCapabilities, supportsLanguage, } from './HealthyProvider.js';
120
+ export { CircuitBreaker, } from './CircuitBreaker.js';
121
+ export { AudioRingBuffer } from './AudioRingBuffer.js';
122
+ export { TranscriptDedupe, } from './TranscriptDedupe.js';
123
+ export { VoiceMetricsReporter, } from './VoiceMetricsReporter.js';
124
+ export { createVoiceProvidersFromEnv, NoVoiceProvidersAvailableError, } from './env-constructor.js';
117
125
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/voice-pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AAEH,wDAAwD;AACxD,8EAA8E;AAC9E,cAAc,YAAY,CAAC;AAE3B,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,6CAA6C;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,2CAA2C;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,oDAAoD;AACpD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,yCAAyC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EAEpB,sBAAsB,EAEtB,sBAAsB,EAEtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/voice-pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AAEH,wDAAwD;AACxD,8EAA8E;AAC9E,cAAc,YAAY,CAAC;AAE3B,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,6CAA6C;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,2CAA2C;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,oDAAoD;AACpD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,yCAAyC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EAEpB,sBAAsB,EAEtB,sBAAsB,EAEtB,wBAAwB,EACxB,iBAAiB,EAKjB,iBAAiB,GAKlB,MAAM,sBAAsB,CAAC;AAE9B,wBAAwB;AACxB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAGpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAC;AACpF,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,GAG/B,MAAM,sBAAsB,CAAC"}
@@ -24,6 +24,16 @@
24
24
  * @see https://developers.deepgram.com/docs/streaming
25
25
  */
26
26
  import type { IStreamingSTT, StreamingSTTSession, StreamingSTTConfig } from '../types.js';
27
+ import { type HealthyProvider, type HealthCheckResult, type ProviderCapabilities } from '../HealthyProvider.js';
28
+ /**
29
+ * Shape of the injected health probe used for deterministic tests.
30
+ * Default implementation hits Deepgram's /v1/projects endpoint.
31
+ */
32
+ export type VoiceHealthProbe = (apiKey: string) => Promise<{
33
+ ok: boolean;
34
+ status: number;
35
+ latencyMs: number;
36
+ }>;
27
37
  /**
28
38
  * Configuration for the {@link DeepgramStreamingSTT} provider.
29
39
  */
@@ -40,6 +50,15 @@ export interface DeepgramStreamingSTTConfig {
40
50
  * @default 'nova-2'
41
51
  */
42
52
  model?: string;
53
+ /**
54
+ * Chain priority. Lower values are tried first.
55
+ * @default 10
56
+ */
57
+ priority?: number;
58
+ /** Optional capability overrides. Merged into defaultCapabilities(). */
59
+ capabilities?: Partial<ProviderCapabilities>;
60
+ /** Injectable health probe for tests. Defaults to Deepgram /v1/projects. */
61
+ healthProbe?: VoiceHealthProbe;
43
62
  }
44
63
  /**
45
64
  * Streaming STT provider that creates Deepgram WebSocket sessions.
@@ -55,12 +74,16 @@ export interface DeepgramStreamingSTTConfig {
55
74
  * session.on('transcript', (event) => console.log(event.text));
56
75
  * ```
57
76
  */
58
- export declare class DeepgramStreamingSTT implements IStreamingSTT {
77
+ export declare class DeepgramStreamingSTT implements IStreamingSTT, HealthyProvider {
59
78
  private readonly config;
60
79
  readonly providerId = "deepgram-streaming";
61
80
  readonly isStreaming = true;
81
+ readonly priority: number;
82
+ readonly capabilities: ProviderCapabilities;
62
83
  private readonly keyPool;
84
+ private readonly healthProbe;
63
85
  constructor(config: DeepgramStreamingSTTConfig);
86
+ healthCheck(): Promise<HealthCheckResult>;
64
87
  /**
65
88
  * Create a new streaming STT session connected to Deepgram.
66
89
  * Each session gets a fresh key from the round-robin pool.
@@ -1 +1 @@
1
- {"version":3,"file":"DeepgramStreamingSTT.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/DeepgramStreamingSTT.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAInB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmQD;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAK5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,QAAQ,CAAC,UAAU,wBAAwB;IAC3C,QAAQ,CAAC,WAAW,QAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAER,MAAM,EAAE,0BAA0B;IAI/D;;;OAGG;IACG,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAM9E"}
1
+ {"version":3,"file":"DeepgramStreamingSTT.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/DeepgramStreamingSTT.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAInB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAG/B;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAmBjE;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE7C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAmQD;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,YAAW,aAAa,EAAE,eAAe;IAQ7D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,QAAQ,CAAC,UAAU,wBAAwB;IAC3C,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAElB,MAAM,EAAE,0BAA0B;IAazD,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA6B/C;;;OAGG;IACG,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAM9E"}
@@ -26,6 +26,21 @@
26
26
  import { EventEmitter } from 'node:events';
27
27
  import WebSocket from 'ws';
28
28
  import { ApiKeyPool } from '../../core/providers/ApiKeyPool.js';
29
+ import { defaultCapabilities, } from '../HealthyProvider.js';
30
+ import { VoicePipelineError } from '../VoicePipelineError.js';
31
+ async function defaultDeepgramProbe(apiKey) {
32
+ const start = Date.now();
33
+ try {
34
+ const res = await fetch('https://api.deepgram.com/v1/projects', {
35
+ headers: { Authorization: `Token ${apiKey}` },
36
+ signal: AbortSignal.timeout(1000),
37
+ });
38
+ return { ok: res.ok, status: res.status, latencyMs: Date.now() - start };
39
+ }
40
+ catch (err) {
41
+ throw err;
42
+ }
43
+ }
29
44
  // ---------------------------------------------------------------------------
30
45
  // Session Implementation
31
46
  // ---------------------------------------------------------------------------
@@ -229,6 +244,42 @@ export class DeepgramStreamingSTT {
229
244
  this.providerId = 'deepgram-streaming';
230
245
  this.isStreaming = true;
231
246
  this.keyPool = new ApiKeyPool(config.apiKey);
247
+ this.priority = config.priority ?? 10;
248
+ this.capabilities = defaultCapabilities({
249
+ languages: ['*'],
250
+ streaming: true,
251
+ costTier: 'standard',
252
+ latencyClass: 'realtime',
253
+ ...(config.capabilities ?? {}),
254
+ });
255
+ this.healthProbe = config.healthProbe ?? defaultDeepgramProbe;
256
+ }
257
+ async healthCheck() {
258
+ if (!this.keyPool.hasKeys) {
259
+ return { ok: false, error: { class: 'auth', message: 'no api key available' } };
260
+ }
261
+ const key = this.keyPool.next();
262
+ try {
263
+ const res = await this.healthProbe(key);
264
+ if (res.ok)
265
+ return { ok: true, latencyMs: res.latencyMs };
266
+ const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'stt', provider: this.providerId });
267
+ return {
268
+ ok: false,
269
+ latencyMs: res.latencyMs,
270
+ error: { class: classified.errorClass, message: `HTTP ${res.status}` },
271
+ };
272
+ }
273
+ catch (err) {
274
+ const classified = VoicePipelineError.classifyError(err, {
275
+ kind: 'stt',
276
+ provider: this.providerId,
277
+ });
278
+ return {
279
+ ok: false,
280
+ error: { class: classified.errorClass, message: classified.message },
281
+ };
282
+ }
232
283
  }
233
284
  /**
234
285
  * Create a new streaming STT session connected to Deepgram.
@@ -1 +1 @@
1
- {"version":3,"file":"DeepgramStreamingSTT.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/DeepgramStreamingSTT.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeepgramStreamingSTT.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/DeepgramStreamingSTT.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * for one-shot narration synthesis with voice settings control.
6
6
  */
7
7
  import type { IBatchTTS, BatchTTSConfig, BatchTTSResult } from '../types.js';
8
+ import { type HealthyProvider, type HealthCheckResult, type ProviderCapabilities } from '../HealthyProvider.js';
8
9
  /** Configuration for the ElevenLabs batch TTS provider. */
9
10
  export interface ElevenLabsBatchTTSConfig {
10
11
  /** ElevenLabs API key. */
@@ -15,6 +16,16 @@ export interface ElevenLabsBatchTTSConfig {
15
16
  model?: string;
16
17
  /** Base URL for the ElevenLabs API. Defaults to 'https://api.elevenlabs.io/v1'. */
17
18
  baseUrl?: string;
19
+ /** Chain priority. Lower values are tried first. @default 80 */
20
+ priority?: number;
21
+ /** Optional capability overrides. */
22
+ capabilities?: Partial<ProviderCapabilities>;
23
+ /** Injectable health probe for tests. */
24
+ healthProbe?: (apiKey: string) => Promise<{
25
+ ok: boolean;
26
+ status: number;
27
+ latencyMs: number;
28
+ }>;
18
29
  }
19
30
  /**
20
31
  * Batch (one-shot) TTS provider using ElevenLabs' REST text-to-speech endpoint.
@@ -22,8 +33,10 @@ export interface ElevenLabsBatchTTSConfig {
22
33
  * Accepts complete text and returns finished MP3 audio with voice settings
23
34
  * control via `providerOptions` (stability, similarityBoost, style, useSpeakerBoost).
24
35
  */
25
- export declare class ElevenLabsBatchTTS implements IBatchTTS {
36
+ export declare class ElevenLabsBatchTTS implements IBatchTTS, HealthyProvider {
26
37
  readonly providerId = "elevenlabs-batch";
38
+ readonly priority: number;
39
+ readonly capabilities: ProviderCapabilities;
27
40
  /** API key pool for round-robin rotation and quota failover. */
28
41
  private readonly keyPool;
29
42
  /** Default voice ID when none is provided in the synthesis config. */
@@ -32,7 +45,10 @@ export declare class ElevenLabsBatchTTS implements IBatchTTS {
32
45
  private readonly model;
33
46
  /** Base URL for all API requests. */
34
47
  private readonly baseUrl;
48
+ /** Injectable health probe for tests. */
49
+ private readonly healthProbe;
35
50
  constructor(config: ElevenLabsBatchTTSConfig);
51
+ healthCheck(): Promise<HealthCheckResult>;
36
52
  /**
37
53
  * Synthesize complete text into MP3 audio via ElevenLabs REST API.
38
54
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ElevenLabsBatchTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsBatchTTS.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7E,2DAA2D;AAC3D,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,QAAQ,CAAC,UAAU,sBAAsB;IAEzC,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IAErC,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,wBAAwB;IAO5C;;;;;;;OAOG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CA+CjF"}
1
+ {"version":3,"file":"ElevenLabsBatchTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsBatchTTS.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7E,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAY/B,2DAA2D;AAC3D,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/F;AAKD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,SAAS,EAAE,eAAe;IACnE,QAAQ,CAAC,UAAU,sBAAsB;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IAErC,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuD;gBAEvE,MAAM,EAAE,wBAAwB;IAgBtC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA6B/C;;;;;;;OAOG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CA+CjF"}
@@ -6,6 +6,16 @@
6
6
  */
7
7
  import { ApiKeyPool } from '../../core/providers/ApiKeyPool.js';
8
8
  import { isQuotaError } from '../../core/providers/quotaErrors.js';
9
+ import { defaultCapabilities, } from '../HealthyProvider.js';
10
+ import { VoicePipelineError } from '../VoicePipelineError.js';
11
+ async function defaultElevenLabsBatchProbe(apiKey) {
12
+ const start = Date.now();
13
+ const res = await fetch('https://api.elevenlabs.io/v1/user', {
14
+ headers: { 'xi-api-key': apiKey },
15
+ signal: AbortSignal.timeout(1000),
16
+ });
17
+ return { ok: res.ok, status: res.status, latencyMs: Date.now() - start };
18
+ }
9
19
  /** Approximate bytes per second for 128kbps MP3 audio. */
10
20
  const BYTES_PER_SEC_MP3 = 16000;
11
21
  /**
@@ -21,6 +31,42 @@ export class ElevenLabsBatchTTS {
21
31
  this.defaultVoiceId = config.voiceId ?? 'EXAVITQu4vr4xnSDxMaL';
22
32
  this.model = config.model ?? 'eleven_multilingual_v2';
23
33
  this.baseUrl = config.baseUrl ?? 'https://api.elevenlabs.io/v1';
34
+ this.priority = config.priority ?? 80;
35
+ this.capabilities = defaultCapabilities({
36
+ languages: ['*'],
37
+ streaming: false,
38
+ costTier: 'standard',
39
+ latencyClass: 'batch',
40
+ ...(config.capabilities ?? {}),
41
+ });
42
+ this.healthProbe = config.healthProbe ?? defaultElevenLabsBatchProbe;
43
+ }
44
+ async healthCheck() {
45
+ if (!this.keyPool.hasKeys) {
46
+ return { ok: false, error: { class: 'auth', message: 'no api key available' } };
47
+ }
48
+ const key = this.keyPool.next();
49
+ try {
50
+ const res = await this.healthProbe(key);
51
+ if (res.ok)
52
+ return { ok: true, latencyMs: res.latencyMs };
53
+ const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'tts', provider: this.providerId });
54
+ return {
55
+ ok: false,
56
+ latencyMs: res.latencyMs,
57
+ error: { class: classified.errorClass, message: `HTTP ${res.status}` },
58
+ };
59
+ }
60
+ catch (err) {
61
+ const classified = VoicePipelineError.classifyError(err, {
62
+ kind: 'tts',
63
+ provider: this.providerId,
64
+ });
65
+ return {
66
+ ok: false,
67
+ error: { class: classified.errorClass, message: classified.message },
68
+ };
69
+ }
24
70
  }
25
71
  /**
26
72
  * Synthesize complete text into MP3 audio via ElevenLabs REST API.
@@ -1 +1 @@
1
- {"version":3,"file":"ElevenLabsBatchTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsBatchTTS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ElevenLabsBatchTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsBatchTTS.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@
23
23
  * @see https://elevenlabs.io/docs/api-reference/speech-to-text
24
24
  */
25
25
  import type { IStreamingSTT, StreamingSTTSession, StreamingSTTConfig } from '../types.js';
26
+ import { type HealthyProvider, type HealthCheckResult, type ProviderCapabilities } from '../HealthyProvider.js';
26
27
  /**
27
28
  * Configuration for the {@link ElevenLabsStreamingSTT} provider.
28
29
  */
@@ -39,6 +40,16 @@ export interface ElevenLabsStreamingSTTConfig {
39
40
  * @default 'scribe_v1'
40
41
  */
41
42
  model?: string;
43
+ /** Chain priority. Lower values are tried first. @default 20 */
44
+ priority?: number;
45
+ /** Optional capability overrides. */
46
+ capabilities?: Partial<ProviderCapabilities>;
47
+ /** Injectable health probe for tests. */
48
+ healthProbe?: (apiKey: string) => Promise<{
49
+ ok: boolean;
50
+ status: number;
51
+ latencyMs: number;
52
+ }>;
42
53
  }
43
54
  /**
44
55
  * Streaming STT provider using ElevenLabs' Speech-to-Text API.
@@ -56,12 +67,16 @@ export interface ElevenLabsStreamingSTTConfig {
56
67
  * session.on('transcript', (event) => console.log(event.text));
57
68
  * ```
58
69
  */
59
- export declare class ElevenLabsStreamingSTT implements IStreamingSTT {
70
+ export declare class ElevenLabsStreamingSTT implements IStreamingSTT, HealthyProvider {
60
71
  private readonly config;
61
72
  readonly providerId = "elevenlabs-streaming-stt";
62
73
  readonly isStreaming = true;
74
+ readonly priority: number;
75
+ readonly capabilities: ProviderCapabilities;
63
76
  private readonly keyPool;
77
+ private readonly healthProbe;
64
78
  constructor(config: ElevenLabsStreamingSTTConfig);
79
+ healthCheck(): Promise<HealthCheckResult>;
65
80
  /**
66
81
  * Create a new STT session. Uses chunked REST calls to ElevenLabs'
67
82
  * batch STT endpoint for near-realtime transcription.
@@ -1 +1 @@
1
- {"version":3,"file":"ElevenLabsStreamingSTT.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsStreamingSTT.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAInB,MAAM,aAAa,CAAC;AAOrB;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoQD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IAK9C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,QAAQ,CAAC,UAAU,8BAA8B;IACjD,QAAQ,CAAC,WAAW,QAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAER,MAAM,EAAE,4BAA4B;IAIjE;;;;OAIG;IACG,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAI9E"}
1
+ {"version":3,"file":"ElevenLabsStreamingSTT.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsStreamingSTT.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAInB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAgB/B;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qCAAqC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE7C,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/F;AAoQD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAuB,YAAW,aAAa,EAAE,eAAe;IAU/D,OAAO,CAAC,QAAQ,CAAC,MAAM;IATnC,QAAQ,CAAC,UAAU,8BAA8B;IACjD,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAE1B;gBAE2B,MAAM,EAAE,4BAA4B;IAa3D,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA6B/C;;;;OAIG;IACG,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAI9E"}
@@ -24,6 +24,16 @@
24
24
  */
25
25
  import { EventEmitter } from 'node:events';
26
26
  import { ApiKeyPool } from '../../core/providers/ApiKeyPool.js';
27
+ import { defaultCapabilities, } from '../HealthyProvider.js';
28
+ import { VoicePipelineError } from '../VoicePipelineError.js';
29
+ async function defaultElevenLabsProbe(apiKey) {
30
+ const start = Date.now();
31
+ const res = await fetch('https://api.elevenlabs.io/v1/user', {
32
+ headers: { 'xi-api-key': apiKey },
33
+ signal: AbortSignal.timeout(1000),
34
+ });
35
+ return { ok: res.ok, status: res.status, latencyMs: Date.now() - start };
36
+ }
27
37
  // ---------------------------------------------------------------------------
28
38
  // Session Implementation — Chunked REST fallback
29
39
  // ---------------------------------------------------------------------------
@@ -238,6 +248,42 @@ export class ElevenLabsStreamingSTT {
238
248
  this.providerId = 'elevenlabs-streaming-stt';
239
249
  this.isStreaming = true;
240
250
  this.keyPool = new ApiKeyPool(config.apiKey);
251
+ this.priority = config.priority ?? 20;
252
+ this.capabilities = defaultCapabilities({
253
+ languages: ['*'],
254
+ streaming: true,
255
+ costTier: 'standard',
256
+ latencyClass: 'near-realtime',
257
+ ...(config.capabilities ?? {}),
258
+ });
259
+ this.healthProbe = config.healthProbe ?? defaultElevenLabsProbe;
260
+ }
261
+ async healthCheck() {
262
+ if (!this.keyPool.hasKeys) {
263
+ return { ok: false, error: { class: 'auth', message: 'no api key available' } };
264
+ }
265
+ const key = this.keyPool.next();
266
+ try {
267
+ const res = await this.healthProbe(key);
268
+ if (res.ok)
269
+ return { ok: true, latencyMs: res.latencyMs };
270
+ const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'stt', provider: this.providerId });
271
+ return {
272
+ ok: false,
273
+ latencyMs: res.latencyMs,
274
+ error: { class: classified.errorClass, message: `HTTP ${res.status}` },
275
+ };
276
+ }
277
+ catch (err) {
278
+ const classified = VoicePipelineError.classifyError(err, {
279
+ kind: 'stt',
280
+ provider: this.providerId,
281
+ });
282
+ return {
283
+ ok: false,
284
+ error: { class: classified.errorClass, message: classified.message },
285
+ };
286
+ }
241
287
  }
242
288
  /**
243
289
  * Create a new STT session. Uses chunked REST calls to ElevenLabs'