node-llama-cpp 2.5.1 → 2.6.1
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 +20 -301
- package/dist/chatWrappers/{ChatMLPromptWrapper.d.ts → ChatMLChatPromptWrapper.d.ts} +1 -1
- package/dist/chatWrappers/{ChatMLPromptWrapper.js → ChatMLChatPromptWrapper.js} +2 -2
- package/dist/chatWrappers/ChatMLChatPromptWrapper.js.map +1 -0
- package/dist/chatWrappers/createChatWrapperByBos.js +2 -2
- package/dist/chatWrappers/createChatWrapperByBos.js.map +1 -1
- package/dist/cli/commands/BuildCommand.js +3 -1
- package/dist/cli/commands/BuildCommand.js.map +1 -1
- package/dist/cli/commands/ChatCommand.d.ts +8 -1
- package/dist/cli/commands/ChatCommand.js +88 -21
- package/dist/cli/commands/ChatCommand.js.map +1 -1
- package/dist/cli/commands/DownloadCommand.d.ts +3 -2
- package/dist/cli/commands/DownloadCommand.js +19 -38
- package/dist/cli/commands/DownloadCommand.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/llamaEvaluator/LlamaBins.d.ts +3 -3
- package/dist/llamaEvaluator/LlamaBins.js +2 -2
- package/dist/llamaEvaluator/LlamaBins.js.map +1 -1
- package/dist/llamaEvaluator/LlamaChatSession.d.ts +79 -2
- package/dist/llamaEvaluator/LlamaChatSession.js +52 -8
- package/dist/llamaEvaluator/LlamaChatSession.js.map +1 -1
- package/dist/llamaEvaluator/LlamaContext.d.ts +60 -3
- package/dist/llamaEvaluator/LlamaContext.js +36 -4
- package/dist/llamaEvaluator/LlamaContext.js.map +1 -1
- package/dist/llamaEvaluator/LlamaGrammar.d.ts +16 -3
- package/dist/llamaEvaluator/LlamaGrammar.js +23 -4
- package/dist/llamaEvaluator/LlamaGrammar.js.map +1 -1
- package/dist/llamaEvaluator/LlamaGrammarEvaluationState.d.ts +14 -0
- package/dist/llamaEvaluator/LlamaGrammarEvaluationState.js +16 -0
- package/dist/llamaEvaluator/LlamaGrammarEvaluationState.js.map +1 -0
- package/dist/llamaEvaluator/LlamaModel.d.ts +46 -14
- package/dist/llamaEvaluator/LlamaModel.js +23 -16
- package/dist/llamaEvaluator/LlamaModel.js.map +1 -1
- package/dist/state.d.ts +2 -0
- package/dist/state.js +8 -0
- package/dist/state.js.map +1 -0
- package/dist/utils/cloneLlamaCppRepo.d.ts +1 -0
- package/dist/utils/cloneLlamaCppRepo.js +59 -0
- package/dist/utils/cloneLlamaCppRepo.js.map +1 -0
- package/dist/utils/compileLLamaCpp.js +23 -5
- package/dist/utils/compileLLamaCpp.js.map +1 -1
- package/dist/utils/getBin.d.ts +21 -13
- package/dist/utils/gitReleaseBundles.d.ts +2 -0
- package/dist/utils/gitReleaseBundles.js +64 -0
- package/dist/utils/gitReleaseBundles.js.map +1 -0
- package/llama/addon.cpp +184 -110
- package/llama/binariesGithubRelease.json +1 -1
- package/llama/gitRelease.bundle +0 -0
- package/llama/toolchains/darwin.host-x64.target-arm64.cmake +8 -0
- package/llama/toolchains/linux.host-arm64.target-x64.cmake +5 -0
- package/llama/toolchains/linux.host-x64.target-arm64.cmake +5 -0
- package/llama/toolchains/linux.host-x64.target-arm71.cmake +5 -0
- package/llamaBins/linux-arm64/llama-addon.node +0 -0
- package/llamaBins/linux-armv7l/llama-addon.node +0 -0
- package/llamaBins/linux-x64/llama-addon.node +0 -0
- package/llamaBins/mac-arm64/ggml-metal.metal +258 -85
- package/llamaBins/mac-arm64/llama-addon.node +0 -0
- package/llamaBins/mac-x64/ggml-metal.metal +258 -85
- package/llamaBins/mac-x64/llama-addon.node +0 -0
- package/llamaBins/win-x64/llama-addon.node +0 -0
- package/package.json +10 -4
- package/dist/chatWrappers/ChatMLPromptWrapper.js.map +0 -1
- package/llamaBins/linux-ppc64le/llama-addon.node +0 -0
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
export type LlamaModelOptions = {
|
|
2
2
|
/** path to the model on the filesystem */
|
|
3
3
|
modelPath: string;
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* If null, a random seed will be used
|
|
6
|
+
* @deprecated use the `seed` option on `LlamaContext` instead
|
|
7
|
+
* @hidden
|
|
8
|
+
* */
|
|
5
9
|
seed?: number | null;
|
|
6
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* text context size
|
|
12
|
+
* @deprecated use the `contextSize` option on `LlamaContext` instead
|
|
13
|
+
* @hidden
|
|
14
|
+
* */
|
|
7
15
|
contextSize?: number;
|
|
8
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* prompt processing batch size
|
|
18
|
+
* @deprecated use the `batchSize` option on `LlamaContext` instead
|
|
19
|
+
* @hidden
|
|
20
|
+
* */
|
|
9
21
|
batchSize?: number;
|
|
10
22
|
/** number of layers to store in VRAM */
|
|
11
23
|
gpuLayers?: number;
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
24
|
+
/**
|
|
25
|
+
* number of threads to use to evaluate tokens
|
|
26
|
+
* @deprecated use the `threads` option on `LlamaContext` instead
|
|
27
|
+
* @hidden
|
|
28
|
+
* */
|
|
15
29
|
threads?: number;
|
|
16
30
|
/**
|
|
17
31
|
* Temperature is a hyperparameter that controls the randomness of the generated text.
|
|
@@ -22,6 +36,8 @@ export type LlamaModelOptions = {
|
|
|
22
36
|
* At the extreme, a temperature of 0 will always pick the most likely next token, leading to identical outputs in each run.
|
|
23
37
|
*
|
|
24
38
|
* Set to `0` to disable.
|
|
39
|
+
* @deprecated use the `temperature` option on `LlamaChatSession`'s `prompt` function or `LlamaContext`'s `evaluate` function instead
|
|
40
|
+
* @hidden
|
|
25
41
|
*/
|
|
26
42
|
temperature?: number;
|
|
27
43
|
/**
|
|
@@ -30,6 +46,8 @@ export type LlamaModelOptions = {
|
|
|
30
46
|
* Set to `0` to disable (which uses the full vocabulary).
|
|
31
47
|
*
|
|
32
48
|
* Only relevant when `temperature` is set to a value greater than 0.
|
|
49
|
+
* @deprecated use the `topK` option on `LlamaChatSession`'s `prompt` function or `LlamaContext`'s `evaluate` function instead
|
|
50
|
+
* @hidden
|
|
33
51
|
* */
|
|
34
52
|
topK?: number;
|
|
35
53
|
/**
|
|
@@ -39,11 +57,21 @@ export type LlamaModelOptions = {
|
|
|
39
57
|
* Set to `1` to disable.
|
|
40
58
|
*
|
|
41
59
|
* Only relevant when `temperature` is set to a value greater than `0`.
|
|
42
|
-
*
|
|
60
|
+
* @deprecated use the `topP` option on `LlamaChatSession`'s `prompt` function or `LlamaContext`'s `evaluate` function instead
|
|
61
|
+
* @hidden
|
|
62
|
+
*/
|
|
43
63
|
topP?: number;
|
|
44
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* use fp16 for KV cache
|
|
66
|
+
* @deprecated use the `f16Kv` option on `LlamaContext` instead
|
|
67
|
+
* @hidden
|
|
68
|
+
*/
|
|
45
69
|
f16Kv?: boolean;
|
|
46
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* the llama_eval() call computes all logits, not just the last one
|
|
72
|
+
* @deprecated use the `logitsAll` option on `LlamaContext` instead
|
|
73
|
+
* @hidden
|
|
74
|
+
*/
|
|
47
75
|
logitsAll?: boolean;
|
|
48
76
|
/** only load the vocabulary, no weights */
|
|
49
77
|
vocabOnly?: boolean;
|
|
@@ -51,20 +79,24 @@ export type LlamaModelOptions = {
|
|
|
51
79
|
useMmap?: boolean;
|
|
52
80
|
/** force system to keep model in RAM */
|
|
53
81
|
useMlock?: boolean;
|
|
54
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* embedding mode only
|
|
84
|
+
* @deprecated use the `embedding` option on `LlamaContext` instead
|
|
85
|
+
* @hidden
|
|
86
|
+
*/
|
|
55
87
|
embedding?: boolean;
|
|
56
88
|
};
|
|
57
89
|
export declare class LlamaModel {
|
|
58
90
|
/**
|
|
59
|
-
* options source:
|
|
60
|
-
*
|
|
91
|
+
* > options source:
|
|
92
|
+
* > [github:ggerganov/llama.cpp/llama.h](
|
|
93
|
+
* > https://github.com/ggerganov/llama.cpp/blob/b5ffb2849d23afe73647f68eec7b68187af09be6/llama.h#L102) (`struct llama_context_params`)
|
|
61
94
|
* @param {object} options
|
|
62
95
|
* @param {string} options.modelPath - path to the model on the filesystem
|
|
63
96
|
* @param {number | null} [options.seed] - If null, a random seed will be used
|
|
64
97
|
* @param {number} [options.contextSize] - text context size
|
|
65
98
|
* @param {number} [options.batchSize] - prompt processing batch size
|
|
66
99
|
* @param {number} [options.gpuLayers] - number of layers to store in VRAM
|
|
67
|
-
* @param {boolean} [options.lowVram] - if true, reduce VRAM usage at the cost of performance
|
|
68
100
|
* @param {number} [options.threads] - number of threads to use to evaluate tokens
|
|
69
101
|
* @param {number} [options.temperature] - Temperature is a hyperparameter that controls the randomness of the generated text.
|
|
70
102
|
* It affects the probability distribution of the model's output tokens.
|
|
@@ -93,6 +125,6 @@ export declare class LlamaModel {
|
|
|
93
125
|
* @param {boolean} [options.useMlock] - force system to keep model in RAM
|
|
94
126
|
* @param {boolean} [options.embedding] - embedding mode only
|
|
95
127
|
*/
|
|
96
|
-
constructor({ modelPath, seed, contextSize, batchSize, gpuLayers,
|
|
128
|
+
constructor({ modelPath, seed, contextSize, batchSize, gpuLayers, threads, temperature, topK, topP, f16Kv, logitsAll, vocabOnly, useMmap, useMlock, embedding }: LlamaModelOptions);
|
|
97
129
|
static get systemInfo(): string;
|
|
98
130
|
}
|
|
@@ -5,16 +5,20 @@ import { llamaCppNode, LLAMAModel } from "./LlamaBins.js";
|
|
|
5
5
|
export class LlamaModel {
|
|
6
6
|
/** @internal */
|
|
7
7
|
_model;
|
|
8
|
+
/** @internal */
|
|
9
|
+
_contextOptions;
|
|
10
|
+
/** @internal */
|
|
11
|
+
_evaluationOptions;
|
|
8
12
|
/**
|
|
9
|
-
* options source:
|
|
10
|
-
*
|
|
13
|
+
* > options source:
|
|
14
|
+
* > [github:ggerganov/llama.cpp/llama.h](
|
|
15
|
+
* > https://github.com/ggerganov/llama.cpp/blob/b5ffb2849d23afe73647f68eec7b68187af09be6/llama.h#L102) (`struct llama_context_params`)
|
|
11
16
|
* @param {object} options
|
|
12
17
|
* @param {string} options.modelPath - path to the model on the filesystem
|
|
13
18
|
* @param {number | null} [options.seed] - If null, a random seed will be used
|
|
14
19
|
* @param {number} [options.contextSize] - text context size
|
|
15
20
|
* @param {number} [options.batchSize] - prompt processing batch size
|
|
16
21
|
* @param {number} [options.gpuLayers] - number of layers to store in VRAM
|
|
17
|
-
* @param {boolean} [options.lowVram] - if true, reduce VRAM usage at the cost of performance
|
|
18
22
|
* @param {number} [options.threads] - number of threads to use to evaluate tokens
|
|
19
23
|
* @param {number} [options.temperature] - Temperature is a hyperparameter that controls the randomness of the generated text.
|
|
20
24
|
* It affects the probability distribution of the model's output tokens.
|
|
@@ -43,24 +47,27 @@ export class LlamaModel {
|
|
|
43
47
|
* @param {boolean} [options.useMlock] - force system to keep model in RAM
|
|
44
48
|
* @param {boolean} [options.embedding] - embedding mode only
|
|
45
49
|
*/
|
|
46
|
-
constructor({ modelPath, seed = null, contextSize = 1024 * 4, batchSize, gpuLayers,
|
|
50
|
+
constructor({ modelPath, seed = null, contextSize = 1024 * 4, batchSize, gpuLayers, threads = 6, temperature = 0, topK = 40, topP = 0.95, f16Kv, logitsAll, vocabOnly, useMmap, useMlock, embedding }) {
|
|
47
51
|
this._model = new LLAMAModel(path.resolve(process.cwd(), modelPath), removeNullFields({
|
|
48
|
-
seed: seed != null ? Math.max(-1, seed) : undefined,
|
|
49
|
-
contextSize,
|
|
50
|
-
batchSize,
|
|
51
52
|
gpuLayers,
|
|
52
|
-
lowVram,
|
|
53
|
-
threads,
|
|
54
|
-
temperature,
|
|
55
|
-
topK,
|
|
56
|
-
topP,
|
|
57
|
-
f16Kv,
|
|
58
|
-
logitsAll,
|
|
59
53
|
vocabOnly,
|
|
60
54
|
useMmap,
|
|
61
|
-
useMlock
|
|
62
|
-
embedding
|
|
55
|
+
useMlock
|
|
63
56
|
}));
|
|
57
|
+
this._contextOptions = {
|
|
58
|
+
seed,
|
|
59
|
+
contextSize,
|
|
60
|
+
batchSize,
|
|
61
|
+
f16Kv,
|
|
62
|
+
logitsAll,
|
|
63
|
+
embedding,
|
|
64
|
+
threads
|
|
65
|
+
};
|
|
66
|
+
this._evaluationOptions = {
|
|
67
|
+
temperature,
|
|
68
|
+
topK,
|
|
69
|
+
topP
|
|
70
|
+
};
|
|
64
71
|
}
|
|
65
72
|
static get systemInfo() {
|
|
66
73
|
return llamaCppNode.systemInfo();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LlamaModel.js","sourceRoot":"","sources":["../../src/llamaEvaluator/LlamaModel.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"LlamaModel.js","sourceRoot":"","sources":["../../src/llamaEvaluator/LlamaModel.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AA0GxD,MAAM,OAAO,UAAU;IACnB,gBAAgB;IACA,MAAM,CAAa;IAEnC,gBAAgB;IACA,eAAe,CAQ7B;IAEF,gBAAgB;IACA,kBAAkB,CAIhC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,YAAmB,EACf,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EACpE,OAAO,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAC/F;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,gBAAgB,CAAC;YAClF,SAAS;YACT,SAAS;YACT,OAAO;YACP,QAAQ;SACX,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,eAAe,GAAG;YACnB,IAAI;YACJ,WAAW;YACX,SAAS;YACT,KAAK;YACL,SAAS;YACT,SAAS;YACT,OAAO;SACV,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG;YACtB,WAAW;YACX,IAAI;YACJ,IAAI;SACP,CAAC;IACN,CAAC;IAEM,MAAM,KAAK,UAAU;QACxB,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;CACJ"}
|
package/dist/state.d.ts
ADDED
package/dist/state.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,IAAI,qBAAqB,GAAG,KAAK,CAAC;AAElC,MAAM,UAAU,wBAAwB;IACpC,OAAO,qBAAqB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACnD,qBAAqB,GAAG,KAAK,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cloneLlamaCppRepo(githubOwner: string, githubRepo: string, tag: string, useBundles?: boolean): Promise<void>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import simpleGit from "simple-git";
|
|
2
|
+
import cliProgress from "cli-progress";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import fs from "fs-extra";
|
|
5
|
+
import { llamaCppDirectory } from "../config.js";
|
|
6
|
+
import { getGitBundlePathForRelease } from "./gitReleaseBundles.js";
|
|
7
|
+
export async function cloneLlamaCppRepo(githubOwner, githubRepo, tag, useBundles = true) {
|
|
8
|
+
const gitBundleForTag = !useBundles ? null : await getGitBundlePathForRelease(githubOwner, githubRepo, tag);
|
|
9
|
+
const remoteGitUrl = `https://github.com/${githubOwner}/${githubRepo}.git`;
|
|
10
|
+
async function withGitCloneProgress(cloneName, callback) {
|
|
11
|
+
const progressBar = new cliProgress.Bar({
|
|
12
|
+
clearOnComplete: false,
|
|
13
|
+
hideCursor: true,
|
|
14
|
+
autopadding: true,
|
|
15
|
+
format: `${chalk.bold("Clone {repo}")} ${chalk.yellow("{percentage}%")} ${chalk.cyan("{bar}")} ${chalk.grey("{eta_formatted}")}`
|
|
16
|
+
}, cliProgress.Presets.shades_classic);
|
|
17
|
+
progressBar.start(100, 0, {
|
|
18
|
+
speed: "",
|
|
19
|
+
repo: `${githubOwner}/${githubRepo} (${cloneName})`
|
|
20
|
+
});
|
|
21
|
+
const gitWithCloneProgress = simpleGit({
|
|
22
|
+
progress({ progress, total, processed }) {
|
|
23
|
+
const totalProgress = (processed / 100) + (progress / total);
|
|
24
|
+
progressBar.update(Math.floor(totalProgress * 10000) / 100);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
try {
|
|
28
|
+
const res = await callback(gitWithCloneProgress);
|
|
29
|
+
progressBar.update(100);
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
progressBar.stop();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (gitBundleForTag != null) {
|
|
37
|
+
try {
|
|
38
|
+
await withGitCloneProgress("local bundle", async (gitWithCloneProgress) => {
|
|
39
|
+
await gitWithCloneProgress.clone(gitBundleForTag, llamaCppDirectory, {
|
|
40
|
+
"--quiet": null
|
|
41
|
+
});
|
|
42
|
+
await simpleGit(llamaCppDirectory).removeRemote("origin");
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
await fs.remove(llamaCppDirectory);
|
|
48
|
+
console.error("Failed to clone git bundle, cloning from GitHub instead", err);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
await withGitCloneProgress("GitHub", async (gitWithCloneProgress) => {
|
|
52
|
+
await gitWithCloneProgress.clone(remoteGitUrl, llamaCppDirectory, {
|
|
53
|
+
"--depth": 1,
|
|
54
|
+
"--branch": tag,
|
|
55
|
+
"--quiet": null
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=cloneLlamaCppRepo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloneLlamaCppRepo.js","sourceRoot":"","sources":["../../src/utils/cloneLlamaCppRepo.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import path from "path";
|
|
|
2
2
|
import { fileURLToPath } from "url";
|
|
3
3
|
import process from "process";
|
|
4
4
|
import fs from "fs-extra";
|
|
5
|
-
import { customCmakeOptionsEnvVarPrefix, llamaCppDirectory, llamaDirectory } from "../config.js";
|
|
5
|
+
import { customCmakeOptionsEnvVarPrefix, llamaCppDirectory, llamaDirectory, llamaToolchainsDirectory } from "../config.js";
|
|
6
6
|
import { clearLlamaBuild } from "./clearLlamaBuild.js";
|
|
7
7
|
import { setUsedBinFlag } from "./usedBinFlag.js";
|
|
8
8
|
import { spawnCommand } from "./spawnCommand.js";
|
|
@@ -14,6 +14,7 @@ export async function compileLlamaCpp({ arch = process.arch, nodeTarget = proces
|
|
|
14
14
|
throw new Error(`"${llamaCppDirectory}" directory does not exist`);
|
|
15
15
|
}
|
|
16
16
|
const cmakePathArgs = await getCmakePathArgs();
|
|
17
|
+
const toolchainFile = await getToolchainFileForArch(arch);
|
|
17
18
|
const runtimeVersion = nodeTarget.startsWith("v") ? nodeTarget.slice("v".length) : nodeTarget;
|
|
18
19
|
const cmakeCustomOptions = [];
|
|
19
20
|
if ((metal && process.platform === "darwin") || process.env.LLAMA_METAL === "1")
|
|
@@ -44,6 +45,8 @@ export async function compileLlamaCpp({ arch = process.arch, nodeTarget = proces
|
|
|
44
45
|
cmakeCustomOptions.push("LLAMA_HIPBLAS=1");
|
|
45
46
|
if (process.env.LLAMA_CLBLAST === "1")
|
|
46
47
|
cmakeCustomOptions.push("LLAMA_CLBLAST=1");
|
|
48
|
+
if (toolchainFile != null)
|
|
49
|
+
cmakeCustomOptions.push("CMAKE_TOOLCHAIN_FILE=" + toolchainFile);
|
|
47
50
|
for (const key in process.env) {
|
|
48
51
|
if (key.startsWith(customCmakeOptionsEnvVarPrefix)) {
|
|
49
52
|
const option = key.slice(customCmakeOptionsEnvVarPrefix.length);
|
|
@@ -56,7 +59,7 @@ export async function compileLlamaCpp({ arch = process.arch, nodeTarget = proces
|
|
|
56
59
|
await spawnCommand("npm", ["run", "-s", "cmake-js-llama", "--", "compile", "--log-level", "warn", "--arch=" + arch, "--runtime-version=" + runtimeVersion, ...cmakePathArgs]
|
|
57
60
|
.concat(cmakeCustomOptions.map(option => "--CD" + option)), __dirname);
|
|
58
61
|
const binFilesDirPath = path.join(llamaDirectory, "build", "llama.cpp", "bin");
|
|
59
|
-
const compiledResultDirPath = await getCompiledResultDir();
|
|
62
|
+
const compiledResultDirPath = await getCompiledResultDir(true);
|
|
60
63
|
if (await fs.pathExists(binFilesDirPath)) {
|
|
61
64
|
const files = await fs.readdir(binFilesDirPath);
|
|
62
65
|
await Promise.all(files.map((fileName) => (fs.copy(path.join(binFilesDirPath, fileName), path.join(compiledResultDirPath, fileName), {
|
|
@@ -77,20 +80,24 @@ export async function compileLlamaCpp({ arch = process.arch, nodeTarget = proces
|
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
export async function getCompiledLlamaCppBinaryPath() {
|
|
80
|
-
const compiledResultDirPath = await getCompiledResultDir();
|
|
83
|
+
const compiledResultDirPath = await getCompiledResultDir(false);
|
|
84
|
+
if (compiledResultDirPath == null)
|
|
85
|
+
return null;
|
|
81
86
|
const modulePath = path.join(compiledResultDirPath, "llama-addon.node");
|
|
82
87
|
if (await fs.pathExists(modulePath))
|
|
83
88
|
return modulePath;
|
|
84
89
|
return null;
|
|
85
90
|
}
|
|
86
|
-
async function getCompiledResultDir() {
|
|
91
|
+
async function getCompiledResultDir(failIfNotFound = false) {
|
|
87
92
|
if (await fs.pathExists(path.join(llamaDirectory, "build", "Release"))) {
|
|
88
93
|
return path.join(llamaDirectory, "build", "Release");
|
|
89
94
|
}
|
|
90
95
|
else if (await fs.pathExists(path.join(llamaDirectory, "build", "Debug"))) {
|
|
91
96
|
return path.join(llamaDirectory, "build", "Debug");
|
|
92
97
|
}
|
|
93
|
-
|
|
98
|
+
if (failIfNotFound)
|
|
99
|
+
throw new Error("Could not find Release or Debug directory");
|
|
100
|
+
return null;
|
|
94
101
|
}
|
|
95
102
|
async function getCmakePathArgs() {
|
|
96
103
|
if (await hasBuiltinCmake())
|
|
@@ -100,4 +107,15 @@ async function getCmakePathArgs() {
|
|
|
100
107
|
return [];
|
|
101
108
|
return ["--cmake-path", cmakePath];
|
|
102
109
|
}
|
|
110
|
+
async function getToolchainFileForArch(targetArch) {
|
|
111
|
+
if (process.arch === targetArch)
|
|
112
|
+
return null;
|
|
113
|
+
const platform = process.platform;
|
|
114
|
+
const hostArch = process.arch;
|
|
115
|
+
const toolchainFilename = `${platform}.host-${hostArch}.target-${targetArch}.cmake`;
|
|
116
|
+
const filePath = path.join(llamaToolchainsDirectory, toolchainFilename);
|
|
117
|
+
if (await fs.pathExists(filePath))
|
|
118
|
+
return filePath;
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
103
121
|
//# sourceMappingURL=compileLLamaCpp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileLLamaCpp.js","sourceRoot":"","sources":["../../src/utils/compileLLamaCpp.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAC,8BAA8B,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"compileLLamaCpp.js","sourceRoot":"","sources":["../../src/utils/compileLLamaCpp.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/getBin.d.ts
CHANGED
|
@@ -4,33 +4,38 @@ export type LlamaCppNodeModule = {
|
|
|
4
4
|
LLAMAModel: LLAMAModel;
|
|
5
5
|
LLAMAContext: LLAMAContext;
|
|
6
6
|
LLAMAGrammar: LLAMAGrammar;
|
|
7
|
+
LLAMAGrammarEvaluationState: LLAMAGrammarEvaluationState;
|
|
7
8
|
systemInfo(): string;
|
|
8
9
|
};
|
|
9
10
|
export type LLAMAModel = {
|
|
10
11
|
new (modelPath: string, params: {
|
|
12
|
+
gpuLayers?: number;
|
|
13
|
+
vocabOnly?: boolean;
|
|
14
|
+
useMmap?: boolean;
|
|
15
|
+
useMlock?: boolean;
|
|
16
|
+
}): LLAMAModel;
|
|
17
|
+
};
|
|
18
|
+
export type LLAMAContext = {
|
|
19
|
+
new (model: LLAMAModel, params: {
|
|
11
20
|
seed?: number;
|
|
12
21
|
contextSize?: number;
|
|
13
22
|
batchSize?: number;
|
|
14
|
-
gpuCores?: number;
|
|
15
|
-
lowVram?: boolean;
|
|
16
23
|
f16Kv?: boolean;
|
|
17
24
|
logitsAll?: boolean;
|
|
18
|
-
vocabOnly?: boolean;
|
|
19
|
-
useMmap?: boolean;
|
|
20
|
-
useMlock?: boolean;
|
|
21
25
|
embedding?: boolean;
|
|
22
26
|
threads?: number;
|
|
27
|
+
}): LLAMAContext;
|
|
28
|
+
encode(text: string): Uint32Array;
|
|
29
|
+
eval(tokens: Uint32Array, options?: {
|
|
23
30
|
temperature?: number;
|
|
24
31
|
topK?: number;
|
|
25
32
|
topP?: number;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}):
|
|
32
|
-
encode(text: string): Uint32Array;
|
|
33
|
-
eval(tokens: Uint32Array): Promise<number>;
|
|
33
|
+
repeatPenalty?: number;
|
|
34
|
+
repeatPenaltyTokens?: Uint32Array;
|
|
35
|
+
repeatPenaltyPresencePenalty?: number;
|
|
36
|
+
repeatPenaltyFrequencyPenalty?: number;
|
|
37
|
+
grammarEvaluationState?: LLAMAGrammarEvaluationState;
|
|
38
|
+
}): Promise<number>;
|
|
34
39
|
decode(tokens: Uint32Array): string;
|
|
35
40
|
tokenBos(): number;
|
|
36
41
|
tokenEos(): number;
|
|
@@ -43,3 +48,6 @@ export type LLAMAGrammar = {
|
|
|
43
48
|
printGrammar?: boolean;
|
|
44
49
|
}): LLAMAGrammar;
|
|
45
50
|
};
|
|
51
|
+
export type LLAMAGrammarEvaluationState = {
|
|
52
|
+
new (grammar: LLAMAGrammar): LLAMAGrammarEvaluationState;
|
|
53
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import simpleGit from "simple-git";
|
|
3
|
+
import { currentReleaseGitBundlePath, defaultLlamaCppGitHubRepo, llamaCppDirectory } from "../config.js";
|
|
4
|
+
import { getBinariesGithubRelease } from "./binariesGithubRelease.js";
|
|
5
|
+
export async function unshallowAndSquashCurrentRepoAndSaveItAsReleaseBundle() {
|
|
6
|
+
if (!(await fs.pathExists(llamaCppDirectory)))
|
|
7
|
+
throw new Error("llama.cpp directory does not exist");
|
|
8
|
+
if (await fs.pathExists(currentReleaseGitBundlePath))
|
|
9
|
+
await fs.remove(currentReleaseGitBundlePath);
|
|
10
|
+
await simpleGit(llamaCppDirectory).addConfig("user.name", "node-llama-cpp-ci");
|
|
11
|
+
await simpleGit(llamaCppDirectory).addConfig("user.email", "node-llama-cpp-ci@node-llama-cpp-ci.node-llama-cpp-ci");
|
|
12
|
+
const currentBranch = await getCurrentTagOrBranch();
|
|
13
|
+
await simpleGit(llamaCppDirectory).fetch(["--unshallow"]);
|
|
14
|
+
const lastCommit = await simpleGit(llamaCppDirectory).log(["-1"]);
|
|
15
|
+
const lastCommitMessage = lastCommit?.all?.[0]?.message;
|
|
16
|
+
const newCommitMessage = "## SQUASHED ##\n\n" + (lastCommitMessage ?? "");
|
|
17
|
+
const newCommitSha = await simpleGit(llamaCppDirectory).raw(["commit-tree", "HEAD^{tree}", "-m", newCommitMessage]);
|
|
18
|
+
await simpleGit(llamaCppDirectory).reset(["--hard", newCommitSha.trim()]);
|
|
19
|
+
const tags = await simpleGit(llamaCppDirectory).tags();
|
|
20
|
+
for (const tag of tags.all) {
|
|
21
|
+
await simpleGit(llamaCppDirectory).tag(["--delete", tag]);
|
|
22
|
+
}
|
|
23
|
+
const branches = await simpleGit(llamaCppDirectory).branch();
|
|
24
|
+
for (const branch of branches.all) {
|
|
25
|
+
try {
|
|
26
|
+
await simpleGit(llamaCppDirectory).branch(["--delete", branch]);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
// If the branch is not found, it's fine
|
|
30
|
+
// this happens as when there are no branches git returnes an output saying so, and `simpleGit` parses it as a branch,
|
|
31
|
+
// so the list may contain branches that do not exist.
|
|
32
|
+
// Right now, the non-existent branch name returned called `(no`, but I wouldn't want to rely on this specific text,
|
|
33
|
+
// as this is a bug in `simpleGit`.
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (currentBranch != null)
|
|
37
|
+
await simpleGit(llamaCppDirectory).tag([currentBranch]);
|
|
38
|
+
await simpleGit(llamaCppDirectory).raw(["gc", "--aggressive", "--prune=all"]);
|
|
39
|
+
await simpleGit(llamaCppDirectory).raw(["bundle", "create", currentReleaseGitBundlePath, "HEAD"]);
|
|
40
|
+
}
|
|
41
|
+
export async function getGitBundlePathForRelease(githubOwner, githubRepo, release) {
|
|
42
|
+
const [defaultGithubOwner, defaultGithubRepo] = defaultLlamaCppGitHubRepo.split("/");
|
|
43
|
+
if (githubOwner !== defaultGithubOwner || githubRepo !== defaultGithubRepo)
|
|
44
|
+
return null;
|
|
45
|
+
const currentBundleRelease = await getBinariesGithubRelease();
|
|
46
|
+
if (currentBundleRelease === "latest")
|
|
47
|
+
return null;
|
|
48
|
+
if (currentBundleRelease !== release)
|
|
49
|
+
return null;
|
|
50
|
+
if (!(await fs.pathExists(currentReleaseGitBundlePath)))
|
|
51
|
+
return null;
|
|
52
|
+
return currentReleaseGitBundlePath;
|
|
53
|
+
}
|
|
54
|
+
async function getCurrentTagOrBranch() {
|
|
55
|
+
const branch = await simpleGit(llamaCppDirectory).revparse(["--abbrev-ref", "HEAD"]);
|
|
56
|
+
if (branch !== "HEAD")
|
|
57
|
+
return branch;
|
|
58
|
+
const tags = await simpleGit(llamaCppDirectory).tag(["--points-at", "HEAD"]);
|
|
59
|
+
const tagArray = tags.split("\n").filter(Boolean);
|
|
60
|
+
if (tagArray.length > 0)
|
|
61
|
+
return tagArray[0];
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=gitReleaseBundles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitReleaseBundles.js","sourceRoot":"","sources":["../../src/utils/gitReleaseBundles.ts"],"names":[],"mappings":"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"}
|