@speech-sdk/core 0.32.0 → 0.33.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 (66) hide show
  1. package/README.md +39 -10
  2. package/dist/apply-speed.d.ts +1 -0
  3. package/dist/apply-speed.d.ts.map +1 -1
  4. package/dist/apply-speed.js +7 -5
  5. package/dist/apply-speed.js.map +1 -1
  6. package/dist/audio-decode.js +3 -2
  7. package/dist/audio-decode.js.map +1 -1
  8. package/dist/audio-output.d.ts +1 -0
  9. package/dist/audio-output.d.ts.map +1 -1
  10. package/dist/audio-output.js +1 -1
  11. package/dist/audio-output.js.map +1 -1
  12. package/dist/conversation/attribute-timestamps.d.ts +1 -21
  13. package/dist/conversation/attribute-timestamps.d.ts.map +1 -1
  14. package/dist/conversation/attribute-timestamps.js +26 -264
  15. package/dist/conversation/attribute-timestamps.js.map +1 -1
  16. package/dist/conversation/dispatch.d.ts +3 -1
  17. package/dist/conversation/dispatch.d.ts.map +1 -1
  18. package/dist/conversation/dispatch.js +44 -18
  19. package/dist/conversation/dispatch.js.map +1 -1
  20. package/dist/conversation/errors.d.ts +9 -0
  21. package/dist/conversation/errors.d.ts.map +1 -1
  22. package/dist/conversation/errors.js +18 -0
  23. package/dist/conversation/errors.js.map +1 -1
  24. package/dist/conversation/pcm-concat.d.ts +13 -0
  25. package/dist/conversation/pcm-concat.d.ts.map +1 -1
  26. package/dist/conversation/pcm-concat.js +22 -4
  27. package/dist/conversation/pcm-concat.js.map +1 -1
  28. package/dist/conversation/split-turns.d.ts +31 -0
  29. package/dist/conversation/split-turns.d.ts.map +1 -0
  30. package/dist/conversation/split-turns.js +158 -0
  31. package/dist/conversation/split-turns.js.map +1 -0
  32. package/dist/conversation/stitch.d.ts +1 -3
  33. package/dist/conversation/stitch.d.ts.map +1 -1
  34. package/dist/conversation/stitch.js +5 -13
  35. package/dist/conversation/stitch.js.map +1 -1
  36. package/dist/conversation/types.d.ts +5 -0
  37. package/dist/conversation/types.d.ts.map +1 -1
  38. package/dist/conversation/validate.d.ts.map +1 -1
  39. package/dist/conversation/validate.js +3 -0
  40. package/dist/conversation/validate.js.map +1 -1
  41. package/dist/generate-conversation.d.ts +7 -3
  42. package/dist/generate-conversation.d.ts.map +1 -1
  43. package/dist/generate-conversation.js +151 -105
  44. package/dist/generate-conversation.js.map +1 -1
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +1 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/speech-result.d.ts +20 -0
  50. package/dist/speech-result.d.ts.map +1 -1
  51. package/dist/speech-result.js.map +1 -1
  52. package/dist/timestamp-finalization.d.ts +1 -0
  53. package/dist/timestamp-finalization.d.ts.map +1 -1
  54. package/dist/timestamp-finalization.js +5 -5
  55. package/dist/timestamp-finalization.js.map +1 -1
  56. package/dist/types.d.ts +1 -1
  57. package/dist/types.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/dist/conversation/proportional-fill.d.ts +0 -10
  60. package/dist/conversation/proportional-fill.d.ts.map +0 -1
  61. package/dist/conversation/proportional-fill.js +0 -64
  62. package/dist/conversation/proportional-fill.js.map +0 -1
  63. package/dist/conversation/silence-detection.d.ts +0 -14
  64. package/dist/conversation/silence-detection.d.ts.map +0 -1
  65. package/dist/conversation/silence-detection.js +0 -52
  66. package/dist/conversation/silence-detection.js.map +0 -1
@@ -1,30 +1,28 @@
1
1
  import { sampleRateHintFrom } from "../audio-output.js";
2
2
  import { StitchUnsupportedError } from "./errors.js";
3
3
  import { newVoiceKeyer } from "./validate.js";
