node-llama-cpp 3.1.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/ChatWrapper.js +1 -1
- package/dist/ChatWrapper.js.map +1 -1
- package/dist/bindings/AddonTypes.d.ts +10 -3
- package/dist/bindings/Llama.d.ts +31 -1
- package/dist/bindings/Llama.js +95 -10
- package/dist/bindings/Llama.js.map +1 -1
- package/dist/bindings/getLlama.d.ts +26 -2
- package/dist/bindings/getLlama.js +60 -5
- package/dist/bindings/getLlama.js.map +1 -1
- package/dist/bindings/utils/MemoryOrchestrator.d.ts +2 -0
- package/dist/bindings/utils/MemoryOrchestrator.js +3 -2
- package/dist/bindings/utils/MemoryOrchestrator.js.map +1 -1
- package/dist/bindings/utils/clearAllLocalBuilds.js +2 -2
- package/dist/bindings/utils/clearAllLocalBuilds.js.map +1 -1
- package/dist/bindings/utils/compileLLamaCpp.d.ts +1 -1
- package/dist/bindings/utils/compileLLamaCpp.js +54 -1
- package/dist/bindings/utils/compileLLamaCpp.js.map +1 -1
- package/dist/bindings/utils/detectAvailableComputeLayers.js.map +1 -1
- package/dist/bindings/utils/getGpuTypesToUseForOption.js +1 -1
- package/dist/bindings/utils/getGpuTypesToUseForOption.js.map +1 -1
- package/dist/bindings/utils/getLinuxDistroInfo.js +1 -1
- package/dist/bindings/utils/getLinuxDistroInfo.js.map +1 -1
- package/dist/bindings/utils/testBindingBinary.d.ts +2 -1
- package/dist/bindings/utils/testBindingBinary.js +122 -37
- package/dist/bindings/utils/testBindingBinary.js.map +1 -1
- package/dist/bindings/utils/testCmakeBinary.js +1 -1
- package/dist/bindings/utils/testCmakeBinary.js.map +1 -1
- package/dist/chatWrappers/FunctionaryChatWrapper.js.map +1 -1
- package/dist/chatWrappers/GemmaChatWrapper.js.map +1 -1
- package/dist/chatWrappers/Llama3_1ChatWrapper.js +3 -2
- package/dist/chatWrappers/Llama3_1ChatWrapper.js.map +1 -1
- package/dist/chatWrappers/Llama3_2LightweightChatWrapper.d.ts +35 -0
- package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js +253 -0
- package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js.map +1 -0
- package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.d.ts +13 -0
- package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js +31 -1
- package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js.map +1 -1
- package/dist/chatWrappers/utils/chunkChatItems.js +1 -1
- package/dist/chatWrappers/utils/chunkChatItems.js.map +1 -1
- package/dist/chatWrappers/utils/getModelLinageNames.d.ts +2 -0
- package/dist/chatWrappers/utils/getModelLinageNames.js +18 -0
- package/dist/chatWrappers/utils/getModelLinageNames.js.map +1 -0
- package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js.map +1 -1
- package/dist/chatWrappers/utils/isLlama3_2LightweightModel.d.ts +2 -0
- package/dist/chatWrappers/utils/isLlama3_2LightweightModel.js +9 -0
- package/dist/chatWrappers/utils/isLlama3_2LightweightModel.js.map +1 -0
- package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +4 -2
- package/dist/chatWrappers/utils/resolveChatWrapper.js +10 -32
- package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
- package/dist/cli/commands/ChatCommand.js +2 -3
- package/dist/cli/commands/ChatCommand.js.map +1 -1
- package/dist/cli/commands/CompleteCommand.js +1 -2
- package/dist/cli/commands/CompleteCommand.js.map +1 -1
- package/dist/cli/commands/InfillCommand.js +1 -2
- package/dist/cli/commands/InfillCommand.js.map +1 -1
- package/dist/cli/commands/InitCommand.d.ts +2 -1
- package/dist/cli/commands/InitCommand.js +32 -13
- package/dist/cli/commands/InitCommand.js.map +1 -1
- package/dist/cli/commands/inspect/commands/InspectEstimateCommand.js +0 -1
- package/dist/cli/commands/inspect/commands/InspectEstimateCommand.js.map +1 -1
- package/dist/cli/commands/inspect/commands/InspectGgufCommand.d.ts +1 -0
- package/dist/cli/commands/inspect/commands/InspectGgufCommand.js +47 -11
- package/dist/cli/commands/inspect/commands/InspectGgufCommand.js.map +1 -1
- package/dist/cli/commands/inspect/commands/InspectGpuCommand.js +14 -3
- package/dist/cli/commands/inspect/commands/InspectGpuCommand.js.map +1 -1
- package/dist/cli/recommendedModels.js +11 -0
- package/dist/cli/recommendedModels.js.map +1 -1
- package/dist/cli/utils/consolePromptQuestion.js +0 -1
- package/dist/cli/utils/consolePromptQuestion.js.map +1 -1
- package/dist/cli/utils/interactivelyAskForModel.js +3 -1
- package/dist/cli/utils/interactivelyAskForModel.js.map +1 -1
- package/dist/evaluator/LlamaChat/LlamaChat.js +37 -24
- package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
- package/dist/evaluator/LlamaChat/utils/contextShiftStrategies/eraseFirstResponseAndKeepFirstSystemChatContextShiftStrategy.js +63 -8
- package/dist/evaluator/LlamaChat/utils/contextShiftStrategies/eraseFirstResponseAndKeepFirstSystemChatContextShiftStrategy.js.map +1 -1
- package/dist/evaluator/LlamaChatSession/LlamaChatSession.d.ts +8 -1
- package/dist/evaluator/LlamaChatSession/LlamaChatSession.js +156 -138
- package/dist/evaluator/LlamaChatSession/LlamaChatSession.js.map +1 -1
- package/dist/evaluator/LlamaChatSession/utils/defineChatSessionFunction.d.ts +1 -1
- package/dist/evaluator/LlamaCompletion.js +11 -9
- package/dist/evaluator/LlamaCompletion.js.map +1 -1
- package/dist/evaluator/LlamaContext/LlamaContext.d.ts +11 -0
- package/dist/evaluator/LlamaContext/LlamaContext.js +66 -8
- package/dist/evaluator/LlamaContext/LlamaContext.js.map +1 -1
- package/dist/evaluator/LlamaContext/utils/batchItemsPrioritizationStrategies/firstInFirstOutStrategy.js.map +1 -1
- package/dist/evaluator/LlamaContext/utils/batchItemsPrioritizationStrategies/maximumParallelismStrategy.js.map +1 -1
- package/dist/evaluator/LlamaGrammar.js +7 -0
- package/dist/evaluator/LlamaGrammar.js.map +1 -1
- package/dist/evaluator/LlamaJsonSchemaGrammar.d.ts +3 -2
- package/dist/evaluator/LlamaJsonSchemaGrammar.js +3 -0
- package/dist/evaluator/LlamaJsonSchemaGrammar.js.map +1 -1
- package/dist/evaluator/LlamaModel/LlamaModel.js +8 -4
- package/dist/evaluator/LlamaModel/LlamaModel.js.map +1 -1
- package/dist/gguf/fileReaders/GgufFileReader.d.ts +1 -1
- package/dist/gguf/fileReaders/GgufFsFileReader.d.ts +1 -1
- package/dist/gguf/fileReaders/GgufNetworkFetchFileReader.d.ts +1 -1
- package/dist/gguf/insights/GgufInsights.d.ts +1 -0
- package/dist/gguf/insights/GgufInsights.js +8 -0
- package/dist/gguf/insights/GgufInsights.js.map +1 -1
- package/dist/gguf/insights/GgufInsightsConfigurationResolver.d.ts +40 -4
- package/dist/gguf/insights/GgufInsightsConfigurationResolver.js +116 -93
- package/dist/gguf/insights/GgufInsightsConfigurationResolver.js.map +1 -1
- package/dist/gguf/insights/utils/getRamUsageFromUnifiedVram.d.ts +5 -0
- package/dist/gguf/insights/utils/getRamUsageFromUnifiedVram.js +7 -0
- package/dist/gguf/insights/utils/getRamUsageFromUnifiedVram.js.map +1 -0
- package/dist/gguf/insights/utils/resolveContextContextSizeOption.d.ts +11 -1
- package/dist/gguf/insights/utils/resolveContextContextSizeOption.js +47 -17
- package/dist/gguf/insights/utils/resolveContextContextSizeOption.js.map +1 -1
- package/dist/gguf/insights/utils/scoreLevels.js.map +1 -1
- package/dist/gguf/readGgufFileInfo.js +1 -1
- package/dist/gguf/readGgufFileInfo.js.map +1 -1
- package/dist/gguf/utils/getGgufMetadataKeyValue.d.ts +1 -0
- package/dist/gguf/utils/getGgufMetadataKeyValue.js +27 -0
- package/dist/gguf/utils/getGgufMetadataKeyValue.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/utils/StopGenerationDetector.js +1 -1
- package/dist/utils/StopGenerationDetector.js.map +1 -1
- package/dist/utils/ThreadsSplitter.js +2 -2
- package/dist/utils/ThreadsSplitter.js.map +1 -1
- package/dist/utils/createModelDownloader.js.map +1 -1
- package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.d.ts +2 -1
- package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.js +14 -1
- package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.js.map +1 -1
- package/dist/utils/gbnfJson/GbnfGrammarGenerator.d.ts +5 -0
- package/dist/utils/gbnfJson/GbnfGrammarGenerator.js +15 -0
- package/dist/utils/gbnfJson/GbnfGrammarGenerator.js.map +1 -1
- package/dist/utils/gbnfJson/GbnfTerminal.d.ts +3 -0
- package/dist/utils/gbnfJson/GbnfTerminal.js +25 -3
- package/dist/utils/gbnfJson/GbnfTerminal.js.map +1 -1
- package/dist/utils/gbnfJson/getGbnfGrammarForGbnfJsonSchema.d.ts +1 -1
- package/dist/utils/gbnfJson/getGbnfGrammarForGbnfJsonSchema.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfAnyJson.d.ts +9 -0
- package/dist/utils/gbnfJson/terminals/GbnfAnyJson.js +53 -0
- package/dist/utils/gbnfJson/terminals/GbnfAnyJson.js.map +1 -0
- package/dist/utils/gbnfJson/terminals/GbnfArray.d.ts +11 -2
- package/dist/utils/gbnfJson/terminals/GbnfArray.js +64 -15
- package/dist/utils/gbnfJson/terminals/GbnfArray.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfBoolean.d.ts +3 -2
- package/dist/utils/gbnfJson/terminals/GbnfBoolean.js +13 -7
- package/dist/utils/gbnfJson/terminals/GbnfBoolean.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.d.ts +11 -0
- package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.js +28 -0
- package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.js.map +1 -0
- package/dist/utils/gbnfJson/terminals/GbnfFormatString.d.ts +11 -0
- package/dist/utils/gbnfJson/terminals/GbnfFormatString.js +90 -0
- package/dist/utils/gbnfJson/terminals/GbnfFormatString.js.map +1 -0
- package/dist/utils/gbnfJson/terminals/GbnfGrammar.d.ts +4 -1
- package/dist/utils/gbnfJson/terminals/GbnfGrammar.js +8 -1
- package/dist/utils/gbnfJson/terminals/GbnfGrammar.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.d.ts +5 -0
- package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.js +24 -0
- package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.js.map +1 -0
- package/dist/utils/gbnfJson/terminals/GbnfNumber.js +4 -3
- package/dist/utils/gbnfJson/terminals/GbnfNumber.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfNumberValue.d.ts +3 -1
- package/dist/utils/gbnfJson/terminals/GbnfNumberValue.js +8 -2
- package/dist/utils/gbnfJson/terminals/GbnfNumberValue.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfObjectMap.d.ts +14 -5
- package/dist/utils/gbnfJson/terminals/GbnfObjectMap.js +67 -9
- package/dist/utils/gbnfJson/terminals/GbnfObjectMap.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfOr.d.ts +2 -1
- package/dist/utils/gbnfJson/terminals/GbnfOr.js +9 -5
- package/dist/utils/gbnfJson/terminals/GbnfOr.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfRepetition.d.ts +7 -1
- package/dist/utils/gbnfJson/terminals/GbnfRepetition.js +69 -20
- package/dist/utils/gbnfJson/terminals/GbnfRepetition.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfString.d.ts +8 -1
- package/dist/utils/gbnfJson/terminals/GbnfString.js +31 -21
- package/dist/utils/gbnfJson/terminals/GbnfString.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfStringValue.d.ts +2 -0
- package/dist/utils/gbnfJson/terminals/GbnfStringValue.js +7 -4
- package/dist/utils/gbnfJson/terminals/GbnfStringValue.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/GbnfWhitespace.d.ts +2 -1
- package/dist/utils/gbnfJson/terminals/GbnfWhitespace.js +24 -5
- package/dist/utils/gbnfJson/terminals/GbnfWhitespace.js.map +1 -1
- package/dist/utils/gbnfJson/terminals/gbnfConsts.d.ts +16 -1
- package/dist/utils/gbnfJson/terminals/gbnfConsts.js +47 -1
- package/dist/utils/gbnfJson/terminals/gbnfConsts.js.map +1 -1
- package/dist/utils/gbnfJson/types.d.ts +164 -17
- package/dist/utils/gbnfJson/types.js +6 -0
- package/dist/utils/gbnfJson/types.js.map +1 -1
- package/dist/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.js +61 -9
- package/dist/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.js.map +1 -1
- package/dist/utils/gbnfJson/utils/validateObjectAgainstGbnfSchema.js +99 -8
- package/dist/utils/gbnfJson/utils/validateObjectAgainstGbnfSchema.js.map +1 -1
- package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js +125 -16
- package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js.map +1 -1
- package/dist/utils/hashString.js +1 -1
- package/dist/utils/hashString.js.map +1 -1
- package/dist/utils/includesText.d.ts +1 -0
- package/dist/utils/includesText.js +12 -0
- package/dist/utils/includesText.js.map +1 -0
- package/dist/utils/spawnCommand.js +1 -1
- package/dist/utils/spawnCommand.js.map +1 -1
- package/dist/utils/transformPromisable.js +1 -2
- package/dist/utils/transformPromisable.js.map +1 -1
- package/dist/utils/truncateTextAndRoundToWords.d.ts +4 -3
- package/dist/utils/truncateTextAndRoundToWords.js +90 -39
- package/dist/utils/truncateTextAndRoundToWords.js.map +1 -1
- package/dist/utils/waitForLockfileRelease.js +0 -1
- package/dist/utils/waitForLockfileRelease.js.map +1 -1
- package/dist/utils/wrapAbortSignal.d.ts +1 -1
- package/dist/utils/wrapAbortSignal.js +9 -4
- package/dist/utils/wrapAbortSignal.js.map +1 -1
- package/llama/CMakeLists.txt +16 -90
- package/llama/addon/AddonContext.cpp +1 -1
- package/llama/addon/AddonGrammar.cpp +49 -1
- package/llama/addon/AddonGrammar.h +3 -0
- package/llama/addon/AddonModel.cpp +4 -4
- package/llama/addon/AddonSampler.cpp +0 -13
- package/llama/addon/AddonSampler.h +0 -2
- package/llama/addon/addon.cpp +19 -0
- package/llama/addon/globals/getGpuInfo.cpp +61 -53
- package/llama/addon/globals/getSwapInfo.cpp +69 -0
- package/llama/addon/globals/getSwapInfo.h +4 -0
- package/llama/binariesGithubRelease.json +1 -1
- package/llama/gitRelease.bundle +0 -0
- package/llama/gpuInfo/vulkan-gpu-info.cpp +15 -16
- package/llama/gpuInfo/vulkan-gpu-info.h +1 -2
- package/llama/grammars/README.md +1 -1
- package/llama/llama.cpp.info.json +1 -1
- package/package.json +57 -51
- package/templates/README.md +6 -0
- package/templates/packed/electron-typescript-react.json +1 -1
- package/templates/packed/node-typescript.json +1 -1
- package/llama/gpuInfo/cuda-gpu-info.cu +0 -120
- package/llama/gpuInfo/cuda-gpu-info.h +0 -10
- package/llama/gpuInfo/metal-gpu-info.h +0 -8
- package/llama/gpuInfo/metal-gpu-info.mm +0 -30
|
@@ -3,55 +3,106 @@ const truncatePrefix = "...";
|
|
|
3
3
|
/**
|
|
4
4
|
* Truncate the given text starting from the specified index and try to round to the nearest word.
|
|
5
5
|
* @param text - The text to truncate and round
|
|
6
|
-
* @param
|
|
6
|
+
* @param truncateSize - The size of the text to truncate
|
|
7
7
|
* @param maxRound - The maximum number of extra characters to delete to round to the nearest word
|
|
8
|
+
* @param truncateStart - Whether to truncate from the start of the text. If false, truncate from the end.
|
|
8
9
|
* @returns - The truncated and rounded text
|
|
9
10
|
*/
|
|
10
|
-
export function truncateTextAndRoundToWords(text,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (
|
|
11
|
+
export function truncateTextAndRoundToWords(text, truncateSize, maxRound = 6, truncateStart = false) {
|
|
12
|
+
if (truncateStart) {
|
|
13
|
+
const res = text.slice(truncateSize);
|
|
14
|
+
if (res.length === 0)
|
|
15
|
+
return res;
|
|
16
|
+
if (truncateSize === 0 || text[truncateSize - 1] === " ")
|
|
17
|
+
return res;
|
|
18
|
+
const nextSpaceIndex = res.indexOf(" ");
|
|
19
|
+
if (nextSpaceIndex < 0) {
|
|
20
|
+
if (res.length <= maxRound || res.length < truncatePrefix.length)
|
|
21
|
+
return "";
|
|
22
|
+
return truncatePrefix + res.slice(truncatePrefix.length);
|
|
23
|
+
}
|
|
24
|
+
if (nextSpaceIndex <= maxRound)
|
|
25
|
+
return res.slice(nextSpaceIndex + 1);
|
|
26
|
+
if (res.length < truncatePrefix.length)
|
|
19
27
|
return "";
|
|
20
28
|
return truncatePrefix + res.slice(truncatePrefix.length);
|
|
21
29
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
else {
|
|
31
|
+
const res = text.slice(0, -truncateSize);
|
|
32
|
+
if (res.length === 0)
|
|
33
|
+
return res;
|
|
34
|
+
if (truncateSize === 0 || (text.length === res.length || text[res.length] === " "))
|
|
35
|
+
return res;
|
|
36
|
+
const nextSpaceIndex = res.lastIndexOf(" ");
|
|
37
|
+
if (nextSpaceIndex < 0) {
|
|
38
|
+
if (res.length <= maxRound || res.length < truncatePrefix.length)
|
|
39
|
+
return "";
|
|
40
|
+
return res.slice(truncatePrefix.length) + truncatePrefix;
|
|
41
|
+
}
|
|
42
|
+
if (nextSpaceIndex <= maxRound)
|
|
43
|
+
return res.slice(0, nextSpaceIndex);
|
|
44
|
+
if (res.length < truncatePrefix.length)
|
|
45
|
+
return "";
|
|
46
|
+
return res.slice(truncatePrefix.length) + truncatePrefix;
|
|
47
|
+
}
|
|
27
48
|
}
|
|
28
|
-
export function truncateLlamaTextAndRoundToWords(llamaText,
|
|
29
|
-
if (
|
|
49
|
+
export function truncateLlamaTextAndRoundToWords(llamaText, truncateSize, maxRound = 6, truncateStart = false) {
|
|
50
|
+
if (truncateSize <= 0)
|
|
30
51
|
return llamaText;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (value
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
52
|
+
if (truncateStart) {
|
|
53
|
+
for (let i = 0; i < llamaText.values.length; i++) {
|
|
54
|
+
const value = llamaText.values[i];
|
|
55
|
+
if (value == null)
|
|
56
|
+
continue;
|
|
57
|
+
if (typeof value === "string") {
|
|
58
|
+
if (value.length > truncateSize) {
|
|
59
|
+
return LlamaText([
|
|
60
|
+
truncateTextAndRoundToWords(value, truncateSize, maxRound, true),
|
|
61
|
+
...llamaText.values.slice(i + 1)
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
64
|
+
truncateSize -= value.length;
|
|
65
|
+
}
|
|
66
|
+
else if (value instanceof SpecialToken) {
|
|
67
|
+
truncateSize--;
|
|
68
|
+
if (truncateSize <= 0)
|
|
69
|
+
return LlamaText(llamaText.values.slice(i + 1));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
void value;
|
|
73
|
+
// SpecialTokensText shouldn't be truncated
|
|
74
|
+
if (value.value.length > truncateSize)
|
|
75
|
+
return LlamaText(llamaText.values.slice(i + 1));
|
|
76
|
+
truncateSize -= value.value.length;
|
|
41
77
|
}
|
|
42
|
-
truncateStartIndex -= value.length;
|
|
43
|
-
}
|
|
44
|
-
else if (value instanceof SpecialToken) {
|
|
45
|
-
truncateStartIndex--;
|
|
46
|
-
if (truncateStartIndex <= 0)
|
|
47
|
-
return LlamaText(llamaText.values.slice(i + 1));
|
|
48
78
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
for (let i = llamaText.values.length - 1; i >= 0; i--) {
|
|
82
|
+
const value = llamaText.values[i];
|
|
83
|
+
if (value == null)
|
|
84
|
+
continue;
|
|
85
|
+
if (typeof value === "string") {
|
|
86
|
+
if (value.length > truncateSize) {
|
|
87
|
+
return LlamaText([
|
|
88
|
+
...llamaText.values.slice(0, i),
|
|
89
|
+
truncateTextAndRoundToWords(value, truncateSize, maxRound, false)
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
92
|
+
truncateSize -= value.length;
|
|
93
|
+
}
|
|
94
|
+
else if (value instanceof SpecialToken) {
|
|
95
|
+
truncateSize--;
|
|
96
|
+
if (truncateSize <= 0)
|
|
97
|
+
return LlamaText(llamaText.values.slice(0, i));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
void value;
|
|
101
|
+
// SpecialTokensText shouldn't be truncated
|
|
102
|
+
if (value.value.length > truncateSize)
|
|
103
|
+
return LlamaText(llamaText.values.slice(0, i));
|
|
104
|
+
truncateSize -= value.value.length;
|
|
105
|
+
}
|
|
55
106
|
}
|
|
56
107
|
}
|
|
57
108
|
return LlamaText([]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"truncateTextAndRoundToWords.js","sourceRoot":"","sources":["../../src/utils/truncateTextAndRoundToWords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAE1E,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B
|
|
1
|
+
{"version":3,"file":"truncateTextAndRoundToWords.js","sourceRoot":"","sources":["../../src/utils/truncateTextAndRoundToWords.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import lockfile from "proper-lockfile";
|
|
|
2
2
|
import { isLockActive, waitForLockRelease } from "lifecycle-utils";
|
|
3
3
|
import { lockfileLockScope } from "./withLockfile.js";
|
|
4
4
|
export async function waitForLockfileRelease({ resourcePath, checkInterval = 1000 * 5.5, staleDuration = 1000 * 10 }) {
|
|
5
|
-
// eslint-disable-next-line no-constant-condition
|
|
6
5
|
while (true) {
|
|
7
6
|
if (isLockActive(lockfileLockScope, resourcePath)) {
|
|
8
7
|
await waitForLockRelease(lockfileLockScope, resourcePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waitForLockfileRelease.js","sourceRoot":"","sources":["../../src/utils/waitForLockfileRelease.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,YAAY,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EACzC,YAAY,EAAE,aAAa,GAAG,IAAI,GAAG,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,EAAE,EAGtE;IACG,
|
|
1
|
+
{"version":3,"file":"waitForLockfileRelease.js","sourceRoot":"","sources":["../../src/utils/waitForLockfileRelease.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,YAAY,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EACzC,YAAY,EAAE,aAAa,GAAG,IAAI,GAAG,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,EAAE,EAGtE;IACG,OAAO,IAAI,EAAE,CAAC;QACV,IAAI,YAAY,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAAE,CAAC;YAChD,MAAM,kBAAkB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAC1D,SAAS;QACb,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;QACnG,MAAM,YAAY,GAAG,YAAY,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAEnE,IAAI,YAAY;YACZ,SAAS;QAEb,IAAI,CAAC,cAAc;YACf,OAAO;QAEX,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACvE,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function wrapAbortSignal(abortSignal?: AbortSignal): AbortController;
|
|
1
|
+
export declare function wrapAbortSignal(abortSignal?: AbortSignal): [controller: AbortController, dispose: (() => void)];
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
export function wrapAbortSignal(abortSignal) {
|
|
2
2
|
const controller = new AbortController();
|
|
3
|
+
function onAbort() {
|
|
4
|
+
controller.abort(abortSignal.reason);
|
|
5
|
+
}
|
|
6
|
+
function dispose() {
|
|
7
|
+
if (abortSignal != null)
|
|
8
|
+
abortSignal.removeEventListener("abort", onAbort);
|
|
9
|
+
}
|
|
3
10
|
if (abortSignal != null)
|
|
4
|
-
abortSignal.addEventListener("abort",
|
|
5
|
-
|
|
6
|
-
});
|
|
7
|
-
return controller;
|
|
11
|
+
abortSignal.addEventListener("abort", onAbort);
|
|
12
|
+
return [controller, dispose];
|
|
8
13
|
}
|
|
9
14
|
//# sourceMappingURL=wrapAbortSignal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapAbortSignal.js","sourceRoot":"","sources":["../../src/utils/wrapAbortSignal.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,WAAyB;IACrD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,IAAI,WAAW,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"wrapAbortSignal.js","sourceRoot":"","sources":["../../src/utils/wrapAbortSignal.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,WAAyB;IACrD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,SAAS,OAAO;QACZ,UAAU,CAAC,KAAK,CAAC,WAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS,OAAO;QACZ,IAAI,WAAW,IAAI,IAAI;YACnB,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,WAAW,IAAI,IAAI;QACnB,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
package/llama/CMakeLists.txt
CHANGED
|
@@ -22,6 +22,22 @@ execute_process(COMMAND node -p "require('node-addon-api').include.slice(1,-1)"
|
|
|
22
22
|
OUTPUT_VARIABLE NODE_ADDON_API_DIR
|
|
23
23
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
24
24
|
|
|
25
|
+
set(LLAMA_BUILD_COMMON ON)
|
|
26
|
+
|
|
27
|
+
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
|
28
|
+
add_compile_options(-Wno-c++17-extensions)
|
|
29
|
+
endif()
|
|
30
|
+
|
|
31
|
+
if(APPLE)
|
|
32
|
+
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
33
|
+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
|
34
|
+
set(CMAKE_BUILD_RPATH "@loader_path")
|
|
35
|
+
set(CMAKE_INSTALL_RPATH "@loader_path")
|
|
36
|
+
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
37
|
+
else()
|
|
38
|
+
set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)
|
|
39
|
+
endif()
|
|
40
|
+
|
|
25
41
|
include_directories(${NODE_ADDON_API_DIR} ${CMAKE_JS_INC})
|
|
26
42
|
|
|
27
43
|
add_subdirectory("llama.cpp")
|
|
@@ -33,41 +49,6 @@ unset(GPU_INFO_HEADERS)
|
|
|
33
49
|
unset(GPU_INFO_SOURCES)
|
|
34
50
|
unset(GPU_INFO_EXTRA_LIBS)
|
|
35
51
|
|
|
36
|
-
if (GGML_CUDA)
|
|
37
|
-
cmake_minimum_required(VERSION 3.17)
|
|
38
|
-
|
|
39
|
-
find_package(CUDAToolkit)
|
|
40
|
-
if (CUDAToolkit_FOUND)
|
|
41
|
-
message(STATUS "Using CUDA for GPU info")
|
|
42
|
-
|
|
43
|
-
enable_language(CUDA)
|
|
44
|
-
|
|
45
|
-
list(APPEND GPU_INFO_HEADERS gpuInfo/cuda-gpu-info.h)
|
|
46
|
-
list(APPEND GPU_INFO_SOURCES gpuInfo/cuda-gpu-info.cu)
|
|
47
|
-
|
|
48
|
-
add_compile_definitions(GPU_INFO_USE_CUDA)
|
|
49
|
-
|
|
50
|
-
if (GGML_STATIC)
|
|
51
|
-
list(APPEND GPU_INFO_EXTRA_LIBS CUDA::cudart_static)
|
|
52
|
-
else()
|
|
53
|
-
list(APPEND GPU_INFO_EXTRA_LIBS CUDA::cudart)
|
|
54
|
-
endif()
|
|
55
|
-
|
|
56
|
-
list(APPEND GPU_INFO_EXTRA_LIBS CUDA::cuda_driver)
|
|
57
|
-
|
|
58
|
-
if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
|
|
59
|
-
# copied from llama.cpp/CMakLists.txt under "if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)"
|
|
60
|
-
if (GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16)
|
|
61
|
-
set(CMAKE_CUDA_ARCHITECTURES "60;61;70;75")
|
|
62
|
-
else()
|
|
63
|
-
set(CMAKE_CUDA_ARCHITECTURES "52;61;70;75")
|
|
64
|
-
endif()
|
|
65
|
-
endif()
|
|
66
|
-
else()
|
|
67
|
-
message(FATAL_ERROR "CUDA was not found")
|
|
68
|
-
endif()
|
|
69
|
-
endif()
|
|
70
|
-
|
|
71
52
|
if (GGML_VULKAN OR GGML_KOMPUTE)
|
|
72
53
|
find_package(Vulkan)
|
|
73
54
|
if (Vulkan_FOUND)
|
|
@@ -88,67 +69,12 @@ if (GGML_VULKAN OR GGML_KOMPUTE)
|
|
|
88
69
|
endif()
|
|
89
70
|
endif()
|
|
90
71
|
|
|
91
|
-
if (GGML_HIPBLAS)
|
|
92
|
-
list(APPEND CMAKE_PREFIX_PATH /opt/rocm)
|
|
93
|
-
|
|
94
|
-
if (NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
|
|
95
|
-
message(WARNING "Only LLVM is supported for HIP, hint: CC=/opt/rocm/llvm/bin/clang")
|
|
96
|
-
endif()
|
|
97
|
-
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
|
|
98
|
-
message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
|
|
99
|
-
endif()
|
|
100
|
-
|
|
101
|
-
find_package(hip)
|
|
102
|
-
find_package(hipblas)
|
|
103
|
-
find_package(rocblas)
|
|
104
|
-
|
|
105
|
-
if (${hipblas_FOUND} AND ${hip_FOUND})
|
|
106
|
-
message(STATUS "Using HIP and hipBLAS for GPU info")
|
|
107
|
-
add_compile_definitions(GPU_INFO_USE_HIPBLAS GPU_INFO_USE_CUDA)
|
|
108
|
-
add_library(gpu-info-rocm OBJECT gpuInfo/cuda-gpu-info.cu gpuInfo/cuda-gpu-info.h)
|
|
109
|
-
set_source_files_properties(gpuInfo/cuda-gpu-info.cu PROPERTIES LANGUAGE CXX)
|
|
110
|
-
target_link_libraries(gpu-info-rocm PRIVATE hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
|
|
111
|
-
|
|
112
|
-
list(APPEND GPU_INFO_EXTRA_LIBS gpu-info-rocm)
|
|
113
|
-
else()
|
|
114
|
-
message(FATAL_ERROR "hipBLAS or HIP was not found. Try setting CMAKE_PREFIX_PATH=/opt/rocm")
|
|
115
|
-
endif()
|
|
116
|
-
endif()
|
|
117
|
-
|
|
118
|
-
if (GGML_METAL)
|
|
119
|
-
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
|
|
120
|
-
find_library(METAL_FRAMEWORK Metal REQUIRED)
|
|
121
|
-
find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
|
|
122
|
-
|
|
123
|
-
message(STATUS "Using Metal for GPU info")
|
|
124
|
-
list(APPEND GPU_INFO_HEADERS gpuInfo/metal-gpu-info.h)
|
|
125
|
-
list(APPEND GPU_INFO_SOURCES gpuInfo/metal-gpu-info.mm)
|
|
126
|
-
|
|
127
|
-
add_compile_definitions(GPU_INFO_USE_METAL)
|
|
128
|
-
|
|
129
|
-
list(APPEND GPU_INFO_EXTRA_LIBS
|
|
130
|
-
${FOUNDATION_LIBRARY}
|
|
131
|
-
${METAL_FRAMEWORK}
|
|
132
|
-
${METALKIT_FRAMEWORK}
|
|
133
|
-
)
|
|
134
|
-
endif()
|
|
135
|
-
|
|
136
72
|
list(REMOVE_DUPLICATES GPU_INFO_HEADERS)
|
|
137
73
|
list(REMOVE_DUPLICATES GPU_INFO_SOURCES)
|
|
138
74
|
list(REMOVE_DUPLICATES GPU_INFO_EXTRA_LIBS)
|
|
139
75
|
|
|
140
76
|
file(GLOB SOURCE_FILES "addon/*.cpp" "addon/**/*.cpp" ${GPU_INFO_SOURCES})
|
|
141
77
|
|
|
142
|
-
if(APPLE)
|
|
143
|
-
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
144
|
-
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
|
145
|
-
set(CMAKE_BUILD_RPATH "@loader_path")
|
|
146
|
-
set(CMAKE_INSTALL_RPATH "@loader_path")
|
|
147
|
-
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
148
|
-
else()
|
|
149
|
-
set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)
|
|
150
|
-
endif()
|
|
151
|
-
|
|
152
78
|
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC} ${GPU_INFO_HEADERS})
|
|
153
79
|
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
|
|
154
80
|
target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB})
|
|
@@ -447,7 +447,7 @@ Napi::Value AddonContext::AddToBatch(const Napi::CallbackInfo& info) {
|
|
|
447
447
|
GGML_ASSERT(batch.n_tokens + tokensLength <= batch_n_tokens);
|
|
448
448
|
|
|
449
449
|
for (size_t i = 0; i < tokensLength; i++) {
|
|
450
|
-
|
|
450
|
+
common_batch_add(batch, static_cast<llama_token>(tokens[i]), firstTokenContextIndex + i, { sequenceId }, false);
|
|
451
451
|
}
|
|
452
452
|
|
|
453
453
|
if (generateLogitAtTheEnd) {
|
|
@@ -34,6 +34,54 @@ AddonGrammar::~AddonGrammar() {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
Napi::Value AddonGrammar::isTextCompatible(const Napi::CallbackInfo& info) {
|
|
38
|
+
const std::string testText = info[0].As<Napi::String>().Utf8Value();
|
|
39
|
+
|
|
40
|
+
auto parsed_grammar = llama_grammar_init_impl(nullptr, grammarCode.c_str(), rootRuleName.c_str());
|
|
41
|
+
|
|
42
|
+
// will be empty if there are parse errors
|
|
43
|
+
if (parsed_grammar == nullptr) {
|
|
44
|
+
Napi::Error::New(info.Env(), "Failed to parse grammar").ThrowAsJavaScriptException();
|
|
45
|
+
return Napi::Boolean::New(info.Env(), false);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const auto cpts = unicode_cpts_from_utf8(testText);
|
|
49
|
+
const llama_grammar_rules & rules = llama_grammar_get_rules(parsed_grammar);
|
|
50
|
+
llama_grammar_stacks & stacks_cur = llama_grammar_get_stacks(parsed_grammar);
|
|
51
|
+
|
|
52
|
+
for (const auto & cpt : cpts) {
|
|
53
|
+
const llama_grammar_stacks stacks_prev = llama_grammar_get_stacks(parsed_grammar);
|
|
54
|
+
|
|
55
|
+
llama_grammar_accept(rules, stacks_prev, cpt, stacks_cur);
|
|
56
|
+
|
|
57
|
+
if (stacks_cur.empty()) {
|
|
58
|
+
// no stacks means that the grammar failed to match at this point
|
|
59
|
+
llama_grammar_free_impl(parsed_grammar);
|
|
60
|
+
return Napi::Boolean::New(info.Env(), false);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
for (const auto & stack : stacks_cur) {
|
|
65
|
+
if (stack.empty()) {
|
|
66
|
+
// an empty stack means that the grammar has been completed
|
|
67
|
+
llama_grammar_free_impl(parsed_grammar);
|
|
68
|
+
return Napi::Boolean::New(info.Env(), true);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
llama_grammar_free_impl(parsed_grammar);
|
|
73
|
+
return Napi::Boolean::New(info.Env(), false);
|
|
74
|
+
}
|
|
75
|
+
|
|
37
76
|
void AddonGrammar::init(Napi::Object exports) {
|
|
38
|
-
exports.Set(
|
|
77
|
+
exports.Set(
|
|
78
|
+
"AddonGrammar",
|
|
79
|
+
DefineClass(
|
|
80
|
+
exports.Env(),
|
|
81
|
+
"AddonGrammar",
|
|
82
|
+
{
|
|
83
|
+
InstanceMethod("isTextCompatible", &AddonGrammar::isTextCompatible),
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
);
|
|
39
87
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
#include "llama.h"
|
|
3
3
|
#include "common/common.h"
|
|
4
4
|
#include "llama-grammar.h"
|
|
5
|
+
#include "unicode.h"
|
|
5
6
|
#include "napi.h"
|
|
6
7
|
#include "addonGlobals.h"
|
|
7
8
|
|
|
@@ -15,5 +16,7 @@ class AddonGrammar : public Napi::ObjectWrap<AddonGrammar> {
|
|
|
15
16
|
AddonGrammar(const Napi::CallbackInfo& info);
|
|
16
17
|
~AddonGrammar();
|
|
17
18
|
|
|
19
|
+
Napi::Value isTextCompatible(const Napi::CallbackInfo& info);
|
|
20
|
+
|
|
18
21
|
static void init(Napi::Object exports);
|
|
19
22
|
};
|
|
@@ -426,7 +426,7 @@ Napi::Value AddonModel::Tokenize(const Napi::CallbackInfo& info) {
|
|
|
426
426
|
std::string text = info[0].As<Napi::String>().Utf8Value();
|
|
427
427
|
bool specialTokens = info[1].As<Napi::Boolean>().Value();
|
|
428
428
|
|
|
429
|
-
std::vector<llama_token> tokens =
|
|
429
|
+
std::vector<llama_token> tokens = common_tokenize(model, text, false, specialTokens);
|
|
430
430
|
|
|
431
431
|
Napi::Uint32Array result = Napi::Uint32Array::New(info.Env(), tokens.size());
|
|
432
432
|
for (size_t i = 0; i < tokens.size(); ++i) {
|
|
@@ -539,7 +539,7 @@ Napi::Value AddonModel::PrefixToken(const Napi::CallbackInfo& info) {
|
|
|
539
539
|
return info.Env().Undefined();
|
|
540
540
|
}
|
|
541
541
|
|
|
542
|
-
return getNapiToken(info, model,
|
|
542
|
+
return getNapiToken(info, model, llama_token_fim_pre(model));
|
|
543
543
|
}
|
|
544
544
|
Napi::Value AddonModel::MiddleToken(const Napi::CallbackInfo& info) {
|
|
545
545
|
if (disposed) {
|
|
@@ -547,7 +547,7 @@ Napi::Value AddonModel::MiddleToken(const Napi::CallbackInfo& info) {
|
|
|
547
547
|
return info.Env().Undefined();
|
|
548
548
|
}
|
|
549
549
|
|
|
550
|
-
return getNapiToken(info, model,
|
|
550
|
+
return getNapiToken(info, model, llama_token_fim_mid(model));
|
|
551
551
|
}
|
|
552
552
|
Napi::Value AddonModel::SuffixToken(const Napi::CallbackInfo& info) {
|
|
553
553
|
if (disposed) {
|
|
@@ -555,7 +555,7 @@ Napi::Value AddonModel::SuffixToken(const Napi::CallbackInfo& info) {
|
|
|
555
555
|
return info.Env().Undefined();
|
|
556
556
|
}
|
|
557
557
|
|
|
558
|
-
return getNapiToken(info, model,
|
|
558
|
+
return getNapiToken(info, model, llama_token_fim_suf(model));
|
|
559
559
|
}
|
|
560
560
|
Napi::Value AddonModel::EotToken(const Napi::CallbackInfo& info) {
|
|
561
561
|
if (disposed) {
|
|
@@ -52,11 +52,6 @@ void AddonSampler::dispose() {
|
|
|
52
52
|
topPSampler = nullptr;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
if (softmaxSampler != nullptr) {
|
|
56
|
-
llama_sampler_free(softmaxSampler);
|
|
57
|
-
softmaxSampler = nullptr;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
55
|
if (seedSampler != nullptr) {
|
|
61
56
|
llama_sampler_free(seedSampler);
|
|
62
57
|
seedSampler = nullptr;
|
|
@@ -135,10 +130,6 @@ void AddonSampler::rebuildChainIfNeeded() {
|
|
|
135
130
|
llama_sampler_chain_add(chain, temperatureSampler);
|
|
136
131
|
}
|
|
137
132
|
|
|
138
|
-
if (softmaxSampler != nullptr) {
|
|
139
|
-
llama_sampler_chain_add(chain, softmaxSampler);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
133
|
if (seedSampler != nullptr) {
|
|
143
134
|
llama_sampler_chain_add(chain, seedSampler);
|
|
144
135
|
}
|
|
@@ -206,10 +197,6 @@ Napi::Value AddonSampler::ApplyConfig(const Napi::CallbackInfo& info) {
|
|
|
206
197
|
}
|
|
207
198
|
}
|
|
208
199
|
|
|
209
|
-
if (softmaxSampler == nullptr) {
|
|
210
|
-
softmaxSampler = llama_sampler_init_softmax();
|
|
211
|
-
}
|
|
212
|
-
|
|
213
200
|
if (config.Has("minP")) {
|
|
214
201
|
auto minP = config.Get("minP").As<Napi::Number>().FloatValue();
|
|
215
202
|
if (minP != minPSampler_minP) {
|
|
@@ -25,8 +25,6 @@ class AddonSampler : public Napi::ObjectWrap<AddonSampler> {
|
|
|
25
25
|
|
|
26
26
|
llama_sampler * topPSampler = nullptr;
|
|
27
27
|
float topPSampler_topP = 0.0f; // Top p sampling >=1.0 = disabled
|
|
28
|
-
|
|
29
|
-
llama_sampler * softmaxSampler = nullptr;
|
|
30
28
|
|
|
31
29
|
llama_sampler * seedSampler = nullptr;
|
|
32
30
|
uint32_t seedSampler_seed = 0;
|
package/llama/addon/addon.cpp
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#include "globals/addonLog.h"
|
|
9
9
|
#include "globals/addonProgress.h"
|
|
10
10
|
#include "globals/getGpuInfo.h"
|
|
11
|
+
#include "globals/getSwapInfo.h"
|
|
11
12
|
|
|
12
13
|
bool backendInitialized = false;
|
|
13
14
|
bool backendDisposed = false;
|
|
@@ -150,6 +151,22 @@ class AddonBackendUnloadWorker : public Napi::AsyncWorker {
|
|
|
150
151
|
}
|
|
151
152
|
};
|
|
152
153
|
|
|
154
|
+
Napi::Value addonLoadBackends(const Napi::CallbackInfo& info) {
|
|
155
|
+
const bool forceLoadLibraries = info.Length() == 0
|
|
156
|
+
? false
|
|
157
|
+
: info[0].IsBoolean()
|
|
158
|
+
? info[0].As<Napi::Boolean>().Value()
|
|
159
|
+
: false;
|
|
160
|
+
|
|
161
|
+
ggml_backend_reg_count();
|
|
162
|
+
|
|
163
|
+
if (forceLoadLibraries) {
|
|
164
|
+
ggml_backend_load_all();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return info.Env().Undefined();
|
|
168
|
+
}
|
|
169
|
+
|
|
153
170
|
Napi::Value addonInit(const Napi::CallbackInfo& info) {
|
|
154
171
|
if (backendInitialized) {
|
|
155
172
|
Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New(info.Env());
|
|
@@ -203,6 +220,8 @@ Napi::Object registerCallback(Napi::Env env, Napi::Object exports) {
|
|
|
203
220
|
Napi::PropertyDescriptor::Function("getGpuVramInfo", getGpuVramInfo),
|
|
204
221
|
Napi::PropertyDescriptor::Function("getGpuDeviceInfo", getGpuDeviceInfo),
|
|
205
222
|
Napi::PropertyDescriptor::Function("getGpuType", getGpuType),
|
|
223
|
+
Napi::PropertyDescriptor::Function("getSwapInfo", getSwapInfo),
|
|
224
|
+
Napi::PropertyDescriptor::Function("loadBackends", addonLoadBackends),
|
|
206
225
|
Napi::PropertyDescriptor::Function("init", addonInit),
|
|
207
226
|
Napi::PropertyDescriptor::Function("dispose", addonDispose),
|
|
208
227
|
});
|