node-llama-cpp 3.0.0-beta.16 → 3.0.0-beta.18

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 (173) hide show
  1. package/README.md +8 -5
  2. package/dist/ChatWrapper.d.ts +1 -15
  3. package/dist/ChatWrapper.js +22 -32
  4. package/dist/ChatWrapper.js.map +1 -1
  5. package/dist/apiDocsOverrides.d.ts +1 -0
  6. package/dist/apiDocsOverrides.js +5 -0
  7. package/dist/apiDocsOverrides.js.map +1 -0
  8. package/dist/bindings/AddonTypes.d.ts +4 -1
  9. package/dist/bindings/getLlama.d.ts +5 -1
  10. package/dist/bindings/getLlama.js +11 -4
  11. package/dist/bindings/getLlama.js.map +1 -1
  12. package/dist/bindings/utils/hasBuildingFromSourceDependenciesInstalled.d.ts +3 -0
  13. package/dist/bindings/utils/hasBuildingFromSourceDependenciesInstalled.js +27 -0
  14. package/dist/bindings/utils/hasBuildingFromSourceDependenciesInstalled.js.map +1 -0
  15. package/dist/chatWrappers/FunctionaryChatWrapper.js +39 -40
  16. package/dist/chatWrappers/FunctionaryChatWrapper.js.map +1 -1
  17. package/dist/chatWrappers/{LlamaChatWrapper.d.ts → Llama2ChatWrapper.d.ts} +1 -1
  18. package/dist/chatWrappers/{LlamaChatWrapper.js → Llama2ChatWrapper.js} +3 -3
  19. package/dist/chatWrappers/Llama2ChatWrapper.js.map +1 -0
  20. package/dist/chatWrappers/Llama3ChatWrapper.d.ts +31 -0
  21. package/dist/chatWrappers/Llama3ChatWrapper.js +129 -0
  22. package/dist/chatWrappers/Llama3ChatWrapper.js.map +1 -0
  23. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.d.ts +2 -2
  24. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js +6 -2
  25. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js.map +1 -1
  26. package/dist/chatWrappers/generic/TemplateChatWrapper.d.ts +3 -4
  27. package/dist/chatWrappers/generic/TemplateChatWrapper.js +1 -2
  28. package/dist/chatWrappers/generic/TemplateChatWrapper.js.map +1 -1
  29. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.d.ts +42 -0
  30. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js +82 -0
  31. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js.map +1 -0
  32. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js +3 -3
  33. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js.map +1 -1
  34. package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +6 -4
  35. package/dist/chatWrappers/utils/resolveChatWrapper.js +23 -17
  36. package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
  37. package/dist/cli/cli.js +5 -3
  38. package/dist/cli/cli.js.map +1 -1
  39. package/dist/cli/commands/ChatCommand.d.ts +2 -0
  40. package/dist/cli/commands/ChatCommand.js +26 -9
  41. package/dist/cli/commands/ChatCommand.js.map +1 -1
  42. package/dist/cli/commands/CompleteCommand.d.ts +2 -0
  43. package/dist/cli/commands/CompleteCommand.js +24 -7
  44. package/dist/cli/commands/CompleteCommand.js.map +1 -1
  45. package/dist/cli/commands/DebugCommand.js +3 -5
  46. package/dist/cli/commands/DebugCommand.js.map +1 -1
  47. package/dist/cli/commands/DownloadCommand.d.ts +1 -1
  48. package/dist/cli/commands/DownloadCommand.js +2 -1
  49. package/dist/cli/commands/DownloadCommand.js.map +1 -1
  50. package/dist/cli/commands/InfillCommand.d.ts +2 -0
  51. package/dist/cli/commands/InfillCommand.js +24 -7
  52. package/dist/cli/commands/InfillCommand.js.map +1 -1
  53. package/dist/cli/commands/PullCommand.d.ts +12 -0
  54. package/dist/cli/commands/PullCommand.js +109 -0
  55. package/dist/cli/commands/PullCommand.js.map +1 -0
  56. package/dist/cli/commands/inspect/commands/InspectGgufCommand.d.ts +1 -0
  57. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js +23 -11
  58. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js.map +1 -1
  59. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.d.ts +2 -0
  60. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js +43 -11
  61. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js.map +1 -1
  62. package/dist/cli/recommendedModels.js +61 -0
  63. package/dist/cli/recommendedModels.js.map +1 -1
  64. package/dist/cli/utils/printCommonInfoLines.js +4 -3
  65. package/dist/cli/utils/printCommonInfoLines.js.map +1 -1
  66. package/dist/cli/utils/resolveCommandGgufPath.d.ts +3 -1
  67. package/dist/cli/utils/resolveCommandGgufPath.js +44 -39
  68. package/dist/cli/utils/resolveCommandGgufPath.js.map +1 -1
  69. package/dist/cli/utils/resolveModelRecommendationFileOptions.d.ts +1 -1
  70. package/dist/evaluator/LlamaChat/LlamaChat.d.ts +18 -2
  71. package/dist/evaluator/LlamaChat/LlamaChat.js +271 -186
  72. package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
  73. package/dist/evaluator/LlamaChat/utils/FunctionCallGrammar.js +3 -1
  74. package/dist/evaluator/LlamaChat/utils/FunctionCallGrammar.js.map +1 -1
  75. package/dist/evaluator/LlamaChatSession/LlamaChatSession.d.ts +22 -3
  76. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js +18 -7
  77. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js.map +1 -1
  78. package/dist/evaluator/LlamaCompletion.d.ts +2 -2
  79. package/dist/evaluator/LlamaCompletion.js +11 -13
  80. package/dist/evaluator/LlamaCompletion.js.map +1 -1
  81. package/dist/evaluator/LlamaContext/LlamaContext.d.ts +6 -11
  82. package/dist/evaluator/LlamaContext/LlamaContext.js +23 -16
  83. package/dist/evaluator/LlamaContext/LlamaContext.js.map +1 -1
  84. package/dist/evaluator/LlamaEmbeddingContext.d.ts +2 -10
  85. package/dist/evaluator/LlamaEmbeddingContext.js +10 -24
  86. package/dist/evaluator/LlamaEmbeddingContext.js.map +1 -1
  87. package/dist/evaluator/LlamaGrammar.d.ts +1 -1
  88. package/dist/evaluator/LlamaModel.d.ts +23 -3
  89. package/dist/evaluator/LlamaModel.js +32 -5
  90. package/dist/evaluator/LlamaModel.js.map +1 -1
  91. package/dist/evaluator/TokenBias.d.ts +1 -1
  92. package/dist/evaluator/TokenBias.js +3 -3
  93. package/dist/evaluator/TokenBias.js.map +1 -1
  94. package/dist/gguf/insights/GgufInsights.js +12 -12
  95. package/dist/gguf/insights/GgufInsights.js.map +1 -1
  96. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js +27 -3
  97. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js.map +1 -1
  98. package/dist/gguf/parser/parseGguf.js +5 -0
  99. package/dist/gguf/parser/parseGguf.js.map +1 -1
  100. package/dist/gguf/readGgufFileInfo.d.ts +5 -2
  101. package/dist/gguf/readGgufFileInfo.js +38 -10
  102. package/dist/gguf/readGgufFileInfo.js.map +1 -1
  103. package/dist/gguf/types/GgufFileInfoTypes.d.ts +32 -0
  104. package/dist/gguf/types/GgufFileInfoTypes.js.map +1 -1
  105. package/dist/gguf/types/GgufMetadataTypes.d.ts +4 -0
  106. package/dist/gguf/types/GgufMetadataTypes.js.map +1 -1
  107. package/dist/gguf/utils/getGgufMetadataArchitectureData.js +1 -1
  108. package/dist/gguf/utils/getGgufMetadataArchitectureData.js.map +1 -1
  109. package/dist/gguf/utils/resolveBinarySplitGgufPartUrls.d.ts +2 -0
  110. package/dist/gguf/utils/resolveBinarySplitGgufPartUrls.js +39 -0
  111. package/dist/gguf/utils/resolveBinarySplitGgufPartUrls.js.map +1 -0
  112. package/dist/gguf/utils/resolveSplitGgufParts.d.ts +7 -0
  113. package/dist/gguf/utils/resolveSplitGgufParts.js +55 -0
  114. package/dist/gguf/utils/resolveSplitGgufParts.js.map +1 -0
  115. package/dist/index.d.ts +9 -5
  116. package/dist/index.js +7 -3
  117. package/dist/index.js.map +1 -1
  118. package/dist/types.d.ts +21 -1
  119. package/dist/types.js.map +1 -1
  120. package/dist/utils/LlamaText.d.ts +31 -21
  121. package/dist/utils/LlamaText.js +253 -223
  122. package/dist/utils/LlamaText.js.map +1 -1
  123. package/dist/utils/StopGenerationDetector.d.ts +1 -1
  124. package/dist/utils/StopGenerationDetector.js +21 -18
  125. package/dist/utils/StopGenerationDetector.js.map +1 -1
  126. package/dist/utils/TokenStreamRegulator.d.ts +4 -2
  127. package/dist/utils/TokenStreamRegulator.js +22 -4
  128. package/dist/utils/TokenStreamRegulator.js.map +1 -1
  129. package/dist/utils/createModelDownloader.d.ts +99 -0
  130. package/dist/utils/createModelDownloader.js +226 -0
  131. package/dist/utils/createModelDownloader.js.map +1 -0
  132. package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.js +18 -8
  133. package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.js.map +1 -1
  134. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js +15 -11
  135. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js.map +1 -1
  136. package/dist/utils/parseTextTemplate.d.ts +2 -2
  137. package/dist/utils/parseTextTemplate.js +2 -2
  138. package/dist/utils/runtime.d.ts +4 -0
  139. package/dist/utils/runtime.js +8 -0
  140. package/dist/utils/runtime.js.map +1 -0
  141. package/dist/utils/utilTypes.d.ts +3 -0
  142. package/dist/utils/utilTypes.js +2 -0
  143. package/dist/utils/utilTypes.js.map +1 -0
  144. package/llama/addon.cpp +67 -14
  145. package/llama/binariesGithubRelease.json +1 -1
  146. package/llama/gitRelease.bundle +0 -0
  147. package/llama/grammars/README.md +1 -1
  148. package/llama/llama.cpp.info.json +1 -1
  149. package/llamaBins/linux-arm64/_nlcBuildMetadata.json +1 -1
  150. package/llamaBins/linux-arm64/llama-addon.node +0 -0
  151. package/llamaBins/linux-armv7l/_nlcBuildMetadata.json +1 -1
  152. package/llamaBins/linux-armv7l/llama-addon.node +0 -0
  153. package/llamaBins/linux-x64/_nlcBuildMetadata.json +1 -1
  154. package/llamaBins/linux-x64/llama-addon.node +0 -0
  155. package/llamaBins/linux-x64-cuda/_nlcBuildMetadata.json +1 -1
  156. package/llamaBins/linux-x64-cuda/llama-addon.node +0 -0
  157. package/llamaBins/linux-x64-vulkan/_nlcBuildMetadata.json +1 -1
  158. package/llamaBins/linux-x64-vulkan/llama-addon.node +0 -0
  159. package/llamaBins/mac-arm64-metal/_nlcBuildMetadata.json +1 -1
  160. package/llamaBins/mac-arm64-metal/default.metallib +0 -0
  161. package/llamaBins/mac-arm64-metal/llama-addon.node +0 -0
  162. package/llamaBins/mac-x64/_nlcBuildMetadata.json +1 -1
  163. package/llamaBins/mac-x64/llama-addon.node +0 -0
  164. package/llamaBins/win-arm64/_nlcBuildMetadata.json +1 -1
  165. package/llamaBins/win-arm64/llama-addon.node +0 -0
  166. package/llamaBins/win-x64/_nlcBuildMetadata.json +1 -1
  167. package/llamaBins/win-x64/llama-addon.node +0 -0
  168. package/llamaBins/win-x64-cuda/_nlcBuildMetadata.json +1 -1
  169. package/llamaBins/win-x64-cuda/llama-addon.node +0 -0
  170. package/llamaBins/win-x64-vulkan/_nlcBuildMetadata.json +1 -1
  171. package/llamaBins/win-x64-vulkan/llama-addon.node +0 -0
  172. package/package.json +9 -5
  173. package/dist/chatWrappers/LlamaChatWrapper.js.map +0 -1