4
+ const FALLBACK_STITCH_REASONS = {
5
+ "fallback-from-native": "per-turn-provider-options",
6
+ "fallback-from-native-custom-voice": "custom-voice",
7
+ "fallback-from-native-oversized": "native-limit-exceeded",
8
+ "fallback-from-native-voice-count": "single-speaker",
9
+ "fallback-from-native-voice-count-exceeded": "too-many-voices",
10
+ };
4
11
  export function chooseConversationPath(input) {
5
- const { forceStitch = false, resolvedPerTurn, turns, output } = input;
12
+ const { forceStitch, resolvedPerTurn, turns, output } = input;
6
13
  const sampleRateHint = sampleRateHintFrom(output);
7
14
  // Compare by provider instance reference so two factories with different apiKey/baseURL/fetch configs aren't silently merged.
8
15
  const first = resolvedPerTurn[0];
9
16
  const allSame = resolvedPerTurn.every((r) => r.provider === first.provider && r.modelId === first.modelId);
10
- let stitchFallbackReason;
11
- if (allSame && !forceStitch) {
12
- if (countUniqueVoices(turns) <= 1) {
13
- // A single speaker is just sequential speech — render per-turn via stitch, never native dialogue.
14
- if (modelSupportsNativeDialogue(first)) {
15
- stitchFallbackReason = "fallback-from-native-voice-count";
16
- }
17
- }
18
- else {
19
- const native = tryNativeDialoguePath({ first, turns, sampleRateHint });
20
- if (native) {
21
- if ("path" in native) {
22
- return native.path;
23
- }
24
- stitchFallbackReason = native.fallbackReason;
25
- }
26
- }
17
+ const native = allSame
18
+ ? nativeEligibility({ first, turns, sampleRateHint })
19
+ : undefined;
20
+ if (native && "path" in native && !forceStitch) {
21
+ return native.path;
27
22
  }
23
+ const ineligibleReason = native && "fallbackReason" in native ? native.fallbackReason : undefined;
24
+ // A forced stitch never warns about native fallback, but its public reason still names why native couldn't run.
25
+ const stitchFallbackReason = forceStitch ? undefined : ineligibleReason;
28
26
  const stitchOptionsPerTurn = resolvedPerTurn.map((r) => {
29
27
  const opts = r.provider.getStitchOptions?.(r.modelId, {
30
28
  sampleRate: sampleRateHint,
@@ -41,8 +39,36 @@ export function chooseConversationPath(input) {
41
39
  kind: "stitch",
42
40
  ...(stitchFallbackReason && { reason: stitchFallbackReason }),
43
41
  stitchOptionsPerTurn,
42
+ stitchReason: describeStitchReason({
43
+ allSame,
44
+ fallbackReason: ineligibleReason,
45
+ first,
46
+ forceStitch,
47
+ }),
44
48
  };
45
49
  }
50
+ // The native path when these turns can render as native dialogue, why they can't, or undefined without native dialogue.
51
+ function nativeEligibility(args) {
52
+ if (countUniqueVoices(args.turns) <= 1) {
53
+ // A single speaker is just sequential speech — render per-turn via stitch, never native dialogue.
54
+ return modelSupportsNativeDialogue(args.first)
55
+ ? { fallbackReason: "fallback-from-native-voice-count" }
56
+ : undefined;
57
+ }
58
+ return tryNativeDialoguePath(args);
59
+ }
60
+ function describeStitchReason(args) {
61
+ if (args.fallbackReason) {
62
+ return FALLBACK_STITCH_REASONS[args.fallbackReason];
63
+ }
64
+ if (!args.allSame) {
65
+ return "mixed-models";
66
+ }
67
+ if (!modelSupportsNativeDialogue(args.first)) {
68
+ return "no-native-dialogue";
69
+ }
70
+ return args.forceStitch ?? "no-native-dialogue";
71
+ }
46
72
  // Native dialogue needs 2+ distinct voices; a single voice is always routed to stitch, so providers declare only maxVoices.
47
73
  const NATIVE_DIALOGUE_MIN_VOICES = 2;
48
74
  function countUniqueVoices(turns) {
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/conversation/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAM1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAwB9C,MAAM,UAAU,sBAAsB,CAAC,KAKtC;IACC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACtE,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAElD,8HAA8H;IAC9H,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CACpE,CAAC;IAEF,IAAI,oBAAsD,CAAC;IAE3D,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,kGAAkG;YAClG,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,oBAAoB,GAAG,kCAAkC,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;YACvE,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;oBACrB,OAAO,MAAM,CAAC,IAAI,CAAC;gBACrB,CAAC;gBACD,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;YACpD,UAAU,EAAE,cAAc;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,sBAAsB,CAAC;gBAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACvB,KAAK,EAAE,CAAC,CAAC,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG,CAAC,oBAAoB,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;QAC7D,oBAAoB;KACrB,CAAC;AACJ,CAAC;AAOD,4HAA4H;AAC5H,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAErC,SAAS,iBAAiB,CAAC,KAAyC;IAClE,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,2BAA2B,CAAC,QAA8B;IACjE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IACvC,OAAO,OAAO,CACZ,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,8FAA8F;AAC9F,2FAA2F;AAC3F,2FAA2F;AAC3F,SAAS,qBAAqB,CAAC,IAI9B;IAIC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClE,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,SAAS,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACpD,CAAC;IACD,4FAA4F;IAC5F,iGAAiG;IACjG,IAAI,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,cAAc,EAAE,2CAA2C,EAAE,CAAC;IACzE,CAAC;IACD,IACE,QAAQ,CAAC,qBAAqB,EAAE,CAC9B,OAAO,EACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAChC,KAAK,KAAK,EACX,CAAC;QACD,OAAO,EAAE,cAAc,EAAE,mCAAmC,EAAE,CAAC;IACjE,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC9B,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,KAAK;QACL,cAAc;KACf,CAAC,CAAC;IACH,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;IAC/D,CAAC;IACD,iGAAiG;IACjG,OAAO,EAAE,cAAc,EAAE,gCAAgC,EAAE,CAAC;AAC9D,CAAC;AAED,+EAA+E;AAC/E,kHAAkH;AAClH,SAAS,gBAAgB,CAAC,IAMzB;IACC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAEhE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,sGAAsG;IACtG,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE;QACrD,UAAU,EAAE,cAAc;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,OAAO,qBAAqB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,qBAAqB,CAAC,IAI9B;IACC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAE9B,4FAA4F;IAC5F,mGAAmG;IACnG,oGAAoG;IACpG,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,sFAAsF;QACtF,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,YAAY,IAAI,GAAG,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,qHAAqH;IACrH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrE,IAAI,MAAM,GAAG,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACnE,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/conversation/dispatch.ts"],"names":[],"mappings":"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"}
@@ -20,4 +20,13 @@ export declare class StitchUnsupportedError extends SpeechSDKError {
20
20
  model: string;
21
21
  });
22
22
  }
23
+ export type TurnSplitFailureReason = "empty_turn" | "non_monotonic" | "undecodable_audio";
24
+ export declare class TurnSplitError extends SpeechSDKError {
25
+ readonly reason: TurnSplitFailureReason;
26
+ readonly turnIndex?: number;
27
+ constructor(options: {
28
+ reason: TurnSplitFailureReason;
29
+ turnIndex?: number;
30
+ });
31
+ }
23
32
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/conversation/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,sBAAuB,SAAQ,cAAc;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB;CAQF;AAED,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAQzD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/conversation/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,sBAAuB,SAAQ,cAAc;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB;CAQF;AAED,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAQzD;AAED,MAAM,MAAM,sBAAsB,GAC9B,YAAY,GACZ,eAAe,GACf,mBAAmB,CAAC;AASxB,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE;QAAE,MAAM,EAAE,sBAAsB,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;CAY5E"}
@@ -25,4 +25,22 @@ export class StitchUnsupportedError extends SpeechSDKError {
25
25
  this.model = options.model;
26
26
  }
27
27
  }
28
+ const TURN_SPLIT_MESSAGES = {
29
+ empty_turn: "a turn has no attributed words",
30
+ non_monotonic: "words are out of order: a word overlaps the previous one or belongs to an earlier turn",
31
+ undecodable_audio: "the conversation audio is not decodable PCM/WAV",
32
+ };
33
+ export class TurnSplitError extends SpeechSDKError {
34
+ reason;
35
+ turnIndex;
36
+ constructor(options) {
37
+ const where = options.turnIndex == null ? "" : ` (turn ${options.turnIndex})`;
38
+ super(`generateConversation cannot split per-turn audio: ${TURN_SPLIT_MESSAGES[options.reason]}${where}.`);
39
+ this.name = "TurnSplitError";
40
+ this.reason = options.reason;
41
+ if (options.turnIndex != null) {
42
+ this.turnIndex = options.turnIndex;
43
+ }
44
+ }
45
+ }
28
46
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/conversation/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,cAAc;IAChD,QAAQ,CAAS;IACjB,KAAK,CAAS;IAEvB,YAAY,OAKX;QACC,KAAK,CACH,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,6BAA6B,OAAO,CAAC,IAAI,SAAS,OAAO,CAAC,QAAQ,GAAG,CAC1G,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IAC/C,QAAQ,CAAS;IACjB,KAAK,CAAS;IAEvB,YAAY,OAA4C;QACtD,KAAK,CACH,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,sGAAsG,CAC3I,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/conversation/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,cAAc;IAChD,QAAQ,CAAS;IACjB,KAAK,CAAS;IAEvB,YAAY,OAKX;QACC,KAAK,CACH,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,6BAA6B,OAAO,CAAC,IAAI,SAAS,OAAO,CAAC,QAAQ,GAAG,CAC1G,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IAC/C,QAAQ,CAAS;IACjB,KAAK,CAAS;IAEvB,YAAY,OAA4C;QACtD,KAAK,CACH,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,sGAAsG,CAC3I,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CACF;AAOD,MAAM,mBAAmB,GAA2C;IAClE,UAAU,EAAE,gCAAgC;IAC5C,aAAa,EACX,wFAAwF;IAC1F,iBAAiB,EAAE,iDAAiD;CACrE,CAAC;AAEF,MAAM,OAAO,cAAe,SAAQ,cAAc;IACvC,MAAM,CAAyB;IAC/B,SAAS,CAAU;IAE5B,YAAY,OAA+D;QACzE,MAAM,KAAK,GACT,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,SAAS,GAAG,CAAC;QAClE,KAAK,CACH,qDAAqD,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CACpG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACrC,CAAC;IACH,CAAC;CACF"}
@@ -3,6 +3,7 @@ export interface Pcm16Segment {
3
3
  readonly pcm: Int16Array;
4
4
  readonly sampleRate: number;
5
5
  }
6
+ export declare function rmsPcm16(pcm: Int16Array): number;
6
7
  export declare const DEFAULT_VOLUME_DBFS = -20;
7
8
  export declare function dbfsToInt16Rms(dbfs: number): number;
8
9
  export declare function normalizeRms(segments: readonly Pcm16Segment[], targetRmsAmplitude?: number): Pcm16Segment[];
@@ -13,4 +14,16 @@ export declare function concatPcmToWav(segments: readonly Pcm16Segment[], option
13
14
  gapMs: number;
14
15
  targetSampleRate: number;
15
16
  }): Promise<Uint8Array>;
17
+ export interface ConcatenatedWav {
18
+ readonly ranges: readonly {
19
+ readonly start: number;
20
+ readonly end: number;
21
+ }[];
22
+ readonly wav: Uint8Array;
23
+ }
24
+ export declare function concatPcmToWavWithRanges(segments: readonly Pcm16Segment[], options: {
25
+ gapMs: number;
26
+ targetSampleRate: number;
27
+ }): Promise<ConcatenatedWav>;
28
+ export declare function gapMidpointsSec(ranges: ConcatenatedWav["ranges"], sampleRate: number): number[];
16
29
  //# sourceMappingURL=pcm-concat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pcm-concat.d.ts","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAsDD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAKD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,kBAAkB,SAA2B,GAC5C,YAAY,EAAE,CAahB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1C,MAAM,CAWR;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,UAAU,CAAC,CA8BrB"}
1
+ {"version":3,"file":"pcm-concat.d.ts","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAUD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAShD;AAmCD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAKD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,kBAAkB,SAA2B,GAC5C,YAAY,EAAE,CAahB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1C,MAAM,CAWR;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,MAAM,WAAW,eAAe;IAE9B,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7E,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;CAC1B;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,eAAe,CAAC,CAqC1B;AAGD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAMV"}
@@ -5,7 +5,7 @@ function silencePcm16(ms, sampleRate) {
5
5
  const samples = Math.round((ms / 1000) * sampleRate);
6
6
  return new Int16Array(samples);
7
7
  }
8
- function rmsPcm16(pcm) {
8
+ export function rmsPcm16(pcm) {
9
9
  if (pcm.length === 0) {
10
10
  return 0;
11
11
  }
@@ -71,24 +71,42 @@ export function stitchTargetRate(segments) {
71
71
  return rate;
72
72
  }
73
73
  export async function concatPcmToWav(segments, options) {
74
+ return (await concatPcmToWavWithRanges(segments, options)).wav;
75
+ }
76
+ export async function concatPcmToWavWithRanges(segments, options) {
74
77
  const { gapMs, targetSampleRate } = options;
75
78
  const gap = silencePcm16(gapMs, targetSampleRate);
76
79
  const resampledSegments = await Promise.all(segments.map((s) => resamplePcm16(s.pcm, s.sampleRate, targetSampleRate)));
77
80
  const resampled = [];
81
+ const ranges = [];
82
+ let cursor = 0;
78
83
  for (let i = 0; i < resampledSegments.length; i++) {
79
84
  resampled.push(resampledSegments[i]);
85
+ ranges.push({ start: cursor, end: cursor + resampledSegments[i].length });
86
+ cursor += resampledSegments[i].length;
80
87
  if (i < resampledSegments.length - 1 && gap.length > 0) {
81
88
  resampled.push(gap);
89
+ cursor += gap.length;
82
90
  }
83
91
  }
84
- const totalSamples = resampled.reduce((n, a) => n + a.length, 0);
85
- const merged = new Int16Array(totalSamples);
92
+ const merged = new Int16Array(cursor);
86
93
  let off = 0;
87
94
  for (const a of resampled) {
88
95
  merged.set(a, off);
89
96
  off += a.length;
90
97
  }
91
98
  const mergedBytes = new Uint8Array(merged.buffer, merged.byteOffset, merged.byteLength);
92
- return await wrapPcm16Mono(mergedBytes, targetSampleRate);
99
+ return {
100
+ ranges,
101
+ wav: await wrapPcm16Mono(mergedBytes, targetSampleRate),
102
+ };
103
+ }
104
+ // Cut in the middle of each inserted gap, in seconds of the merged audio.
105
+ export function gapMidpointsSec(ranges, sampleRate) {
106
+ const cuts = [];
107
+ for (let i = 0; i < ranges.length - 1; i++) {
108
+ cuts.push((ranges[i].end + ranges[i + 1].start) / 2 / sampleRate);
109
+ }
110
+ return cuts;
93
111
  }
94
112
  //# sourceMappingURL=pcm-concat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pcm-concat.js","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pcm-concat.js","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type AudioOutput } from "../audio-output.js";
2
+ import { type ConversationTurnAudio } from "../speech-result.js";
3
+ import type { ConversationWordTimestamp } from "../timestamps.js";
4
+ interface TurnSpan {
5
+ readonly firstStart: number;
6
+ readonly lastEnd: number;
7
+ }
8
+ export declare function assertTurnSplitAllowed(args: {
9
+ readonly timestamps: readonly ConversationWordTimestamp[];
10
+ readonly turnCount: number;
11
+ }): readonly TurnSpan[];
12
+ export declare function planTurnCuts(args: {
13
+ readonly knownCutsSec?: readonly (number | undefined)[];
14
+ readonly pcm: Int16Array;
15
+ readonly sampleRate: number;
16
+ readonly spans: readonly TurnSpan[];
17
+ }): number[];
18
+ export declare function splitConversationTurns(args: {
19
+ readonly audio: Uint8Array;
20
+ readonly knownCutsSec?: readonly (number | undefined)[];
21
+ readonly mediaType: string;
22
+ readonly output: AudioOutput | undefined;
23
+ readonly timestamps: readonly ConversationWordTimestamp[];
24
+ readonly turnCount: number;
25
+ }): Promise<{
26
+ readonly pcm: Int16Array;
27
+ readonly sampleRate: number;
28
+ readonly turns: readonly ConversationTurnAudio[];
29
+ }>;
30
+ export {};
31
+ //# sourceMappingURL=split-turns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-turns.d.ts","sourceRoot":"","sources":["../../src/conversation/split-turns.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAUlE,UAAU,QAAQ;IAChB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAGD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GAAG,SAAS,QAAQ,EAAE,CA2BtB;AA+ED,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACxD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;CACrC,GAAG,MAAM,EAAE,CAwBX;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC;IAEV,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAClD,CAAC,CA+CD"}
@@ -0,0 +1,158 @@
1
+ import { decodeAudioToPcm16 } from "../audio-decode.js";
2
+ import { applyOptionalOutputConversion, isDecodableSourceMediaType, } from "../audio-output.js";
3
+ import { DefaultGeneratedAudioFile, } from "../speech-result.js";
4
+ import { TurnSplitError } from "./errors.js";
5
+ import { rmsPcm16 } from "./pcm-concat.js";
6
+ const FRAME_MS = 20;
7
+ const MIN_SILENCE_MS = 100;
8
+ const SILENCE_BELOW_REFERENCE_DB = 40;
9
+ const REFERENCE_PERCENTILE = 0.9;
10
+ const TIMING_EPSILON_SECONDS = 1e-6;
11
+ // Split only when every turn owns words and turn order matches time order.
12
+ export function assertTurnSplitAllowed(args) {
13
+ const spans = new Array(args.turnCount);
14
+ let previous;
15
+ for (const word of args.timestamps) {
16
+ if (previous &&
17
+ (word.turnIndex < previous.turnIndex ||
18
+ word.start + TIMING_EPSILON_SECONDS < previous.end)) {
19
+ throw new TurnSplitError({
20
+ reason: "non_monotonic",
21
+ turnIndex: word.turnIndex,
22
+ });
23
+ }
24
+ const span = spans[word.turnIndex];
25
+ spans[word.turnIndex] = {
26
+ firstStart: span?.firstStart ?? word.start,
27
+ lastEnd: word.end,
28
+ };
29
+ previous = word;
30
+ }
31
+ return Array.from(spans, (span, turnIndex) => {
32
+ if (!span) {
33
+ throw new TurnSplitError({ reason: "empty_turn", turnIndex });
34
+ }
35
+ return span;
36
+ });
37
+ }
38
+ function frameRms(pcm, frameSamples) {
39
+ const frameCount = Math.ceil(pcm.length / frameSamples);
40
+ const rms = new Float64Array(frameCount);
41
+ for (let f = 0; f < frameCount; f++) {
42
+ rms[f] = rmsPcm16(pcm.subarray(f * frameSamples, (f + 1) * frameSamples));
43
+ }
44
+ return rms;
45
+ }
46
+ function silenceThreshold(rms) {
47
+ if (rms.length === 0) {
48
+ return 0;
49
+ }
50
+ const sorted = Float64Array.from(rms).sort();
51
+ const reference = sorted[Math.floor(REFERENCE_PERCENTILE * (sorted.length - 1))];
52
+ return reference * 10 ** (-SILENCE_BELOW_REFERENCE_DB / 20);
53
+ }
54
+ function clamp(value, min, max) {
55
+ return Math.min(max, Math.max(min, value));
56
+ }
57
+ // Middle of the first qualifying silence in [startSample, endSample]; otherwise the quietest frame there.
58
+ function cutInWindow(args) {
59
+ const { endSample, frameSamples, rms, startSample, threshold } = args;
60
+ if (endSample <= startSample) {
61
+ return startSample;
62
+ }
63
+ const minFrames = Math.ceil(MIN_SILENCE_MS / FRAME_MS);
64
+ const firstFrame = Math.ceil(startSample / frameSamples);
65
+ const endFrame = Math.min(rms.length, Math.floor(endSample / frameSamples));
66
+ let runStart = -1;
67
+ for (let f = firstFrame; f <= endFrame; f++) {
68
+ if (f < endFrame && rms[f] <= threshold) {
69
+ if (runStart < 0) {
70
+ runStart = f;
71
+ }
72
+ continue;
73
+ }
74
+ if (runStart >= 0 && f - runStart >= minFrames) {
75
+ return clamp(Math.round(((runStart + f) * frameSamples) / 2), startSample, endSample);
76
+ }
77
+ runStart = -1;
78
+ }
79
+ // Every frame the window touches, including partial frames at either edge.
80
+ const lo = Math.floor(startSample / frameSamples);
81
+ const hi = Math.min(rms.length, Math.ceil(endSample / frameSamples));
82
+ if (hi <= lo) {
83
+ return Math.round((startSample + endSample) / 2);
84
+ }
85
+ let quietest = lo;
86
+ for (let f = lo + 1; f < hi; f++) {
87
+ if (rms[f] < rms[quietest]) {
88
+ quietest = f;
89
+ }
90
+ }
91
+ return clamp(Math.round((quietest + 0.5) * frameSamples), startSample, endSample);
92
+ }
93
+ // Returns one cut (sample index) per turn boundary. `knownCutsSec` pins boundaries the SDK stitched itself.
94
+ export function planTurnCuts(args) {
95
+ const { knownCutsSec, pcm, sampleRate, spans } = args;
96
+ const frameSamples = Math.max(1, Math.round((FRAME_MS / 1000) * sampleRate));
97
+ const rms = frameRms(pcm, frameSamples);
98
+ const threshold = silenceThreshold(rms);
99
+ const toSample = (seconds) => clamp(Math.round(seconds * sampleRate), 0, pcm.length);
100
+ const cuts = [];
101
+ for (let b = 0; b < spans.length - 1; b++) {
102
+ const known = knownCutsSec?.[b];
103
+ const cut = known == null
104
+ ? cutInWindow({
105
+ startSample: toSample(spans[b].lastEnd),
106
+ endSample: toSample(spans[b + 1].firstStart),
107
+ frameSamples,
108
+ rms,
109
+ threshold,
110
+ })
111
+ : toSample(known);
112
+ cuts.push(Math.max(cut, cuts.at(-1) ?? 0));
113
+ }
114
+ return cuts;
115
+ }
116
+ export async function splitConversationTurns(args) {
117
+ const spans = assertTurnSplitAllowed(args);
118
+ if (!isDecodableSourceMediaType(args.mediaType)) {
119
+ throw new TurnSplitError({ reason: "undecodable_audio" });
120
+ }
121
+ const { pcm, sampleRate } = await decodeAudioToPcm16(args.audio, args.mediaType);
122
+ const cuts = planTurnCuts({
123
+ knownCutsSec: args.knownCutsSec,
124
+ pcm,
125
+ sampleRate,
126
+ spans,
127
+ });
128
+ const turns = await Promise.all(spans.map(async (_, turnIndex) => {
129
+ const startSample = turnIndex === 0 ? 0 : cuts[turnIndex - 1];
130
+ const endSample = cuts[turnIndex] ?? pcm.length;
131
+ const slice = pcm.subarray(startSample, endSample);
132
+ const converted = await applyOptionalOutputConversion({
133
+ audio: new Uint8Array(slice.buffer, slice.byteOffset, slice.byteLength),
134
+ mediaType: `audio/pcm;rate=${sampleRate}`,
135
+ output: args.output ?? { format: "wav" },
136
+ });
137
+ const startSec = startSample / sampleRate;
138
+ const durationSec = (endSample - startSample) / sampleRate;
139
+ return {
140
+ turnIndex,
141
+ audio: new DefaultGeneratedAudioFile({
142
+ data: converted.audio,
143
+ mediaType: converted.mediaType,
144
+ }),
145
+ startMs: startSec * 1000,
146
+ endMs: (endSample / sampleRate) * 1000,
147
+ timestamps: args.timestamps
148
+ .filter((w) => w.turnIndex === turnIndex)
149
+ .map((w) => ({
150
+ text: w.text,
151
+ start: clamp(w.start - startSec, 0, durationSec),
152
+ end: clamp(w.end - startSec, 0, durationSec),
153
+ })),
154
+ };
155
+ }));
156
+ return { pcm, sampleRate, turns };
157
+ }
158
+ //# sourceMappingURL=split-turns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-turns.js","sourceRoot":"","sources":["../../src/conversation/split-turns.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { type AudioOutput } from "../audio-output.js";
2
1
  import type { SpeechMetadata } from "../metadata.js";
3
2
  import type { PronunciationsInput } from "../pronunciations/types.js";
4
3
  import type { ResolvedModel, Voice } from "../speech-provider.js";
@@ -8,14 +7,12 @@ import type { ConversationTurn } from "./types.js";
8
7
  interface StitchInput<V extends Voice = Voice> {
9
8
  readonly abortSignal?: AbortSignal;
10
9
  readonly apiKey?: string;
11
- readonly deferOutputConversion?: boolean;
12
10
  readonly gapMs: number;
13
11
  readonly headers?: Record<string, string>;
14
12
  readonly instructions?: string;
15
13
  readonly maxConcurrency: number;
16
14
  readonly maxInputChars?: number;
17
15
  readonly maxRetries: number;
18
- readonly output?: AudioOutput;
19
16
  readonly pronunciations?: PronunciationsInput;
20
17
  readonly resolvedPerTurn: readonly ResolvedModel<V>[];
21
18
  readonly stitchOptionsPerTurn: readonly {
@@ -39,6 +36,7 @@ interface StitchOutput {
39
36
  readonly metadataPerTurn: readonly SpeechMetadata[];
40
37
  readonly providerMetadataPerTurn: readonly (Record<string, unknown> | undefined)[];
41
38
  readonly timestamps?: readonly ConversationWordTimestamp[];
39
+ readonly turnCutsSec: readonly number[];
42
40
  readonly warnings: readonly string[];
43
41
  }
44
42
  export declare function runStitch<V extends Voice>(input: StitchInput<V>): Promise<StitchOutput>;
@@ -1 +1 @@
1
- {"version":3,"file":"stitch.d.ts","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAOlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,UAAU,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,QAAQ,CAAC,oBAAoB,EAAE,SAAS;QACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,uBAAuB,EAAE,SAAS,CACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,SAAS,CACZ,EAAE,CAAC;IACJ,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAsB,SAAS,CAAC,CAAC,SAAS,KAAK,EAC7C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,YAAY,CAAC,CA2IvB"}
1
+ {"version":3,"file":"stitch.d.ts","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAQlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,UAAU,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,QAAQ,CAAC,oBAAoB,EAAE,SAAS;QACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,uBAAuB,EAAE,SAAS,CACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,SAAS,CACZ,EAAE,CAAC;IACJ,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAE3D,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAsB,SAAS,CAAC,CAAC,SAAS,KAAK,EAC7C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,YAAY,CAAC,CAsIvB"}
@@ -1,11 +1,10 @@
1
1
  import { decodeAudioToPcm16 } from "../audio-decode.js";
2
- import { applyOptionalOutputConversion, } from "../audio-output.js";
3
2
  import { mapWithConcurrency } from "../concurrency.js";
4
3
  import { TimestampValidationError, withTurnIndex } from "../errors.js";
5
4
  import { generateSpeech } from "../generate-speech.js";
6
5
  import { combineInstructions } from "../instructions.js";
7
6
  import { debug } from "../logger.js";
8
- import { concatPcmToWav, dbfsToInt16Rms, normalizeRms, stitchTargetRate, } from "./pcm-concat.js";
7
+ import { concatPcmToWavWithRanges, dbfsToInt16Rms, gapMidpointsSec, normalizeRms, stitchTargetRate, } from "./pcm-concat.js";
9
8
  export async function runStitch(input) {
10
9
  const start = performance.now();
11
10
  // Divide the call budget across active turns so nested chunking cannot exceed it.
@@ -54,15 +53,7 @@ export async function runStitch(input) {
54
53
  const segments = perTurn.map((p) => p.segment);
55
54
  const leveledSegments = normalizeRms(segments, input.volumeDbfs == null ? undefined : dbfsToInt16Rms(input.volumeDbfs));
56
55
  const targetSampleRate = stitchTargetRate(leveledSegments);
57
- const audio = await concatPcmToWav(leveledSegments, {
58
- gapMs: input.gapMs,
59
- targetSampleRate,
60
- });
61
- const { audio: finalAudio, mediaType } = await applyOptionalOutputConversion({
62
- audio,
63
- mediaType: "audio/wav",
64
- output: input.deferOutputConversion ? undefined : input.output,
65
- });
56
+ const { wav: audio, ranges } = await concatPcmToWavWithRanges(leveledSegments, { gapMs: input.gapMs, targetSampleRate });
66
57
  const totalSamples = perTurn.reduce((n, p) => n +
67
58
  Math.round((p.segment.pcm.length / p.segment.sampleRate) * targetSampleRate), 0) +
68
59
  (perTurn.length - 1) * Math.round((input.gapMs / 1000) * targetSampleRate);
@@ -100,8 +91,8 @@ export async function runStitch(input) {
100
91
  debug(`stitch: composed ${timestamps.length} word timestamps across ${perTurn.length} turn(s).`);
101
92
  }
102
93
  return {
103
- audio: finalAudio,
104
- mediaType,
94
+ audio,
95
+ mediaType: "audio/wav",
105
96
  metadata: {
106
97
  inputChars: input.turns.reduce((n, t) => n + t.text.length, 0),
107
98
  latencyMs: Math.round(performance.now() - start),
@@ -110,6 +101,7 @@ export async function runStitch(input) {
110
101
  metadataPerTurn,
111
102
  providerMetadataPerTurn,
112
103
  timestamps,
104
+ turnCutsSec: gapMidpointsSec(ranges, targetSampleRate),
113
105
  warnings,
114
106
  };
115
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stitch.js","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stitch.js","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,11 @@ export interface GenerateConversationOptions<V extends Voice = Voice, M extends
27
27
  readonly pronunciations?: PronunciationsInput;
28
28
  readonly providerOptions?: Record<string, unknown>;
29
29
  readonly speed?: number;
30
+ /**
31
+ * Also return `turns`: one audio clip per input turn, cut at the silence after each turn's last word. Requires
32
+ * `timestamps: true`. Throws `TurnSplitError` when turn boundaries can't be trusted.
33
+ */
34
+ readonly splitTurns?: boolean;
30
35
  readonly timestampProvider?: TimestampProvider;
31
36
  readonly timestamps?: boolean;
32
37
  readonly turns: readonly ConversationTurn<V>[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/conversation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IACvD,mDAAmD;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B,CAC1C,CAAC,SAAS,KAAK,GAAG,KAAK,EACvB,CAAC,SAAS,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,GAC3C,MAAM,GACN,aAAa,CAAC,CAAC,CAAC,GAChB,SAAS;IAEb,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/conversation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IACvD,mDAAmD;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B,CAC1C,CAAC,SAAS,KAAK,GAAG,KAAK,EACvB,CAAC,SAAS,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,GAC3C,MAAM,GACN,aAAa,CAAC,CAAC,CAAC,GAChB,SAAS;IAEb,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B"}