@speech-sdk/core 0.8.3-alpha → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +52 -1
  2. package/dist/apply-speed.d.ts +19 -0
  3. package/dist/apply-speed.d.ts.map +1 -0
  4. package/dist/apply-speed.js +49 -0
  5. package/dist/apply-speed.js.map +1 -0
  6. package/dist/captions.d.ts.map +1 -1
  7. package/dist/captions.js +2 -3
  8. package/dist/captions.js.map +1 -1
  9. package/dist/concurrency.d.ts +6 -0
  10. package/dist/concurrency.d.ts.map +1 -0
  11. package/dist/concurrency.js +59 -0
  12. package/dist/concurrency.js.map +1 -0
  13. package/dist/conversation/dispatch.d.ts +1 -0
  14. package/dist/conversation/dispatch.d.ts.map +1 -1
  15. package/dist/conversation/dispatch.js +2 -2
  16. package/dist/conversation/dispatch.js.map +1 -1
  17. package/dist/conversation/stitch.d.ts +4 -0
  18. package/dist/conversation/stitch.d.ts.map +1 -1
  19. package/dist/conversation/stitch.js +15 -20
  20. package/dist/conversation/stitch.js.map +1 -1
  21. package/dist/conversation/types.d.ts +8 -2
  22. package/dist/conversation/types.d.ts.map +1 -1
  23. package/dist/errors.d.ts +9 -0
  24. package/dist/errors.d.ts.map +1 -1
  25. package/dist/errors.js +20 -0
  26. package/dist/errors.js.map +1 -1
  27. package/dist/generate-conversation.d.ts +2 -2
  28. package/dist/generate-conversation.d.ts.map +1 -1
  29. package/dist/generate-conversation.js +201 -60
  30. package/dist/generate-conversation.js.map +1 -1
  31. package/dist/generate-speech.d.ts +2 -14
  32. package/dist/generate-speech.d.ts.map +1 -1
  33. package/dist/generate-speech.js +285 -69
  34. package/dist/generate-speech.js.map +1 -1
  35. package/dist/index.d.ts +4 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/plugins/index.d.ts +3 -0
  40. package/dist/plugins/index.d.ts.map +1 -0
  41. package/dist/plugins/index.js +3 -0
  42. package/dist/plugins/index.js.map +1 -0
  43. package/dist/plugins/time-stretch/bytes.d.ts +3 -0
  44. package/dist/plugins/time-stretch/bytes.d.ts.map +1 -0
  45. package/dist/plugins/time-stretch/bytes.js +22 -0
  46. package/dist/plugins/time-stretch/bytes.js.map +1 -0
  47. package/dist/plugins/time-stretch/fallback.d.ts +2 -0
  48. package/dist/plugins/time-stretch/fallback.d.ts.map +1 -0
  49. package/dist/plugins/time-stretch/fallback.js +27 -0
  50. package/dist/plugins/time-stretch/fallback.js.map +1 -0
  51. package/dist/plugins/time-stretch/index.d.ts +10 -0
  52. package/dist/plugins/time-stretch/index.d.ts.map +1 -0
  53. package/dist/plugins/time-stretch/index.js +22 -0
  54. package/dist/plugins/time-stretch/index.js.map +1 -0
  55. package/dist/plugins/time-stretch/int16.d.ts +5 -0
  56. package/dist/plugins/time-stretch/int16.d.ts.map +1 -0
  57. package/dist/plugins/time-stretch/int16.js +33 -0
  58. package/dist/plugins/time-stretch/int16.js.map +1 -0
  59. package/dist/plugins/time-stretch/validate.d.ts +9 -0
  60. package/dist/plugins/time-stretch/validate.d.ts.map +1 -0
  61. package/dist/plugins/time-stretch/validate.js +93 -0
  62. package/dist/plugins/time-stretch/validate.js.map +1 -0
  63. package/dist/plugins/time-stretch/wsola.d.ts +3 -0
  64. package/dist/plugins/time-stretch/wsola.d.ts.map +1 -0
  65. package/dist/plugins/time-stretch/wsola.js +154 -0
  66. package/dist/plugins/time-stretch/wsola.js.map +1 -0
  67. package/dist/pronunciations/errors.d.ts +5 -0
  68. package/dist/pronunciations/errors.d.ts.map +1 -0
  69. package/dist/pronunciations/errors.js +8 -0
  70. package/dist/pronunciations/errors.js.map +1 -0
  71. package/dist/pronunciations/index.d.ts +5 -0
  72. package/dist/pronunciations/index.d.ts.map +1 -0
  73. package/dist/pronunciations/index.js +5 -0
  74. package/dist/pronunciations/index.js.map +1 -0
  75. package/dist/pronunciations/inverse-align.d.ts +4 -0
  76. package/dist/pronunciations/inverse-align.d.ts.map +1 -0
  77. package/dist/pronunciations/inverse-align.js +54 -0
  78. package/dist/pronunciations/inverse-align.js.map +1 -0
  79. package/dist/pronunciations/merge.d.ts +4 -0
  80. package/dist/pronunciations/merge.d.ts.map +1 -0
  81. package/dist/pronunciations/merge.js +13 -0
  82. package/dist/pronunciations/merge.js.map +1 -0
  83. package/dist/pronunciations/substitute.d.ts +6 -0
  84. package/dist/pronunciations/substitute.d.ts.map +1 -0
  85. package/dist/pronunciations/substitute.js +67 -0
  86. package/dist/pronunciations/substitute.js.map +1 -0
  87. package/dist/pronunciations/types.d.ts +18 -0
  88. package/dist/pronunciations/types.d.ts.map +1 -0
  89. package/dist/pronunciations/types.js +2 -0
  90. package/dist/pronunciations/types.js.map +1 -0
  91. package/dist/pronunciations/validate.d.ts +3 -0
  92. package/dist/pronunciations/validate.d.ts.map +1 -0
  93. package/dist/pronunciations/validate.js +26 -0
  94. package/dist/pronunciations/validate.js.map +1 -0
  95. package/dist/provider-utils.d.ts +1 -0
  96. package/dist/provider-utils.d.ts.map +1 -1
  97. package/dist/provider-utils.js +26 -0
  98. package/dist/provider-utils.js.map +1 -1
  99. package/dist/providers/deepgram/index.d.ts.map +1 -1
  100. package/dist/providers/deepgram/index.js +1 -0
  101. package/dist/providers/deepgram/index.js.map +1 -1
  102. package/dist/providers/elevenlabs/index.d.ts.map +1 -1
  103. package/dist/providers/elevenlabs/index.js +4 -0
  104. package/dist/providers/elevenlabs/index.js.map +1 -1
  105. package/dist/providers/fal/index.d.ts.map +1 -1
  106. package/dist/providers/fal/index.js +1 -0
  107. package/dist/providers/fal/index.js.map +1 -1
  108. package/dist/providers/gateway/index.d.ts +11 -0
  109. package/dist/providers/gateway/index.d.ts.map +1 -1
  110. package/dist/providers/gateway/index.js +25 -0
  111. package/dist/providers/gateway/index.js.map +1 -1
  112. package/dist/providers/hume/index.d.ts.map +1 -1
  113. package/dist/providers/hume/index.js +2 -0
  114. package/dist/providers/hume/index.js.map +1 -1
  115. package/dist/providers/inworld/index.d.ts.map +1 -1
  116. package/dist/providers/inworld/index.js +2 -0
  117. package/dist/providers/inworld/index.js.map +1 -1
  118. package/dist/providers/openai/index.d.ts.map +1 -1
  119. package/dist/providers/openai/index.js +3 -0
  120. package/dist/providers/openai/index.js.map +1 -1
  121. package/dist/providers/xai/index.d.ts.map +1 -1
  122. package/dist/providers/xai/index.js +1 -0
  123. package/dist/providers/xai/index.js.map +1 -1
  124. package/dist/retry-options.d.ts +6 -0
  125. package/dist/retry-options.d.ts.map +1 -0
  126. package/dist/retry-options.js +48 -0
  127. package/dist/retry-options.js.map +1 -0
  128. package/dist/sentence-boundaries.d.ts +3 -0
  129. package/dist/sentence-boundaries.d.ts.map +1 -0
  130. package/dist/sentence-boundaries.js +3 -0
  131. package/dist/sentence-boundaries.js.map +1 -0
  132. package/dist/speech-provider.d.ts +2 -0
  133. package/dist/speech-provider.d.ts.map +1 -1
  134. package/dist/speech-provider.js +4 -0
  135. package/dist/speech-provider.js.map +1 -1
  136. package/dist/stream-speech.d.ts +5 -2
  137. package/dist/stream-speech.d.ts.map +1 -1
  138. package/dist/stream-speech.js +38 -21
  139. package/dist/stream-speech.js.map +1 -1
  140. package/dist/text-chunker.d.ts +13 -0
  141. package/dist/text-chunker.d.ts.map +1 -0
  142. package/dist/text-chunker.js +194 -0
  143. package/dist/text-chunker.js.map +1 -0
  144. package/dist/types.d.ts +9 -2
  145. package/dist/types.d.ts.map +1 -1
  146. package/package.json +10 -2
