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

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 (163) hide show
  1. package/dist/bindings/AddonTypes.d.ts +2 -0
  2. package/dist/bindings/Llama.d.ts +7 -0
  3. package/dist/bindings/Llama.js +12 -1
  4. package/dist/bindings/Llama.js.map +1 -1
  5. package/dist/bindings/getLlama.d.ts +2 -2
  6. package/dist/bindings/getLlama.js +1 -1
  7. package/dist/bindings/getLlama.js.map +1 -1
  8. package/dist/bindings/utils/cloneLlamaCppRepo.js +23 -23
  9. package/dist/bindings/utils/cloneLlamaCppRepo.js.map +1 -1
  10. package/dist/chatWrappers/utils/resolveChatWrapper.js +3 -1
  11. package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
  12. package/dist/cli/commands/BuildCommand.js +1 -1
  13. package/dist/cli/commands/BuildCommand.js.map +1 -1
  14. package/dist/cli/commands/ChatCommand.d.ts +2 -1
  15. package/dist/cli/commands/ChatCommand.js +70 -75
  16. package/dist/cli/commands/ChatCommand.js.map +1 -1
  17. package/dist/cli/commands/CompleteCommand.d.ts +2 -1
  18. package/dist/cli/commands/CompleteCommand.js +61 -57
  19. package/dist/cli/commands/CompleteCommand.js.map +1 -1
  20. package/dist/cli/commands/DebugCommand.js +4 -4
  21. package/dist/cli/commands/DownloadCommand.js +3 -4
  22. package/dist/cli/commands/DownloadCommand.js.map +1 -1
  23. package/dist/cli/commands/InfillCommand.d.ts +2 -1
  24. package/dist/cli/commands/InfillCommand.js +63 -61
  25. package/dist/cli/commands/InfillCommand.js.map +1 -1
  26. package/dist/cli/commands/inspect/commands/InspectGgufCommand.d.ts +2 -1
  27. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js +20 -7
  28. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js.map +1 -1
  29. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js +42 -4
  30. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js.map +1 -1
  31. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.d.ts +2 -1
  32. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js +29 -27
  33. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js.map +1 -1
  34. package/dist/cli/recommendedModels.d.ts +2 -0
  35. package/dist/cli/recommendedModels.js +281 -0
  36. package/dist/cli/recommendedModels.js.map +1 -0
  37. package/dist/cli/utils/ConsoleInteraction.d.ts +23 -0
  38. package/dist/cli/utils/ConsoleInteraction.js +122 -0
  39. package/dist/cli/utils/ConsoleInteraction.js.map +1 -0
  40. package/dist/cli/utils/ConsoleTable.js +5 -5
  41. package/dist/cli/utils/basicChooseFromListConsoleInteraction.d.ts +13 -0
  42. package/dist/cli/utils/basicChooseFromListConsoleInteraction.js +111 -0
  43. package/dist/cli/utils/basicChooseFromListConsoleInteraction.js.map +1 -0
  44. package/dist/cli/utils/consolePromptQuestion.d.ts +5 -0
  45. package/dist/cli/utils/consolePromptQuestion.js +80 -0
  46. package/dist/cli/utils/consolePromptQuestion.js.map +1 -0
  47. package/dist/cli/utils/getReadablePath.d.ts +1 -0
  48. package/dist/cli/utils/getReadablePath.js +14 -0
  49. package/dist/cli/utils/getReadablePath.js.map +1 -0
  50. package/dist/cli/utils/printCommonInfoLines.js +1 -1
  51. package/dist/cli/utils/printInfoLine.d.ts +4 -2
  52. package/dist/cli/utils/printInfoLine.js +15 -6
  53. package/dist/cli/utils/printInfoLine.js.map +1 -1
  54. package/dist/cli/utils/resolveCommandGgufPath.d.ts +2 -1
  55. package/dist/cli/utils/resolveCommandGgufPath.js +490 -2
  56. package/dist/cli/utils/resolveCommandGgufPath.js.map +1 -1
  57. package/dist/cli/utils/resolveHeaderFlag.d.ts +1 -0
  58. package/dist/cli/utils/resolveHeaderFlag.js +21 -0
  59. package/dist/cli/utils/resolveHeaderFlag.js.map +1 -0
  60. package/dist/cli/utils/resolveModelRecommendationFileOptions.d.ts +19 -0
  61. package/dist/cli/utils/resolveModelRecommendationFileOptions.js +7 -0
  62. package/dist/cli/utils/resolveModelRecommendationFileOptions.js.map +1 -0
  63. package/dist/cli/utils/splitAnsiToLines.d.ts +1 -0
  64. package/dist/cli/utils/splitAnsiToLines.js +17 -0
  65. package/dist/cli/utils/splitAnsiToLines.js.map +1 -0
  66. package/dist/config.d.ts +3 -0
  67. package/dist/config.js +5 -2
  68. package/dist/config.js.map +1 -1
  69. package/dist/consts.d.ts +2 -0
  70. package/dist/consts.js +8 -0
  71. package/dist/consts.js.map +1 -1
  72. package/dist/evaluator/LlamaChat/LlamaChat.d.ts +8 -1
  73. package/dist/evaluator/LlamaChat/LlamaChat.js +2 -1
  74. package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
  75. package/dist/evaluator/LlamaChatSession/LlamaChatSession.d.ts +9 -2
  76. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js +5 -3
  77. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js.map +1 -1
  78. package/dist/evaluator/LlamaCompletion.d.ts +9 -2
  79. package/dist/evaluator/LlamaCompletion.js +6 -3
  80. package/dist/evaluator/LlamaCompletion.js.map +1 -1
  81. package/dist/evaluator/LlamaContext/LlamaContext.d.ts +9 -19
  82. package/dist/evaluator/LlamaContext/LlamaContext.js +35 -55
  83. package/dist/evaluator/LlamaContext/LlamaContext.js.map +1 -1
  84. package/dist/evaluator/LlamaGrammar.d.ts +3 -2
  85. package/dist/evaluator/LlamaGrammar.js +3 -2
  86. package/dist/evaluator/LlamaGrammar.js.map +1 -1
  87. package/dist/evaluator/LlamaModel.d.ts +7 -15
  88. package/dist/evaluator/LlamaModel.js +4 -201
  89. package/dist/evaluator/LlamaModel.js.map +1 -1
  90. package/dist/evaluator/TokenBias.d.ts +22 -0
  91. package/dist/evaluator/TokenBias.js +33 -0
  92. package/dist/evaluator/TokenBias.js.map +1 -0
  93. package/dist/gguf/{GgufInsights.d.ts → insights/GgufInsights.d.ts} +5 -3
  94. package/dist/gguf/{GgufInsights.js → insights/GgufInsights.js} +46 -35
  95. package/dist/gguf/insights/GgufInsights.js.map +1 -0
  96. package/dist/gguf/insights/GgufInsightsConfigurationResolver.d.ts +87 -0
  97. package/dist/gguf/insights/GgufInsightsConfigurationResolver.js +136 -0
  98. package/dist/gguf/insights/GgufInsightsConfigurationResolver.js.map +1 -0
  99. package/dist/gguf/insights/utils/resolveContextContextSizeOption.d.ts +18 -0
  100. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js +52 -0
  101. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js.map +1 -0
  102. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.d.ts +14 -0
  103. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.js +177 -0
  104. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.js.map +1 -0
  105. package/dist/gguf/insights/utils/scoreLevels.d.ts +5 -0
  106. package/dist/gguf/insights/utils/scoreLevels.js +16 -0
  107. package/dist/gguf/insights/utils/scoreLevels.js.map +1 -0
  108. package/dist/gguf/readGgufFileInfo.js +2 -1
  109. package/dist/gguf/readGgufFileInfo.js.map +1 -1
  110. package/dist/index.d.ts +2 -1
  111. package/dist/index.js +2 -1
  112. package/dist/index.js.map +1 -1
  113. package/dist/utils/getConsoleLogPrefix.js +1 -1
  114. package/dist/utils/getReadableContextSize.d.ts +1 -0
  115. package/dist/utils/getReadableContextSize.js +7 -0
  116. package/dist/utils/getReadableContextSize.js.map +1 -0
  117. package/dist/utils/isToken.d.ts +2 -0
  118. package/dist/utils/isToken.js +4 -0
  119. package/dist/utils/isToken.js.map +1 -0
  120. package/dist/utils/isUrl.d.ts +1 -0
  121. package/dist/utils/isUrl.js +15 -0
  122. package/dist/utils/isUrl.js.map +1 -0
  123. package/dist/utils/tokenizeInput.d.ts +1 -1
  124. package/dist/utils/tokenizeInput.js +3 -0
  125. package/dist/utils/tokenizeInput.js.map +1 -1
  126. package/dist/utils/withOra.d.ts +1 -0
  127. package/dist/utils/withOra.js +13 -7
  128. package/dist/utils/withOra.js.map +1 -1
  129. package/dist/utils/withProgressLog.d.ts +23 -0
  130. package/dist/utils/withProgressLog.js +211 -0
  131. package/dist/utils/withProgressLog.js.map +1 -0
  132. package/dist/utils/withStatusLogs.js +1 -1
  133. package/dist/utils/withStatusLogs.js.map +1 -1
  134. package/llama/addon.cpp +43 -5
  135. package/llama/binariesGithubRelease.json +1 -1
  136. package/llama/gitRelease.bundle +0 -0
  137. package/llama/grammars/README.md +10 -0
  138. package/llama/llama.cpp.info.json +1 -1
  139. package/llamaBins/linux-arm64/_nlcBuildMetadata.json +1 -1
  140. package/llamaBins/linux-arm64/llama-addon.node +0 -0
  141. package/llamaBins/linux-armv7l/_nlcBuildMetadata.json +1 -1
  142. package/llamaBins/linux-armv7l/llama-addon.node +0 -0
  143. package/llamaBins/linux-x64/_nlcBuildMetadata.json +1 -1
  144. package/llamaBins/linux-x64/llama-addon.node +0 -0
  145. package/llamaBins/linux-x64-cuda/_nlcBuildMetadata.json +1 -1
  146. package/llamaBins/linux-x64-cuda/llama-addon.node +0 -0
  147. package/llamaBins/linux-x64-vulkan/_nlcBuildMetadata.json +1 -1
  148. package/llamaBins/linux-x64-vulkan/llama-addon.node +0 -0
  149. package/llamaBins/mac-arm64-metal/_nlcBuildMetadata.json +1 -1
  150. package/llamaBins/mac-arm64-metal/default.metallib +0 -0
  151. package/llamaBins/mac-arm64-metal/llama-addon.node +0 -0
  152. package/llamaBins/mac-x64/_nlcBuildMetadata.json +1 -1
  153. package/llamaBins/mac-x64/llama-addon.node +0 -0
  154. package/llamaBins/win-arm64/_nlcBuildMetadata.json +1 -1
  155. package/llamaBins/win-arm64/llama-addon.node +0 -0
  156. package/llamaBins/win-x64/_nlcBuildMetadata.json +1 -1
  157. package/llamaBins/win-x64/llama-addon.node +0 -0
  158. package/llamaBins/win-x64-cuda/_nlcBuildMetadata.json +1 -1
  159. package/llamaBins/win-x64-cuda/llama-addon.node +0 -0
  160. package/llamaBins/win-x64-vulkan/_nlcBuildMetadata.json +1 -1
  161. package/llamaBins/win-x64-vulkan/llama-addon.node +0 -0
  162. package/package.json +8 -7
  163. package/dist/gguf/GgufInsights.js.map +0 -1
