@framers/agentos 0.1.227 → 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 (75) 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/voice-pipeline/AudioRingBuffer.d.ts +28 -0
  8. package/dist/voice-pipeline/AudioRingBuffer.d.ts.map +1 -0
  9. package/dist/voice-pipeline/AudioRingBuffer.js +43 -0
  10. package/dist/voice-pipeline/AudioRingBuffer.js.map +1 -0
  11. package/dist/voice-pipeline/CircuitBreaker.d.ts +42 -0
  12. package/dist/voice-pipeline/CircuitBreaker.d.ts.map +1 -0
  13. package/dist/voice-pipeline/CircuitBreaker.js +96 -0
  14. package/dist/voice-pipeline/CircuitBreaker.js.map +1 -0
  15. package/dist/voice-pipeline/HealthyProvider.d.ts +44 -0
  16. package/dist/voice-pipeline/HealthyProvider.d.ts.map +1 -0
  17. package/dist/voice-pipeline/HealthyProvider.js +29 -0
  18. package/dist/voice-pipeline/HealthyProvider.js.map +1 -0
  19. package/dist/voice-pipeline/TranscriptDedupe.d.ts +43 -0
  20. package/dist/voice-pipeline/TranscriptDedupe.d.ts.map +1 -0
  21. package/dist/voice-pipeline/TranscriptDedupe.js +96 -0
  22. package/dist/voice-pipeline/TranscriptDedupe.js.map +1 -0
  23. package/dist/voice-pipeline/VoiceMetricsReporter.d.ts +48 -0
  24. package/dist/voice-pipeline/VoiceMetricsReporter.d.ts.map +1 -0
  25. package/dist/voice-pipeline/VoiceMetricsReporter.js +33 -0
  26. package/dist/voice-pipeline/VoiceMetricsReporter.js.map +1 -0
  27. package/dist/voice-pipeline/VoicePipelineError.d.ts +44 -0
  28. package/dist/voice-pipeline/VoicePipelineError.d.ts.map +1 -0
  29. package/dist/voice-pipeline/VoicePipelineError.js +74 -0
  30. package/dist/voice-pipeline/VoicePipelineError.js.map +1 -0
  31. package/dist/voice-pipeline/env-constructor.d.ts +48 -0
  32. package/dist/voice-pipeline/env-constructor.d.ts.map +1 -0
  33. package/dist/voice-pipeline/env-constructor.js +85 -0
  34. package/dist/voice-pipeline/env-constructor.js.map +1 -0
  35. package/dist/voice-pipeline/index.d.ts +8 -1
  36. package/dist/voice-pipeline/index.d.ts.map +1 -1
  37. package/dist/voice-pipeline/index.js +9 -1
  38. package/dist/voice-pipeline/index.js.map +1 -1
  39. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.d.ts +24 -1
  40. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.d.ts.map +1 -1
  41. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.js +51 -0
  42. package/dist/voice-pipeline/providers/DeepgramStreamingSTT.js.map +1 -1
  43. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.d.ts +17 -1
  44. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.d.ts.map +1 -1
  45. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.js +46 -0
  46. package/dist/voice-pipeline/providers/ElevenLabsBatchTTS.js.map +1 -1
  47. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.d.ts +16 -1
  48. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.d.ts.map +1 -1
  49. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.js +46 -0
  50. package/dist/voice-pipeline/providers/ElevenLabsStreamingSTT.js.map +1 -1
  51. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.d.ts +16 -1
  52. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.d.ts.map +1 -1
  53. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.js +46 -0
  54. package/dist/voice-pipeline/providers/ElevenLabsStreamingTTS.js.map +1 -1
  55. package/dist/voice-pipeline/providers/OpenAIBatchTTS.d.ts +16 -1
  56. package/dist/voice-pipeline/providers/OpenAIBatchTTS.d.ts.map +1 -1
  57. package/dist/voice-pipeline/providers/OpenAIBatchTTS.js +46 -0
  58. package/dist/voice-pipeline/providers/OpenAIBatchTTS.js.map +1 -1
  59. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.d.ts +16 -1
  60. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.d.ts.map +1 -1
  61. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.js +46 -0
  62. package/dist/voice-pipeline/providers/OpenAIRealtimeTTS.js.map +1 -1
  63. package/dist/voice-pipeline/providers/StreamingSTTChain.d.ts +78 -0
  64. package/dist/voice-pipeline/providers/StreamingSTTChain.d.ts.map +1 -0
  65. package/dist/voice-pipeline/providers/StreamingSTTChain.js +225 -0
  66. package/dist/voice-pipeline/providers/StreamingSTTChain.js.map +1 -0
  67. package/dist/voice-pipeline/providers/StreamingTTSChain.d.ts +67 -0
  68. package/dist/voice-pipeline/providers/StreamingTTSChain.d.ts.map +1 -0
  69. package/dist/voice-pipeline/providers/StreamingTTSChain.js +212 -0
  70. package/dist/voice-pipeline/providers/StreamingTTSChain.js.map +1 -0
  71. package/dist/voice-pipeline/providers/index.d.ts +2 -0
  72. package/dist/voice-pipeline/providers/index.d.ts.map +1 -1
  73. package/dist/voice-pipeline/providers/index.js +2 -0
  74. package/dist/voice-pipeline/providers/index.js.map +1 -1
  75. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ElevenLabsStreamingTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsStreamingTTS.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAEnB,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,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8OD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IAI9C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,QAAQ,CAAC,UAAU,0BAA0B;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAER,MAAM,EAAE,4BAA4B;IAIjE;;;;OAIG;IACG,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAM9E"}