@@ -7,20 +7,20 @@ export class StopGenerationDetector {
7
7
  const currentActiveChecks = this._activeChecks;
8
8
  this._activeChecks = new Set();
9
9
  for (const check of currentActiveChecks) {
10
- let lockUsed = false;
10
+ let checkKept = false;
11
11
  if (text.length > 0)
12
- lockUsed ||= this._checkTriggerPart(check, text);
12
+ this._checkTriggerPart(check, text);
13
13
  else {
14
14
  this._activeChecks.add(check);
15
- lockUsed = true;
15
+ checkKept = true;
16
16
  }
17
17
  if (tokens.length > 0)
18
- lockUsed ||= this._checkTriggerPart(check, tokens);
18
+ this._checkTriggerPart(check, tokens);
19
19
  else {
20
20
  this._activeChecks.add(check);
21
- lockUsed = true;
21
+ checkKept = true;
22
22
  }
23
- if (!lockUsed)
23
+ if (!checkKept)
24
24
  check.queuedTokenReleaseLock?.dispose();
25
25
  }
26
26
  if (!startNewChecks)
@@ -34,9 +34,8 @@ export class StopGenerationDetector {
34
34
  queuedTokenReleaseLock: queuedTokenRelease?.createTextIndexLock(i),
35
35
  currentPart
36
36
  };
37
- const lockUsed = this._checkTriggerPart(textCheck, text.slice(i + 1));
38
- if (!lockUsed)
39
- textCheck.queuedTokenReleaseLock?.dispose();
37
+ this._checkTriggerPart(textCheck, text.slice(i + 1));
38
+ textCheck.queuedTokenReleaseLock?.dispose();
40
39
  }