@@ -1,6 +1,494 @@
1
1
  import path from "path";
2
2
  import process from "process";
3
- export async function resolveCommandGgufPath(modelPath) {
4
- return path.resolve(process.cwd(), modelPath);
3
+ import chalk from "chalk";
4
+ import { downloadFile } from "ipull";
5
+ import fs from "fs-extra";
6
+ import bytes from "bytes";
7
+ import logSymbols from "log-symbols";
8
+ import stripAnsi from "strip-ansi";
9
+ import { cliModelsDirectory } from "../../config.js";
10
+ import { normalizeGgufDownloadUrl } from "../../gguf/utils/normalizeGgufDownloadUrl.js";
11
+ import { GgufInsights } from "../../gguf/insights/GgufInsights.js";
12
+ import { readGgufFileInfo } from "../../gguf/readGgufFileInfo.js";
13
+ import { isUrl } from "../../utils/isUrl.js";
14
+ import { arrowChar } from "../../consts.js";
15
+ import { withProgressLog } from "../../utils/withProgressLog.js";
16
+ import { getReadableContextSize } from "../../utils/getReadableContextSize.js";
17
+ import { getPrettyBuildGpuName } from "../../bindings/consts.js";
18
+ import { ConsoleInteraction, ConsoleInteractionKey } from "./ConsoleInteraction.js";
19
+ import { getReadablePath } from "./getReadablePath.js";
20
+ import { basicChooseFromListConsoleInteraction } from "./basicChooseFromListConsoleInteraction.js";
21
+ import { consolePromptQuestion } from "./consolePromptQuestion.js";
22
+ import { resolveModelRecommendationFileOptions } from "./resolveModelRecommendationFileOptions.js";
23
+ import { splitAnsiToLines } from "./splitAnsiToLines.js";
24
+ import { renderInfoLine } from "./printInfoLine.js";
25
+ export async function resolveCommandGgufPath(ggufPath, llama, fetchHeaders) {
26
+ if (ggufPath == null)
27
+ ggufPath = await interactiveChooseModel(llama);
28
+ const isPathUrl = isUrl(ggufPath);
29
+ if (!isPathUrl) {
30
+ try {
31
+ const resolvedPath = path.resolve(process.cwd(), ggufPath);
32
+ if (await fs.pathExists(resolvedPath))
33
+ return resolvedPath;
34
+ }
35
+ catch (err) {
36
+ throw new Error(`Invalid path: ${ggufPath}`);
37
+ }
38
+ throw new Error(`File does not exist: ${path.resolve(process.cwd(), ggufPath)}`);
39
+ }
40
+ ggufPath = normalizeGgufDownloadUrl(ggufPath);
41
+ await fs.ensureDir(cliModelsDirectory);
42
+ const downloader = await downloadFile({
43
+ url: ggufPath,
44
+ directory: cliModelsDirectory,
45
+ cliProgress: true,
46
+ headers: fetchHeaders
47
+ });
48
+ const destFilePath = path.join(path.resolve(cliModelsDirectory), downloader.fileName);
49
+ if (downloader.fileName == null || downloader.fileName === "")
50
+ throw new Error("Failed to get the file name from the URL");
51
+ if (await fs.pathExists(destFilePath)) {
52
+ const fileStats = await fs.stat(destFilePath);
53
+ if (downloader.status.totalBytes === fileStats.size) {
54
+ console.info(`${chalk.yellow("File:")} ${getReadablePath(destFilePath)}`);
55
+ await downloader.close();
56
+ return destFilePath;
57
+ }
58
+ const res = await ConsoleInteraction.yesNoQuestion(`There's already an local ${chalk.blue(downloader.fileName)} file that's different from the remote one.\n` +
59
+ "Download it and override the existing file?");
60
+ if (!res) {
61
+ console.info("Loading the existing file");
62
+ console.info(`${chalk.yellow("File:")} ${getReadablePath(destFilePath)}`);
63
+ await downloader.close();
64
+ return destFilePath;
65
+ }
66
+ await fs.remove(destFilePath);
67
+ }
68
+ const consoleInteraction = new ConsoleInteraction();
69
+ consoleInteraction.onKey(ConsoleInteractionKey.ctrlC, async () => {
70
+ await downloader.close();
71
+ consoleInteraction.stop();
72
+ process.exit(0);
73
+ });
74
+ console.info(`Downloading to ${chalk.yellow(getReadablePath(cliModelsDirectory))}`);
75
+ consoleInteraction.start();
76
+ await downloader.download();
77
+ consoleInteraction.stop();
78
+ console.info(`${chalk.yellow("File:")} ${getReadablePath(destFilePath)}`);
79
+ return destFilePath;
80
+ }
81
+ const vramStateUpdateInterval = 1000;
82
+ async function interactiveChooseModel(llama) {
83
+ let localModelFileOptions = [];
84
+ const recommendedModelOptions = [];
85
+ const activeInteractionController = new AbortController();
86
+ let scheduledTitleRerenderTimeout = undefined;
87
+ let lastVramState = llama.getVramState();
88
+ const canUseGpu = lastVramState.total > 0;
89
+ if (await fs.existsSync(cliModelsDirectory)) {
90
+ const ggufFileNames = (await fs.readdir(cliModelsDirectory)).filter((fileName) => fileName.endsWith(".gguf"));
91
+ let readItems = 0;
92
+ const renderProgress = () => ("(" + String(readItems).padStart(String(ggufFileNames.length).length, "0") + "/" + ggufFileNames.length + ")");
93
+ if (ggufFileNames.length > 0)
94
+ await withProgressLog({
95
+ loadingText: "Reading local models directory",
96
+ failText: "Failed to read local models directory",
97
+ successText: "Read local models directory",
98
+ noSuccessLiveStatus: true,
99
+ initialProgressBarText: renderProgress()
100
+ }, async (progressUpdater) => {
101
+ localModelFileOptions = await Promise.all(ggufFileNames.map(async (fileName) => {
102
+ const filePath = path.join(cliModelsDirectory, fileName);
103
+ let ggufInsights = undefined;
104
+ try {
105
+ const ggufFileInfo = await readGgufFileInfo(filePath, {
106
+ sourceType: "filesystem",
107
+ signal: activeInteractionController.signal
108
+ });
109
+ ggufInsights = await GgufInsights.from(ggufFileInfo, llama);
110
+ }
111
+ catch (err) {
112
+ // do nothing
113
+ }
114
+ readItems++;
115
+ progressUpdater.setProgress(readItems / ggufFileNames.length, renderProgress());
116
+ const compatibilityScore = ggufInsights?.configurationResolver.scoreModelConfigurationCompatibility();
117
+ return {
118
+ type: "localModel",
119
+ title: fileName,
120
+ path: filePath,
121
+ addedDate: (await fs.stat(filePath)).birthtimeMs,
122
+ ggufInsights: ggufInsights,
123
+ compatibilityScore: compatibilityScore?.compatibilityScore,
124
+ compatibilityBonusScore: compatibilityScore?.bonusScore,
125
+ compatibilityContextSize: compatibilityScore?.resolvedValues.contextSize
126
+ };
127
+ }));
128
+ localModelFileOptions = localModelFileOptions.sort((a, b) => {
129
+ if (a.compatibilityScore == null && b.compatibilityScore == null)
130
+ return b.addedDate - a.addedDate;
131
+ else if (a.compatibilityScore == null)
132
+ return -1;
133
+ else if (b.compatibilityScore == null)
134
+ return 1;
135
+ else if (b.compatibilityScore === a.compatibilityScore &&
136
+ b.compatibilityBonusScore != null && a.compatibilityBonusScore != null)
137
+ return b.compatibilityBonusScore - a.compatibilityBonusScore;
138
+ return b.compatibilityScore - a.compatibilityScore;
139
+ });
140
+ });
141
+ }
142
+ try {
143
+ // if this file gets very big, we don't want to load it on every CLI usage
144
+ const { recommendedModels } = await import("../recommendedModels.js");
145
+ for (const recommendedModel of recommendedModels) {
146
+ const potentialUrls = resolveModelRecommendationFileOptions(recommendedModel);
147
+ if (potentialUrls.length > 0)
148
+ recommendedModelOptions.push({
149
+ type: "recommendedModel",
150
+ title: recommendedModel.name,
151
+ potentialUrls,
152
+ description: recommendedModel.description
153
+ });
154
+ }
155
+ }
156
+ catch (err) {
157
+ // do nothing
158
+ }
159
+ let initialFocusIndex = 3; // first model option
160
+ const options = [
161
+ {
162
+ type: "action",
163
+ text: "Enter a model URL or file path...",
164
+ key: "getPath"
165
+ },
166
+ ...(localModelFileOptions.length === 0
167
+ ? []
168
+ : [
169
+ {
170
+ type: "separator",
171
+ text: () => " " + chalk.gray("-".repeat(4))
172
+ },
173
+ {
174
+ type: "separator",
175
+ text: " " + chalk.bold("Downloaded models") + " " + chalk.dim(`(${getReadablePath(cliModelsDirectory)})`)
176
+ },
177
+ ...localModelFileOptions
178
+ ]),
179
+ ...(recommendedModelOptions.length === 0
180
+ ? []
181
+ : [
182
+ {
183
+ type: "separator",
184
+ text: () => " " + chalk.gray("-".repeat(4))
185
+ },
186
+ {
187
+ type: "separator",
188
+ text: " " + chalk.bold("Recommended models") + " " + chalk.dim("(select to download)")
189
+ },
190
+ ...recommendedModelOptions
191
+ ])
192
+ ];
193
+ try {
194
+ // eslint-disable-next-line no-constant-condition
195
+ while (true) {
196
+ const minWidth = Math.min(80, process.stdout.columns - 1);
197
+ const selectedItem = await basicChooseFromListConsoleInteraction({
198
+ title(item, rerender) {
199
+ const title = chalk.bold("Select a model:") + " ";
200
+ const vramState = llama.getVramState();
201
+ const vramStateText = vramState.total === 0
202
+ ? chalk.bgGray(" " +
203
+ "No GPU" +
204
+ " ")
205
+ : (chalk.bgGray(" " +
206
+ chalk.yellow("GPU:") + " " + getPrettyBuildGpuName(llama.gpu) +
207
+ " ") +
208
+ " " +
209
+ chalk.bgGray(" " +
210
+ chalk.yellow("VRAM usage:") + " " +
211
+ (String(Math.floor((vramState.used / vramState.total) * 100 * 100) / 100) + "%") + " " +
212
+ chalk.dim("(" + bytes(vramState.used) + "/" + bytes(vramState.total) + ")") +
213
+ " "));
214
+ const pad = Math.max(0, minWidth - (stripAnsi(title).length + stripAnsi(vramStateText).length));
215
+ lastVramState = vramState;
216
+ clearTimeout(scheduledTitleRerenderTimeout);
217
+ scheduledTitleRerenderTimeout = setTimeout(() => {
218
+ const vramState = llama.getVramState();
219
+ if (lastVramState.used !== vramState.used || lastVramState.total !== vramState.total)
220
+ rerender();
221
+ }, vramStateUpdateInterval);
222
+ return [
223
+ title,
224
+ " ".repeat(pad),
225
+ vramStateText
226
+ ].join("");
227
+ },
228
+ footer(item) {
229
+ if (item.type !== "recommendedModel" || item.description == null)
230
+ return undefined;
231
+ const leftPad = 3;
232
+ const maxWidth = Math.max(1, process.stdout.columns - leftPad);
233
+ const lines = splitAnsiToLines(item.description, maxWidth);
234
+ return " \n" +
235
+ " ".repeat(leftPad) + chalk.bold.gray("Model description") + "\n" +
236
+ lines.map((line) => (" ".repeat(leftPad) + line)).join("\n") + "\n" +
237
+ splitAnsiToLines(renderRecommendedModelTechnicalInfo(item.selectedUrl, maxWidth, canUseGpu), maxWidth)
238
+ .map((line) => (" ".repeat(leftPad) + line))
239
+ .join("\n");
240
+ },
241
+ items: options,
242
+ renderItem(item, focused, rerender) {
243
+ return renderSelectionItem(item, focused, rerender, activeInteractionController.signal, llama);
244
+ },
245
+ canFocusItem(item) {
246
+ return item.type === "recommendedModel" || item.type === "localModel" || item.type === "action";
247
+ },
248
+ canSelectItem(item) {
249
+ if (item.type === "recommendedModel")
250
+ return item.selectedUrl != null;
251
+ return item.type === "localModel" || item.type === "action";
252
+ },
253
+ initialFocusIndex: Math.min(initialFocusIndex, options.length - 1),
254
+ aboveItemsPadding: 1,
255
+ belowItemsPadding: 1,
256
+ renderSummaryOnExit(item) {
257
+ if (item == null || item.type === "action" || item.type === "separator")
258
+ return "";
259
+ else if (item.type === "localModel") {
260
+ const modelTitle = item.title instanceof Function
261
+ ? item.title()
262
+ : item.title;
263
+ return logSymbols.success + " Selected model " + chalk.blue(modelTitle);
264
+ }
265
+ else if (item.type === "recommendedModel") {
266
+ const modelTitle = item.title instanceof Function
267
+ ? item.title()
268
+ : item.title;
269
+ return logSymbols.success + " Selected model " + chalk.blue(modelTitle);
270
+ }
271
+ void (item);
272
+ return "";
273
+ },
274
+ exitOnCtrlC: true
275
+ });
276
+ if (selectedItem == null || selectedItem.type === "separator")
277
+ continue;
278
+ else if (selectedItem.type === "localModel")
279
+ return selectedItem.path;
280
+ else if (selectedItem.type === "recommendedModel" && selectedItem.selectedUrl != null)
281
+ return selectedItem.selectedUrl.url;
282
+ else if (selectedItem.type === "action") {
283
+ if (selectedItem.key === "getPath") {
284
+ initialFocusIndex = 0;
285
+ const selectedModelUrlOrPath = await askForModelUrlOrPath();
286
+ if (selectedModelUrlOrPath == null)
287
+ continue;
288
+ return selectedModelUrlOrPath;
289
+ }
290
+ }
291
+ }
292
+ }
293
+ finally {
294
+ activeInteractionController.abort();
295
+ }
296
+ }
297
+ async function askForModelUrlOrPath() {
298
+ return await consolePromptQuestion(chalk.bold("Enter a model URL or file path: "), {
299
+ exitOnCtrlC: false,
300
+ async validate(input) {
301
+ if (isUrl(input, false)) {
302
+ try {
303
+ new URL(input);
304
+ }
305
+ catch (err) {
306
+ return "Invalid URL";
307
+ }
308
+ return null;
309
+ }
310
+ try {
311
+ if (await fs.pathExists(input))
312
+ return null;
313
+ return "File does not exist";
314
+ }
315
+ catch (err) {
316
+ return "Invalid path";
317
+ }
318
+ },
319
+ renderSummaryOnExit(item) {
320
+ if (item == null)
321
+ return "";
322
+ if (isUrl(item, false))
323
+ return logSymbols.success + " Entered model URL " + chalk.blue(item);
324
+ else
325
+ return logSymbols.success + " Entered model path " + chalk.blue(item);
326
+ }
327
+ });
328
+ }
329
+ function renderSelectionItem(item, focused, rerender, abortSignal, llama) {
330
+ if (item.type === "localModel") {
331
+ let modelText = item.title instanceof Function
332
+ ? item.title()
333
+ : item.title;
334
+ if (item.ggufInsights != null)
335
+ modelText += " " + renderModelCompatibility(item.ggufInsights, item.compatibilityScore, item.compatibilityContextSize);
336
+ else
337
+ modelText += " " + chalk.bgGray.yellow(" Cannot read metadata ");
338
+ return renderSelectableItem(modelText, focused);
339
+ }
340
+ else if (item.type === "recommendedModel") {
341
+ let modelText = item.title instanceof Function
342
+ ? item.title()
343
+ : item.title;
344
+ if (item.selectedUrl == null) {
345
+ if (item.urlSelectionLoadingState == null) {
346
+ item.urlSelectionLoadingState = "loading";
347
+ void selectFileForModelRecommendation({
348
+ recommendedModelOption: item,
349
+ abortSignal,
350
+ rerenderOption: rerender,
351
+ llama
352
+ });
353
+ }
354
+ if (item.urlSelectionLoadingState === "loading")
355
+ modelText += " " + chalk.bgGray.yellow(" Loading info ");
356
+ else if (item.urlSelectionLoadingState === "done")
357
+ modelText += " " + chalk.bgGray.yellow(" Failed to load info ");
358
+ else
359
+ void (item.urlSelectionLoadingState);
360
+ }
361
+ else
362
+ modelText += " " + renderModelCompatibility(item.selectedUrl.ggufInsights, item.selectedUrl.compatibilityScore.compatibilityScore, item.selectedUrl.compatibilityScore.resolvedValues.contextSize);
363
+ return renderSelectableItem(modelText, focused);
364
+ }
365
+ else if (item.type === "separator") {
366
+ return item.text instanceof Function
367
+ ? item.text()
368
+ : item.text;
369
+ }
370
+ else if (item.type === "action") {
371
+ const actionText = item.text instanceof Function
372
+ ? item.text()
373
+ : item.text;
374
+ return renderSelectableItem(actionText, focused);
375
+ }
376
+ void (item);
377
+ return "";
378
+ }
379
+ function renderSelectableItem(text, focused) {
380
+ if (focused)
381
+ return " " + chalk.cyan(arrowChar) + " " + chalk.cyan(text);
382
+ return " * " + text;
383
+ }
384
+ function renderModelCompatibility(ggufInsights, compatibilityScore, compatibilityContextSize) {
385
+ const info = [];
386
+ if (compatibilityScore != null)
387
+ info.push(renderCompatibilityPercentageWithColors(compatibilityScore * 100) + chalk.whiteBright(" compatibility")
388
+ + (compatibilityContextSize == null
389
+ ? ""
390
+ : (chalk.gray(" | ") + chalk.yellow(getReadableContextSize(compatibilityContextSize)) + chalk.whiteBright(" context"))));
391
+ info.push(chalk.yellow("Size:") + " " + chalk.whiteBright(bytes(ggufInsights.modelSize)));
392
+ return info
393
+ .map((item) => chalk.bgGray(" " + item + " "))
394
+ .join(" ");
395
+ }
396
+ function renderRecommendedModelTechnicalInfo(modelSelectedUrl, maxWidth, canUseGpu) {
397
+ if (modelSelectedUrl == null)
398
+ return " \n" + chalk.bgGray.yellow(" Loading info ") + "\n ";
399
+ const ggufInsights = modelSelectedUrl.ggufInsights;
400
+ const compatibilityScore = modelSelectedUrl.compatibilityScore;
401
+ const longestTitle = Math.max("Model info".length, "Resolved config".length) + 1;
402
+ return " \n" + [
403
+ renderInfoLine({
404
+ title: "Model info",
405
+ padTitle: longestTitle,
406
+ separateLines: false,
407
+ maxWidth,
408
+ info: [{
409
+ title: "Size",
410
+ value: bytes(ggufInsights.modelSize)
411
+ }, {
412
+ show: ggufInsights.trainContextSize != null,
413
+ title: "Train context size",
414
+ value: () => getReadableContextSize(ggufInsights.trainContextSize ?? 0)
415
+ }]
416
+ }),
417
+ renderInfoLine({
418
+ title: "Resolved config",
419
+ padTitle: longestTitle,
420
+ separateLines: false,
421
+ maxWidth,
422
+ info: [{
423
+ title: "",
424
+ value: renderCompatibilityPercentageWithColors(compatibilityScore.compatibilityScore * 100) + " compatibility"
425
+ }, {
426
+ show: ggufInsights.trainContextSize != null,
427
+ title: "Context size",
428
+ value: getReadableContextSize(compatibilityScore.resolvedValues.contextSize)
429
+ }, {
430
+ show: canUseGpu,
431
+ title: "GPU layers",
432
+ value: () => (compatibilityScore.resolvedValues.gpuLayers + "/" + ggufInsights.totalLayers + " " +
433
+ chalk.dim(`(${Math.floor((compatibilityScore.resolvedValues.gpuLayers / ggufInsights.totalLayers) * 100)}%)`))
434
+ }, {
435
+ show: canUseGpu,
436
+ title: "VRAM usage",
437
+ value: () => bytes(compatibilityScore.resolvedValues.totalVramUsage)
438
+ }]
439
+ })
440
+ ].join("\n");
441
+ }
442
+ function renderCompatibilityPercentageWithColors(percentage, { greenBright = 100, green = 95, yellow = 85, yellowBright = 75 } = {}) {
443
+ const percentageText = String(Math.floor(percentage)) + "%";
444
+ if (percentage >= greenBright)
445
+ return chalk.greenBright(percentageText);
446
+ else if (percentage >= green)
447
+ return chalk.green(percentageText);
448
+ else if (percentage >= yellow)
449
+ return chalk.yellow(percentageText);
450
+ else if (percentage >= yellowBright)
451
+ return chalk.yellowBright(percentageText);
452
+ return chalk.red(percentageText);
453
+ }
454
+ async function selectFileForModelRecommendation({ recommendedModelOption, llama, abortSignal, rerenderOption }) {
455
+ try {
456
+ let bestScore = undefined;
457
+ let bestScoreSelectedUrl = undefined;
458
+ for (const potentialUrl of recommendedModelOption.potentialUrls) {
459
+ if (abortSignal.aborted)
460
+ return;
461
+ try {
462
+ const ggufFileInfo = await readGgufFileInfo(potentialUrl, {
463
+ sourceType: "network",
464
+ signal: abortSignal
465
+ });
466
+ const ggufInsights = await GgufInsights.from(ggufFileInfo, llama);
467
+ if (abortSignal.aborted)
468
+ return;
469
+ const compatibilityScore = ggufInsights.configurationResolver.scoreModelConfigurationCompatibility();
470
+ if (bestScore == null || compatibilityScore.compatibilityScore > bestScore) {
471
+ bestScore = compatibilityScore.compatibilityScore;
472
+ bestScoreSelectedUrl = {
473
+ url: potentialUrl,
474
+ ggufInsights,
475
+ compatibilityScore
476
+ };
477
+ if (bestScore === 1)
478
+ break;
479
+ }
480
+ }
481
+ catch (err) {
482
+ // do nothing
483
+ }
484
+ }
485
+ recommendedModelOption.selectedUrl = bestScoreSelectedUrl;
486
+ recommendedModelOption.urlSelectionLoadingState = "done";
487
+ rerenderOption();
488
+ }
489
+ catch (err) {
490
+ recommendedModelOption.urlSelectionLoadingState = "done";
491
+ rerenderOption();
492
+ }
5
493
  }
6
494
  //# sourceMappingURL=resolveCommandGgufPath.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveCommandGgufPath.js","sourceRoot":"","sources":["../../../src/cli/utils/resolveCommandGgufPath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"resolveCommandGgufPath.js","sourceRoot":"","sources":["../../../src/cli/utils/resolveCommandGgufPath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,YAAY,EAAC,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAC,wBAAwB,EAAC,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAC,YAAY,EAAC,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAC,KAAK,EAAC,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,sBAAsB,EAAC,MAAM,uCAAuC,CAAC;AAE7E,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,qCAAqC,EAAC,MAAM,4CAA4C,CAAC;AACjG,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,qCAAqC,EAAC,MAAM,4CAA4C,CAAC;AACjG,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAA4B,EAAE,KAAY,EAAE,YAAqC;IAC1H,IAAI,QAAQ,IAAI,IAAI;QAChB,QAAQ,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAElC,IAAI,CAAC,SAAS,EAAE;QACZ,IAAI;YACA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;YAE3D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBACjC,OAAO,YAAY,CAAC;SAC3B;QAAC,OAAO,GAAG,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;SAChD;QAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KACpF;IAED,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAE9C,MAAM,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAEvC,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC;QAClC,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,kBAAkB;QAC7B,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,YAAY;KACxB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEtF,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,IAAI,UAAU,CAAC,QAAQ,KAAK,EAAE;QACzD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAEhE,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QACnC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YAEzB,OAAO,YAAY,CAAC;SACvB;QAED,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAC9C,4BAA4B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,+CAA+C;YAC1G,6CAA6C,CAChD,CAAC;QAEF,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YAEzB,OAAO,YAAY,CAAC;SACvB;QAED,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjC;IAED,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACpD,kBAAkB,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IACpF,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAC3B,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC5B,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAE1B,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAE1E,OAAO,YAAY,CAAC;AACxB,CAAC;AA+BD,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,KAAK,UAAU,sBAAsB,CAAC,KAAY;IAC9C,IAAI,qBAAqB,GAA2C,EAAE,CAAC;IACvE,MAAM,uBAAuB,GAAiD,EAAE,CAAC;IACjF,MAAM,2BAA2B,GAAG,IAAI,eAAe,EAAE,CAAC;IAC1D,IAAI,6BAA6B,GAA8C,SAAS,CAAC;IACzF,IAAI,aAAa,GAAkC,KAAK,CAAC,YAAY,EAAE,CAAC;IACxE,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;IAE1C,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;QACzC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9G,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,CACzB,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG,CAChH,CAAC;QAEF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YACxB,MAAM,eAAe,CAAC;gBAClB,WAAW,EAAE,gCAAgC;gBAC7C,QAAQ,EAAE,uCAAuC;gBACjD,WAAW,EAAE,6BAA6B;gBAC1C,mBAAmB,EAAE,IAAI;gBACzB,sBAAsB,EAAE,cAAc,EAAE;aAC3C,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE;gBACzB,qBAAqB,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;oBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;oBAEzD,IAAI,YAAY,GAA6B,SAAS,CAAC;oBACvD,IAAI;wBACA,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE;4BAClD,UAAU,EAAE,YAAY;4BACxB,MAAM,EAAE,2BAA2B,CAAC,MAAM;yBAC7C,CAAC,CAAC;wBACH,YAAY,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;qBAC/D;oBAAC,OAAO,GAAG,EAAE;wBACV,aAAa;qBAChB;oBAED,SAAS,EAAE,CAAC;oBACZ,eAAe,CAAC,WAAW,CAAC,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;oBAEhF,MAAM,kBAAkB,GAAG,YAAY,EAAE,qBAAqB,CAAC,oCAAoC,EAAE,CAAC;oBAEtG,OAAO;wBACH,IAAI,EAAE,YAAY;wBAClB,KAAK,EAAE,QAAQ;wBACf,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;wBAChD,YAAY,EAAE,YAAY;wBAC1B,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB;wBAC1D,uBAAuB,EAAE,kBAAkB,EAAE,UAAU;wBACvD,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,CAAC,WAAW;qBACrD,CAAC;gBAC5B,CAAC,CAAC,CACL,CAAC;gBAEF,qBAAqB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxD,IAAI,CAAC,CAAC,kBAAkB,IAAI,IAAI,IAAI,CAAC,CAAC,kBAAkB,IAAI,IAAI;wBAC5D,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;yBAChC,IAAI,CAAC,CAAC,kBAAkB,IAAI,IAAI;wBACjC,OAAO,CAAC,CAAC,CAAC;yBACT,IAAI,CAAC,CAAC,kBAAkB,IAAI,IAAI;wBACjC,OAAO,CAAC,CAAC;yBACR,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,kBAAkB;wBAClD,CAAC,CAAC,uBAAuB,IAAI,IAAI,IAAI,CAAC,CAAC,uBAAuB,IAAI,IAAI;wBAEtE,OAAO,CAAC,CAAC,uBAAuB,GAAG,CAAC,CAAC,uBAAuB,CAAC;oBAEjE,OAAO,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC;gBACvD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;KACV;IAED,IAAI;QACA,0EAA0E;QAC1E,MAAM,EAAC,iBAAiB,EAAC,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAEpE,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE;YAC9C,MAAM,aAAa,GAAG,qCAAqC,CAAC,gBAAgB,CAAC,CAAC;YAE9E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBACxB,uBAAuB,CAAC,IAAI,CAAC;oBACzB,IAAI,EAAE,kBAAkB;oBACxB,KAAK,EAAE,gBAAgB,CAAC,IAAI;oBAC5B,aAAa;oBACb,WAAW,EAAE,gBAAgB,CAAC,WAAW;iBAC5C,CAAC,CAAC;SACV;KACJ;IAAC,OAAO,GAAG,EAAE;QACV,aAAa;KAChB;IAED,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC,qBAAqB;IAChD,MAAM,OAAO,GAAkB;QAC3B;YACI,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,mCAAmC;YACzC,GAAG,EAAE,SAAS;SACjB;QACD,GAAG,CACC,qBAAqB,CAAC,MAAM,KAAK,CAAC;YAC9B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE;oBACI,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iBAChD;gBACD;oBACI,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,kBAAkB,CAAC,GAAG,CAAC;iBAC9G;gBACD,GAAG,qBAAqB;aACH,CAChC;QACD,GAAG,CACC,uBAAuB,CAAC,MAAM,KAAK,CAAC;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE;oBACI,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iBAChD;gBACD;oBACI,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC;iBAC3F;gBACD,GAAG,uBAAuB;aACL,CAChC;KACJ,CAAC;IAEF,IAAI;QACA,iDAAiD;QACjD,OAAO,IAAI,EAAE;YACT,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,MAAM,qCAAqC,CAAC;gBAC7D,KAAK,CAAC,IAAI,EAAE,QAAQ;oBAChB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;oBAEnD,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;oBACvC,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,KAAK,CAAC;wBACvC,CAAC,CAAC,KAAK,CAAC,MAAM,CACV,GAAG;4BACH,QAAQ;4BACR,GAAG,CACN;wBACD,CAAC,CAAC,CACE,KAAK,CAAC,MAAM,CACR,GAAG;4BACH,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC;4BAC7D,GAAG,CACN;4BACD,GAAG;4BACH,KAAK,CAAC,MAAM,CACR,GAAG;gCACH,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,GAAG;gCACjC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;gCACtF,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gCAC3E,GAAG,CACN,CACJ,CAAC;oBAEN,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBAEhG,aAAa,GAAG,SAAS,CAAC;oBAC1B,YAAY,CAAC,6BAA6B,CAAC,CAAC;oBAC5C,6BAA6B,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;wBACvC,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK;4BAChF,QAAQ,EAAE,CAAC;oBACnB,CAAC,EAAE,uBAAuB,CAAC,CAAC;oBAE5B,OAAO;wBACH,KAAK;wBACL,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;wBACf,aAAa;qBAChB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,CAAC;gBACD,MAAM,CAAC,IAAI;oBACP,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;wBAC5D,OAAO,SAAS,CAAC;oBAErB,MAAM,OAAO,GAAG,CAAC,CAAC;oBAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;oBAC/D,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBAE3D,OAAO,KAAK;wBACR,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI;wBACjE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;wBACnE,gBAAgB,CAAC,mCAAmC,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC;6BACjG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;6BAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;gBACD,KAAK,EAAE,OAAO;gBACd,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ;oBAC9B,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACnG,CAAC;gBACD,YAAY,CAAC,IAAI;oBACb,OAAO,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACpG,CAAC;gBACD,aAAa,CAAC,IAAI;oBACd,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB;wBAChC,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;oBAEpC,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAChE,CAAC;gBACD,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClE,iBAAiB,EAAE,CAAC;gBACpB,iBAAiB,EAAE,CAAC;gBACpB,mBAAmB,CAAC,IAAI;oBACpB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;wBACnE,OAAO,EAAE,CAAC;yBACT,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;wBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,YAAY,QAAQ;4BAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;4BACd,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;wBAEjB,OAAO,UAAU,CAAC,OAAO,GAAG,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC3E;yBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE;wBACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,YAAY,QAAQ;4BAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;4BACd,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;wBAEjB,OAAO,UAAU,CAAC,OAAO,GAAG,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC3E;oBAED,KAAK,CAAC,IAAoB,CAAC,CAAC;oBAC5B,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,IAAI,KAAK,WAAW;gBACzD,SAAS;iBACR,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY;gBACvC,OAAO,YAAY,CAAC,IAAI,CAAC;iBACxB,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,IAAI,YAAY,CAAC,WAAW,IAAI,IAAI;gBACjF,OAAO,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC;iBACnC,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACrC,IAAI,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE;oBAChC,iBAAiB,GAAG,CAAC,CAAC;oBACtB,MAAM,sBAAsB,GAAG,MAAM,oBAAoB,EAAE,CAAC;oBAE5D,IAAI,sBAAsB,IAAI,IAAI;wBAC9B,SAAS;oBAEb,OAAO,sBAAsB,CAAC;iBACjC;aACJ;SACJ;KACJ;YAAS;QACN,2BAA2B,CAAC,KAAK,EAAE,CAAC;KACvC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB;IAC/B,OAAO,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAE;QAC/E,WAAW,EAAE,KAAK;QAClB,KAAK,CAAC,QAAQ,CAAC,KAAK;YAChB,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACrB,IAAI;oBACA,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;iBAClB;gBAAC,OAAO,GAAG,EAAE;oBACV,OAAO,aAAa,CAAC;iBACxB;gBAED,OAAO,IAAI,CAAC;aACf;YAED,IAAI;gBACA,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC1B,OAAO,IAAI,CAAC;gBAEhB,OAAO,qBAAqB,CAAC;aAChC;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO,cAAc,CAAC;aACzB;QACL,CAAC;QACD,mBAAmB,CAAC,IAAI;YACpB,IAAI,IAAI,IAAI,IAAI;gBACZ,OAAO,EAAE,CAAC;YAEd,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;gBAClB,OAAO,UAAU,CAAC,OAAO,GAAG,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAErE,OAAO,UAAU,CAAC,OAAO,GAAG,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAiB,EAAE,OAAgB,EAAE,QAAoB,EAAE,WAAwB,EAAE,KAAY;IAC1H,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;QAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,YAAY,QAAQ;YAC1C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;YACd,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAEjB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;YACzB,SAAS,IAAI,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;;YAExH,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAErE,OAAO,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACnD;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE;QACzC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,YAAY,QAAQ;YAC1C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;YACd,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAEjB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAC1B,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,EAAE;gBACvC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;gBAC1C,KAAK,gCAAgC,CAAC;oBAClC,sBAAsB,EAAE,IAAI;oBAC5B,WAAW;oBACX,cAAc,EAAE,QAAQ;oBACxB,KAAK;iBACR,CAAC,CAAC;aACN;YAED,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS;gBAC3C,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;iBACxD,IAAI,IAAI,CAAC,wBAAwB,KAAK,MAAM;gBAC7C,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;;gBAEhE,KAAK,CAAC,IAAI,CAAC,wBAAwC,CAAC,CAAC;SAC5D;;YACG,SAAS,IAAI,IAAI,GAAG,wBAAwB,CACxC,IAAI,CAAC,WAAW,CAAC,YAAY,EAC7B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,kBAAkB,EACtD,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,WAAW,CACjE,CAAC;QAEN,OAAO,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACnD;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;QAClC,OAAO,IAAI,CAAC,IAAI,YAAY,QAAQ;YAChC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YACb,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KACnB;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,YAAY,QAAQ;YAC5C,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YACb,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAEhB,OAAO,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;KACpD;IAED,KAAK,CAAC,IAAoB,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,OAAgB;IACxD,IAAI,OAAO;QACP,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhE,OAAO,KAAK,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,wBAAwB,CAC7B,YAA0B,EAAE,kBAAsC,EAAE,wBAA4C;IAEhH,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,IAAI,kBAAkB,IAAI,IAAI;QAC1B,IAAI,CAAC,IAAI,CACL,uCAAuC,CAAC,kBAAkB,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;cACrG,CACE,wBAAwB,IAAI,IAAI;gBAC5B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAC7H,CACJ,CAAC;IAEN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE1F,OAAO,IAAI;SACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;SAC7C,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,mCAAmC,CACxC,gBAA2E,EAC3E,QAAgB,EAChB,SAAkB;IAElB,IAAI,gBAAgB,IAAI,IAAI;QACxB,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;IAEjE,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC;IACnD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC;IAE/D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjF,OAAO,KAAK,GAAG;QACX,cAAc,CAAC;YACX,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,YAAY;YACtB,aAAa,EAAE,KAAK;YACpB,QAAQ;YACR,IAAI,EAAE,CAAC;oBACH,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;iBACvC,EAAE;oBACC,IAAI,EAAE,YAAY,CAAC,gBAAgB,IAAI,IAAI;oBAC3C,KAAK,EAAE,oBAAoB;oBAC3B,KAAK,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,YAAY,CAAC,gBAAgB,IAAI,CAAC,CAAC;iBAC1E,CAAC;SACL,CAAC;QACF,cAAc,CAAC;YACX,KAAK,EAAE,iBAAiB;YACxB,QAAQ,EAAE,YAAY;YACtB,aAAa,EAAE,KAAK;YACpB,QAAQ;YACR,IAAI,EAAE,CAAC;oBACH,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,uCAAuC,CAAC,kBAAkB,CAAC,kBAAkB,GAAG,GAAG,CAAC,GAAG,gBAAgB;iBACjH,EAAE;oBACC,IAAI,EAAE,YAAY,CAAC,gBAAgB,IAAI,IAAI;oBAC3C,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC;iBAC/E,EAAE;oBACC,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,YAAY;oBACnB,KAAK,EAAE,GAAG,EAAE,CAAC,CACT,kBAAkB,CAAC,cAAc,CAAC,SAAS,GAAG,GAAG,GAAG,YAAY,CAAC,WAAW,GAAG,GAAG;wBAClF,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAChH;iBACJ,EAAE;oBACC,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,YAAY;oBACnB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC;iBACvE,CAAC;SACL,CAAC;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,uCAAuC,CAAC,UAAkB,EAAE,EACjE,WAAW,GAAG,GAAG,EACjB,KAAK,GAAG,EAAE,EACV,MAAM,GAAG,EAAE,EACX,YAAY,GAAG,EAAE,KAMjB,EAAE;IACF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;IAE5D,IAAI,UAAU,IAAI,WAAW;QACzB,OAAO,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;SACxC,IAAI,UAAU,IAAI,KAAK;QACxB,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;SAClC,IAAI,UAAU,IAAI,MAAM;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;SACnC,IAAI,UAAU,IAAI,YAAY;QAC/B,OAAO,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,gCAAgC,CAAC,EAC5C,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAM7D;IACG,IAAI;QACA,IAAI,SAAS,GAAuB,SAAS,CAAC;QAC9C,IAAI,oBAAoB,GAA0E,SAAS,CAAC;QAE5G,KAAK,MAAM,YAAY,IAAI,sBAAsB,CAAC,aAAa,EAAE;YAC7D,IAAI,WAAW,CAAC,OAAO;gBACnB,OAAO;YAEX,IAAI;gBACA,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE;oBACtD,UAAU,EAAE,SAAS;oBACrB,MAAM,EAAE,WAAW;iBACtB,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAElE,IAAI,WAAW,CAAC,OAAO;oBACnB,OAAO;gBAEX,MAAM,kBAAkB,GAAG,YAAY,CAAC,qBAAqB,CAAC,oCAAoC,EAAE,CAAC;gBAErG,IAAI,SAAS,IAAI,IAAI,IAAI,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,EAAE;oBACxE,SAAS,GAAG,kBAAkB,CAAC,kBAAkB,CAAC;oBAClD,oBAAoB,GAAG;wBACnB,GAAG,EAAE,YAAY;wBACjB,YAAY;wBACZ,kBAAkB;qBACrB,CAAC;oBAEF,IAAI,SAAS,KAAK,CAAC;wBACf,MAAM;iBACb;aACJ;YAAC,OAAO,GAAG,EAAE;gBACV,aAAa;aAChB;SACJ;QAED,sBAAsB,CAAC,WAAW,GAAG,oBAAoB,CAAC;QAC1D,sBAAsB,CAAC,wBAAwB,GAAG,MAAM,CAAC;QACzD,cAAc,EAAE,CAAC;KACpB;IAAC,OAAO,GAAG,EAAE;QACV,sBAAsB,CAAC,wBAAwB,GAAG,MAAM,CAAC;QACzD,cAAc,EAAE,CAAC;KACpB;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function resolveHeaderFlag(header?: string[] | string): Record<string, string>;
@@ -0,0 +1,21 @@
1
+ export function resolveHeaderFlag(header) {
2
+ if (typeof header === "string")
3
+ header = [header];
4
+ if (header == null || header.length === 0)
5
+ return {};
6
+ const res = {};
7
+ for (const headerItem of header) {
8
+ const colonIndex = headerItem.indexOf(":");
9
+ if (colonIndex < 0)
10
+ throw new Error(`Invalid header item: ${headerItem}`);
11
+ const key = headerItem.slice(0, colonIndex).trim();
12
+ if (Object.hasOwn(res, key))
13
+ throw new Error(`Duplicate header key: ${key}`);
14
+ let value = headerItem.slice(colonIndex + 1);
15
+ if (value.startsWith(" "))
16
+ value = value.slice(1);
17
+ res[key] = value;
18
+ }
19
+ return res;
20
+ }
21
+ //# sourceMappingURL=resolveHeaderFlag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveHeaderFlag.js","sourceRoot":"","sources":["../../../src/cli/utils/resolveHeaderFlag.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IACxD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACrC,OAAO,EAAE,CAAC;IAEd,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE;QAC7B,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,UAAU,GAAG,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAE1D,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAEpD,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YACrB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACpB;IAED,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -0,0 +1,19 @@
1
+ export type ModelRecommendation = {
2
+ name: string;
3
+ abilities: ("chat" | "complete" | "infill" | "functionCalling")[];
4
+ description?: string;
5
+ /**
6
+ * Files ordered by quality.
7
+ * The first file that has 100% compatibility with the current system
8
+ * will be used (and the rest of the files won't even be tested),
9
+ * otherwise, the file with the highest compatibility will be used.
10
+ */
11
+ fileOptions: Array<{
12
+ huggingFace: {
13
+ model: `${string}/${string}`;
14
+ branch: string;
15
+ file: `${string}.gguf`;
16
+ };
17
+ }>;
18
+ };
19
+ export declare function resolveModelRecommendationFileOptions(modelRecommendation: ModelRecommendation): string[];
@@ -0,0 +1,7 @@
1
+ import { normalizeGgufDownloadUrl } from "../../gguf/utils/normalizeGgufDownloadUrl.js";
2
+ export function resolveModelRecommendationFileOptions(modelRecommendation) {
3
+ return modelRecommendation.fileOptions.map((fileOption) => {
4
+ return normalizeGgufDownloadUrl(`https://huggingface.co/${fileOption.huggingFace.model}/resolve/${fileOption.huggingFace.branch}/${fileOption.huggingFace.file}`);
5
+ });
6
+ }
7
+ //# sourceMappingURL=resolveModelRecommendationFileOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveModelRecommendationFileOptions.js","sourceRoot":"","sources":["../../../src/cli/utils/resolveModelRecommendationFileOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,8CAA8C,CAAC;AAsBtF,MAAM,UAAU,qCAAqC,CAAC,mBAAwC;IAC1F,OAAO,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QACtD,OAAO,wBAAwB,CAC3B,0BAA0B,UAAU,CAAC,WAAW,CAAC,KAAK,YAAY,UAAU,CAAC,WAAW,CAAC,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CACnI,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function splitAnsiToLines(text: string | undefined, width: number): string[];
@@ -0,0 +1,17 @@
1
+ import stripAnsi from "strip-ansi";
2
+ import sliceAnsi from "slice-ansi";
3
+ export function splitAnsiToLines(text, width) {
4
+ if (text == null || text === "")
5
+ return [];
6
+ const lines = [];
7
+ const linesWithoutAnsi = stripAnsi(text)
8
+ .split("\n");
9
+ let textIndex = 0;
10
+ for (const line of linesWithoutAnsi) {
11
+ for (let lineIndex = 0; lineIndex < line.length; lineIndex += width)
12
+ lines.push(sliceAnsi(text, textIndex + lineIndex, Math.min(textIndex + lineIndex + width, textIndex + line.length)));
13
+ textIndex += line.length + "\n".length;
14
+ }
15
+ return lines;
16
+ }
17
+ //# sourceMappingURL=splitAnsiToLines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitAnsiToLines.js","sourceRoot":"","sources":["../../../src/cli/utils/splitAnsiToLines.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,IAAwB,EAAE,KAAa;IACpE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE;QAC3B,OAAO,EAAE,CAAC;IAEd,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC;SACnC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE;QACjC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK;YAC/D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEzH,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KAC1C;IAED,OAAO,KAAK,CAAC;AACjB,CAAC"}
package/dist/config.d.ts CHANGED
@@ -7,7 +7,9 @@ export declare const llamaBinsGrammarsDirectory: string;
7
7
  export declare const llamaCppDirectory: string;
8
8
  export declare const llamaCppGrammarsDirectory: string;
9
9
  export declare const tempDownloadDirectory: string;
10
+ export declare const cliHomedirDirectory: string;
10
11
  export declare const chatCommandHistoryFilePath: string;
12
+ export declare const cliModelsDirectory: string;
11
13
  export declare const lastBuildInfoJsonPath: string;
12
14
  export declare const binariesGithubReleasePath: string;
13
15
  export declare const llamaCppDirectoryInfoFilePath: string;
@@ -21,6 +23,7 @@ export declare const builtinLlamaCppGitHubRepo = "ggerganov/llama.cpp";
21
23
  export declare const builtinLlamaCppRelease: string;
22
24
  export declare const isCI: boolean;
23
25
  export declare const isRunningInsideGoogleColab: boolean;
26
+ export declare const useCiLogs: boolean;
24
27
  export declare const defaultLlamaCppGitHubRepo: string;
25
28
  export declare const defaultLlamaCppRelease: string;
26
29
  export declare const defaultLlamaCppGpuSupport: false | "cuda" | "vulkan" | "metal" | "auto";