1
+ {"version":3,"file":"ElevenLabsStreamingTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsStreamingTTS.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAEnB,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,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;AA8OD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAuB,YAAW,aAAa,EAAE,eAAe;IAS/D,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,QAAQ,CAAC,UAAU,0BAA0B;IAC7C,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;CAM9E"}
@@ -24,6 +24,16 @@
24
24
  import { EventEmitter } from 'node:events';
25
25
  import WebSocket from 'ws';
26
26
  import { ApiKeyPool } from '../../core/providers/ApiKeyPool.js';
27
+ import { defaultCapabilities, } from '../HealthyProvider.js';
28
+ import { VoicePipelineError } from '../VoicePipelineError.js';
29
+ async function defaultElevenLabsTtsProbe(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
29
39
  // ---------------------------------------------------------------------------
@@ -229,6 +239,42 @@ export class ElevenLabsStreamingTTS {
229
239
  this.config = config;
230
240
  this.providerId = 'elevenlabs-streaming';
231
241
  this.keyPool = new ApiKeyPool(config.apiKey);
242
+ this.priority = config.priority ?? 10;
243
+ this.capabilities = defaultCapabilities({
244
+ languages: ['*'],
245
+ streaming: true,
246
+ costTier: 'standard',
247
+ latencyClass: 'realtime',
248
+ ...(config.capabilities ?? {}),
249
+ });
250
+ this.healthProbe = config.healthProbe ?? defaultElevenLabsTtsProbe;
251
+ }
252
+ async healthCheck() {
253
+ if (!this.keyPool.hasKeys) {
254
+ return { ok: false, error: { class: 'auth', message: 'no api key available' } };
255
+ }
256
+ const key = this.keyPool.next();
257
+ try {
258
+ const res = await this.healthProbe(key);
259
+ if (res.ok)
260
+ return { ok: true, latencyMs: res.latencyMs };
261
+ const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'tts', provider: this.providerId });
262
+ return {
263
+ ok: false,
264
+ latencyMs: res.latencyMs,
265
+ error: { class: classified.errorClass, message: `HTTP ${res.status}` },
266
+ };
267
+ }
268
+ catch (err) {
269
+ const classified = VoicePipelineError.classifyError(err, {
270
+ kind: 'tts',
271
+ provider: this.providerId,
272
+ });
273
+ return {
274
+ ok: false,
275
+ error: { class: classified.errorClass, message: classified.message },
276
+ };
277
+ }
232
278
  }
