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
@@ -0,0 +1,211 @@
1
+ import process from "process";
2
+ import UpdateManager from "stdout-update";
3
+ import sliceAnsi from "slice-ansi";
4
+ import stripAnsi from "strip-ansi";
5
+ import chalk from "chalk";
6
+ import logSymbols from "log-symbols";
7
+ import prettyMilliseconds from "pretty-ms";
8
+ import { useCiLogs } from "../config.js";
9
+ import { clockChar } from "../consts.js";
10
+ import { ConsoleInteraction, ConsoleInteractionKey } from "../cli/utils/ConsoleInteraction.js";
11
+ import { getConsoleLogPrefix } from "./getConsoleLogPrefix.js";
12
+ import withOra from "./withOra.js";
13
+ export async function withProgressLog({ loadingText, successText, failText, liveUpdates = true, statusIcons = true, initialPercentage = 0, initialProgressBarText, progressBarLength = 40, minPercentageChangeForNonLiveUpdates = 0.1, eta = true, etaUpdateInterval = 1000, noProgress = false, progressFractionDigits = true, noSuccessLiveStatus = false, liveCtrlCSendsAbortSignal = false }, callback) {
14
+ const shouldLiveUpdate = !useCiLogs && liveUpdates;
15
+ const startTime = Date.now();
16
+ const abortController = new AbortController();
17
+ let currentProgress = initialPercentage;
18
+ let currentProgressBarText = initialProgressBarText;
19
+ let isAborted = false;
20
+ const getEta = () => {
21
+ const now = Date.now();
22
+ if (!eta || currentProgress === 1 || now - startTime < 1000)
23
+ return null;
24
+ const timeRemaining = ((now - startTime) / currentProgress) * (1 - currentProgress);
25
+ if (!Number.isFinite(timeRemaining) || typeof timeRemaining === "bigint")
26
+ return null;
27
+ if (timeRemaining < 1000)
28
+ return "0s left";
29
+ try {
30
+ return prettyMilliseconds(timeRemaining, {
31
+ keepDecimalsOnWholeSeconds: true,
32
+ secondsDecimalDigits: 2,
33
+ compact: true
34
+ }) + " left";
35
+ }
36
+ catch (err) {
37
+ return null;
38
+ }
39
+ };
40
+ if (noProgress) {
41
+ return withOra({
42
+ loading: loadingText,
43
+ success: successText,
44
+ fail: failText,
45
+ useStatusLogs: !shouldLiveUpdate,
46
+ noSuccessLiveStatus
47
+ }, () => {
48
+ const progressUpdater = {
49
+ setProgress: () => progressUpdater
50
+ };
51
+ return callback(progressUpdater);
52
+ });
53
+ }
54
+ else if (!shouldLiveUpdate) {
55
+ const getLoadingText = () => {
56
+ const formattedProgress = (currentProgress * 100)
57
+ .toLocaleString("en-US", {
58
+ minimumIntegerDigits: 1,
59
+ minimumFractionDigits: 0,
60
+ maximumFractionDigits: progressFractionDigits ? 3 : 0
61
+ }) + "%";
62
+ const etaText = getEta();
63
+ return [
64
+ chalk.cyan(clockChar),
65
+ loadingText,
66
+ chalk.yellow(formattedProgress),
67
+ (currentProgressBarText != null && currentProgressBarText !== "")
68
+ ? chalk.gray(currentProgressBarText + (etaText != null
69
+ ? (" | " + etaText)
70
+ : ""))
71
+ : chalk.gray(etaText ?? "")
72
+ ].join(" ");
73
+ };
74
+ let lastLogProgress = initialPercentage;
75
+ let lastLogProgressBarText = initialProgressBarText;
76
+ const progressUpdater = {
77
+ setProgress(progress, progressText) {
78
+ currentProgress = progress;
79
+ currentProgressBarText = progressText;
80
+ if (Math.abs(currentProgress - lastLogProgress) >= minPercentageChangeForNonLiveUpdates ||
81
+ currentProgressBarText !== lastLogProgressBarText ||
82
+ (progress === 1 && lastLogProgress !== 1)) {
83
+ console.log(getConsoleLogPrefix() + getLoadingText());
84
+ lastLogProgress = currentProgress;
85
+ lastLogProgressBarText = currentProgressBarText;
86
+ }
87
+ return progressUpdater;
88
+ }
89
+ };
90
+ console.log(getConsoleLogPrefix() + getLoadingText());
91
+ try {
92
+ const res = await callback(progressUpdater);
93
+ console.log(getConsoleLogPrefix() + `${logSymbols.success} ${successText}`);
94
+ return res;
95
+ }
96
+ catch (er) {
97
+ console.log(getConsoleLogPrefix() + `${logSymbols.error} ${failText}`);
98
+ throw er;
99
+ }
100
+ }
101
+ const updateManager = UpdateManager.getInstance();
102
+ let etaUpdateTimeout = undefined;
103
+ function getProgressLine() {
104
+ const formattedProgress = (currentProgress * 100)
105
+ .toLocaleString("en-US", {
106
+ minimumIntegerDigits: 1,
107
+ minimumFractionDigits: progressFractionDigits ? 4 : 0,
108
+ maximumFractionDigits: progressFractionDigits ? 4 : 0
109
+ })
110
+ .slice(0, 5) + "%";
111
+ const addedText = (currentProgressBarText != null && currentProgressBarText !== "")
112
+ ? currentProgressBarText
113
+ : "";
114
+ const leftPad = " ".repeat(Math.floor((progressBarLength - stripAnsi(formattedProgress + (addedText.length > 0
115
+ ? (addedText + 1)
116
+ : 0)).length) / 2));
117
+ return [
118
+ loadingText,
119
+ renderProgressBar({
120
+ barText: leftPad + ` ${chalk.black.bgWhiteBright(formattedProgress)}${addedText.length === 0 ? "" : (" " + chalk.gray(addedText))} `,
121
+ backgroundText: leftPad + ` ${chalk.yellow.bgGray(formattedProgress)}${addedText.length === 0 ? "" : (" " + chalk.white(addedText))} `,
122
+ length: progressBarLength,
123
+ loadedPercentage: Math.max(0, Math.min(1, currentProgress)),
124
+ barStyle: chalk.black.bgWhiteBright,
125
+ backgroundStyle: chalk.bgGray
126
+ }),
127
+ isAborted
128
+ ? chalk.red("Aborted")
129
+ : chalk.gray(getEta() ?? "")
130
+ ].join(" ");
131
+ }
132
+ function updateProgressBar() {
133
+ updateManager.update([
134
+ getConsoleLogPrefix() + getProgressLine()
135
+ ]);
136
+ clearTimeout(etaUpdateTimeout);
137
+ if (eta && currentProgress !== 1)
138
+ etaUpdateTimeout = setTimeout(updateProgressBar, etaUpdateInterval);
139
+ }
140
+ const progressUpdater = {
141
+ setProgress(progress, progressText) {
142
+ currentProgress = progress;
143
+ currentProgressBarText = progressText;
144
+ if (!isAborted)
145
+ updateProgressBar();
146
+ return progressUpdater;
147
+ },
148
+ abortSignal: liveCtrlCSendsAbortSignal
149
+ ? abortController.signal
150
+ : undefined
151
+ };
152
+ updateManager.hook();
153
+ const consoleInteraction = new ConsoleInteraction();
154
+ let moveCursorUpAfterUnhook = false;
155
+ consoleInteraction.onKey(ConsoleInteractionKey.ctrlC, () => {
156
+ isAborted = true;
157
+ if (liveCtrlCSendsAbortSignal) {
158
+ abortController.abort();
159
+ consoleInteraction.stop();
160
+ updateProgressBar();
161
+ updateManager.unhook(true);
162
+ }
163
+ else {
164
+ consoleInteraction.stop();
165
+ updateManager.unhook(true);
166
+ updateProgressBar();
167
+ process.exit(0);
168
+ }
169
+ });
170
+ try {
171
+ updateProgressBar();
172
+ consoleInteraction.start();
173
+ const res = await callback(progressUpdater);
174
+ clearTimeout(etaUpdateTimeout);
175
+ if (noSuccessLiveStatus) {
176
+ updateManager.update([""]);
177
+ moveCursorUpAfterUnhook = true;
178
+ }
179
+ else
180
+ updateManager.update([
181
+ getConsoleLogPrefix() + (statusIcons
182
+ ? (logSymbols.success + " ")
183
+ : "") + successText
184
+ ]);
185
+ return res;
186
+ }
187
+ catch (err) {
188
+ updateManager.update([
189
+ getConsoleLogPrefix() + (statusIcons
190
+ ? (logSymbols.error + " ")
191
+ : "") + failText
192
+ ]);
193
+ throw err;
194
+ }
195
+ finally {
196
+ consoleInteraction.stop();
197
+ updateManager.unhook(true);
198
+ if (moveCursorUpAfterUnhook)
199
+ process.stdout.moveCursor(0, -1);
200
+ }
201
+ }
202
+ function renderProgressBar({ barText, backgroundText, length, loadedPercentage, barStyle, backgroundStyle }) {
203
+ const barChars = Math.floor(length * loadedPercentage);
204
+ const backgroundChars = length - barChars;
205
+ const slicedBarText = sliceAnsi(barText, 0, barChars);
206
+ const paddedBarText = slicedBarText + " ".repeat(barChars - stripAnsi(slicedBarText).length);
207
+ const slicedBackgroundText = sliceAnsi(backgroundText, barChars, barChars + backgroundChars);
208
+ const paddedBackgroundText = slicedBackgroundText + " ".repeat(backgroundChars - stripAnsi(slicedBackgroundText).length);
209
+ return barStyle(paddedBarText) + backgroundStyle(paddedBackgroundText);
210
+ }
211
+ //# sourceMappingURL=withProgressLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withProgressLog.js","sourceRoot":"","sources":["../../src/utils/withProgressLog.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import chalk from "chalk";
2
2
  import logSymbols from "log-symbols";