41
40
  for (let i = 0; i < tokens.length; i++) {
42
41
  const token = tokens[i];
@@ -47,9 +46,8 @@ export class StopGenerationDetector {
47
46
  queuedTokenReleaseLock: queuedTokenRelease?.createTokenIndexLock(i),
48
47
  currentPart
49
48
  };
50
- const lockUsed = this._checkTriggerPart(tokenCheck, tokens.slice(i + 1));
51
- if (!lockUsed)
52
- tokenCheck.queuedTokenReleaseLock?.dispose();
49
+ this._checkTriggerPart(tokenCheck, tokens.slice(i + 1));
50
+ tokenCheck.queuedTokenReleaseLock?.dispose();
53
51
  }
54
52
  }
55
53
  addStopTrigger(stopTrigger, completeEvent) {
@@ -140,7 +138,7 @@ export class StopGenerationDetector {
140
138
  for (let i = 0; i < value.length && part != null; i++) {
141
139
  const item = value[i];
142
140
  if (part.next == null) {
143
- this._addFoundStop(part, value.slice(i), check.queuedTokenReleaseLock);
141
+ this._addFoundStop(part, value.slice(i), check.queuedTokenReleaseLock?.duplicate?.());
144
142
  return true;
145
143
  }
146
144
  if (part.next.has(item)) {
@@ -152,24 +150,29 @@ export class StopGenerationDetector {
152
150
  if (part == null)
153
151
  return false;
154
152
  if (part.next == null) {
155
- this._addFoundStop(part, undefined, check.queuedTokenReleaseLock);
153
+ this._addFoundStop(part, undefined, check.queuedTokenReleaseLock?.duplicate?.());
156
154
  return true;
157
155
  }
158
156
  else {
159
157
  this._activeChecks.add({
160
158
  ...check,
161
- currentPart: part
159
+ currentPart: part,
160
+ queuedTokenReleaseLock: check.queuedTokenReleaseLock?.duplicate?.()
162
161
  });
163
162
  return true;
164
163
  }
165
164
  }
166
165
  static resolveStopTriggers(stopTriggers, tokenizer) {
167
- return stopTriggers.map((stopTrigger) => {
166
+ return stopTriggers
167
+ .map((stopTrigger) => {
168
168
  if (isLlamaText(stopTrigger))
169
169
  return StopGenerationDetector.resolveLlamaTextTrigger(stopTrigger, tokenizer);
170
+ else if (typeof stopTrigger === "string")
171
+ return simplifyStopTrigger([stopTrigger]);
170
172
  else
171
173
  return simplifyStopTrigger(stopTrigger);
172
- });
174
+ })
175
+ .filter((stopTrigger) => stopTrigger.length > 0);
173
176
  }
174
177
  static resolveLlamaTextTrigger(llamaText, tokenizer) {
175
178
  return simplifyStopTrigger(llamaText.values
@@ -180,7 +183,7 @@ export class StopGenerationDetector {
180
183
  else if (value instanceof SpecialToken)
181
184
  return value.tokenize(tokenizer);
182
185
  else if (value instanceof SpecialTokensText)
183
- return value.tokenize(tokenizer, true);
186
+ return value.tokenizeSpecialTokensOnly(tokenizer);
184
187
  return value;
185
188
  })
186
189
  .flat(1));
@@ -1 +1 @@
1
- {"version":3,"file":"StopGenerationDetector.js","sourceRoot":"","sources":["../../src/utils/StopGenerationDetector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StopGenerationDetector.js","sourceRoot":"","sources":["../../src/utils/StopGenerationDetector.ts"],"names":[],"mappings":"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"}
@@ -12,19 +12,21 @@ export declare class TokenStreamRegulator {
12
12
  getAllQueuedChunkTokens(): Token[];
13
13
  }
14
14
  export declare class QueuedTokenRelease {
15
- readonly tokens: readonly Token[];
16
- readonly text: string;
17
15
  private constructor();
16
+ get tokens(): readonly Token[];
17
+ get text(): string;
18
18
  get isFree(): boolean;
19
19
  get isPartiallyFree(): boolean;
20
20
  getFreeTextIndex(): number;
21
21
  getFreeTokenIndex(): number;
22
22
  createTextIndexLock(startIndex: number): QueuedTokenReleaseLock;
23
23
  createTokenIndexLock(startIndex: number): QueuedTokenReleaseLock;
24
+ modifyTokensAndText(tokens: readonly Token[], text: string): void;
24
25
  }
25
26
  export declare class QueuedTokenReleaseLock {
26
27
  private constructor();
27
28
  get index(): number;
29
+ duplicate(): QueuedTokenReleaseLock;
28
30
  dispose(): void;
29
31
  [Symbol.dispose](): void;
30
32
  }
@@ -1,3 +1,4 @@
1
+ import { DisposedError } from "lifecycle-utils";
1
2
  export class TokenStreamRegulator {
2
3
  /** @internal */ _queue = [];
3
4
  addChunk({ tokens, text }) {
@@ -31,11 +32,17 @@ export class TokenStreamRegulator {
31
32
  export class QueuedTokenRelease {
32
33
  /** @internal */ _textLocks = new Set();
33
34
  /** @internal */ _tokenLocks = new Set();
34
- tokens;
35
- text;
35
+ /** @internal */ _tokens;
36
+ /** @internal */ _text;
36
37
  constructor(tokens, text) {
37
- this.tokens = tokens;
38
- this.text = text;
38
+ this._tokens = tokens;
39
+ this._text = text;
40
+ }
41
+ get tokens() {
42
+ return this._tokens;
43
+ }
44
+ get text() {
45
+ return this._text;
39
46
  }
40
47
  get isFree() {
41
48
  return this._textLocks.size === 0 && this._tokenLocks.size === 0;
@@ -67,6 +74,10 @@ export class QueuedTokenRelease {
67
74
  this._tokenLocks.add(lock);
68
75
  return lock;
69
76
  }
77
+ modifyTokensAndText(tokens, text) {
78
+ this._tokens = tokens;
79
+ this._text = text;
80
+ }
70
81
  /** @internal */
71
82
  static _create(tokens, text) {
72
83
  return new QueuedTokenRelease(tokens, text);
@@ -82,6 +93,13 @@ export class QueuedTokenReleaseLock {
82
93
  get index() {
83
94
  return this._index;
84
95
  }
96
+ duplicate() {
97
+ if (!this._locks.has(this))
98
+ throw new DisposedError();
99
+ const lock = QueuedTokenReleaseLock._create(this._index, this._locks);
100
+ this._locks.add(lock);
101
+ return lock;
102
+ }
85
103
  dispose() {
86
104
  this._locks.delete(this);
87
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TokenStreamRegulator.js","sourceRoot":"","sources":["../../src/utils/TokenStreamRegulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TokenStreamRegulator.js","sourceRoot":"","sources":["../../src/utils/TokenStreamRegulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /// <reference types="node" />
2
+ export type ModelDownloaderOptions = {
3
+ modelUrl: string;
4
+ /**
5
+ * The directory to save the model file to.
6
+ * Default to `node-llama-cpp`'s default global models directory (`~/.node-llama-cpp/models`).
7
+ */
8
+ dirPath?: string;
9
+ fileName?: string;
10
+ headers?: Record<string, string>;
11
+ showCliProgress?: boolean;
12
+ onProgress?: (status: {
13
+ totalSize: number;
14
+ downloadedSize: number;
15
+ }) => void;
16
+ /**
17
+ * If true, the downloader will skip the download if the file already exists, and its size matches the size of the remote file.
18
+ *
19
+ * Defaults to `true`.
20
+ */
21
+ skipExisting?: boolean;
22
+ /**
23
+ * If true, the temporary file will be deleted when the download is canceled.
24
+ *
25
+ * Defaults to `true`.
26
+ */
27
+ deleteTempFileOnCancel?: boolean;
28
+ };
29
+ /**
30
+ * Create a model downloader to download a model from a URL.
31
+ * Uses [`ipull`](https://github.com/ido-pluto/ipull) to download a model file as fast as possible with parallel connections
32
+ * and other optimizations.
33
+ *
34
+ * If the url points to a `.gguf` file that is split into multiple parts (for example, `model-00001-of-00009.gguf`),
35
+ * all the parts will be downloaded to the specified directory.
36
+ *
37
+ * If the url points to a `.gguf` file that is binary spliced into multiple parts (for example, `model.gguf.part1of9`),
38
+ * all the parts will be spliced into a single file and be downloaded to the specified directory.
39
+ *
40
+ * If the url points to a `.gguf` file that is not split or binary spliced (for example, `model.gguf`),
41
+ * the file will be downloaded to the specified directory.
42
+ * @example
43
+ * ```typescript
44
+ * import {fileURLToPath} from "url";
45
+ * import path from "path";
46
+ * import {createModelDownloader, getLlama} from "node-llama-cpp";
47
+ *
48
+ * const __dirname = path.dirname(fileURLToPath(import.meta.url));
49
+ *
50
+ * const downloader = await createModelDownloader({
51
+ * modelUrl: "https://example.com/model.gguf",
52
+ * dirPath: path.join(__dirname, "models")
53
+ * });
54
+ * const modelPath = await downloader.download();
55
+ *
56
+ * const llama = await getLlama();
57
+ * const model = llama.loadModel({
58
+ * modelPath
59
+ * });
60
+ * ```
61
+ */
62
+ export declare function createModelDownloader(options: ModelDownloaderOptions): Promise<ModelDownloader>;
63
+ export declare class ModelDownloader {
64
+ private constructor();
65
+ /**
66
+ * The filename of the entrypoint file that should be used to load the model.
67
+ */
68
+ get entrypointFilename(): string;
69
+ /**
70
+ * The full path to the entrypoint file that should be used to load the model.
71
+ */
72
+ get entrypointFilePath(): string;
73
+ /**
74
+ * If the model is binary spliced from multiple parts, this will return the number of those binary parts.
75
+ */
76
+ get splitBinaryParts(): number | undefined;
77
+ /**
78
+ * The total number of files that will be saved to the directory.
79
+ * For split files, this will be the number of split parts, as multiple files will be saved.
80
+ * For binary-split files, this will be 1, as the parts will be spliced into a single file.
81
+ */
82
+ get totalFiles(): number;
83
+ get totalSize(): number;
84
+ get downloadedSize(): number;
85
+ /**
86
+ * @returns The path to the entrypoint file that should be used to load the model
87
+ */
88
+ download({ signal }?: {
89
+ signal?: AbortSignal;
90
+ }): Promise<string>;
91
+ cancel({ deleteTempFile }?: {
92
+ /**
93
+ * Delete the temporary file that was created during the download.
94
+ *
95
+ * Defaults to the value of `deleteTempFileOnCancel` in the constructor.
96
+ */
97
+ deleteTempFile?: boolean;
98
+ }): Promise<void>;
99
+ }
@@ -0,0 +1,226 @@
1
+ import process from "process";
2
+ import path from "path";
3
+ import { downloadFile, downloadSequence } from "ipull";
4
+ import fs from "fs-extra";
5
+ import { normalizeGgufDownloadUrl } from "../gguf/utils/normalizeGgufDownloadUrl.js";
6
+ import { createSplitPartFilename, resolveSplitGgufParts } from "../gguf/utils/resolveSplitGgufParts.js";
7
+ import { getFilenameForBinarySplitGgufPartUrls, resolveBinarySplitGgufPartUrls } from "../gguf/utils/resolveBinarySplitGgufPartUrls.js";
8
+ import { cliModelsDirectory } from "../config.js";
9
+ /**
10
+ * Create a model downloader to download a model from a URL.
11
+ * Uses [`ipull`](https://github.com/ido-pluto/ipull) to download a model file as fast as possible with parallel connections
12
+ * and other optimizations.
13
+ *
14
+ * If the url points to a `.gguf` file that is split into multiple parts (for example, `model-00001-of-00009.gguf`),
15
+ * all the parts will be downloaded to the specified directory.
16
+ *
17
+ * If the url points to a `.gguf` file that is binary spliced into multiple parts (for example, `model.gguf.part1of9`),
18
+ * all the parts will be spliced into a single file and be downloaded to the specified directory.
19
+ *
20
+ * If the url points to a `.gguf` file that is not split or binary spliced (for example, `model.gguf`),
21
+ * the file will be downloaded to the specified directory.
22
+ * @example
23
+ * ```typescript
24
+ * import {fileURLToPath} from "url";
25
+ * import path from "path";
26
+ * import {createModelDownloader, getLlama} from "node-llama-cpp";
27
+ *
28
+ * const __dirname = path.dirname(fileURLToPath(import.meta.url));
29
+ *
30
+ * const downloader = await createModelDownloader({
31
+ * modelUrl: "https://example.com/model.gguf",
32
+ * dirPath: path.join(__dirname, "models")
33
+ * });
34
+ * const modelPath = await downloader.download();
35
+ *
36
+ * const llama = await getLlama();
37
+ * const model = llama.loadModel({
38
+ * modelPath
39
+ * });
40
+ * ```
41
+ */
42
+ export async function createModelDownloader(options) {
43
+ const downloader = ModelDownloader._create(options);
44
+ await downloader._init();
45
+ return downloader;
46
+ }
47
+ export class ModelDownloader {
48
+ /** @internal */ _modelUrl;
49
+ /** @internal */ _dirPath;
50
+ /** @internal */ _fileName;
51
+ /** @internal */ _headers;
52
+ /** @internal */ _showCliProgress;
53
+ /** @internal */ _onProgress;
54
+ /** @internal */ _deleteTempFileOnCancel;
55
+ /** @internal */ _skipExisting;
56
+ /** @internal */ _downloader;
57
+ /** @internal */ _specificFileDownloaders = [];
58
+ /** @internal */ _entrypointFilename;
59
+ /** @internal */ _splitBinaryParts;
60
+ /** @internal */ _totalFiles;
61
+ constructor({ modelUrl, dirPath = cliModelsDirectory, fileName, headers, showCliProgress = false, onProgress, deleteTempFileOnCancel = true, skipExisting = true }) {
62
+ if (modelUrl == null || dirPath == null)
63
+ throw new Error("modelUrl and dirPath cannot be null");
64
+ this._modelUrl = normalizeGgufDownloadUrl(modelUrl);
65
+ this._dirPath = path.resolve(process.cwd(), dirPath);
66
+ this._fileName = fileName;
67
+ this._headers = headers;
68
+ this._showCliProgress = showCliProgress;
69
+ this._onProgress = onProgress;
70
+ this._deleteTempFileOnCancel = deleteTempFileOnCancel;
71
+ this._skipExisting = skipExisting;
72
+ }
73
+ /**
74
+ * The filename of the entrypoint file that should be used to load the model.
75
+ */
76
+ get entrypointFilename() {
77
+ return this._entrypointFilename;
78
+ }
79
+ /**
80
+ * The full path to the entrypoint file that should be used to load the model.
81
+ */
82
+ get entrypointFilePath() {
83
+ return path.join(this._dirPath, this.entrypointFilename);
84
+ }
85
+ /**
86
+ * If the model is binary spliced from multiple parts, this will return the number of those binary parts.
87
+ */
88
+ get splitBinaryParts() {
89
+ return this._splitBinaryParts;
90
+ }
91
+ /**
92
+ * The total number of files that will be saved to the directory.
93
+ * For split files, this will be the number of split parts, as multiple files will be saved.
94
+ * For binary-split files, this will be 1, as the parts will be spliced into a single file.
95
+ */
96
+ get totalFiles() {
97
+ return this._totalFiles;
98
+ }
99
+ get totalSize() {
100
+ return this._downloader.downloadStatues
101
+ .map(status => status.totalBytes)
102
+ .reduce((acc, totalBytes) => acc + totalBytes, 0);
103
+ }
104
+ get downloadedSize() {
105
+ return this._downloader.downloadStatues
106
+ .map(status => status.transferredBytes)
107
+ .reduce((acc, transferredBytes) => acc + transferredBytes, 0);
108
+ }
109
+ /**
110
+ * @returns The path to the entrypoint file that should be used to load the model
111
+ */
112
+ async download({ signal } = {}) {
113
+ if (signal?.aborted)
114
+ throw signal.reason;
115
+ if (this._skipExisting) {
116
+ if (this._specificFileDownloaders.length === 1 && await fs.pathExists(this.entrypointFilePath)) {
117
+ const fileStat = await fs.stat(this.entrypointFilePath);
118
+ if (this._specificFileDownloaders[0].status.totalBytes === fileStat.size)
119
+ return this.entrypointFilePath;
120
+ }
121
+ else {
122
+ // TODO: skip existing split files
123
+ }
124
+ }
125
+ const onAbort = () => {
126
+ signal?.removeEventListener("abort", onAbort);
127
+ this.cancel();
128
+ };
129
+ if (signal != null)
130
+ signal.addEventListener("abort", onAbort);
131
+ try {
132
+ if (this._onProgress)
133
+ this._downloader.on("progress", this._onDownloadProgress);
134
+ await this._downloader.download();
135
+ }
136
+ catch (err) {
137
+ if (signal?.aborted)
138
+ throw signal.reason;
139
+ throw err;
140
+ }
141
+ finally {
142
+ if (this._onProgress)
143
+ this._downloader.off("progress", this._onDownloadProgress);
144
+ if (signal != null)
145
+ signal.removeEventListener("abort", onAbort);
146
+ }
147
+ return this.entrypointFilePath;
148
+ }
149
+ async cancel({ deleteTempFile = this._deleteTempFileOnCancel } = {}) {
150
+ for (const downloader of this._specificFileDownloaders) {
151
+ if (deleteTempFile)
152
+ await downloader.closeAndDeleteFile();
153
+ else
154
+ await downloader.close();
155
+ }
156
+ if (this._downloader !== this._specificFileDownloaders[0])
157
+ await this._downloader?.close();
158
+ }
159
+ /** @internal */
160
+ _onDownloadProgress() {
161
+ this._onProgress?.({
162
+ totalSize: this.totalSize,
163
+ downloadedSize: this.downloadedSize
164
+ });
165
+ }
166
+ /** @internal */
167
+ async _init() {
168
+ const binarySplitPartUrls = resolveBinarySplitGgufPartUrls(this._modelUrl);
169
+ await fs.ensureDir(this._dirPath);
170
+ if (binarySplitPartUrls instanceof Array) {
171
+ this._downloader = await downloadFile({
172
+ partURLs: binarySplitPartUrls,
173
+ directory: this._dirPath,
174
+ fileName: this._fileName ?? getFilenameForBinarySplitGgufPartUrls(binarySplitPartUrls),
175
+ cliProgress: this._showCliProgress,
176
+ headers: this._headers ?? {}
177
+ });
178
+ this._specificFileDownloaders.push(this._downloader);
179
+ this._entrypointFilename = this._downloader.fileName;
180
+ this._splitBinaryParts = binarySplitPartUrls.length;
181
+ this._totalFiles = 1;
182
+ if (this._downloader.fileName == null || this._downloader.fileName === "")
183
+ throw new Error("Failed to get the file name from the given URL");
184
+ return;
185
+ }
186
+ const splitGgufPartUrls = resolveSplitGgufParts(this._modelUrl);
187
+ if (splitGgufPartUrls.length === 1) {
188
+ this._downloader = await downloadFile({
189
+ url: splitGgufPartUrls[0],
190
+ directory: this._dirPath,
191
+ fileName: this._fileName ?? undefined,
192
+ cliProgress: this._showCliProgress,
193
+ headers: this._headers ?? {}
194
+ });
195
+ this._specificFileDownloaders.push(this._downloader);
196
+ this._entrypointFilename = this._downloader.fileName;
197
+ this._totalFiles = 1;
198
+ if (this._downloader.fileName == null || this._downloader.fileName === "")
199
+ throw new Error("Failed to get the file name from the given URL");
200
+ return;
201
+ }
202
+ const partDownloads = splitGgufPartUrls.map((url, index) => downloadFile({
203
+ url,
204
+ directory: this._dirPath,
205
+ fileName: this._fileName != null
206
+ ? createSplitPartFilename(this._fileName, index + 1, splitGgufPartUrls.length)
207
+ : undefined,
208
+ headers: this._headers ?? {}
209
+ }));
210
+ this._downloader = await downloadSequence({
211
+ cliProgress: this._showCliProgress
212
+ }, ...partDownloads);
213
+ const firstDownload = await partDownloads[0];
214
+ this._specificFileDownloaders = await Promise.all(partDownloads);
215
+ this._entrypointFilename = firstDownload.fileName;
216
+ this._totalFiles = partDownloads.length;
217
+ if (this._entrypointFilename == null || this._entrypointFilename === "")
218
+ throw new Error("Failed to get the file name from the given URL");
219
+ return;
220
+ }
221
+ /** @internal */
222
+ static _create(options) {
223
+ return new ModelDownloader(options);
224
+ }
225
+ }
226
+ //# sourceMappingURL=createModelDownloader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createModelDownloader.js","sourceRoot":"","sources":["../../src/utils/createModelDownloader.ts"],"names":[],"mappings":"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"}
@@ -29,15 +29,18 @@ export async function findCharacterRemovalCountToFitChatHistoryInContext({ compr
29
29
  removedCharactersCount: initialCharactersRemovalCount,
30
30
  compressedChatHistory: latestCompressionAttempt.compressedHistory
31
31
  };
32
- for (let compressionAttempts = 0, decompressionAttempts = 0; latestCompressionAttempt.tokensCount !== tokensCountToFit;) {
32
+ let bestCompressionAttempt = latestCompressionAttempt;
33
+ for (let compressionAttempts = 0, decompressionAttempts = 0; bestCompressionAttempt.tokensCount !== tokensCountToFit;) {
33
34
  if (compressionAttempts > 0) {
34
- currentEstimatedCharactersPerToken =
35
- Math.abs(latestCompressionAttempt.characterRemovalCount - firstCompressionAttempt.characterRemovalCount) /
36
- Math.abs(latestCompressionAttempt.tokensCount - firstCompressionAttempt.tokensCount);
37
- if (!Number.isFinite(currentEstimatedCharactersPerToken))
35
+ if (latestCompressionAttempt.tokensCount != firstCompressionAttempt.tokensCount &&
36
+ latestCompressionAttempt.characterRemovalCount != firstCompressionAttempt.characterRemovalCount)
37
+ currentEstimatedCharactersPerToken =
38
+ Math.abs(latestCompressionAttempt.characterRemovalCount - firstCompressionAttempt.characterRemovalCount) /
39
+ Math.abs(latestCompressionAttempt.tokensCount - firstCompressionAttempt.tokensCount);
40
+ if (!Number.isFinite(currentEstimatedCharactersPerToken) || currentEstimatedCharactersPerToken === 0)
38
41
  currentEstimatedCharactersPerToken = estimatedCharactersPerToken;
39
42
  }
40
- const tokensLeftToRemove = tokensCountToFit - latestCompressionAttempt.tokensCount;
43
+ const tokensLeftToRemove = latestCompressionAttempt.tokensCount - tokensCountToFit;
41
44
  let additionalCharactersToRemove = Math.round(tokensLeftToRemove * currentEstimatedCharactersPerToken);
42
45
  if (additionalCharactersToRemove === 0) {
43
46
  if (tokensLeftToRemove > 0)
@@ -52,10 +55,17 @@ export async function findCharacterRemovalCountToFitChatHistoryInContext({ compr
52
55
  if (decompressionAttempts >= maxDecompressionAttempts)
53
56
  break;
54
57
  latestCompressionAttempt = await getResultForCharacterRemovalCount(latestCompressionAttempt.characterRemovalCount + additionalCharactersToRemove);
58
+ if ((bestCompressionAttempt.tokensCount > tokensCountToFit &&
59
+ latestCompressionAttempt.tokensCount <= bestCompressionAttempt.tokensCount) || (bestCompressionAttempt.tokensCount < tokensCountToFit &&
60
+ latestCompressionAttempt.tokensCount < tokensCountToFit &&
61
+ latestCompressionAttempt.tokensCount > bestCompressionAttempt.tokensCount) || (bestCompressionAttempt.tokensCount <= tokensCountToFit &&
62
+ latestCompressionAttempt.tokensCount <= tokensCountToFit &&
63
+ latestCompressionAttempt.characterRemovalCount < bestCompressionAttempt.characterRemovalCount))
64
+ bestCompressionAttempt = latestCompressionAttempt;
55
65
  }
56
66
  return {
57
- removedCharactersCount: latestCompressionAttempt.characterRemovalCount,
58
- compressedChatHistory: latestCompressionAttempt.compressedHistory
67
+ removedCharactersCount: bestCompressionAttempt.characterRemovalCount,
68
+ compressedChatHistory: bestCompressionAttempt.compressedHistory
59
69
  };
60
70
  }
61
71
  //# sourceMappingURL=findCharacterRemovalCountToFitChatHistoryInContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"findCharacterRemovalCountToFitChatHistoryInContext.js","sourceRoot":"","sources":["../../src/utils/findCharacterRemovalCountToFitChatHistoryInContext.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,kDAAkD,CAAC,EACrE,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,6BAA6B,GAAG,CAAC,EACjC,2BAA2B,GAAG,CAAC,EAC/B,wBAAwB,GAAG,CAAC,EAY/B;IAIG,SAAS,4BAA4B,CAAC,WAAuC;QACzE,MAAM,EAAC,WAAW,EAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACnE,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAClD,CAAC;IAED,KAAK,UAAU,iCAAiC,CAAC,qBAA6B;QAC1E,IAAI,qBAAqB,KAAK,CAAC;YAC3B,OAAO;gBACH,iBAAiB,EAAE,WAAW;gBAC9B,WAAW,EAAE,4BAA4B,CAAC,WAAW,CAAC;gBACtD,qBAAqB;aACxB,CAAC;QAEN,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC;YAChD,WAAW;YACX,kBAAkB,EAAE,qBAAqB;SAC5C,CAAC,CAAC;QAEH,OAAO;YACH,iBAAiB;YACjB,WAAW,EAAE,4BAA4B,CAAC,iBAAiB,CAAC;YAC5D,qBAAqB;SACxB,CAAC;IACN,CAAC;IAED,IAAI,wBAAwB,GAAG,MAAM,iCAAiC,CAAC,6BAA6B,CAAC,CAAC;IACtG,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;IACzD,IAAI,kCAAkC,GAAG,2BAA2B,CAAC;IAErE,IAAI,wBAAwB,CAAC,WAAW,KAAK,gBAAgB;QACzD,CAAC,wBAAwB,CAAC,WAAW,GAAG,gBAAgB,IAAI,wBAAwB,CAAC,qBAAqB,KAAK,CAAC,CAAC;QAEjH,OAAO;YACH,sBAAsB,EAAE,6BAA6B;YACrD,qBAAqB,EAAE,wBAAwB,CAAC,iBAAiB;SACpE,CAAC;IAEN,KACI,IAAI,mBAAmB,GAAG,CAAC,EAAE,qBAAqB,GAAG,CAAC,EACtD,wBAAwB,CAAC,WAAW,KAAK,gBAAgB,GAC3D;QACE,IAAI,mBAAmB,GAAG,CAAC,EAAE;YACzB,kCAAkC;gBAC9B,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,qBAAqB,GAAG,uBAAuB,CAAC,qBAAqB,CAAC;oBACxG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,WAAW,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAEzF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC;gBACpD,kCAAkC,GAAG,2BAA2B,CAAC;SACxE;QAED,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,wBAAwB,CAAC,WAAW,CAAC;QACnF,IAAI,4BAA4B,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,kCAAkC,CAAC,CAAC;QAEvG,IAAI,4BAA4B,KAAK,CAAC,EAAE;YACpC,IAAI,kBAAkB,GAAG,CAAC;gBACtB,4BAA4B,GAAG,CAAC,CAAC;iBAChC,IAAI,kBAAkB,GAAG,CAAC;gBAC3B,4BAA4B,GAAG,CAAC,CAAC,CAAC;SACzC;QAED,IAAI,kBAAkB,GAAG,CAAC;YACtB,mBAAmB,EAAE,CAAC;aACrB,IAAI,kBAAkB,GAAG,CAAC;YAC3B,qBAAqB,EAAE,CAAC;QAE5B,IAAI,qBAAqB,IAAI,wBAAwB;YACjD,MAAM;QAEV,wBAAwB,GAAG,MAAM,iCAAiC,CAC9D,wBAAwB,CAAC,qBAAqB,GAAG,4BAA4B,CAChF,CAAC;KACL;IAED,OAAO;QACH,sBAAsB,EAAE,wBAAwB,CAAC,qBAAqB;QACtE,qBAAqB,EAAE,wBAAwB,CAAC,iBAAiB;KACpE,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"findCharacterRemovalCountToFitChatHistoryInContext.js","sourceRoot":"","sources":["../../src/utils/findCharacterRemovalCountToFitChatHistoryInContext.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,kDAAkD,CAAC,EACrE,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,6BAA6B,GAAG,CAAC,EACjC,2BAA2B,GAAG,CAAC,EAC/B,wBAAwB,GAAG,CAAC,EAY/B;IAIG,SAAS,4BAA4B,CAAC,WAAuC;QACzE,MAAM,EAAC,WAAW,EAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACnE,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAClD,CAAC;IAED,KAAK,UAAU,iCAAiC,CAAC,qBAA6B;QAC1E,IAAI,qBAAqB,KAAK,CAAC;YAC3B,OAAO;gBACH,iBAAiB,EAAE,WAAW;gBAC9B,WAAW,EAAE,4BAA4B,CAAC,WAAW,CAAC;gBACtD,qBAAqB;aACxB,CAAC;QAEN,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC;YAChD,WAAW;YACX,kBAAkB,EAAE,qBAAqB;SAC5C,CAAC,CAAC;QAEH,OAAO;YACH,iBAAiB;YACjB,WAAW,EAAE,4BAA4B,CAAC,iBAAiB,CAAC;YAC5D,qBAAqB;SACxB,CAAC;IACN,CAAC;IAED,IAAI,wBAAwB,GAAG,MAAM,iCAAiC,CAAC,6BAA6B,CAAC,CAAC;IACtG,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;IACzD,IAAI,kCAAkC,GAAG,2BAA2B,CAAC;IAErE,IAAI,wBAAwB,CAAC,WAAW,KAAK,gBAAgB;QACzD,CAAC,wBAAwB,CAAC,WAAW,GAAG,gBAAgB,IAAI,wBAAwB,CAAC,qBAAqB,KAAK,CAAC,CAAC;QAEjH,OAAO;YACH,sBAAsB,EAAE,6BAA6B;YACrD,qBAAqB,EAAE,wBAAwB,CAAC,iBAAiB;SACpE,CAAC;IAEN,IAAI,sBAAsB,GAAG,wBAAwB,CAAC;IACtD,KACI,IAAI,mBAAmB,GAAG,CAAC,EAAE,qBAAqB,GAAG,CAAC,EACtD,sBAAsB,CAAC,WAAW,KAAK,gBAAgB,GACzD;QACE,IAAI,mBAAmB,GAAG,CAAC,EAAE;YACzB,IAAI,wBAAwB,CAAC,WAAW,IAAI,uBAAuB,CAAC,WAAW;gBAC3E,wBAAwB,CAAC,qBAAqB,IAAI,uBAAuB,CAAC,qBAAqB;gBAE/F,kCAAkC;oBAC9B,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,qBAAqB,GAAG,uBAAuB,CAAC,qBAAqB,CAAC;wBACxG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,WAAW,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE7F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC,IAAI,kCAAkC,KAAK,CAAC;gBAChG,kCAAkC,GAAG,2BAA2B,CAAC;SACxE;QAED,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,WAAW,GAAG,gBAAgB,CAAC;QACnF,IAAI,4BAA4B,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,kCAAkC,CAAC,CAAC;QAEvG,IAAI,4BAA4B,KAAK,CAAC,EAAE;YACpC,IAAI,kBAAkB,GAAG,CAAC;gBACtB,4BAA4B,GAAG,CAAC,CAAC;iBAChC,IAAI,kBAAkB,GAAG,CAAC;gBAC3B,4BAA4B,GAAG,CAAC,CAAC,CAAC;SACzC;QAED,IAAI,kBAAkB,GAAG,CAAC;YACtB,mBAAmB,EAAE,CAAC;aACrB,IAAI,kBAAkB,GAAG,CAAC;YAC3B,qBAAqB,EAAE,CAAC;QAE5B,IAAI,qBAAqB,IAAI,wBAAwB;YACjD,MAAM;QAEV,wBAAwB,GAAG,MAAM,iCAAiC,CAC9D,wBAAwB,CAAC,qBAAqB,GAAG,4BAA4B,CAChF,CAAC;QAEF,IAAI,CACA,sBAAsB,CAAC,WAAW,GAAG,gBAAgB;YACrD,wBAAwB,CAAC,WAAW,IAAI,sBAAsB,CAAC,WAAW,CAC7E,IAAI,CACD,sBAAsB,CAAC,WAAW,GAAG,gBAAgB;YACrD,wBAAwB,CAAC,WAAW,GAAG,gBAAgB;YACvD,wBAAwB,CAAC,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAC5E,IAAI,CACD,sBAAsB,CAAC,WAAW,IAAI,gBAAgB;YACtD,wBAAwB,CAAC,WAAW,IAAI,gBAAgB;YACxD,wBAAwB,CAAC,qBAAqB,GAAG,sBAAsB,CAAC,qBAAqB,CAChG;YACG,sBAAsB,GAAG,wBAAwB,CAAC;KACzD;IAED,OAAO;QACH,sBAAsB,EAAE,sBAAsB,CAAC,qBAAqB;QACpE,qBAAqB,EAAE,sBAAsB,CAAC,iBAAiB;KAClE,CAAC;AACN,CAAC"}