@speech-sdk/core 0.8.2-alpha → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +56 -3
  2. package/dist/audio-decode.d.ts +7 -0
  3. package/dist/audio-decode.d.ts.map +1 -0
  4. package/dist/audio-decode.js +109 -0
  5. package/dist/audio-decode.js.map +1 -0
  6. package/dist/audio-duration.d.ts.map +1 -1
  7. package/dist/audio-duration.js +3 -12
  8. package/dist/audio-duration.js.map +1 -1
  9. package/dist/audio-output.d.ts.map +1 -1
  10. package/dist/audio-output.js +31 -10
  11. package/dist/audio-output.js.map +1 -1
  12. package/dist/audio-utils.d.ts +2 -0
  13. package/dist/audio-utils.d.ts.map +1 -1
  14. package/dist/audio-utils.js +55 -1
  15. package/dist/audio-utils.js.map +1 -1
  16. package/dist/captions.d.ts.map +1 -1
  17. package/dist/captions.js +2 -3
  18. package/dist/captions.js.map +1 -1
  19. package/dist/conversation/dispatch.d.ts +1 -0
  20. package/dist/conversation/dispatch.d.ts.map +1 -1
  21. package/dist/conversation/dispatch.js +2 -2
  22. package/dist/conversation/dispatch.js.map +1 -1
  23. package/dist/conversation/pcm-concat.d.ts +0 -1
  24. package/dist/conversation/pcm-concat.d.ts.map +1 -1
  25. package/dist/conversation/pcm-concat.js +6 -143
  26. package/dist/conversation/pcm-concat.js.map +1 -1
  27. package/dist/conversation/stitch.d.ts +3 -0
  28. package/dist/conversation/stitch.d.ts.map +1 -1
  29. package/dist/conversation/stitch.js +10 -2
  30. package/dist/conversation/stitch.js.map +1 -1
  31. package/dist/conversation/types.d.ts +6 -2
  32. package/dist/conversation/types.d.ts.map +1 -1
  33. package/dist/encoders/mp3.d.ts.map +1 -1
  34. package/dist/encoders/mp3.js +40 -22
  35. package/dist/encoders/mp3.js.map +1 -1
  36. package/dist/errors.d.ts +9 -0
  37. package/dist/errors.d.ts.map +1 -1
  38. package/dist/errors.js +20 -0
  39. package/dist/errors.js.map +1 -1
  40. package/dist/generate-conversation.d.ts +2 -2
  41. package/dist/generate-conversation.d.ts.map +1 -1
  42. package/dist/generate-conversation.js +131 -44
  43. package/dist/generate-conversation.js.map +1 -1
  44. package/dist/generate-speech.d.ts +2 -14
  45. package/dist/generate-speech.d.ts.map +1 -1
  46. package/dist/generate-speech.js +223 -39
  47. package/dist/generate-speech.js.map +1 -1
  48. package/dist/index.d.ts +4 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +2 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/pronunciations/errors.d.ts +5 -0
  53. package/dist/pronunciations/errors.d.ts.map +1 -0
  54. package/dist/pronunciations/errors.js +8 -0
  55. package/dist/pronunciations/errors.js.map +1 -0
  56. package/dist/pronunciations/index.d.ts +5 -0
  57. package/dist/pronunciations/index.d.ts.map +1 -0
  58. package/dist/pronunciations/index.js +5 -0
  59. package/dist/pronunciations/index.js.map +1 -0
  60. package/dist/pronunciations/inverse-align.d.ts +4 -0
  61. package/dist/pronunciations/inverse-align.d.ts.map +1 -0
  62. package/dist/pronunciations/inverse-align.js +54 -0
  63. package/dist/pronunciations/inverse-align.js.map +1 -0
  64. package/dist/pronunciations/merge.d.ts +4 -0
  65. package/dist/pronunciations/merge.d.ts.map +1 -0
  66. package/dist/pronunciations/merge.js +13 -0
  67. package/dist/pronunciations/merge.js.map +1 -0
  68. package/dist/pronunciations/substitute.d.ts +6 -0
  69. package/dist/pronunciations/substitute.d.ts.map +1 -0
  70. package/dist/pronunciations/substitute.js +67 -0
  71. package/dist/pronunciations/substitute.js.map +1 -0
  72. package/dist/pronunciations/types.d.ts +18 -0
  73. package/dist/pronunciations/types.d.ts.map +1 -0
  74. package/dist/pronunciations/types.js +2 -0
  75. package/dist/pronunciations/types.js.map +1 -0
  76. package/dist/pronunciations/validate.d.ts +3 -0
  77. package/dist/pronunciations/validate.d.ts.map +1 -0
  78. package/dist/pronunciations/validate.js +26 -0
  79. package/dist/pronunciations/validate.js.map +1 -0
  80. package/dist/provider-utils.d.ts +1 -0
  81. package/dist/provider-utils.d.ts.map +1 -1
  82. package/dist/provider-utils.js +26 -0
  83. package/dist/provider-utils.js.map +1 -1
  84. package/dist/providers/cartesia/index.d.ts +22 -0
  85. package/dist/providers/cartesia/index.d.ts.map +1 -1
  86. package/dist/providers/cartesia/index.js +48 -0
  87. package/dist/providers/cartesia/index.js.map +1 -1
  88. package/dist/providers/deepgram/index.d.ts +16 -0
  89. package/dist/providers/deepgram/index.d.ts.map +1 -1
  90. package/dist/providers/deepgram/index.js +35 -0
  91. package/dist/providers/deepgram/index.js.map +1 -1
  92. package/dist/providers/elevenlabs/index.d.ts +7 -0
  93. package/dist/providers/elevenlabs/index.d.ts.map +1 -1
  94. package/dist/providers/elevenlabs/index.js +29 -0
  95. package/dist/providers/elevenlabs/index.js.map +1 -1
  96. package/dist/providers/fal/index.d.ts +5 -3
  97. package/dist/providers/fal/index.d.ts.map +1 -1
  98. package/dist/providers/fal/index.js +14 -7
  99. package/dist/providers/fal/index.js.map +1 -1
  100. package/dist/providers/fish-audio/index.d.ts +7 -0
  101. package/dist/providers/fish-audio/index.d.ts.map +1 -1
  102. package/dist/providers/fish-audio/index.js +24 -0
  103. package/dist/providers/fish-audio/index.js.map +1 -1
  104. package/dist/providers/gateway/index.d.ts +8 -0
  105. package/dist/providers/gateway/index.d.ts.map +1 -1
  106. package/dist/providers/gateway/index.js +18 -0
  107. package/dist/providers/gateway/index.js.map +1 -1
  108. package/dist/providers/google/index.d.ts +5 -0
  109. package/dist/providers/google/index.d.ts.map +1 -1
  110. package/dist/providers/google/index.js +19 -11
  111. package/dist/providers/google/index.js.map +1 -1
  112. package/dist/providers/hume/index.d.ts +9 -0
  113. package/dist/providers/hume/index.d.ts.map +1 -1
  114. package/dist/providers/hume/index.js +26 -0
  115. package/dist/providers/hume/index.js.map +1 -1
  116. package/dist/providers/inworld/index.d.ts +10 -0
  117. package/dist/providers/inworld/index.d.ts.map +1 -1
  118. package/dist/providers/inworld/index.js +34 -8
  119. package/dist/providers/inworld/index.js.map +1 -1
  120. package/dist/providers/mistral/index.d.ts +7 -0
  121. package/dist/providers/mistral/index.d.ts.map +1 -1
  122. package/dist/providers/mistral/index.js +24 -10
  123. package/dist/providers/mistral/index.js.map +1 -1
  124. package/dist/providers/murf/index.d.ts +8 -0
  125. package/dist/providers/murf/index.d.ts.map +1 -1
  126. package/dist/providers/murf/index.js +40 -1
  127. package/dist/providers/murf/index.js.map +1 -1
  128. package/dist/providers/openai/index.d.ts +7 -0
  129. package/dist/providers/openai/index.d.ts.map +1 -1
  130. package/dist/providers/openai/index.js +27 -0
  131. package/dist/providers/openai/index.js.map +1 -1
  132. package/dist/providers/resemble/index.d.ts +14 -0
  133. package/dist/providers/resemble/index.d.ts.map +1 -1
  134. package/dist/providers/resemble/index.js +35 -1
  135. package/dist/providers/resemble/index.js.map +1 -1
  136. package/dist/providers/smallest-ai/index.d.ts +47 -0
  137. package/dist/providers/smallest-ai/index.d.ts.map +1 -0
  138. package/dist/providers/smallest-ai/index.js +107 -0
  139. package/dist/providers/smallest-ai/index.js.map +1 -0
  140. package/dist/providers/xai/index.d.ts +18 -0
  141. package/dist/providers/xai/index.d.ts.map +1 -1
  142. package/dist/providers/xai/index.js +27 -0
  143. package/dist/providers/xai/index.js.map +1 -1
  144. package/dist/providers.d.ts +2 -0
  145. package/dist/providers.d.ts.map +1 -1
  146. package/dist/providers.js +1 -0
  147. package/dist/providers.js.map +1 -1
  148. package/dist/retry-options.d.ts +6 -0
  149. package/dist/retry-options.d.ts.map +1 -0
  150. package/dist/retry-options.js +48 -0
  151. package/dist/retry-options.js.map +1 -0
  152. package/dist/sentence-boundaries.d.ts +3 -0
  153. package/dist/sentence-boundaries.d.ts.map +1 -0
  154. package/dist/sentence-boundaries.js +3 -0
  155. package/dist/sentence-boundaries.js.map +1 -0
  156. package/dist/speech-provider.d.ts +17 -0
  157. package/dist/speech-provider.d.ts.map +1 -1
  158. package/dist/speech-provider.js +4 -0
  159. package/dist/speech-provider.js.map +1 -1
  160. package/dist/stream-speech.d.ts +5 -2
  161. package/dist/stream-speech.d.ts.map +1 -1
  162. package/dist/stream-speech.js +38 -21
  163. package/dist/stream-speech.js.map +1 -1
  164. package/dist/text-chunker.d.ts +13 -0
  165. package/dist/text-chunker.d.ts.map +1 -0
  166. package/dist/text-chunker.js +194 -0
  167. package/dist/text-chunker.js.map +1 -0
  168. package/dist/types.d.ts +7 -2
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/volume-adjust.d.ts.map +1 -1
  171. package/dist/volume-adjust.js +4 -10
  172. package/dist/volume-adjust.js.map +1 -1
  173. package/package.json +9 -5
  174. package/NOTICE +0 -27