3
+ import { clockChar } from "../consts.js";
3
4
  import { getConsoleLogPrefix } from "./getConsoleLogPrefix.js";
4
- const clockChar = "\u25f7";
5
5
  export default async function withStatusLogs(messageAndOptions, callback) {
6
6
  if (typeof messageAndOptions !== "string" && messageAndOptions.disableLogs)
7
7
  return await callback();
@@ -1 +1 @@
1
- {"version":3,"file":"withStatusLogs.js","sourceRoot":"","sources":["../../src/utils/withStatusLogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAE7D,MAAM,SAAS,GAAG,QAAQ,CAAC;AAE3B,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CACxC,iBAKC,EACD,QAA0B;IAE1B,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,WAAW;QACtE,OAAO,MAAM,QAAQ,EAAE,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzJ,IAAI;QACA,MAAM,GAAG,GAAG,MAAM,QAAQ,EAAE,CAAC;QAE7B,IAAI,OAAO,iBAAiB,KAAK,QAAQ;YACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;;YAE1F,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAEtF,OAAO,GAAG,CAAC;KACd;IAAC,OAAO,EAAE,EAAE;QACT,IAAI,OAAO,iBAAiB,KAAK,QAAQ;YACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,KAAK,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;;YAErF,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,KAAK,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAEpF,MAAM,EAAE,CAAC;KACZ;AACL,CAAC"}
1
+ {"version":3,"file":"withStatusLogs.js","sourceRoot":"","sources":["../../src/utils/withStatusLogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAG7D,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CACxC,iBAKC,EACD,QAA0B;IAE1B,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,WAAW;QACtE,OAAO,MAAM,QAAQ,EAAE,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzJ,IAAI;QACA,MAAM,GAAG,GAAG,MAAM,QAAQ,EAAE,CAAC;QAE7B,IAAI,OAAO,iBAAiB,KAAK,QAAQ;YACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;;YAE1F,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAEtF,OAAO,GAAG,CAAC;KACd;IAAC,OAAO,EAAE,EAAE;QACT,IAAI,OAAO,iBAAiB,KAAK,QAAQ;YACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,KAAK,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;;YAErF,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,GAAG,UAAU,CAAC,KAAK,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAEpF,MAAM,EAAE,CAAC;KACZ;AACL,CAAC"}
package/llama/addon.cpp CHANGED
@@ -3,6 +3,7 @@
3
3
  #include <algorithm>
4
4
  #include <sstream>
5
5
  #include <vector>
6
+ #include <unordered_map>
6
7
 
7
8
  #include "common.h"
8
9
  #include "common/grammar-parser.h"
@@ -107,12 +108,12 @@ static void adjustNapiExternalMemorySubtract(Napi::Env env, uint64_t size) {
107
108
  }
108
109
  }
109
110
 
110
- std::string addon_model_token_to_piece(const struct llama_model* model, llama_token token) {
111
+ std::string addon_model_token_to_piece(const struct llama_model* model, llama_token token, bool specialTokens) {
111
112
  std::vector<char> result(8, 0);
112
- const int n_tokens = llama_token_to_piece(model, token, result.data(), result.size());
113
+ const int n_tokens = llama_token_to_piece(model, token, result.data(), result.size(), specialTokens);
113
114
  if (n_tokens < 0) {
114
115
  result.resize(-n_tokens);
115
- int check = llama_token_to_piece(model, token, result.data(), result.size());
116
+ int check = llama_token_to_piece(model, token, result.data(), result.size(), specialTokens);
116
117
  GGML_ASSERT(check == -n_tokens);
117
118
  } else {
118
119
  result.resize(n_tokens);
@@ -377,13 +378,16 @@ class AddonModel : public Napi::ObjectWrap<AddonModel> {
377
378
  }
378
379
 
379
380
  Napi::Uint32Array tokens = info[0].As<Napi::Uint32Array>();
381
+ bool decodeSpecialTokens = info.Length() > 0
382
+ ? info[1].As<Napi::Boolean>().Value()
383
+ : false;
380
384
 
381
385
  // Create a stringstream for accumulating the decoded string.
382
386
  std::stringstream ss;
383
387
 
384
388
  // Decode each token and accumulate the result.
385
389
  for (size_t i = 0; i < tokens.ElementLength(); i++) {
386
- const std::string piece = addon_model_token_to_piece(model, (llama_token)tokens[i]);
390
+ const std::string piece = addon_model_token_to_piece(model, (llama_token)tokens[i], decodeSpecialTokens);
387
391
 
388
392
  if (piece.empty()) {
389
393
  continue;
@@ -533,6 +537,20 @@ class AddonModel : public Napi::ObjectWrap<AddonModel> {
533
537
 
534
538
  return Napi::Number::From(info.Env(), int32_t(tokenType));
535
539
  }
540
+ Napi::Value IsEogToken(const Napi::CallbackInfo& info) {
541
+ if (disposed) {
542
+ Napi::Error::New(info.Env(), "Model is disposed").ThrowAsJavaScriptException();
543
+ return info.Env().Undefined();
544
+ }
545
+
546
+ if (info[0].IsNumber() == false) {
547
+ return Napi::Boolean::New(info.Env(), false);
548
+ }
549
+
550
+ int token = info[0].As<Napi::Number>().Int32Value();
551
+
552
+ return Napi::Boolean::New(info.Env(), llama_token_is_eog(model, token));
553
+ }
536
554
  Napi::Value GetVocabularyType(const Napi::CallbackInfo& info) {
537
555
  if (disposed) {
538
556
  Napi::Error::New(info.Env(), "Model is disposed").ThrowAsJavaScriptException();
@@ -580,6 +598,7 @@ class AddonModel : public Napi::ObjectWrap<AddonModel> {
580
598
  InstanceMethod("eotToken", &AddonModel::EotToken),
581
599
  InstanceMethod("getTokenString", &AddonModel::GetTokenString),
582
600
  InstanceMethod("getTokenType", &AddonModel::GetTokenType),
601
+ InstanceMethod("isEogToken", &AddonModel::IsEogToken),
583
602
  InstanceMethod("getVocabularyType", &AddonModel::GetVocabularyType),
584
603
  InstanceMethod("shouldPrependBosToken", &AddonModel::ShouldPrependBosToken),
585
604
  InstanceMethod("getModelSize", &AddonModel::GetModelSize),
@@ -1053,6 +1072,30 @@ class AddonContext : public Napi::ObjectWrap<AddonContext> {
1053
1072
  return info.Env().Undefined();
1054
1073
  }
1055
1074
 
1075
+ Napi::Value CanBeNextTokenForGrammarEvaluationState(const Napi::CallbackInfo& info) {
1076
+ AddonGrammarEvaluationState* grammar_evaluation_state =
1077
+ Napi::ObjectWrap<AddonGrammarEvaluationState>::Unwrap(info[0].As<Napi::Object>());
1078
+ llama_token tokenId = info[1].As<Napi::Number>().Int32Value();
1079
+
1080
+ if ((grammar_evaluation_state)->grammar != nullptr) {
1081
+ std::vector<llama_token_data> candidates;
1082
+ candidates.reserve(1);
1083
+ candidates.emplace_back(llama_token_data { tokenId, 1, 0.0f });
1084
+
1085
+ llama_token_data_array candidates_p = { candidates.data(), candidates.size(), false };
1086
+
1087
+ llama_sample_grammar(ctx, &candidates_p, (grammar_evaluation_state)->grammar);
1088
+
1089
+ if (candidates_p.size == 0 || candidates_p.data[0].logit == -INFINITY) {
1090
+ return Napi::Boolean::New(info.Env(), false);
1091
+ }
1092
+
1093
+ return Napi::Boolean::New(info.Env(), true);
1094
+ }
1095
+
1096
+ return Napi::Boolean::New(info.Env(), false);
1097
+ }
1098
+
1056
1099
  Napi::Value GetEmbedding(const Napi::CallbackInfo& info) {
1057
1100
  if (disposed) {
1058
1101
  Napi::Error::New(info.Env(), "Context is disposed").ThrowAsJavaScriptException();
@@ -1091,7 +1134,7 @@ class AddonContext : public Napi::ObjectWrap<AddonContext> {
1091
1134
  return info.Env().Undefined();
1092
1135
  }
1093
1136
 
1094
- return Napi::Number::From(info.Env(), llama_get_state_size(ctx));
1137
+ return Napi::Number::From(info.Env(), llama_state_get_size(ctx));
1095
1138
  }
1096
1139
 
1097
1140
  Napi::Value PrintTimings(const Napi::CallbackInfo& info) {
@@ -1117,6 +1160,7 @@ class AddonContext : public Napi::ObjectWrap<AddonContext> {
1117
1160
  InstanceMethod("decodeBatch", &AddonContext::DecodeBatch),
1118
1161
  InstanceMethod("sampleToken", &AddonContext::SampleToken),
1119
1162
  InstanceMethod("acceptGrammarEvaluationStateToken", &AddonContext::AcceptGrammarEvaluationStateToken),
1163
+ InstanceMethod("canBeNextTokenForGrammarEvaluationState", &AddonContext::CanBeNextTokenForGrammarEvaluationState),
1120
1164
  InstanceMethod("getEmbedding", &AddonContext::GetEmbedding),
1121
1165
  InstanceMethod("getStateSize", &AddonContext::GetStateSize),
1122
1166
  InstanceMethod("printTimings", &AddonContext::PrintTimings),
@@ -1219,7 +1263,7 @@ class AddonContextLoadContextWorker : public Napi::AsyncWorker {
1219
1263
  }
1220
1264
  void OnOK() {
1221
1265
  if (context->contextLoaded) {
1222
- uint64_t contextMemorySize = llama_get_state_size(context->ctx);
1266
+ uint64_t contextMemorySize = llama_state_get_size(context->ctx);
1223
1267
  adjustNapiExternalMemoryAdd(Env(), contextMemorySize);
1224
1268
  context->loadedContextMemorySize = contextMemorySize;
1225
1269
  }
@@ -1334,6 +1378,8 @@ class AddonContextSampleTokenWorker : public Napi::AsyncWorker {
1334
1378
  float repeat_penalty_presence_penalty = 0.00f; // 0.0 = disabled
1335
1379
  float repeat_penalty_frequency_penalty = 0.00f; // 0.0 = disabled
1336
1380
  std::vector<llama_token> repeat_penalty_tokens;
1381
+ std::unordered_map<llama_token, float> tokenBiases;
1382
+ bool useTokenBiases = false;
1337
1383
  bool use_repeat_penalty = false;
1338
1384
 
1339
1385
  AddonContextSampleTokenWorker(const Napi::CallbackInfo& info, AddonContext* ctx)
@@ -1378,6 +1424,19 @@ class AddonContextSampleTokenWorker : public Napi::AsyncWorker {
1378
1424
  use_repeat_penalty = true;
1379
1425
  }
1380
1426
 
1427
+ if (options.Has("tokenBiasKeys") && options.Has("tokenBiasValues")) {
1428
+ Napi::Uint32Array tokenBiasKeys = options.Get("tokenBiasKeys").As<Napi::Uint32Array>();
1429
+ Napi::Float32Array tokenBiasValues = options.Get("tokenBiasValues").As<Napi::Float32Array>();
1430
+
1431
+ if (tokenBiasKeys.ElementLength() == tokenBiasValues.ElementLength()) {
1432
+ for (size_t i = 0; i < tokenBiasKeys.ElementLength(); i++) {
1433
+ tokenBiases[static_cast<llama_token>(tokenBiasKeys[i])] = tokenBiasValues[i];
1434
+ }
1435
+
1436
+ useTokenBiases = true;
1437
+ }
1438
+ }
1439
+
1381
1440
  if (options.Has("repeatPenaltyPresencePenalty")) {
1382
1441
  repeat_penalty_presence_penalty = options.Get("repeatPenaltyPresencePenalty").As<Napi::Number>().FloatValue();
1383
1442
  }
@@ -1431,13 +1490,27 @@ class AddonContextSampleTokenWorker : public Napi::AsyncWorker {
1431
1490
  candidates.reserve(n_vocab);
1432
1491
 
1433
1492
  for (llama_token token_id = 0; token_id < n_vocab; token_id++) {
1434
- candidates.emplace_back(llama_token_data { token_id, logits[token_id], 0.0f });
1493
+ auto logit = logits[token_id];
1494
+
1495
+ if (useTokenBiases) {
1496
+ bool hasTokenBias = tokenBiases.find(token_id) != tokenBiases.end();
1497
+ if (hasTokenBias) {
1498
+ auto logitBias = tokenBiases.at(token_id);
1499
+ if (logitBias == -INFINITY || logitBias < -INFINITY) {
1500
+ if (!llama_token_is_eog(ctx->model->model, token_id)) {
1501
+ logit = -INFINITY;
1502
+ }
1503
+ } else {
1504
+ logit += logitBias;
1505
+ }
1506
+ }
1507
+ }
1508
+
1509
+ candidates.emplace_back(llama_token_data { token_id, logit, 0.0f });
1435
1510
  }
1436
1511
 
1437
1512
  llama_token_data_array candidates_p = { candidates.data(), candidates.size(), false };
1438
1513
 
1439
- auto eos_token = llama_token_eos(ctx->model->model);
1440
-
1441
1514
  if (use_repeat_penalty && !repeat_penalty_tokens.empty()) {
1442
1515
  llama_sample_repetition_penalties(
1443
1516
  ctx->ctx,
@@ -1452,6 +1525,13 @@ class AddonContextSampleTokenWorker : public Napi::AsyncWorker {
1452
1525
 
1453
1526
  if (use_grammar && (grammar_evaluation_state)->grammar != nullptr) {
1454
1527
  llama_sample_grammar(ctx->ctx, &candidates_p, (grammar_evaluation_state)->grammar);
1528
+
1529
+ if ((candidates_p.size == 0 || candidates_p.data[0].logit == -INFINITY) && useTokenBiases) {
1530
+ // logit biases caused grammar sampling to fail, so sampling again without logit biases
1531
+ useTokenBiases = false;
1532
+ SampleToken();
1533
+ return;
1534
+ }
1455
1535
  }
1456
1536
 
1457
1537
  if (temperature <= 0) {
@@ -1475,7 +1555,7 @@ class AddonContextSampleTokenWorker : public Napi::AsyncWorker {
1475
1555
  new_token_id = llama_sample_token(ctx->ctx, &candidates_p);
1476
1556
  }
1477
1557
 
1478
- if (new_token_id != eos_token && use_grammar && (grammar_evaluation_state)->grammar != nullptr) {
1558
+ if (!llama_token_is_eog(ctx->model->model, new_token_id) && use_grammar && (grammar_evaluation_state)->grammar != nullptr) {
1479
1559
  llama_grammar_accept_token(ctx->ctx, (grammar_evaluation_state)->grammar, new_token_id);
1480
1560
  }
1481
1561
 
@@ -1,3 +1,3 @@
1
1
  {
2
- "release": "b2608"
2
+ "release": "b2717"
3
3
  }
Binary file
@@ -89,3 +89,13 @@ This guide provides a brief overview. Check out the GBNF files in this directory
89
89
  ```
90
90
  ./main -m <model> --grammar-file grammars/some-grammar.gbnf -p 'Some prompt'
91
91
  ```
92
+
93
+ ## Troubleshooting
94
+
95
+ Grammars currently have performance gotchas (see https://github.com/ggerganov/llama.cpp/issues/4218).
96
+
97
+ ### Efficient optional repetitions
98
+
99
+ A common pattern is to allow repetitions of a pattern `x` up to N times.
100
+
101
+ While semantically correct, the syntax `x? x? x?.... x?` (with N repetitions) will result in extremely slow inference. Instead, you can write `(x (x (x ... (x)?...)?)?)?` (w/ N-deep nesting)
@@ -1,4 +1,4 @@
1
1
  {
2
- "tag": "b2608",
2
+ "tag": "b2717",
3
3
  "llamaCppGithubRepo": "ggerganov/llama.cpp"
4
4
  }
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"arm64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"arm64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"armv7l","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"armv7l","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"x64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"x64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"x64","gpu":"cuda","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"x64","gpu":"cuda","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"x64","gpu":"vulkan","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"linux","platformInfo":{"name":"Ubuntu","version":"22.04"},"arch":"x64","gpu":"vulkan","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"mac","platformInfo":{"name":"macOS","version":"21.6.0"},"arch":"arm64","gpu":"metal","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"mac","platformInfo":{"name":"macOS","version":"21.6.0"},"arch":"arm64","gpu":"metal","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"mac","platformInfo":{"name":"macOS","version":"21.6.0"},"arch":"x64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"mac","platformInfo":{"name":"macOS","version":"21.6.0"},"arch":"x64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
Binary file
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"arm64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"arm64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"x64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"x64","gpu":false,"llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
Binary file
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"x64","gpu":"cuda","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"x64","gpu":"cuda","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
@@ -1 +1 @@
1
- {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"x64","gpu":"vulkan","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2608"}}}
1
+ {"buildOptions":{"customCmakeOptions":{},"progressLogs":true,"platform":"win","platformInfo":{"name":"Windows","version":"10.0.20348"},"arch":"x64","gpu":"vulkan","llamaCpp":{"repo":"ggerganov/llama.cpp","release":"b2717"}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-llama-cpp",
3
- "version": "3.0.0-beta.15",
3
+ "version": "3.0.0-beta.17",
4
4
  "description": "Run AI models locally on your machine with node.js bindings for llama.cpp. Force a JSON schema on the model output on the generation level",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -117,7 +117,6 @@
117
117
  "@semantic-release/exec": "^6.0.3",
118
118
  "@types/async-retry": "^1.4.8",
119
119
  "@types/bytes": "^3.1.4",
120
- "@types/cli-progress": "^3.11.0",
121
120
  "@types/cross-spawn": "^6.0.2",
122
121
  "@types/fs-extra": "^11.0.4",
123
122
  "@types/node": "^20.11.29",
@@ -135,14 +134,13 @@
135
134
  "eslint-plugin-jsdoc": "^46.9.0",
136
135
  "eslint-plugin-n": "^16.3.1",
137
136
  "husky": "^8.0.3",
138
- "ipull": "^3.0.5",
139
137
  "rimraf": "^5.0.1",
140
138
  "semantic-release": "^22.0.8",
141
139
  "tslib": "^2.6.1",
142
140
  "typedoc": "^0.25.3",
143
- "typedoc-plugin-markdown": "^4.0.0-next.53",
144
- "typedoc-plugin-mdn-links": "^3.1.5",
145
- "typedoc-vitepress-theme": "^1.0.0-next.9",
141
+ "typedoc-plugin-markdown": "^4.0.0-next.55",
142
+ "typedoc-plugin-mdn-links": "^3.1.19",
143
+ "typedoc-vitepress-theme": "^1.0.0-next.10",
146
144
  "typescript": "^5.2.2",
147
145
  "vite-node": "^1.4.0",
148
146
  "vitepress": "1.0.0-rc.22",
@@ -155,21 +153,25 @@
155
153
  "bytes": "^3.1.2",
156
154
  "chalk": "^5.3.0",
157
155
  "chmodrp": "^1.0.2",
158
- "cli-progress": "^3.12.0",
159
156
  "cmake-js": "^7.3.0",
160
157
  "cross-env": "^7.0.3",
161
158
  "cross-spawn": "^7.0.3",
162
159
  "env-var": "^7.3.1",
160
+ "filenamify": "^6.0.0",
163
161
  "fs-extra": "^11.2.0",
162
+ "ipull": "^3.0.11",
163
+ "is-unicode-supported": "^2.0.0",
164
164
  "lifecycle-utils": "^1.4.1",
165
165
  "log-symbols": "^5.1.0",
166
166
  "node-addon-api": "^7.0.0",
167
167
  "octokit": "^3.1.0",
168
168
  "ora": "^7.0.1",
169
+ "pretty-ms": "^9.0.0",
169
170
  "proper-lockfile": "^4.1.2",
170
171
  "semver": "^7.6.0",
171
172
  "simple-git": "^3.19.1",
172
173
  "slice-ansi": "^7.1.0",
174
+ "stdout-update": "^4.0.1",
173
175
  "strip-ansi": "^7.1.0",
174
176
  "uuid": "^9.0.0",
175
177
  "which": "^4.0.0",