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

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 (208) hide show
  1. package/dist/ChatWrapper.d.ts +1 -15
  2. package/dist/ChatWrapper.js +19 -29
  3. package/dist/ChatWrapper.js.map +1 -1
  4. package/dist/bindings/AddonTypes.d.ts +5 -1
  5. package/dist/bindings/Llama.d.ts +7 -0
  6. package/dist/bindings/Llama.js +12 -1
  7. package/dist/bindings/Llama.js.map +1 -1
  8. package/dist/bindings/getLlama.d.ts +2 -2
  9. package/dist/bindings/getLlama.js +1 -1
  10. package/dist/bindings/getLlama.js.map +1 -1
  11. package/dist/bindings/utils/cloneLlamaCppRepo.js +23 -23
  12. package/dist/bindings/utils/cloneLlamaCppRepo.js.map +1 -1
  13. package/dist/chatWrappers/FunctionaryChatWrapper.js +39 -40
  14. package/dist/chatWrappers/FunctionaryChatWrapper.js.map +1 -1
  15. package/dist/chatWrappers/{LlamaChatWrapper.d.ts → Llama2ChatWrapper.d.ts} +1 -1
  16. package/dist/chatWrappers/{LlamaChatWrapper.js → Llama2ChatWrapper.js} +3 -3
  17. package/dist/chatWrappers/Llama2ChatWrapper.js.map +1 -0
  18. package/dist/chatWrappers/Llama3ChatWrapper.d.ts +31 -0
  19. package/dist/chatWrappers/Llama3ChatWrapper.js +129 -0
  20. package/dist/chatWrappers/Llama3ChatWrapper.js.map +1 -0
  21. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.d.ts +2 -2
  22. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js +6 -2
  23. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js.map +1 -1
  24. package/dist/chatWrappers/generic/TemplateChatWrapper.d.ts +2 -2
  25. package/dist/chatWrappers/generic/TemplateChatWrapper.js.map +1 -1
  26. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.d.ts +42 -0
  27. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js +82 -0
  28. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js.map +1 -0
  29. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js +1 -1
  30. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js.map +1 -1
  31. package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +6 -4
  32. package/dist/chatWrappers/utils/resolveChatWrapper.js +26 -18
  33. package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
  34. package/dist/cli/commands/BuildCommand.js +1 -1
  35. package/dist/cli/commands/BuildCommand.js.map +1 -1
  36. package/dist/cli/commands/ChatCommand.d.ts +4 -1
  37. package/dist/cli/commands/ChatCommand.js +93 -81
  38. package/dist/cli/commands/ChatCommand.js.map +1 -1
  39. package/dist/cli/commands/CompleteCommand.d.ts +4 -1
  40. package/dist/cli/commands/CompleteCommand.js +82 -61
  41. package/dist/cli/commands/CompleteCommand.js.map +1 -1
  42. package/dist/cli/commands/DebugCommand.js +4 -4
  43. package/dist/cli/commands/DownloadCommand.js +3 -4
  44. package/dist/cli/commands/DownloadCommand.js.map +1 -1
  45. package/dist/cli/commands/InfillCommand.d.ts +4 -1
  46. package/dist/cli/commands/InfillCommand.js +84 -65
  47. package/dist/cli/commands/InfillCommand.js.map +1 -1
  48. package/dist/cli/commands/inspect/commands/InspectGgufCommand.d.ts +2 -1
  49. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js +20 -7
  50. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js.map +1 -1
  51. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js +42 -4
  52. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js.map +1 -1
  53. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.d.ts +4 -1
  54. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js +69 -36
  55. package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js.map +1 -1
  56. package/dist/cli/recommendedModels.d.ts +2 -0
  57. package/dist/cli/recommendedModels.js +350 -0
  58. package/dist/cli/recommendedModels.js.map +1 -0
  59. package/dist/cli/utils/ConsoleInteraction.d.ts +23 -0
  60. package/dist/cli/utils/ConsoleInteraction.js +122 -0
  61. package/dist/cli/utils/ConsoleInteraction.js.map +1 -0
  62. package/dist/cli/utils/ConsoleTable.js +5 -5
  63. package/dist/cli/utils/basicChooseFromListConsoleInteraction.d.ts +13 -0
  64. package/dist/cli/utils/basicChooseFromListConsoleInteraction.js +111 -0
  65. package/dist/cli/utils/basicChooseFromListConsoleInteraction.js.map +1 -0
  66. package/dist/cli/utils/consolePromptQuestion.d.ts +5 -0
  67. package/dist/cli/utils/consolePromptQuestion.js +80 -0
  68. package/dist/cli/utils/consolePromptQuestion.js.map +1 -0
  69. package/dist/cli/utils/getReadablePath.d.ts +1 -0
  70. package/dist/cli/utils/getReadablePath.js +14 -0
  71. package/dist/cli/utils/getReadablePath.js.map +1 -0
  72. package/dist/cli/utils/printCommonInfoLines.js +5 -4
  73. package/dist/cli/utils/printCommonInfoLines.js.map +1 -1
  74. package/dist/cli/utils/printInfoLine.d.ts +4 -2
  75. package/dist/cli/utils/printInfoLine.js +15 -6
  76. package/dist/cli/utils/printInfoLine.js.map +1 -1
  77. package/dist/cli/utils/resolveCommandGgufPath.d.ts +2 -1
  78. package/dist/cli/utils/resolveCommandGgufPath.js +551 -2
  79. package/dist/cli/utils/resolveCommandGgufPath.js.map +1 -1
  80. package/dist/cli/utils/resolveHeaderFlag.d.ts +1 -0
  81. package/dist/cli/utils/resolveHeaderFlag.js +21 -0
  82. package/dist/cli/utils/resolveHeaderFlag.js.map +1 -0
  83. package/dist/cli/utils/resolveModelRecommendationFileOptions.d.ts +19 -0
  84. package/dist/cli/utils/resolveModelRecommendationFileOptions.js +10 -0
  85. package/dist/cli/utils/resolveModelRecommendationFileOptions.js.map +1 -0
  86. package/dist/cli/utils/splitAnsiToLines.d.ts +1 -0
  87. package/dist/cli/utils/splitAnsiToLines.js +17 -0
  88. package/dist/cli/utils/splitAnsiToLines.js.map +1 -0
  89. package/dist/config.d.ts +3 -0
  90. package/dist/config.js +5 -2
  91. package/dist/config.js.map +1 -1
  92. package/dist/consts.d.ts +2 -0
  93. package/dist/consts.js +8 -0
  94. package/dist/consts.js.map +1 -1
  95. package/dist/evaluator/LlamaChat/LlamaChat.d.ts +9 -2
  96. package/dist/evaluator/LlamaChat/LlamaChat.js +58 -22
  97. package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
  98. package/dist/evaluator/LlamaChat/utils/FunctionCallGrammar.js +3 -1
  99. package/dist/evaluator/LlamaChat/utils/FunctionCallGrammar.js.map +1 -1
  100. package/dist/evaluator/LlamaChatSession/LlamaChatSession.d.ts +10 -3
  101. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js +5 -3
  102. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js.map +1 -1
  103. package/dist/evaluator/LlamaCompletion.d.ts +11 -4
  104. package/dist/evaluator/LlamaCompletion.js +16 -15
  105. package/dist/evaluator/LlamaCompletion.js.map +1 -1
  106. package/dist/evaluator/LlamaContext/LlamaContext.d.ts +13 -23
  107. package/dist/evaluator/LlamaContext/LlamaContext.js +47 -60
  108. package/dist/evaluator/LlamaContext/LlamaContext.js.map +1 -1
  109. package/dist/evaluator/LlamaEmbeddingContext.js +1 -1
  110. package/dist/evaluator/LlamaEmbeddingContext.js.map +1 -1
  111. package/dist/evaluator/LlamaGrammar.d.ts +3 -2
  112. package/dist/evaluator/LlamaGrammar.js +3 -2
  113. package/dist/evaluator/LlamaGrammar.js.map +1 -1
  114. package/dist/evaluator/LlamaModel.d.ts +21 -18
  115. package/dist/evaluator/LlamaModel.js +34 -205
  116. package/dist/evaluator/LlamaModel.js.map +1 -1
  117. package/dist/evaluator/TokenBias.d.ts +22 -0
  118. package/dist/evaluator/TokenBias.js +33 -0
  119. package/dist/evaluator/TokenBias.js.map +1 -0
  120. package/dist/gguf/{GgufInsights.d.ts → insights/GgufInsights.d.ts} +5 -3
  121. package/dist/gguf/{GgufInsights.js → insights/GgufInsights.js} +46 -35
  122. package/dist/gguf/insights/GgufInsights.js.map +1 -0
  123. package/dist/gguf/insights/GgufInsightsConfigurationResolver.d.ts +87 -0
  124. package/dist/gguf/insights/GgufInsightsConfigurationResolver.js +136 -0
  125. package/dist/gguf/insights/GgufInsightsConfigurationResolver.js.map +1 -0
  126. package/dist/gguf/insights/utils/resolveContextContextSizeOption.d.ts +18 -0
  127. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js +52 -0
  128. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js.map +1 -0
  129. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.d.ts +14 -0
  130. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.js +177 -0
  131. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.js.map +1 -0
  132. package/dist/gguf/insights/utils/scoreLevels.d.ts +5 -0
  133. package/dist/gguf/insights/utils/scoreLevels.js +16 -0
  134. package/dist/gguf/insights/utils/scoreLevels.js.map +1 -0
  135. package/dist/gguf/readGgufFileInfo.js +2 -1
  136. package/dist/gguf/readGgufFileInfo.js.map +1 -1
  137. package/dist/gguf/types/GgufMetadataTypes.d.ts +4 -0
  138. package/dist/gguf/types/GgufMetadataTypes.js.map +1 -1
  139. package/dist/index.d.ts +7 -4
  140. package/dist/index.js +5 -2
  141. package/dist/index.js.map +1 -1
  142. package/dist/types.d.ts +21 -1
  143. package/dist/types.js.map +1 -1
  144. package/dist/utils/LlamaText.d.ts +2 -1
  145. package/dist/utils/LlamaText.js +20 -0
  146. package/dist/utils/LlamaText.js.map +1 -1
  147. package/dist/utils/StopGenerationDetector.js +19 -18
  148. package/dist/utils/StopGenerationDetector.js.map +1 -1
  149. package/dist/utils/TokenStreamRegulator.d.ts +4 -2
  150. package/dist/utils/TokenStreamRegulator.js +22 -4
  151. package/dist/utils/TokenStreamRegulator.js.map +1 -1
  152. package/dist/utils/getConsoleLogPrefix.js +1 -1
  153. package/dist/utils/getReadableContextSize.d.ts +1 -0
  154. package/dist/utils/getReadableContextSize.js +7 -0
  155. package/dist/utils/getReadableContextSize.js.map +1 -0
  156. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js +15 -11
  157. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js.map +1 -1
  158. package/dist/utils/isToken.d.ts +2 -0
  159. package/dist/utils/isToken.js +4 -0
  160. package/dist/utils/isToken.js.map +1 -0
  161. package/dist/utils/isUrl.d.ts +1 -0
  162. package/dist/utils/isUrl.js +15 -0
  163. package/dist/utils/isUrl.js.map +1 -0
  164. package/dist/utils/tokenizeInput.d.ts +1 -1
  165. package/dist/utils/tokenizeInput.js +3 -0
  166. package/dist/utils/tokenizeInput.js.map +1 -1
  167. package/dist/utils/utilTypes.d.ts +3 -0
  168. package/dist/utils/utilTypes.js +2 -0
  169. package/dist/utils/utilTypes.js.map +1 -0
  170. package/dist/utils/withOra.d.ts +1 -0
  171. package/dist/utils/withOra.js +13 -7
  172. package/dist/utils/withOra.js.map +1 -1
  173. package/dist/utils/withProgressLog.d.ts +23 -0
  174. package/dist/utils/withProgressLog.js +211 -0
  175. package/dist/utils/withProgressLog.js.map +1 -0
  176. package/dist/utils/withStatusLogs.js +1 -1
  177. package/dist/utils/withStatusLogs.js.map +1 -1
  178. package/llama/addon.cpp +90 -10
  179. package/llama/binariesGithubRelease.json +1 -1
  180. package/llama/gitRelease.bundle +0 -0
  181. package/llama/grammars/README.md +10 -0
  182. package/llama/llama.cpp.info.json +1 -1
  183. package/llamaBins/linux-arm64/_nlcBuildMetadata.json +1 -1
  184. package/llamaBins/linux-arm64/llama-addon.node +0 -0
  185. package/llamaBins/linux-armv7l/_nlcBuildMetadata.json +1 -1
  186. package/llamaBins/linux-armv7l/llama-addon.node +0 -0
  187. package/llamaBins/linux-x64/_nlcBuildMetadata.json +1 -1
  188. package/llamaBins/linux-x64/llama-addon.node +0 -0
  189. package/llamaBins/linux-x64-cuda/_nlcBuildMetadata.json +1 -1
  190. package/llamaBins/linux-x64-cuda/llama-addon.node +0 -0
  191. package/llamaBins/linux-x64-vulkan/_nlcBuildMetadata.json +1 -1
  192. package/llamaBins/linux-x64-vulkan/llama-addon.node +0 -0
  193. package/llamaBins/mac-arm64-metal/_nlcBuildMetadata.json +1 -1
  194. package/llamaBins/mac-arm64-metal/default.metallib +0 -0
  195. package/llamaBins/mac-arm64-metal/llama-addon.node +0 -0
  196. package/llamaBins/mac-x64/_nlcBuildMetadata.json +1 -1
  197. package/llamaBins/mac-x64/llama-addon.node +0 -0
  198. package/llamaBins/win-arm64/_nlcBuildMetadata.json +1 -1
  199. package/llamaBins/win-arm64/llama-addon.node +0 -0
  200. package/llamaBins/win-x64/_nlcBuildMetadata.json +1 -1
  201. package/llamaBins/win-x64/llama-addon.node +0 -0
  202. package/llamaBins/win-x64-cuda/_nlcBuildMetadata.json +1 -1
  203. package/llamaBins/win-x64-cuda/llama-addon.node +0 -0
  204. package/llamaBins/win-x64-vulkan/_nlcBuildMetadata.json +1 -1
  205. package/llamaBins/win-x64-vulkan/llama-addon.node +0 -0
  206. package/package.json +9 -7
  207. package/dist/chatWrappers/LlamaChatWrapper.js.map +0 -1
  208. package/dist/gguf/GgufInsights.js.map +0 -1