233
279
  /**
234
280
  * Create a new streaming TTS session connected to ElevenLabs.
@@ -1 +1 @@
1
- {"version":3,"file":"ElevenLabsStreamingTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsStreamingTTS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ElevenLabsStreamingTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/ElevenLabsStreamingTTS.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * for one-shot narration synthesis. Supports tts-1 (cheap) and tts-1-hd (quality).
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 OpenAI batch TTS provider. */
9
10
  export interface OpenAIBatchTTSConfig {
10
11
  /** OpenAI API key. */
@@ -13,17 +14,31 @@ export interface OpenAIBatchTTSConfig {
13
14
  model?: 'tts-1' | 'tts-1-hd';
14
15
  /** Base URL for the OpenAI API. Defaults to 'https://api.openai.com/v1'. */
15
16
  baseUrl?: string;
17
+ /** Chain priority. Lower values are tried first. @default 90 (last resort batch) */
18
+ priority?: number;
19
+ /** Optional capability overrides. */
20
+ capabilities?: Partial<ProviderCapabilities>;
21
+ /** Injectable health probe for tests. */
22
+ healthProbe?: (apiKey: string) => Promise<{
23
+ ok: boolean;
24
+ status: number;
25
+ latencyMs: number;
26
+ }>;
16
27
  }
17
28
  /**
18
29
  * One-shot TTS provider backed by the OpenAI `/audio/speech` endpoint.
19
30
  * Accepts complete text and returns a finished audio buffer.
20
31
  */
21
- export declare class OpenAIBatchTTS implements IBatchTTS {
32
+ export declare class OpenAIBatchTTS implements IBatchTTS, HealthyProvider {
22
33
  readonly providerId: string;
34
+ readonly priority: number;
35
+ readonly capabilities: ProviderCapabilities;
23
36
  private readonly keyPool;
24
37
  private readonly model;
25
38
  private readonly baseUrl;
39
+ private readonly healthProbe;
26
40
  constructor(config: OpenAIBatchTTSConfig);
41
+ healthCheck(): Promise<HealthCheckResult>;
27
42
  /**
28
43
  * Synthesize complete text into audio via the OpenAI speech API.
29
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIBatchTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIBatchTTS.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7E,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,oBAAoB;IAOxC;;;;;;OAMG;IACH,oCAAoC;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAEjC;IAEG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CAgDjF"}
1
+ {"version":3,"file":"OpenAIBatchTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIBatchTTS.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,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,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;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS,EAAE,eAAe;IAC/D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;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,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;gBAEnE,MAAM,EAAE,oBAAoB;IAgBlC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA6B/C;;;;;;OAMG;IACH,oCAAoC;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAEjC;IAEG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CAgDjF"}
@@ -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 defaultOpenAIProbe(apiKey) {
12
+ const start = Date.now();
13
+ const res = await fetch('https://api.openai.com/v1/models', {
14
+ headers: { Authorization: `Bearer ${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 MP3 at default OpenAI TTS bitrate. */
10
20
  const BYTES_PER_SEC_MP3 = 16000;
11
21
  /**
@@ -18,6 +28,42 @@ export class OpenAIBatchTTS {
18
28
  this.model = config.model ?? 'tts-1';
19
29
  this.baseUrl = config.baseUrl ?? 'https://api.openai.com/v1';
20
30
  this.providerId = `openai-${this.model}`;
31
+ this.priority = config.priority ?? 90;
32
+ this.capabilities = defaultCapabilities({
33
+ languages: ['*'],
34
+ streaming: false,
35
+ costTier: 'cheap',
36
+ latencyClass: 'batch',
37
+ ...(config.capabilities ?? {}),
38
+ });
39
+ this.healthProbe = config.healthProbe ?? defaultOpenAIProbe;
40
+ }
41
+ async healthCheck() {
42
+ if (!this.keyPool.hasKeys) {
43
+ return { ok: false, error: { class: 'auth', message: 'no api key available' } };
44
+ }
45
+ const key = this.keyPool.next();
46
+ try {
47
+ const res = await this.healthProbe(key);
48
+ if (res.ok)
49
+ return { ok: true, latencyMs: res.latencyMs };
50
+ const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'tts', provider: this.providerId });
51
+ return {
52
+ ok: false,
53
+ latencyMs: res.latencyMs,
54
+ error: { class: classified.errorClass, message: `HTTP ${res.status}` },
55
+ };
56
+ }
57
+ catch (err) {
58
+ const classified = VoicePipelineError.classifyError(err, {
59
+ kind: 'tts',
60
+ provider: this.providerId,
61
+ });
62
+ return {
63
+ ok: false,
64
+ error: { class: classified.errorClass, message: classified.message },
65
+ };
66
+ }
21
67
  }
22
68
  async synthesize(text, config) {
23
69
  // Validate voice name — if an external voice ID (e.g. ElevenLabs) is passed
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIBatchTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIBatchTTS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAIBatchTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIBatchTTS.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EACL,mBAAmB,GAIpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,KAAK,UAAU,kBAAkB,CAAC,MAAc;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,kCAAkC,EAAE;QAC1D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;QAC9C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;KAClC,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AAC3E,CAAC;AAkBD,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,KAAM,CAAC;AAEjC;;;GAGG;AACH,MAAM,OAAO,cAAc;IASzB,YAAY,MAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,2BAA2B,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,mBAAmB,CAAC;YACtC,SAAS,EAAE,CAAC,GAAG,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,OAAO;YACrB,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;SAC/B,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,kBAAkB,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC;QAClF,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1D,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CACjD,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,EAC/B,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAC3C,CAAC;YACF,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE;aACvE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,GAAG,EAAE;gBACvD,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,IAAI,CAAC,UAAU;aAC1B,CAAC,CAAC;YACH,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE;aACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAcD,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,MAAuB;QACpD,4EAA4E;QAC5E,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC;QACzC,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC;QAEvC,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI;YACX,KAAK;YACL,eAAe,EAAE,MAAM;SACxB,CAAC;QACF,IAAI,MAAM,EAAE,KAAK,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAErD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAC9B,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,eAAe,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,GAAG,EAAE;gBAC9B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEL,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAChC,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;QAE7E,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IAClE,CAAC;;AA3DD;;;;;;GAMG;AACH,oCAAoC;AACZ,2BAAY,GAAG,IAAI,GAAG,CAAC;IAC7C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;CAC5E,CAAC,CAAC"}
@@ -9,16 +9,31 @@
9
9
  * Audio arrives as response.audio.delta base64-encoded chunks.
10
10
  */
11
11
  import type { IStreamingTTS, StreamingTTSSession, StreamingTTSConfig } from '../types.js';
12
+ import { type HealthyProvider, type HealthCheckResult, type ProviderCapabilities } from '../HealthyProvider.js';
12
13
  export interface OpenAIRealtimeTTSConfig {
13
14
  apiKey: string;
14
15
  model?: string;
15
16
  baseUrl?: string;
17
+ /** Chain priority. Lower values are tried first. @default 20 */
18
+ priority?: number;
19
+ /** Optional capability overrides. */
20
+ capabilities?: Partial<ProviderCapabilities>;
21
+ /** Injectable health probe for tests. */
22
+ healthProbe?: (apiKey: string) => Promise<{
23
+ ok: boolean;
24
+ status: number;
25
+ latencyMs: number;
26
+ }>;
16
27
  }
17
- export declare class OpenAIRealtimeTTS implements IStreamingTTS {
28
+ export declare class OpenAIRealtimeTTS implements IStreamingTTS, HealthyProvider {
18
29
  readonly providerId = "openai-realtime";
30
+ readonly priority: number;
31
+ readonly capabilities: ProviderCapabilities;
19
32
  private readonly config;
20
33
  private readonly keyPool;
34
+ private readonly healthProbe;
21
35
  constructor(config: OpenAIRealtimeTTSConfig);
36
+ healthCheck(): Promise<HealthCheckResult>;
22
37
  startSession(config?: StreamingTTSConfig): Promise<StreamingTTSSession>;
23
38
  }
24
39
  //# sourceMappingURL=OpenAIRealtimeTTS.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIRealtimeTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIRealtimeTTS.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiID,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,UAAU,qBAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAEzB,MAAM,EAAE,uBAAuB;IAKrC,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAM9E"}
1
+ {"version":3,"file":"OpenAIRealtimeTTS.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIRealtimeTTS.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAY/B,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,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;AAiID,qBAAa,iBAAkB,YAAW,aAAa,EAAE,eAAe;IACtE,QAAQ,CAAC,UAAU,qBAAqB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsD;gBAEtE,MAAM,EAAE,uBAAuB;IAcrC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA6BzC,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAM9E"}
@@ -11,6 +11,16 @@
11
11
  import { EventEmitter } from 'node:events';
12
12
  import WebSocket from 'ws';
13
13
  import { ApiKeyPool } from '../../core/providers/ApiKeyPool.js';
14
+ import { defaultCapabilities, } from '../HealthyProvider.js';
15
+ import { VoicePipelineError } from '../VoicePipelineError.js';
16
+ async function defaultOpenAIProbe(apiKey) {
17
+ const start = Date.now();
18
+ const res = await fetch('https://api.openai.com/v1/models', {
19
+ headers: { Authorization: `Bearer ${apiKey}` },
20
+ signal: AbortSignal.timeout(1000),
21
+ });
22
+ return { ok: res.ok, status: res.status, latencyMs: Date.now() - start };
23
+ }
14
24
  class OpenAIRealtimeTTSSession extends EventEmitter {
15
25
  constructor(config, sessionConfig) {
16
26
  super();
@@ -129,6 +139,42 @@ export class OpenAIRealtimeTTS {
129
139
  this.providerId = 'openai-realtime';
130
140
  this.config = config;
131
141
  this.keyPool = new ApiKeyPool(config.apiKey);
142
+ this.priority = config.priority ?? 20;
143
+ this.capabilities = defaultCapabilities({
144
+ languages: ['*'],
145
+ streaming: true,
146
+ costTier: 'premium',
147
+ latencyClass: 'realtime',
148
+ ...(config.capabilities ?? {}),
149
+ });
150
+ this.healthProbe = config.healthProbe ?? defaultOpenAIProbe;
151
+ }
152
+ async healthCheck() {
153
+ if (!this.keyPool.hasKeys) {
154
+ return { ok: false, error: { class: 'auth', message: 'no api key available' } };
155
+ }
156
+ const key = this.keyPool.next();
157
+ try {
158
+ const res = await this.healthProbe(key);
159
+ if (res.ok)
160
+ return { ok: true, latencyMs: res.latencyMs };
161
+ const classified = VoicePipelineError.classifyError(new Error(`HTTP ${res.status}`), { kind: 'tts', provider: this.providerId });
162
+ return {
163
+ ok: false,
164
+ latencyMs: res.latencyMs,
165
+ error: { class: classified.errorClass, message: `HTTP ${res.status}` },
166
+ };
167
+ }
168
+ catch (err) {
169
+ const classified = VoicePipelineError.classifyError(err, {
170
+ kind: 'tts',
171
+ provider: this.providerId,
172
+ });
173
+ return {
174
+ ok: false,
175
+ error: { class: classified.errorClass, message: classified.message },
176
+ };
177
+ }
132
178
  }
133
179
  async startSession(config) {
134
180
  const resolvedConfig = { ...this.config, apiKey: this.keyPool.next() };
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIRealtimeTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIRealtimeTTS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAIRealtimeTTS.js","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/OpenAIRealtimeTTS.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @module voice-pipeline/providers/StreamingSTTChain
3
+ *
4
+ * Priority-ordered fallback wrapper around multiple `IStreamingSTT`
5
+ * providers. On `startSession()` the chain tries providers in priority
6
+ * order; the first one whose `startSession()` resolves wins.
7
+ * Init-failure classification records to the circuit breaker so future
8
+ * sessions skip recently-tripped providers without the retry-latency
9
+ * penalty.
10
+ *
11
+ * This file implements Layer 2 of the resilience plan (init-time
12
+ * fallback). Layer 3 (mid-utterance failover via ring buffer) is added
13
+ * in a later task and plugs into the `wrapSession` seam exposed here.
14
+ */
15
+ import type { IStreamingSTT, StreamingSTTSession, StreamingSTTConfig } from '../types.js';
16
+ import type { HealthyProvider } from '../HealthyProvider.js';
17
+ import { type HealthErrorClass } from '../VoicePipelineError.js';
18
+ import type { CircuitBreaker } from '../CircuitBreaker.js';
19
+ import type { VoiceMetricsReporter } from '../VoiceMetricsReporter.js';
20
+ export interface ProviderSelectedEvent {
21
+ kind: 'stt' | 'tts';
22
+ providerId: string;
23
+ attempt: number;
24
+ }
25
+ export interface ProviderFailedEvent {
26
+ kind: 'stt' | 'tts';
27
+ providerId: string;
28
+ errorClass: HealthErrorClass;
29
+ message: string;
30
+ }
31
+ export interface ProviderFailoverEvent {
32
+ kind: 'stt' | 'tts';
33
+ from: string;
34
+ to: string;
35
+ reason: HealthErrorClass;
36
+ lostMs: number;
37
+ }
38
+ export interface StreamingSTTChainOptions {
39
+ breaker?: CircuitBreaker;
40
+ metrics?: VoiceMetricsReporter;
41
+ onProviderSelected?: (event: ProviderSelectedEvent) => void;
42
+ onProviderFailed?: (event: ProviderFailedEvent) => void;
43
+ onProviderFailover?: (event: ProviderFailoverEvent) => void;
44
+ /** When true, the chain tracks audio via a ring buffer and re-routes to
45
+ * the next backup on mid-session failure. Default: false. */
46
+ enableMidUtteranceFailover?: boolean;
47
+ /** Ring buffer capacity in ms for mid-utterance replay. Default 3000. */
48
+ ringBufferCapacityMs?: number;
49
+ /** Don't replay audio fragments shorter than this — just advance the
50
+ * next utterance to the backup. Default 400. */
51
+ minReplayMs?: number;
52
+ }
53
+ type STTProvider = IStreamingSTT & HealthyProvider;
54
+ export declare class StreamingSTTChain implements IStreamingSTT {
55
+ readonly providerId = "chain";
56
+ readonly isStreaming = false;
57
+ private readonly _providers;
58
+ private readonly opts;
59
+ private activeProviderId?;
60
+ constructor(providers: STTProvider[], opts?: StreamingSTTChainOptions);
61
+ /** Providers in priority order (primary first). Exposed for
62
+ * introspection by host apps and tests. */
63
+ get providers(): readonly STTProvider[];
64
+ get currentProviderId(): string | undefined;
65
+ startSession(config?: StreamingSTTConfig): Promise<StreamingSTTSession>;
66
+ private filterCandidates;
67
+ /**
68
+ * Wraps the session returned by a healthy provider. In init-time-only
69
+ * mode (enableMidUtteranceFailover=false) this is a pass-through. In
70
+ * failover mode the session is replaced with a facade that tees audio
71
+ * into a ring buffer, dedupes transcripts across providers, and on
72
+ * session error re-routes to the next candidate.
73
+ */
74
+ private wrapSession;
75
+ private emitMetric;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=StreamingSTTChain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamingSTTChain.d.ts","sourceRoot":"","sources":["../../../src/voice-pipeline/providers/StreamingSTTChain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D;kEAC8D;IAC9D,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;qDACiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;AAEnD,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,SAAS,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,wBAA6B;IAQzE;gDAC4C;IAC5C,IAAI,SAAS,IAAI,SAAS,WAAW,EAAE,CAEtC;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAEK,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6D7E,OAAO,CAAC,gBAAgB;IAOxB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IA+InB,OAAO,CAAC,UAAU;CAGnB"}