@@ -1,36 +1,66 @@
1
1
  import pRetry from "p-retry";
2
+ import { applySpeedToAudio, isSpeedActive, scaleTimestamps, validateSpeed, } from "./apply-speed.js";
2
3
  import { computeAudioDuration } from "./audio-duration.js";
3
4
  import { applyOptionalOutputConversion, validateOutput, } from "./audio-output.js";
4
5
  import { detectAudioTags, stripAudioTags } from "./audio-tags.js";
6
+ import { mapWithConcurrency, resolveMaxConcurrency } from "./concurrency.js";
5
7
  import { getDefaultSTTFallback } from "./default-stt-fallback.js";
6
8
  import { deriveTimestampsViaSTT } from "./derive-timestamps.js";
7
- import { ApiError, NoSpeechGeneratedError, OutputConversionUnsupportedError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
9
+ import { assertGatewayForModerationRulesetId, NoSpeechGeneratedError, OutputConversionUnsupportedError, TextChunkingUnsupportedError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
8
10
  import { debug } from "./logger.js";
9
- import { isRetriableApiError } from "./provider-utils.js";
11
+ import { inverseAlign } from "./pronunciations/inverse-align.js";
12
+ import { mergeRules } from "./pronunciations/merge.js";
13
+ import { substitute } from "./pronunciations/substitute.js";
14
+ import { validatePronunciationsInput } from "./pronunciations/validate.js";
10
15
  import { resolveModel } from "./resolve-provider.js";
11
- import { isSpeechGatewayModel, modelDeclaresNativeTimestamps, } from "./speech-provider.js";
16
+ import { buildRetryOptions } from "./retry-options.js";
17
+ import { isSpeechGatewayModel, modelDeclaresNativeTimestamps, modelMaxInputChars, } from "./speech-provider.js";
12
18
  import { DefaultGeneratedAudioFile } from "./speech-result.js";
19
+ import { resolveMaxInputChars, splitTextByMaxChars } from "./text-chunker.js";
20
+ const CHUNK_STITCH_SAMPLE_RATE = 24_000;
13
21
  export async function generateSpeech(options) {
14
- const { model, voice, abortSignal, headers, volumeDbfs, timestamps = false, } = options;
22
+ const { model, voice, abortSignal, headers, volumeDbfs, timestamps = false, moderationRulesetId, speed, } = options;
15
23
  const maxRetries = options.maxRetries ?? 2;
16
24
  validateOutput(options.output);
25
+ validateSpeed(speed);
17
26
  const resolved = resolveModel(model, { apiKey: options.apiKey });
18
27
  const modelIdentifier = `${resolved.provider.id}/${resolved.modelId}`;
19
28
  const isGateway = isSpeechGatewayModel(resolved);
20
- const providerOptions = resolveProviderOptionsForLocalDecoding({
29
+ validatePronunciationsInput(options.pronunciations, isGateway);
30
+ assertGatewayForModerationRulesetId(moderationRulesetId, isGateway);
31
+ const { text: strippedText, warnings } = preprocessText(resolved, options.text, modelIdentifier);
32
+ if (strippedText.trim().length === 0) {
33
+ throw new NoSpeechGeneratedError(warnings.length > 0
34
+ ? `Text is empty after removing unsupported audio tags for ${modelIdentifier}.`
35
+ : "Text must not be empty.");
36
+ }
37
+ let textToSend = strippedText;
38
+ let pronunciationEdits = [];
39
+ if (!isGateway && options.pronunciations?.rules?.length) {
40
+ const ruleMap = mergeRules(options.pronunciations.rules);
41
+ const subbed = substitute(strippedText, ruleMap);
42
+ textToSend = subbed.text;
43
+ pronunciationEdits = subbed.edits;
44
+ }
45
+ const { maxInputChars, shouldChunk, textChunks } = resolveTextChunks({
46
+ resolved,
47
+ modelIdentifier,
48
+ isGateway,
49
+ processedText: textToSend,
50
+ userMaxInputChars: options.maxInputChars,
51
+ });
52
+ const { providerOptions, stitchOptions } = resolveProviderOptionsForLocalDecoding({
21
53
  resolved,
22
54
  isGateway,
23
55
  modelIdentifier,
24
56
  volumeDbfs,
25
57
  output: options.output,
26
58
  callerOptions: options.providerOptions,
59
+ maxInputChars,
60
+ shouldChunk,
61
+ // Time-stretching needs decodable PCM/WAV input — request the stitch wire format from the provider.
62
+ needsDecodableInput: !isGateway && isSpeedActive(speed),
27
63
  });
28
- const { text: processedText, warnings } = preprocessText(resolved, options.text, modelIdentifier);
29
- if (processedText.trim().length === 0) {
30
- throw new NoSpeechGeneratedError(warnings.length > 0
31
- ? `Text is empty after removing unsupported audio tags for ${modelIdentifier}.`
32
- : "Text must not be empty.");
33
- }
34
64
  const hasNativeTimestamps = modelDeclaresNativeTimestamps(resolved);
35
65
  const shouldRequestNative = timestamps && (hasNativeTimestamps || isGateway);
36
66
  const effectiveFallback = !timestamps || shouldRequestNative
@@ -44,69 +74,76 @@ export async function generateSpeech(options) {
44
74
  effectiveFallback,
45
75
  });
46
76
  const startTime = performance.now();
47
- const result = await pRetry(() => isGateway
48
- ? resolved.provider.generate({
49
- modelId: resolved.modelId,
50
- text: processedText,
51
- voice: voice,
77
+ const result = shouldChunk
78
+ ? await generateChunkedSpeech({
79
+ resolved,
80
+ modelIdentifier,
81
+ textChunks,
82
+ voice,
52
83
  providerOptions,
84
+ stitchOptions,
85
+ maxInputChars: maxInputChars ?? textToSend.length,
86
+ maxRetries,
87
+ maxConcurrency: resolveMaxConcurrency(options.maxConcurrency),
53
88
  abortSignal,
54
89
  headers,
55
90
  includeTimestamps: shouldRequestNative,
56
- volumeDbfs,
57
- output: options.output,
58
91
  })
59
- : resolved.provider.generate({
60
- modelId: resolved.modelId,
61
- text: processedText,
92
+ : await generateProviderSpeech({
93
+ resolved,
94
+ text: textToSend,
62
95
  voice,
63
96
  providerOptions,
97
+ maxRetries,
64
98
  abortSignal,
65
99
  headers,
66
100
  includeTimestamps: shouldRequestNative,
67
- }), {
68
- retries: maxRetries,
69
- signal: abortSignal,
70
- shouldRetry: ({ error }) => {
71
- if (error instanceof ApiError && !isRetriableApiError(error)) {
72
- return false;
73
- }
74
- return true;
75
- },
76
- });
101
+ volumeDbfs,
102
+ output: options.output,
103
+ pronunciations: options.pronunciations,
104
+ moderationRulesetId,
105
+ speed,
106
+ });
77
107
  const latencyMs = Math.round(performance.now() - startTime);
78
108
  const audioData = result.audio;
79
109
  if (audioData.length === 0) {
80
110
  throw new NoSpeechGeneratedError();
81
111
  }
82
- const { bytes: outputBytes, mediaType: outputMediaType } = isGateway
83
- ? { bytes: audioData, mediaType: result.mediaType }
84
- : await applyLocalAudioPostProcessing({
85
- audio: audioData,
86
- mediaType: result.mediaType,
87
- volumeDbfs,
88
- output: options.output,
89
- });
112
+ // Gateway already applied speed server-side; only apply locally for direct paths.
113
+ const localSpeed = isGateway ? undefined : speed;
114
+ const stretched = await finalizeSpeechAudio({
115
+ audioData,
116
+ resultMediaType: result.mediaType,
117
+ isGateway,
118
+ volumeDbfs,
119
+ output: options.output,
120
+ speed: localSpeed,
121
+ });
90
122
  const audio = new DefaultGeneratedAudioFile({
91
- data: outputBytes,
92
- mediaType: outputMediaType,
123
+ data: stretched.audio,
124
+ mediaType: stretched.mediaType,
93
125
  });
94
126
  const [computedDuration, resolvedTimestamps] = await Promise.all([
95
- computeAudioDuration(audio.uint8Array, outputMediaType),
127
+ computeAudioDuration(audio.uint8Array, stretched.mediaType),
96
128
  resolveTimestamps({
97
129
  timestamps,
98
130
  modelIdentifier,
99
131
  resolved,
100
- resultTimestamps: result.timestamps,
132
+ // Native timestamps reference pre-stretch timing on direct paths; gateway already returns scaled timestamps.
133
+ resultTimestamps: maybeScale(result.timestamps, localSpeed),
101
134
  audio: audio.uint8Array,
102
- mediaType: outputMediaType,
135
+ mediaType: stretched.mediaType,
103
136
  abortSignal,
104
137
  }),
105
138
  ]);
106
- const audioDurationMs = computedDuration ?? result.audioDurationMs;
139
+ const audioDurationMs = computedDuration ??
140
+ maybeScaleDurationMs(result.audioDurationMs, localSpeed);
141
+ const finalTimestamps = resolvedTimestamps && pronunciationEdits.length > 0
142
+ ? inverseAlign(resolvedTimestamps, textToSend, pronunciationEdits)
143
+ : resolvedTimestamps;
107
144
  const metadata = {
108
145
  latencyMs,
109
- inputChars: processedText.length,
146
+ inputChars: options.text.length,
110
147
  ...(audioDurationMs != null && { audioDurationMs }),
111
148
  };
112
149
  return {
@@ -114,13 +151,144 @@ export async function generateSpeech(options) {
114
151
  metadata,
115
152
  providerMetadata: result.providerMetadata,
116
153
  warnings: mergeWarnings(warnings, result.warnings),
117
- timestamps: resolvedTimestamps,
154
+ timestamps: finalTimestamps,
118
155
  };
119
156
  }
120
157
  function mergeWarnings(preprocessingWarnings, providerWarnings) {
121
158
  const merged = [...preprocessingWarnings, ...(providerWarnings ?? [])];
122
159
  return merged.length > 0 ? merged : undefined;
123
160
  }
161
+ function resolveTextChunks(args) {
162
+ if (args.isGateway) {
163
+ if (args.userMaxInputChars != null) {
164
+ debug(`${args.modelIdentifier}: maxInputChars is not applied on the speech gateway path; the gateway server owns request processing.`);
165
+ }
166
+ return {
167
+ maxInputChars: undefined,
168
+ shouldChunk: false,
169
+ textChunks: [args.processedText],
170
+ };
171
+ }
172
+ const maxInputCharsResolution = resolveMaxInputChars({
173
+ providerMaxInputChars: modelMaxInputChars(args.resolved),
174
+ userMaxInputChars: args.userMaxInputChars,
175
+ });
176
+ if (maxInputCharsResolution.userExceedsProvider) {
177
+ debug(`${args.modelIdentifier}: caller maxInputChars=${maxInputCharsResolution.userMaxInputChars} exceeds provider maxInputChars=${maxInputCharsResolution.providerMaxInputChars}; the provider may reject oversized chunks.`);
178
+ }
179
+ const maxInputChars = maxInputCharsResolution.value;
180
+ const textChunks = maxInputChars == null
181
+ ? [args.processedText]
182
+ : splitTextByMaxChars(args.processedText, maxInputChars);
183
+ const shouldChunk = textChunks.length > 1;
184
+ if (shouldChunk) {
185
+ const source = maxInputCharsResolution.source === "user"
186
+ ? "caller maxInputChars"
187
+ : "model maxInputChars";
188
+ debug(`${args.modelIdentifier}: split ${args.processedText.length} input chars into ${textChunks.length} chunks using ${source}=${maxInputChars}.`);
189
+ }
190
+ return { maxInputChars, shouldChunk, textChunks };
191
+ }
192
+ async function generateProviderSpeech(args) {
193
+ return await pRetry(() => isSpeechGatewayModel(args.resolved)
194
+ ? args.resolved.provider.generate({
195
+ modelId: args.resolved.modelId,
196
+ text: args.text,
197
+ voice: args.voice,
198
+ providerOptions: args.providerOptions,
199
+ abortSignal: args.abortSignal,
200
+ headers: args.headers,
201
+ includeTimestamps: args.includeTimestamps,
202
+ volumeDbfs: args.volumeDbfs,
203
+ output: args.output,
204
+ pronunciations: args.pronunciations,
205
+ moderationRulesetId: args.moderationRulesetId,
206
+ speed: args.speed,
207
+ })
208
+ : args.resolved.provider.generate({
209
+ modelId: args.resolved.modelId,
210
+ text: args.text,
211
+ voice: args.voice,
212
+ providerOptions: args.providerOptions,
213
+ abortSignal: args.abortSignal,
214
+ headers: args.headers,
215
+ includeTimestamps: args.includeTimestamps,
216
+ }), buildRetryOptions({
217
+ maxRetries: args.maxRetries,
218
+ abortSignal: args.abortSignal,
219
+ }));
220
+ }
221
+ async function generateChunkedSpeech(args) {
222
+ if (!args.stitchOptions) {
223
+ throw new TextChunkingUnsupportedError(args.modelIdentifier, args.maxInputChars);
224
+ }
225
+ const stitchOptions = args.stitchOptions;
226
+ const { decodeAudioToPcm16 } = await import("./audio-decode.js");
227
+ const { concatPcmToWav } = await import("./conversation/pcm-concat.js");
228
+ const perChunk = await mapWithConcurrency(args.textChunks, args.maxConcurrency, async (text, _i, signal) => {
229
+ const result = await generateProviderSpeech({
230
+ resolved: args.resolved,
231
+ text,
232
+ voice: args.voice,
233
+ providerOptions: args.providerOptions,
234
+ maxRetries: args.maxRetries,
235
+ abortSignal: signal,
236
+ headers: args.headers,
237
+ includeTimestamps: args.includeTimestamps,
238
+ });
239
+ const audio = new DefaultGeneratedAudioFile({
240
+ data: result.audio,
241
+ mediaType: result.mediaType,
242
+ }).uint8Array;
243
+ if (audio.length === 0) {
244
+ throw new NoSpeechGeneratedError();
245
+ }
246
+ const resultMediaType = result.mediaType.toLowerCase();
247
+ const decodeMediaType = resultMediaType.startsWith("audio/wav") ||
248
+ resultMediaType.startsWith("audio/x-wav")
249
+ ? result.mediaType
250
+ : stitchOptions.mediaType;
251
+ const segment = await decodeAudioToPcm16(audio, decodeMediaType);
252
+ return { result, segment };
253
+ }, { signal: args.abortSignal });
254
+ const segments = perChunk.map((c) => c.segment);
255
+ const audio = await concatPcmToWav(segments, {
256
+ gapMs: 0,
257
+ targetSampleRate: CHUNK_STITCH_SAMPLE_RATE,
258
+ });
259
+ const durationSeconds = segments.reduce((sum, segment) => sum + segment.pcm.length / segment.sampleRate, 0);
260
+ const warnings = perChunk.flatMap((c) => c.result.warnings ?? []);
261
+ const providerMetadataChunks = perChunk.map((c) => c.result.providerMetadata);
262
+ const providerMetadata = providerMetadataChunks.some((m) => m != null)
263
+ ? { chunks: providerMetadataChunks }
264
+ : undefined;
265
+ return {
266
+ audio,
267
+ audioDurationMs: Math.round(durationSeconds * 1000),
268
+ mediaType: "audio/wav",
269
+ providerMetadata,
270
+ timestamps: mergeChunkTimestamps(perChunk),
271
+ warnings: warnings.length > 0 ? warnings : undefined,
272
+ };
273
+ }
274
+ function mergeChunkTimestamps(perChunk) {
275
+ if (perChunk.some((c) => !c.result.timestamps?.length)) {
276
+ return;
277
+ }
278
+ const timestamps = [];
279
+ let offset = 0;
280
+ for (const chunk of perChunk) {
281
+ for (const word of chunk.result.timestamps ?? []) {
282
+ timestamps.push({
283
+ text: word.text,
284
+ start: word.start + offset,
285
+ end: word.end + offset,
286
+ });
287
+ }
288
+ offset += chunk.segment.pcm.length / chunk.segment.sampleRate;
289
+ }
290
+ return timestamps;
291
+ }
124
292
  async function resolveTimestamps(args) {
125
293
  if (!args.timestamps) {
126
294
  return;
@@ -145,37 +313,49 @@ async function resolveTimestamps(args) {
145
313
  }
146
314
  function resolveProviderOptionsForLocalDecoding(args) {
147
315
  if (args.isGateway) {
148
- return args.callerOptions;
149
- }
150
- // volumeDbfs needs a known-decodable wire format to decode→re-level→re-encode,
151
- // so SDK-required keys win over caller overrides — otherwise a stray
152
- // override would silently violate the normalization contract.
153
- if (args.volumeDbfs != null) {
154
- const stitchOpts = args.resolved.provider.getStitchOptions?.(args.resolved.modelId);
155
- if (!stitchOpts) {
156
- throw new VolumeAdjustmentUnsupportedError(args.modelIdentifier);
157
- }
158
- return { ...args.callerOptions, ...stitchOpts.providerOptions };
316
+ return { providerOptions: args.callerOptions, stitchOptions: undefined };
159
317
  }
160
- if (args.output != null) {
161
- // Native path: provider produces the requested format directly, so caller's
162
- // providerOptions are an explicit escape hatch and win over our defaults
163
- // (e.g. tweaking bitrate/sample_rate). Post-processing reads the actual
164
- // response mediaType and adapts.
318
+ const needsStitchWireFormat = args.volumeDbfs != null || args.shouldChunk || args.needsDecodableInput;
319
+ if (!needsStitchWireFormat && args.output != null) {
165
320
  const native = args.resolved.provider.resolveOutputFormat?.(args.resolved.modelId, args.output);
166
321
  if (native) {
167
- return { ...native.providerOptions, ...args.callerOptions };
322
+ return {
323
+ providerOptions: { ...native.providerOptions, ...args.callerOptions },
324
+ stitchOptions: undefined,
325
+ };
168
326
  }
169
- // Stitch fallback: the SDK MUST decode locally to convert into the
170
- // requested format, so SDK-required keys win — same rationale as the
171
- // volumeDbfs path above.
172
327
  const stitchOpts = args.resolved.provider.getStitchOptions?.(args.resolved.modelId);
173
328
  if (!stitchOpts) {
174
329
  throw new OutputConversionUnsupportedError(args.modelIdentifier);
175
330
  }
176
- return { ...args.callerOptions, ...stitchOpts.providerOptions };
331
+ return {
332
+ providerOptions: {
333
+ ...args.callerOptions,
334
+ ...stitchOpts.providerOptions,
335
+ },
336
+ stitchOptions: stitchOpts,
337
+ };
338
+ }
339
+ if (!needsStitchWireFormat) {
340
+ return { providerOptions: args.callerOptions, stitchOptions: undefined };
177
341
  }
178
- return args.callerOptions;
342
+ const stitchOpts = args.resolved.provider.getStitchOptions?.(args.resolved.modelId);
343
+ if (!stitchOpts) {
344
+ if (args.shouldChunk && args.maxInputChars != null) {
345
+ throw new TextChunkingUnsupportedError(args.modelIdentifier, args.maxInputChars);
346
+ }
347
+ if (args.volumeDbfs != null) {
348
+ throw new VolumeAdjustmentUnsupportedError(args.modelIdentifier);
349
+ }
350
+ throw new OutputConversionUnsupportedError(args.modelIdentifier);
351
+ }
352
+ return {
353
+ providerOptions: {
354
+ ...args.callerOptions,
355
+ ...stitchOpts.providerOptions,
356
+ },
357
+ stitchOptions: stitchOpts,
358
+ };
179
359
  }
180
360
  async function applyLocalAudioPostProcessing(args) {
181
361
  let bytes = args.audio;
@@ -218,6 +398,42 @@ function preprocessText(resolved, rawText, modelIdentifier) {
218
398
  }
219
399
  return { text: rawText, warnings: [] };
220
400
  }
401
+ function maybeScale(timestamps, speed) {
402
+ return isSpeedActive(speed) ? scaleTimestamps(timestamps, speed) : timestamps;
403
+ }
404
+ function maybeScaleDurationMs(durationMs, speed) {
405
+ if (durationMs == null || !isSpeedActive(speed)) {
406
+ return durationMs;
407
+ }
408
+ return Math.round(durationMs / speed);
409
+ }
410
+ async function finalizeSpeechAudio(args) {
411
+ // When speed is active, defer output conversion to applySpeedToAudio — otherwise
412
+ // we'd encode to `output` here and then decode/re-encode in the stretch step,
413
+ // a wasteful round-trip that loses quality on lossy formats.
414
+ const preStretchOutput = isSpeedActive(args.speed) ? undefined : args.output;
415
+ const postProcessed = args.isGateway
416
+ ? { bytes: args.audioData, mediaType: args.resultMediaType }
417
+ : await applyLocalAudioPostProcessing({
418
+ audio: args.audioData,
419
+ mediaType: args.resultMediaType,
420
+ volumeDbfs: args.volumeDbfs,
421
+ output: preStretchOutput,
422
+ });
423
+ const postProcessedBytes = new DefaultGeneratedAudioFile({
424
+ data: postProcessed.bytes,
425
+ mediaType: postProcessed.mediaType,
426
+ }).uint8Array;
427
+ if (!isSpeedActive(args.speed)) {
428
+ return { audio: postProcessedBytes, mediaType: postProcessed.mediaType };
429
+ }
430
+ return await applySpeedToAudio({
431
+ audio: postProcessedBytes,
432
+ mediaType: postProcessed.mediaType,
433
+ speed: args.speed,
434
+ output: args.output,
435
+ });
436
+ }
221
437
  function logTimestampDecision(args) {
222
438
  const { modelIdentifier, enabled, willRequestNative } = args;
223
439
  if (!enabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"generate-speech.js","sourceRoot":"","sources":["../src/generate-speech.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-speech.js","sourceRoot":"","sources":["../src/generate-speech.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,12 @@
1
1
  export type { AudioOutput, AudioOutputFormat } from "./audio-output.js";
2
2
  export { timestampsToCaptions } from "./captions.js";
3
3
  export { ConversationInputError, DialogueConstraintError, StitchUnsupportedError, } from "./conversation/errors.js";
4
- export { ApiError, AudioOutputInputError, GatewayInputError, MissingApiKeyError, NoSpeechGeneratedError, OutputConversionUnsupportedError, SpeechSDKError, StreamingNotSupportedError, TimestampKeyMissingError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
4
+ export { ApiError, AudioOutputInputError, GatewayInputError, MissingApiKeyError, ModerationRulesetIdRequiresGatewayError, NoSpeechGeneratedError, OutputConversionUnsupportedError, SpeechSDKError, StreamingNotSupportedError, TextChunkingUnsupportedError, TimestampKeyMissingError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
5
5
  export { generateConversation } from "./generate-conversation.js";
6
6
  export { generateSpeech } from "./generate-speech.js";
7
+ export { DictionaryIdsRequireGatewayError } from "./pronunciations/errors.js";
8
+ export type { Pronunciation, PronunciationsInput, } from "./pronunciations/types.js";
7
9
  export { streamSpeech } from "./stream-speech.js";
8
10
  export { timestampsToTurns } from "./turns.js";
11
+ export type { GenerateSpeechOptions } from "./types.js";
9
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,cAAc,EACd,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,uCAAuC,EACvC,sBAAsB,EACtB,gCAAgC,EAChC,cAAc,EACd,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,YAAY,EACV,aAAa,EACb,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  // biome-ignore lint/performance/noBarrelFile: public API entry point
2
2
  export { timestampsToCaptions } from "./captions.js";
3
3
  export { ConversationInputError, DialogueConstraintError, StitchUnsupportedError, } from "./conversation/errors.js";
4
- export { ApiError, AudioOutputInputError, GatewayInputError, MissingApiKeyError, NoSpeechGeneratedError, OutputConversionUnsupportedError, SpeechSDKError, StreamingNotSupportedError, TimestampKeyMissingError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
4
+ export { ApiError, AudioOutputInputError, GatewayInputError, MissingApiKeyError, ModerationRulesetIdRequiresGatewayError, NoSpeechGeneratedError, OutputConversionUnsupportedError, SpeechSDKError, StreamingNotSupportedError, TextChunkingUnsupportedError, TimestampKeyMissingError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
5
5
  export { generateConversation } from "./generate-conversation.js";
6
6
  export { generateSpeech } from "./generate-speech.js";
7
+ export { DictionaryIdsRequireGatewayError } from "./pronunciations/errors.js";
7
8
  export { streamSpeech } from "./stream-speech.js";
8
9
  export { timestampsToTurns } from "./turns.js";
9
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,qEAAqE;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,cAAc,EACd,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,qEAAqE;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,uCAAuC,EACvC,sBAAsB,EACtB,gCAAgC,EAChC,cAAc,EACd,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAK9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { TimeStretchInput, TimeStretchOptions, } from "./time-stretch/index.js";
2
+ export { timeStretch } from "./time-stretch/index.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // biome-ignore-all lint/performance/noBarrelFile: public plugins subpath entry point
2
+ export { timeStretch } from "./time-stretch/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAMrF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TimeStretchInput } from "./index.js";
2
+ export declare function normalizeInput(input: TimeStretchInput): Int16Array;
3
+ //# sourceMappingURL=bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../src/plugins/time-stretch/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAWlE"}
@@ -0,0 +1,22 @@
1
+ import { assertSupportedInput, assertValidByteInput } from "./validate.js";
2
+ export function normalizeInput(input) {
3
+ assertSupportedInput(input);
4
+ if (input instanceof Int16Array) {
5
+ return input;
6
+ }
7
+ const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
8
+ assertValidByteInput(bytes);
9
+ return decodeS16le(bytes);
10
+ }
11
+ function decodeS16le(bytes) {
12
+ const output = new Int16Array(bytes.byteLength / 2);
13
+ for (let byteIndex = 0, sampleIndex = 0; byteIndex < bytes.byteLength; byteIndex += 2, sampleIndex += 1) {
14
+ const lo = bytes[byteIndex] ?? 0;
15
+ const hi = bytes[byteIndex + 1] ?? 0;
16
+ // biome-ignore lint/suspicious/noBitwiseOperators: combining s16le bytes into an int16 sample
17
+ const value = lo | (hi << 8);
18
+ output[sampleIndex] = value >= 0x80_00 ? value - 0x1_00_00 : value;
19
+ }
20
+ return output;
21
+ }
22
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../src/plugins/time-stretch/bytes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE3E,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAE5B,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAE1E,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAEpD,KACE,IAAI,SAAS,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAClC,SAAS,GAAG,KAAK,CAAC,UAAU,EAC5B,SAAS,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC,EAChC,CAAC;QACD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,8FAA8F;QAC9F,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function stretchLinear(input: Int16Array, targetLength: number): Int16Array;
2
+ //# sourceMappingURL=fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../../src/plugins/time-stretch/fallback.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,MAAM,GACnB,UAAU,CA+BZ"}
@@ -0,0 +1,27 @@
1
+ import { clampToInt16 } from "./int16.js";
2
+ export function stretchLinear(input, targetLength) {
3
+ const output = new Int16Array(targetLength);
4
+ if (targetLength === 0 || input.length === 0) {
5
+ return output;
6
+ }
7
+ if (input.length === 1) {
8
+ output.fill(input[0] ?? 0);
9
+ return output;
10
+ }
11
+ if (targetLength === 1) {
12
+ output[0] = input[0] ?? 0;
13
+ return output;
14
+ }
15
+ const scale = (input.length - 1) / (targetLength - 1);
16
+ for (let outputIndex = 0; outputIndex < targetLength; outputIndex += 1) {
17
+ const position = outputIndex * scale;
18
+ const leftIndex = Math.floor(position);
19
+ const rightIndex = Math.min(leftIndex + 1, input.length - 1);
20
+ const fraction = position - leftIndex;
21
+ const left = input[leftIndex] ?? 0;
22
+ const right = input[rightIndex] ?? left;
23
+ output[outputIndex] = clampToInt16(left + (right - left) * fraction);
24
+ }
25
+ return output;
26
+ }
27
+ //# sourceMappingURL=fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../../../src/plugins/time-stretch/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,UAAU,aAAa,CAC3B,KAAiB,EACjB,YAAoB;IAEpB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,YAAY,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAEtD,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,YAAY,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;QAExC,MAAM,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}