@@ -1,6 +1,555 @@
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 filenamify from "filenamify";
10
+ import { cliModelsDirectory } from "../../config.js";
11
+ import { normalizeGgufDownloadUrl } from "../../gguf/utils/normalizeGgufDownloadUrl.js";
12
+ import { GgufInsights } from "../../gguf/insights/GgufInsights.js";
13
+ import { readGgufFileInfo } from "../../gguf/readGgufFileInfo.js";
14
+ import { isUrl } from "../../utils/isUrl.js";
15
+ import { arrowChar } from "../../consts.js";
16
+ import { withProgressLog } from "../../utils/withProgressLog.js";
17
+ import { getReadableContextSize } from "../../utils/getReadableContextSize.js";
18
+ import { getPrettyBuildGpuName } from "../../bindings/consts.js";
19
+ import { ConsoleInteraction, ConsoleInteractionKey } from "./ConsoleInteraction.js";
20
+ import { getReadablePath } from "./getReadablePath.js";
21
+ import { basicChooseFromListConsoleInteraction } from "./basicChooseFromListConsoleInteraction.js";
22
+ import { consolePromptQuestion } from "./consolePromptQuestion.js";
23
+ import { resolveModelRecommendationFileOptions } from "./resolveModelRecommendationFileOptions.js";
24
+ import { splitAnsiToLines } from "./splitAnsiToLines.js";
25
+ import { renderInfoLine } from "./printInfoLine.js";
26
+ export async function resolveCommandGgufPath(ggufPath, llama, fetchHeaders) {
27
+ let resolvedGgufPath = ggufPath;
28
+ if (resolvedGgufPath == null) {
29
+ resolvedGgufPath = await interactiveChooseModel(llama);
30
+ if (resolvedGgufPath.length === 1)
31
+ resolvedGgufPath = resolvedGgufPath[0];
32
+ }
33
+ const isPathUrl = resolvedGgufPath instanceof Array || isUrl(resolvedGgufPath);
34
+ if (isPathUrl && !(resolvedGgufPath instanceof Array))
35
+ resolvedGgufPath = getAllPartUrls(resolvedGgufPath);
36
+ if (!isPathUrl && !(resolvedGgufPath instanceof Array)) {
37
+ try {
38
+ const resolvedPath = path.resolve(process.cwd(), resolvedGgufPath);
39
+ if (await fs.pathExists(resolvedPath))
40
+ return resolvedPath;
41
+ }
42
+ catch (err) {
43
+ throw new Error(`Invalid path: ${resolvedGgufPath}`);
44
+ }
45
+ throw new Error(`File does not exist: ${path.resolve(process.cwd(), resolvedGgufPath)}`);
46
+ }
47
+ if (resolvedGgufPath instanceof Array)
48
+ resolvedGgufPath = resolvedGgufPath.map((url) => normalizeGgufDownloadUrl(url));
49
+ else
50
+ resolvedGgufPath = normalizeGgufDownloadUrl(resolvedGgufPath);
51
+ if (resolvedGgufPath instanceof Array && resolvedGgufPath.length === 1)
52
+ resolvedGgufPath = resolvedGgufPath[0];
53
+ if (resolvedGgufPath instanceof Array) {
54
+ // disable due to a bug with multi-part downloads in the downloader, will be enabled in a future release
55
+ // workaround for TypeScript types to keep the exiting handling of the array type of `resolvedGgufPath`
56
+ const supported = false;
57
+ if (supported)
58
+ throw new Error("Multi-part downloads are not supported yet");
59
+ }
60
+ await fs.ensureDir(cliModelsDirectory);
61
+ const downloader = resolvedGgufPath instanceof Array
62
+ ? await downloadFile({
63
+ partsURL: resolvedGgufPath,
64
+ directory: cliModelsDirectory,
65
+ fileName: getFilenameForPartUrls(resolvedGgufPath),
66
+ cliProgress: true,
67
+ headers: fetchHeaders,
68
+ programType: "chunks"
69
+ })
70
+ : await downloadFile({
71
+ url: resolvedGgufPath,
72
+ directory: cliModelsDirectory,
73
+ cliProgress: true,
74
+ headers: fetchHeaders
75
+ });
76
+ const destFilePath = path.join(path.resolve(cliModelsDirectory), downloader.fileName);
77
+ if (downloader.fileName == null || downloader.fileName === "")
78
+ throw new Error("Failed to get the file name from the URL");
79
+ if (await fs.pathExists(destFilePath)) {
80
+ const fileStats = await fs.stat(destFilePath);
81
+ if (downloader.status.totalBytes === fileStats.size) {
82
+ console.info(`${chalk.yellow("File:")} ${getReadablePath(destFilePath)}`);
83
+ await downloader.close();
84
+ return destFilePath;
85
+ }
86
+ const res = await ConsoleInteraction.yesNoQuestion(`There's already an local ${chalk.blue(downloader.fileName)} file that's different from the remote one.\n` +
87
+ "Download it and override the existing file?");
88
+ if (!res) {
89
+ console.info("Loading the existing file");
90
+ console.info(`${chalk.yellow("File:")} ${getReadablePath(destFilePath)}`);
91
+ await downloader.close();
92
+ return destFilePath;
93
+ }
94
+ await fs.remove(destFilePath);
95
+ }
96
+ const consoleInteraction = new ConsoleInteraction();
97
+ consoleInteraction.onKey(ConsoleInteractionKey.ctrlC, async () => {
98
+ await downloader.close();
99
+ consoleInteraction.stop();
100
+ process.exit(0);
101
+ });
102
+ console.info(`Downloading to ${chalk.yellow(getReadablePath(cliModelsDirectory))}${resolvedGgufPath instanceof Array
103
+ ? chalk.gray(` (combining ${resolvedGgufPath.length} parts into a single file)`)
104
+ : ""}`);
105
+ consoleInteraction.start();
106
+ await downloader.download();
107
+ consoleInteraction.stop();
108
+ console.info(`${chalk.yellow("File:")} ${getReadablePath(destFilePath)}`);
109
+ return destFilePath;
110
+ }
111
+ const vramStateUpdateInterval = 1000;
112
+ async function interactiveChooseModel(llama) {
113
+ let localModelFileOptions = [];
114
+ const recommendedModelOptions = [];
115
+ const activeInteractionController = new AbortController();
116
+ let scheduledTitleRerenderTimeout = undefined;
117
+ let lastVramState = llama.getVramState();
118
+ const canUseGpu = lastVramState.total > 0;
119
+ if (await fs.existsSync(cliModelsDirectory)) {
120
+ const ggufFileNames = (await fs.readdir(cliModelsDirectory)).filter((fileName) => fileName.endsWith(".gguf"));
121
+ let readItems = 0;
122
+ const renderProgress = () => ("(" + String(readItems).padStart(String(ggufFileNames.length).length, "0") + "/" + ggufFileNames.length + ")");
123
+ if (ggufFileNames.length > 0)
124
+ await withProgressLog({
125
+ loadingText: "Reading local models directory",
126
+ failText: "Failed to read local models directory",
127
+ successText: "Read local models directory",
128
+ noSuccessLiveStatus: true,
129
+ initialProgressBarText: renderProgress()
130
+ }, async (progressUpdater) => {
131
+ localModelFileOptions = await Promise.all(ggufFileNames.map(async (fileName) => {
132
+ const filePath = path.join(cliModelsDirectory, fileName);
133
+ let ggufInsights = undefined;
134
+ try {
135
+ const ggufFileInfo = await readGgufFileInfo(filePath, {
136
+ sourceType: "filesystem",
137
+ signal: activeInteractionController.signal
138
+ });
139
+ ggufInsights = await GgufInsights.from(ggufFileInfo, llama);
140
+ }
141
+ catch (err) {
142
+ // do nothing
143
+ }
144
+ readItems++;
145
+ progressUpdater.setProgress(readItems / ggufFileNames.length, renderProgress());
146
+ const compatibilityScore = ggufInsights?.configurationResolver.scoreModelConfigurationCompatibility();
147
+ return {
148
+ type: "localModel",
149
+ title: fileName,
150
+ path: filePath,
151
+ addedDate: (await fs.stat(filePath)).birthtimeMs,
152
+ ggufInsights: ggufInsights,
153
+ compatibilityScore: compatibilityScore?.compatibilityScore,
154
+ compatibilityBonusScore: compatibilityScore?.bonusScore,
155
+ compatibilityContextSize: compatibilityScore?.resolvedValues.contextSize
156
+ };
157
+ }));
158
+ localModelFileOptions = localModelFileOptions.sort((a, b) => {
159
+ if (a.compatibilityScore == null && b.compatibilityScore == null)
160
+ return b.addedDate - a.addedDate;
161
+ else if (a.compatibilityScore == null)
162
+ return -1;
163
+ else if (b.compatibilityScore == null)
164
+ return 1;
165
+ else if (b.compatibilityScore === a.compatibilityScore &&
166
+ b.compatibilityBonusScore != null && a.compatibilityBonusScore != null)
167
+ return b.compatibilityBonusScore - a.compatibilityBonusScore;
168
+ return b.compatibilityScore - a.compatibilityScore;
169
+ });
170
+ });
171
+ }
172
+ try {
173
+ // if this file gets very big, we don't want to load it on every CLI usage
174
+ const { recommendedModels } = await import("../recommendedModels.js");
175
+ for (const recommendedModel of recommendedModels) {
176
+ const potentialUrls = resolveModelRecommendationFileOptions(recommendedModel);
177
+ if (potentialUrls.length > 0)
178
+ recommendedModelOptions.push({
179
+ type: "recommendedModel",
180
+ title: recommendedModel.name,
181
+ potentialUrls,
182
+ description: recommendedModel.description
183
+ });
184
+ }
185
+ }
186
+ catch (err) {
187
+ // do nothing
188
+ }
189
+ let initialFocusIndex = 3; // first model option
190
+ const options = [
191
+ {
192
+ type: "action",
193
+ text: "Enter a model URL or file path...",
194
+ key: "getPath"
195
+ },
196
+ ...(localModelFileOptions.length === 0
197
+ ? []
198
+ : [
199
+ {
200
+ type: "separator",
201
+ text: () => " " + chalk.gray("-".repeat(4))
202
+ },
203
+ {
204
+ type: "separator",
205
+ text: " " + chalk.bold("Downloaded models") + " " + chalk.dim(`(${getReadablePath(cliModelsDirectory)})`)
206
+ },
207
+ ...localModelFileOptions
208
+ ]),
209
+ ...(recommendedModelOptions.length === 0
210
+ ? []
211
+ : [
212
+ {
213
+ type: "separator",
214
+ text: () => " " + chalk.gray("-".repeat(4))
215
+ },
216
+ {
217
+ type: "separator",
218
+ text: " " + chalk.bold("Recommended models") + " " + chalk.dim("(select to download)")
219
+ },
220
+ ...recommendedModelOptions
221
+ ])
222
+ ];
223
+ try {
224
+ // eslint-disable-next-line no-constant-condition
225
+ while (true) {
226
+ const minWidth = Math.min(80, process.stdout.columns - 1);
227
+ const selectedItem = await basicChooseFromListConsoleInteraction({
228
+ title(item, rerender) {
229
+ const title = chalk.bold("Select a model:") + " ";
230
+ const vramState = llama.getVramState();
231
+ const vramStateText = vramState.total === 0
232
+ ? chalk.bgGray(" " +
233
+ "No GPU" +
234
+ " ")
235
+ : (chalk.bgGray(" " +
236
+ chalk.yellow("GPU:") + " " + getPrettyBuildGpuName(llama.gpu) +
237
+ " ") +
238
+ " " +
239
+ chalk.bgGray(" " +
240
+ chalk.yellow("VRAM usage:") + " " +
241
+ (String(Math.floor((vramState.used / vramState.total) * 100 * 100) / 100) + "%") + " " +
242
+ chalk.dim("(" + bytes(vramState.used) + "/" + bytes(vramState.total) + ")") +
243
+ " "));
244
+ const pad = Math.max(0, minWidth - (stripAnsi(title).length + stripAnsi(vramStateText).length));
245
+ lastVramState = vramState;
246
+ clearTimeout(scheduledTitleRerenderTimeout);
247
+ scheduledTitleRerenderTimeout = setTimeout(() => {
248
+ const vramState = llama.getVramState();
249
+ if (lastVramState.used !== vramState.used || lastVramState.total !== vramState.total)
250
+ rerender();
251
+ }, vramStateUpdateInterval);
252
+ return [
253
+ title,
254
+ " ".repeat(pad),
255
+ vramStateText
256
+ ].join("");
257
+ },
258
+ footer(item) {
259
+ if (item.type !== "recommendedModel" || item.description == null)
260
+ return undefined;
261
+ const leftPad = 3;
262
+ const maxWidth = Math.max(1, process.stdout.columns - leftPad);
263
+ const lines = splitAnsiToLines(item.description, maxWidth);
264
+ return " \n" +
265
+ " ".repeat(leftPad) + chalk.bold.gray("Model description") + "\n" +
266
+ lines.map((line) => (" ".repeat(leftPad) + line)).join("\n") + "\n" +
267
+ splitAnsiToLines(renderRecommendedModelTechnicalInfo(item.selectedUrl, maxWidth, canUseGpu), maxWidth)
268
+ .map((line) => (" ".repeat(leftPad) + line))
269
+ .join("\n");
270
+ },
271
+ items: options,
272
+ renderItem(item, focused, rerender) {
273
+ return renderSelectionItem(item, focused, rerender, activeInteractionController.signal, llama);
274
+ },
275
+ canFocusItem(item) {
276
+ return item.type === "recommendedModel" || item.type === "localModel" || item.type === "action";
277
+ },
278
+ canSelectItem(item) {
279
+ if (item.type === "recommendedModel")
280
+ return item.selectedUrl != null;
281
+ return item.type === "localModel" || item.type === "action";
282
+ },
283
+ initialFocusIndex: Math.min(initialFocusIndex, options.length - 1),
284
+ aboveItemsPadding: 1,
285
+ belowItemsPadding: 1,
286
+ renderSummaryOnExit(item) {
287
+ if (item == null || item.type === "action" || item.type === "separator")
288
+ return "";
289
+ else if (item.type === "localModel") {
290
+ const modelTitle = item.title instanceof Function
291
+ ? item.title()
292
+ : item.title;
293
+ return logSymbols.success + " Selected model " + chalk.blue(modelTitle);
294
+ }
295
+ else if (item.type === "recommendedModel") {
296
+ const modelTitle = item.title instanceof Function
297
+ ? item.title()
298
+ : item.title;
299
+ return logSymbols.success + " Selected model " + chalk.blue(modelTitle);
300
+ }
301
+ void (item);
302
+ return "";
303
+ },
304
+ exitOnCtrlC: true
305
+ });
306
+ if (selectedItem == null || selectedItem.type === "separator")
307
+ continue;
308
+ else if (selectedItem.type === "localModel")
309
+ return selectedItem.path;
310
+ else if (selectedItem.type === "recommendedModel" && selectedItem.selectedUrl != null)
311
+ return selectedItem.selectedUrl.url;
312
+ else if (selectedItem.type === "action") {
313
+ if (selectedItem.key === "getPath") {
314
+ initialFocusIndex = 0;
315
+ const selectedModelUrlOrPath = await askForModelUrlOrPath();
316
+ if (selectedModelUrlOrPath == null)
317
+ continue;
318
+ return selectedModelUrlOrPath;
319
+ }
320
+ }
321
+ }
322
+ }
323
+ finally {
324
+ activeInteractionController.abort();
325
+ }
326
+ }
327
+ async function askForModelUrlOrPath() {
328
+ return await consolePromptQuestion(chalk.bold("Enter a model URL or file path: "), {
329
+ exitOnCtrlC: false,
330
+ async validate(input) {
331
+ if (isUrl(input, false)) {
332
+ try {
333
+ new URL(input);
334
+ }
335
+ catch (err) {
336
+ return "Invalid URL";
337
+ }
338
+ return null;
339
+ }
340
+ try {
341
+ if (await fs.pathExists(input))
342
+ return null;
343
+ return "File does not exist";
344
+ }
345
+ catch (err) {
346
+ return "Invalid path";
347
+ }
348
+ },
349
+ renderSummaryOnExit(item) {
350
+ if (item == null)
351
+ return "";
352
+ if (isUrl(item, false))
353
+ return logSymbols.success + " Entered model URL " + chalk.blue(item);
354
+ else
355
+ return logSymbols.success + " Entered model path " + chalk.blue(item);
356
+ }
357
+ });
358
+ }
359
+ function renderSelectionItem(item, focused, rerender, abortSignal, llama) {
360
+ if (item.type === "localModel") {
361
+ let modelText = item.title instanceof Function
362
+ ? item.title()
363
+ : item.title;
364
+ if (item.ggufInsights != null)
365
+ modelText += " " + renderModelCompatibility(item.ggufInsights, item.compatibilityScore, item.compatibilityContextSize);
366
+ else
367
+ modelText += " " + chalk.bgGray.yellow(" Cannot read metadata ");
368
+ return renderSelectableItem(modelText, focused);
369
+ }
370
+ else if (item.type === "recommendedModel") {
371
+ let modelText = item.title instanceof Function
372
+ ? item.title()
373
+ : item.title;
374
+ if (item.selectedUrl == null) {
375
+ if (item.urlSelectionLoadingState == null) {
376
+ item.urlSelectionLoadingState = "loading";
377
+ void selectFileForModelRecommendation({
378
+ recommendedModelOption: item,
379
+ abortSignal,
380
+ rerenderOption: rerender,
381
+ llama
382
+ });
383
+ }
384
+ if (item.urlSelectionLoadingState === "loading")
385
+ modelText += " " + chalk.bgGray.yellow(" Loading info ");
386
+ else if (item.urlSelectionLoadingState === "done")
387
+ modelText += " " + chalk.bgGray.yellow(" Failed to load info ");
388
+ else
389
+ void (item.urlSelectionLoadingState);
390
+ }
391
+ else
392
+ modelText += " " + renderModelCompatibility(item.selectedUrl.ggufInsights, item.selectedUrl.compatibilityScore.compatibilityScore, item.selectedUrl.compatibilityScore.resolvedValues.contextSize);
393
+ return renderSelectableItem(modelText, focused);
394
+ }
395
+ else if (item.type === "separator") {
396
+ return item.text instanceof Function
397
+ ? item.text()
398
+ : item.text;
399
+ }
400
+ else if (item.type === "action") {
401
+ const actionText = item.text instanceof Function
402
+ ? item.text()
403
+ : item.text;
404
+ return renderSelectableItem(actionText, focused);
405
+ }
406
+ void (item);
407
+ return "";
408
+ }
409
+ function renderSelectableItem(text, focused) {
410
+ if (focused)
411
+ return " " + chalk.cyan(arrowChar) + " " + chalk.cyan(text);
412
+ return " * " + text;
413
+ }
414
+ function renderModelCompatibility(ggufInsights, compatibilityScore, compatibilityContextSize) {
415
+ const info = [];
416
+ if (compatibilityScore != null)
417
+ info.push(renderCompatibilityPercentageWithColors(compatibilityScore * 100) + chalk.whiteBright(" compatibility")
418
+ + (compatibilityContextSize == null
419
+ ? ""
420
+ : (chalk.gray(" | ") + chalk.yellow(getReadableContextSize(compatibilityContextSize)) + chalk.whiteBright(" context"))));
421
+ info.push(chalk.yellow("Size:") + " " + chalk.whiteBright(bytes(ggufInsights.modelSize)));
422
+ return info
423
+ .map((item) => chalk.bgGray(" " + item + " "))
424
+ .join(" ");
425
+ }
426
+ function renderRecommendedModelTechnicalInfo(modelSelectedUrl, maxWidth, canUseGpu) {
427
+ if (modelSelectedUrl == null)
428
+ return " \n" + chalk.bgGray.yellow(" Loading info ") + "\n ";
429
+ const ggufInsights = modelSelectedUrl.ggufInsights;
430
+ const compatibilityScore = modelSelectedUrl.compatibilityScore;
431
+ const longestTitle = Math.max("Model info".length, "Resolved config".length) + 1;
432
+ return " \n" + [
433
+ renderInfoLine({
434
+ title: "Model info",
435
+ padTitle: longestTitle,
436
+ separateLines: false,
437
+ maxWidth,
438
+ info: [{
439
+ title: "Size",
440
+ value: bytes(ggufInsights.modelSize)
441
+ }, {
442
+ show: ggufInsights.trainContextSize != null,
443
+ title: "Train context size",
444
+ value: () => getReadableContextSize(ggufInsights.trainContextSize ?? 0)
445
+ }]
446
+ }),
447
+ renderInfoLine({
448
+ title: "Resolved config",
449
+ padTitle: longestTitle,
450
+ separateLines: false,
451
+ maxWidth,
452
+ info: [{
453
+ title: "",
454
+ value: renderCompatibilityPercentageWithColors(compatibilityScore.compatibilityScore * 100) + " compatibility"
455
+ }, {
456
+ show: ggufInsights.trainContextSize != null,
457
+ title: "Context size",
458
+ value: getReadableContextSize(compatibilityScore.resolvedValues.contextSize)
459
+ }, {
460
+ show: canUseGpu,
461
+ title: "GPU layers",
462
+ value: () => (compatibilityScore.resolvedValues.gpuLayers + "/" + ggufInsights.totalLayers + " " +
463
+ chalk.dim(`(${Math.floor((compatibilityScore.resolvedValues.gpuLayers / ggufInsights.totalLayers) * 100)}%)`))
464
+ }, {
465
+ show: canUseGpu,
466
+ title: "VRAM usage",
467
+ value: () => bytes(compatibilityScore.resolvedValues.totalVramUsage)
468
+ }]
469
+ })
470
+ ].join("\n");
471
+ }
472
+ function renderCompatibilityPercentageWithColors(percentage, { greenBright = 100, green = 95, yellow = 85, yellowBright = 75 } = {}) {
473
+ const percentageText = String(Math.floor(percentage)) + "%";
474
+ if (percentage >= greenBright)
475
+ return chalk.greenBright(percentageText);
476
+ else if (percentage >= green)
477
+ return chalk.green(percentageText);
478
+ else if (percentage >= yellow)
479
+ return chalk.yellow(percentageText);
480
+ else if (percentage >= yellowBright)
481
+ return chalk.yellowBright(percentageText);
482
+ return chalk.red(percentageText);
483
+ }
484
+ async function selectFileForModelRecommendation({ recommendedModelOption, llama, abortSignal, rerenderOption }) {
485
+ try {
486
+ let bestScore = undefined;
487
+ let bestScoreSelectedUrl = undefined;
488
+ for (const potentialUrl of recommendedModelOption.potentialUrls) {
489
+ if (abortSignal.aborted)
490
+ return;
491
+ try {
492
+ const ggufFileInfo = await readGgufFileInfo(potentialUrl[0], {
493
+ sourceType: "network",
494
+ signal: abortSignal
495
+ });
496
+ const ggufInsights = await GgufInsights.from(ggufFileInfo, llama);
497
+ if (abortSignal.aborted)
498
+ return;
499
+ const compatibilityScore = ggufInsights.configurationResolver.scoreModelConfigurationCompatibility();
500
+ if (bestScore == null || compatibilityScore.compatibilityScore > bestScore) {
501
+ bestScore = compatibilityScore.compatibilityScore;
502
+ bestScoreSelectedUrl = {
503
+ url: potentialUrl,
504
+ ggufInsights,
505
+ compatibilityScore
506
+ };
507
+ if (bestScore === 1)
508
+ break;
509
+ }
510
+ }
511
+ catch (err) {
512
+ // do nothing
513
+ }
514
+ }
515
+ recommendedModelOption.selectedUrl = bestScoreSelectedUrl;
516
+ recommendedModelOption.urlSelectionLoadingState = "done";
517
+ rerenderOption();
518
+ }
519
+ catch (err) {
520
+ recommendedModelOption.urlSelectionLoadingState = "done";
521
+ rerenderOption();
522
+ }
523
+ }
524
+ const partsRegex = /\.gguf\.part(?<part>\d+)of(?<parts>\d+)$/;
525
+ function getAllPartUrls(ggufUrl) {
526
+ const partsMatch = ggufUrl.match(partsRegex);
527
+ if (partsMatch != null) {
528
+ const partString = partsMatch.groups?.part;
529
+ const part = Number(partString);
530
+ const partsString = partsMatch.groups?.parts;
531
+ const parts = Number(partsString);
532
+ if (partString == null || !Number.isFinite(part) || partsString == null || !Number.isFinite(parts) || part > parts || part === 0 ||
533
+ parts === 0)
534
+ return ggufUrl;
535
+ const ggufIndex = ggufUrl.indexOf(".gguf");
536
+ const urlWithoutPart = ggufUrl.slice(0, ggufIndex + ".gguf".length);
537
+ const res = [];
538
+ for (let i = 1; i <= parts; i++)
539
+ res.push(urlWithoutPart + `.part${String(i).padStart(partString.length, "0")}of${partsString}`);
540
+ return res;
541
+ }
542
+ return ggufUrl;
543
+ }
544
+ function getFilenameForPartUrls(urls) {
545
+ if (urls.length === 0)
546
+ return undefined;
547
+ if (partsRegex.test(urls[0])) {
548
+ const ggufIndex = urls[0].indexOf(".gguf");
549
+ const urlWithoutPart = urls[0].slice(0, ggufIndex + ".gguf".length);
550
+ const filename = decodeURIComponent(urlWithoutPart.split("/").slice(-1)[0]);
551
+ return filenamify(filename);
552
+ }
553
+ return undefined;
5
554
  }
6
555
  //# 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":"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"}
@@ -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` | `${string}.gguf.part${number}of${number}`[];
16
+ };
17
+ }>;
18
+ };
19
+ export declare function resolveModelRecommendationFileOptions(modelRecommendation: ModelRecommendation): string[][];
@@ -0,0 +1,10 @@
1
+ import { normalizeGgufDownloadUrl } from "../../gguf/utils/normalizeGgufDownloadUrl.js";
2
+ export function resolveModelRecommendationFileOptions(modelRecommendation) {
3
+ return modelRecommendation.fileOptions.map((fileOption) => {
4
+ const files = fileOption.huggingFace.file instanceof Array
5
+ ? fileOption.huggingFace.file
6
+ : [fileOption.huggingFace.file];
7
+ return files.map((file) => normalizeGgufDownloadUrl(`https://huggingface.co/${fileOption.huggingFace.model}/resolve/${fileOption.huggingFace.branch}/${file}`));
8
+ });
9
+ }
10
+ //# sourceMappingURL=resolveModelRecommendationFileOptions.js.map