@@ -4,33 +4,58 @@ import { applyOptionalOutputConversion, validateOutput, } from "./audio-output.j
4
4
  import { detectAudioTags, stripAudioTags } from "./audio-tags.js";
5
5
  import { getDefaultSTTFallback } from "./default-stt-fallback.js";
6
6
  import { deriveTimestampsViaSTT } from "./derive-timestamps.js";
7
- import { ApiError, NoSpeechGeneratedError, OutputConversionUnsupportedError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
7
+ import { assertGatewayForModerationRulesetId, NoSpeechGeneratedError, OutputConversionUnsupportedError, TextChunkingUnsupportedError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
8
8
  import { debug } from "./logger.js";
9
- import { isRetriableApiError } from "./provider-utils.js";
9
+ import { inverseAlign } from "./pronunciations/inverse-align.js";
10
+ import { mergeRules } from "./pronunciations/merge.js";
11
+ import { substitute } from "./pronunciations/substitute.js";
12
+ import { validatePronunciationsInput } from "./pronunciations/validate.js";
10
13
  import { resolveModel } from "./resolve-provider.js";
11
- import { isSpeechGatewayModel, modelDeclaresNativeTimestamps, } from "./speech-provider.js";
14
+ import { buildRetryOptions } from "./retry-options.js";
15
+ import { isSpeechGatewayModel, modelDeclaresNativeTimestamps, modelMaxInputChars, } from "./speech-provider.js";
12
16
  import { DefaultGeneratedAudioFile } from "./speech-result.js";
17
+ import { resolveMaxInputChars, splitTextByMaxChars } from "./text-chunker.js";
18
+ const CHUNK_STITCH_SAMPLE_RATE = 24_000;
13
19
  export async function generateSpeech(options) {
14
- const { model, voice, abortSignal, headers, volumeDbfs, timestamps = false, } = options;
20
+ const { model, voice, abortSignal, headers, volumeDbfs, timestamps = false, moderationRulesetId, } = options;
15
21
  const maxRetries = options.maxRetries ?? 2;
16
22
  validateOutput(options.output);
17
23
  const resolved = resolveModel(model, { apiKey: options.apiKey });
18
24
  const modelIdentifier = `${resolved.provider.id}/${resolved.modelId}`;
19
25
  const isGateway = isSpeechGatewayModel(resolved);
20
- const providerOptions = resolveProviderOptionsForLocalDecoding({
26
+ validatePronunciationsInput(options.pronunciations, isGateway);
27
+ assertGatewayForModerationRulesetId(moderationRulesetId, isGateway);
28
+ const { text: strippedText, warnings } = preprocessText(resolved, options.text, modelIdentifier);
29
+ if (strippedText.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
+ let textToSend = strippedText;
35
+ let pronunciationEdits = [];
36
+ if (!isGateway && options.pronunciations?.rules?.length) {
37
+ const ruleMap = mergeRules(options.pronunciations.rules);
38
+ const subbed = substitute(strippedText, ruleMap);
39
+ textToSend = subbed.text;
40
+ pronunciationEdits = subbed.edits;
41
+ }
42
+ const { maxInputChars, shouldChunk, textChunks } = resolveTextChunks({
43
+ resolved,
44
+ modelIdentifier,
45
+ isGateway,
46
+ processedText: textToSend,
47
+ userMaxInputChars: options.maxInputChars,
48
+ });
49
+ const { providerOptions, stitchOptions } = resolveProviderOptionsForLocalDecoding({
21
50
  resolved,
22
51
  isGateway,
23
52
  modelIdentifier,
24
53
  volumeDbfs,
25
54
  output: options.output,
26
55
  callerOptions: options.providerOptions,
56
+ maxInputChars,
57
+ shouldChunk,
27
58
  });
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
59
  const hasNativeTimestamps = modelDeclaresNativeTimestamps(resolved);
35
60
  const shouldRequestNative = timestamps && (hasNativeTimestamps || isGateway);
36
61
  const effectiveFallback = !timestamps || shouldRequestNative
@@ -44,36 +69,34 @@ export async function generateSpeech(options) {
44
69
  effectiveFallback,
45
70
  });
46
71
  const startTime = performance.now();
47
- const result = await pRetry(() => isGateway
48
- ? resolved.provider.generate({
49
- modelId: resolved.modelId,
50
- text: processedText,
51
- voice: voice,
72
+ const result = shouldChunk
73
+ ? await generateChunkedSpeech({
74
+ resolved,
75
+ modelIdentifier,
76
+ textChunks,
77
+ voice,
52
78
  providerOptions,
79
+ stitchOptions,
80
+ maxInputChars: maxInputChars ?? textToSend.length,
81
+ maxRetries,
53
82
  abortSignal,
54
83
  headers,
55
84
  includeTimestamps: shouldRequestNative,
56
- volumeDbfs,
57
- output: options.output,
58
85
  })
59
- : resolved.provider.generate({
60
- modelId: resolved.modelId,
61
- text: processedText,
86
+ : await generateProviderSpeech({
87
+ resolved,
88
+ text: textToSend,
62
89
  voice,
63
90
  providerOptions,
91
+ maxRetries,
64
92
  abortSignal,
65
93
  headers,
66
94
  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
- });
95
+ volumeDbfs,
96
+ output: options.output,
97
+ pronunciations: options.pronunciations,
98
+ moderationRulesetId,
99
+ });
77
100
  const latencyMs = Math.round(performance.now() - startTime);
78
101
  const audioData = result.audio;
79
102
  if (audioData.length === 0) {
@@ -104,9 +127,12 @@ export async function generateSpeech(options) {
104
127
  }),
105
128
  ]);
106
129
  const audioDurationMs = computedDuration ?? result.audioDurationMs;
130
+ const finalTimestamps = resolvedTimestamps && pronunciationEdits.length > 0
131
+ ? inverseAlign(resolvedTimestamps, textToSend, pronunciationEdits)
132
+ : resolvedTimestamps;
107
133
  const metadata = {
108
134
  latencyMs,
109
- inputChars: processedText.length,
135
+ inputChars: options.text.length,
110
136
  ...(audioDurationMs != null && { audioDurationMs }),
111
137
  };
112
138
  return {
@@ -114,13 +140,143 @@ export async function generateSpeech(options) {
114
140
  metadata,
115
141
  providerMetadata: result.providerMetadata,
116
142
  warnings: mergeWarnings(warnings, result.warnings),
117
- timestamps: resolvedTimestamps,
143
+ timestamps: finalTimestamps,
118
144
  };
119
145
  }
120
146
  function mergeWarnings(preprocessingWarnings, providerWarnings) {
121
147
  const merged = [...preprocessingWarnings, ...(providerWarnings ?? [])];
122
148
  return merged.length > 0 ? merged : undefined;
123
149
  }
150
+ function resolveTextChunks(args) {
151
+ if (args.isGateway) {
152
+ if (args.userMaxInputChars != null) {
153
+ debug(`${args.modelIdentifier}: maxInputChars is not applied on the speech gateway path; the gateway server owns request processing.`);
154
+ }
155
+ return {
156
+ maxInputChars: undefined,
157
+ shouldChunk: false,
158
+ textChunks: [args.processedText],
159
+ };
160
+ }
161
+ const maxInputCharsResolution = resolveMaxInputChars({
162
+ providerMaxInputChars: modelMaxInputChars(args.resolved),
163
+ userMaxInputChars: args.userMaxInputChars,
164
+ });
165
+ if (maxInputCharsResolution.userExceedsProvider) {
166
+ debug(`${args.modelIdentifier}: caller maxInputChars=${maxInputCharsResolution.userMaxInputChars} exceeds provider maxInputChars=${maxInputCharsResolution.providerMaxInputChars}; the provider may reject oversized chunks.`);
167
+ }
168
+ const maxInputChars = maxInputCharsResolution.value;
169
+ const textChunks = maxInputChars == null
170
+ ? [args.processedText]
171
+ : splitTextByMaxChars(args.processedText, maxInputChars);
172
+ const shouldChunk = textChunks.length > 1;
173
+ if (shouldChunk) {
174
+ const source = maxInputCharsResolution.source === "user"
175
+ ? "caller maxInputChars"
176
+ : "model maxInputChars";
177
+ debug(`${args.modelIdentifier}: split ${args.processedText.length} input chars into ${textChunks.length} chunks using ${source}=${maxInputChars}.`);
178
+ }
179
+ return { maxInputChars, shouldChunk, textChunks };
180
+ }
181
+ async function generateProviderSpeech(args) {
182
+ return await pRetry(() => isSpeechGatewayModel(args.resolved)
183
+ ? args.resolved.provider.generate({
184
+ modelId: args.resolved.modelId,
185
+ text: args.text,
186
+ voice: args.voice,
187
+ providerOptions: args.providerOptions,
188
+ abortSignal: args.abortSignal,
189
+ headers: args.headers,
190
+ includeTimestamps: args.includeTimestamps,
191
+ volumeDbfs: args.volumeDbfs,
192
+ output: args.output,
193
+ pronunciations: args.pronunciations,
194
+ moderationRulesetId: args.moderationRulesetId,
195
+ })
196
+ : args.resolved.provider.generate({
197
+ modelId: args.resolved.modelId,
198
+ text: args.text,
199
+ voice: args.voice,
200
+ providerOptions: args.providerOptions,
201
+ abortSignal: args.abortSignal,
202
+ headers: args.headers,
203
+ includeTimestamps: args.includeTimestamps,
204
+ }), buildRetryOptions({
205
+ maxRetries: args.maxRetries,
206
+ abortSignal: args.abortSignal,
207
+ }));
208
+ }
209
+ async function generateChunkedSpeech(args) {
210
+ if (!args.stitchOptions) {
211
+ throw new TextChunkingUnsupportedError(args.modelIdentifier, args.maxInputChars);
212
+ }
213
+ const { decodeAudioToPcm16 } = await import("./audio-decode.js");
214
+ const { concatPcmToWav } = await import("./conversation/pcm-concat.js");
215
+ const perChunk = [];
216
+ for (const text of args.textChunks) {
217
+ const result = await generateProviderSpeech({
218
+ resolved: args.resolved,
219
+ text,
220
+ voice: args.voice,
221
+ providerOptions: args.providerOptions,
222
+ maxRetries: args.maxRetries,
223
+ abortSignal: args.abortSignal,
224
+ headers: args.headers,
225
+ includeTimestamps: args.includeTimestamps,
226
+ });
227
+ const audio = new DefaultGeneratedAudioFile({
228
+ data: result.audio,
229
+ mediaType: result.mediaType,
230
+ }).uint8Array;
231
+ if (audio.length === 0) {
232
+ throw new NoSpeechGeneratedError();
233
+ }
234
+ const resultMediaType = result.mediaType.toLowerCase();
235
+ const decodeMediaType = resultMediaType.startsWith("audio/wav") ||
236
+ resultMediaType.startsWith("audio/x-wav")
237
+ ? result.mediaType
238
+ : args.stitchOptions.mediaType;
239
+ const segment = await decodeAudioToPcm16(audio, decodeMediaType);
240
+ perChunk.push({ result, segment });
241
+ }
242
+ const segments = perChunk.map((c) => c.segment);
243
+ const audio = await concatPcmToWav(segments, {
244
+ gapMs: 0,
245
+ targetSampleRate: CHUNK_STITCH_SAMPLE_RATE,
246
+ });
247
+ const durationSeconds = segments.reduce((sum, segment) => sum + segment.pcm.length / segment.sampleRate, 0);
248
+ const warnings = perChunk.flatMap((c) => c.result.warnings ?? []);
249
+ const providerMetadataChunks = perChunk.map((c) => c.result.providerMetadata);
250
+ const providerMetadata = providerMetadataChunks.some((m) => m != null)
251
+ ? { chunks: providerMetadataChunks }
252
+ : undefined;
253
+ return {
254
+ audio,
255
+ audioDurationMs: Math.round(durationSeconds * 1000),
256
+ mediaType: "audio/wav",
257
+ providerMetadata,
258
+ timestamps: mergeChunkTimestamps(perChunk),
259
+ warnings: warnings.length > 0 ? warnings : undefined,
260
+ };
261
+ }
262
+ function mergeChunkTimestamps(perChunk) {
263
+ if (perChunk.some((c) => !c.result.timestamps?.length)) {
264
+ return;
265
+ }
266
+ const timestamps = [];
267
+ let offset = 0;
268
+ for (const chunk of perChunk) {
269
+ for (const word of chunk.result.timestamps ?? []) {
270
+ timestamps.push({
271
+ text: word.text,
272
+ start: word.start + offset,
273
+ end: word.end + offset,
274
+ });
275
+ }
276
+ offset += chunk.segment.pcm.length / chunk.segment.sampleRate;
277
+ }
278
+ return timestamps;
279
+ }
124
280
  async function resolveTimestamps(args) {
125
281
  if (!args.timestamps) {
126
282
  return;
@@ -144,21 +300,49 @@ async function resolveTimestamps(args) {
144
300
  return timestamps;
145
301
  }
146
302
  function resolveProviderOptionsForLocalDecoding(args) {
147
- const needsLocalDecodable = !args.isGateway && (args.volumeDbfs != null || args.output != null);
148
- if (!needsLocalDecodable) {
149
- return args.callerOptions;
303
+ if (args.isGateway) {
304
+ return { providerOptions: args.callerOptions, stitchOptions: undefined };
305
+ }
306
+ const needsStitchWireFormat = args.volumeDbfs != null || args.shouldChunk;
307
+ if (!needsStitchWireFormat && args.output != null) {
308
+ const native = args.resolved.provider.resolveOutputFormat?.(args.resolved.modelId, args.output);
309
+ if (native) {
310
+ return {
311
+ providerOptions: { ...native.providerOptions, ...args.callerOptions },
312
+ stitchOptions: undefined,
313
+ };
314
+ }
315
+ const stitchOpts = args.resolved.provider.getStitchOptions?.(args.resolved.modelId);
316
+ if (!stitchOpts) {
317
+ throw new OutputConversionUnsupportedError(args.modelIdentifier);
318
+ }
319
+ return {
320
+ providerOptions: {
321
+ ...args.callerOptions,
322
+ ...stitchOpts.providerOptions,
323
+ },
324
+ stitchOptions: stitchOpts,
325
+ };
326
+ }
327
+ if (!needsStitchWireFormat) {
328
+ return { providerOptions: args.callerOptions, stitchOptions: undefined };
150
329
  }
151
330
  const stitchOpts = args.resolved.provider.getStitchOptions?.(args.resolved.modelId);
152
331
  if (!stitchOpts) {
332
+ if (args.shouldChunk && args.maxInputChars != null) {
333
+ throw new TextChunkingUnsupportedError(args.modelIdentifier, args.maxInputChars);
334
+ }
153
335
  if (args.volumeDbfs != null) {
154
336
  throw new VolumeAdjustmentUnsupportedError(args.modelIdentifier);
155
337
  }
156
338
  throw new OutputConversionUnsupportedError(args.modelIdentifier);
157
339
  }
158
- // Stitch options must win — caller-supplied response_format would break the decoder.
159
340
  return {
160
- ...args.callerOptions,
161
- ...stitchOpts.providerOptions,
341
+ providerOptions: {
342
+ ...args.callerOptions,
343
+ ...stitchOpts.providerOptions,
344
+ },
345
+ stitchOptions: stitchOpts,
162
346
  };
163
347
  }
164
348
  async function applyLocalAudioPostProcessing(args) {
@@ -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,5 @@
1
+ import { SpeechSDKError } from "../errors.js";
2
+ export declare class DictionaryIdsRequireGatewayError extends SpeechSDKError {
3
+ constructor();
4
+ }
5
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/pronunciations/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,gCAAiC,SAAQ,cAAc;;CAOnE"}
@@ -0,0 +1,8 @@
1
+ import { SpeechSDKError } from "../errors.js";
2
+ export class DictionaryIdsRequireGatewayError extends SpeechSDKError {
3
+ constructor() {
4
+ super("dictionaryIds require the gateway path. Use the gateway model string (e.g., 'openai/tts-1') or pass inline rules with { rules: [...] }.");
5
+ this.name = "DictionaryIdsRequireGatewayError";
6
+ }
7
+ }
8
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/pronunciations/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,OAAO,gCAAiC,SAAQ,cAAc;IAClE;QACE,KAAK,CACH,yIAAyI,CAC1I,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IACjD,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { inverseAlign } from "./inverse-align.js";
2
+ export { mergeRules, ruleMapKey } from "./merge.js";
3
+ export { substitute } from "./substitute.js";
4
+ export type { Edit, Pronunciation, PronunciationsInput } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pronunciations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ // biome-ignore-all lint/performance/noBarrelFile: public pronunciations subpath entry point
2
+ export { inverseAlign } from "./inverse-align.js";
3
+ export { mergeRules, ruleMapKey } from "./merge.js";
4
+ export { substitute } from "./substitute.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pronunciations/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WordTimestamp } from "../timestamps.js";
2
+ import type { Edit } from "./types.js";
3
+ export declare function inverseAlign<T extends WordTimestamp>(timestamps: readonly T[], substitutedText: string, edits: readonly Edit[]): T[];
4
+ //# sourceMappingURL=inverse-align.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inverse-align.d.ts","sourceRoot":"","sources":["../../src/pronunciations/inverse-align.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAmBvC,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAClD,UAAU,EAAE,SAAS,CAAC,EAAE,EACxB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,SAAS,IAAI,EAAE,GACrB,CAAC,EAAE,CAiDL"}
@@ -0,0 +1,54 @@
1
+ function findEditAt(position, edits) {
2
+ return edits.find((e) => position >= e.replacementRange[0] && position < e.replacementRange[1]);
3
+ }
4
+ function findTokenStart(haystack, searchFrom, token) {
5
+ return haystack.indexOf(token.toLowerCase(), searchFrom);
6
+ }
7
+ export function inverseAlign(timestamps, substitutedText, edits) {
8
+ if (edits.length === 0) {
9
+ return [...timestamps];
10
+ }
11
+ const out = [];
12
+ let cursor = 0;
13
+ let pendingGroup = null;
14
+ const haystack = substitutedText.toLowerCase();
15
+ const flushPending = () => {
16
+ if (!pendingGroup) {
17
+ return;
18
+ }
19
+ const merged = {
20
+ ...pendingGroup.first,
21
+ text: pendingGroup.edit.originalWord,
22
+ start: pendingGroup.first.start,
23
+ end: pendingGroup.last.end,
24
+ };
25
+ out.push(merged);
26
+ pendingGroup = null;
27
+ };
28
+ for (const ts of timestamps) {
29
+ const pos = findTokenStart(haystack, cursor, ts.text);
30
+ if (pos === -1) {
31
+ flushPending();
32
+ out.push(ts);
33
+ continue;
34
+ }
35
+ cursor = pos + ts.text.length;
36
+ const edit = findEditAt(pos, edits);
37
+ if (edit) {
38
+ if (pendingGroup && pendingGroup.edit === edit) {
39
+ pendingGroup.last = ts;
40
+ }
41
+ else {
42
+ flushPending();
43
+ pendingGroup = { edit, first: ts, last: ts };
44
+ }
45
+ }
46
+ else {
47
+ flushPending();
48
+ out.push(ts);
49
+ }
50
+ }
51
+ flushPending();
52
+ return out;
53
+ }
54
+ //# sourceMappingURL=inverse-align.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inverse-align.js","sourceRoot":"","sources":["../../src/pronunciations/inverse-align.ts"],"names":[],"mappings":"AAGA,SAAS,UAAU,CACjB,QAAgB,EAChB,KAAsB;IAEtB,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,QAAgB,EAChB,UAAkB,EAClB,KAAa;IAEb,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,UAAwB,EACxB,eAAuB,EACvB,KAAsB;IAEtB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAA6C,IAAI,CAAC;IAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAE/C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG;YACb,GAAG,YAAY,CAAC,KAAK;YACrB,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY;YACpC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;YAC/B,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG;SACtB,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC/C,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,YAAY,EAAE,CAAC;gBACf,YAAY,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,YAAY,EAAE,CAAC;IACf,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Pronunciation } from "./types.js";
2
+ export declare function ruleMapKey(word: string, caseSensitive: boolean): string;
3
+ export declare function mergeRules(rules: readonly Pronunciation[]): Map<string, Pronunciation>;
4
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/pronunciations/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAEvE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,aAAa,EAAE,GAC9B,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAO5B"}
@@ -0,0 +1,13 @@
1
+ // A case-sensitive rule for an already-lowercase word can collide with a case-insensitive rule for the same word in one merge call; gateway dictionaries dedupe via a unique index, and Map.set's last-write-wins is fine for the inline-only case.
2
+ export function ruleMapKey(word, caseSensitive) {
3
+ return caseSensitive ? word : word.toLowerCase();
4
+ }
5
+ export function mergeRules(rules) {
6
+ const map = new Map();
7
+ for (const rule of rules) {
8
+ const caseSensitive = rule.caseSensitive ?? false;
9
+ map.set(ruleMapKey(rule.word, caseSensitive), { ...rule, caseSensitive });
10
+ }
11
+ return map;
12
+ }
13
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/pronunciations/merge.ts"],"names":[],"mappings":"AAEA,oPAAoP;AACpP,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,aAAsB;IAC7D,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Edit, Pronunciation } from "./types.js";
2
+ export declare function substitute(text: string, ruleMap: Map<string, Pronunciation>): {
3
+ text: string;
4
+ edits: Edit[];
5
+ };
6
+ //# sourceMappingURL=substitute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"substitute.d.ts","sourceRoot":"","sources":["../../src/pronunciations/substitute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0CtD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CA0CjC"}