node-llama-cpp 0.0.1 → 1.1.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/LICENSE +21 -0
- package/README.md +210 -0
- package/dist/AbortError.d.ts +3 -0
- package/dist/AbortError.js +6 -0
- package/dist/AbortError.js.map +1 -0
- package/dist/ChatPromptWrapper.d.ts +7 -0
- package/dist/ChatPromptWrapper.js +14 -0
- package/dist/ChatPromptWrapper.js.map +1 -0
- package/dist/LlamaChatSession.d.ts +24 -0
- package/dist/LlamaChatSession.js +86 -0
- package/dist/LlamaChatSession.js.map +1 -0
- package/dist/LlamaModel.d.ts +13 -0
- package/dist/LlamaModel.js +43 -0
- package/dist/LlamaModel.js.map +1 -0
- package/dist/chatWrappers/EmptyChatPromptWrapper.d.ts +3 -0
- package/dist/chatWrappers/EmptyChatPromptWrapper.js +4 -0
- package/dist/chatWrappers/EmptyChatPromptWrapper.js.map +1 -0
- package/dist/chatWrappers/LlamaChatPromptWrapper.d.ts +8 -0
- package/dist/chatWrappers/LlamaChatPromptWrapper.js +16 -0
- package/dist/chatWrappers/LlamaChatPromptWrapper.js.map +1 -0
- package/dist/cli/cli.d.ts +2 -0
- package/dist/cli/cli.js +33 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands/BuildCommand.d.ts +8 -0
- package/dist/cli/commands/BuildCommand.js +41 -0
- package/dist/cli/commands/BuildCommand.js.map +1 -0
- package/dist/cli/commands/ChatCommand.d.ts +8 -0
- package/dist/cli/commands/ChatCommand.js +83 -0
- package/dist/cli/commands/ChatCommand.js.map +1 -0
- package/dist/cli/commands/ClearCommand.d.ts +7 -0
- package/dist/cli/commands/ClearCommand.js +42 -0
- package/dist/cli/commands/ClearCommand.js.map +1 -0
- package/dist/cli/commands/DownloadCommand.d.ts +11 -0
- package/dist/cli/commands/DownloadCommand.js +179 -0
- package/dist/cli/commands/DownloadCommand.js.map +1 -0
- package/dist/cli/commands/OnPostInstallCommand.d.ts +4 -0
- package/dist/cli/commands/OnPostInstallCommand.js +24 -0
- package/dist/cli/commands/OnPostInstallCommand.js.map +1 -0
- package/dist/commands.d.ts +4 -0
- package/dist/commands.js +5 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +25 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/clearLlamaBuild.d.ts +1 -0
- package/dist/utils/clearLlamaBuild.js +12 -0
- package/dist/utils/clearLlamaBuild.js.map +1 -0
- package/dist/utils/clearTempFolder.d.ts +1 -0
- package/dist/utils/clearTempFolder.js +16 -0
- package/dist/utils/clearTempFolder.js.map +1 -0
- package/dist/utils/compileLLamaCpp.d.ts +6 -0
- package/dist/utils/compileLLamaCpp.js +43 -0
- package/dist/utils/compileLLamaCpp.js.map +1 -0
- package/dist/utils/getBin.d.ts +18 -0
- package/dist/utils/getBin.js +70 -0
- package/dist/utils/getBin.js.map +1 -0
- package/dist/utils/spawnCommand.d.ts +1 -0
- package/dist/utils/spawnCommand.js +39 -0
- package/dist/utils/spawnCommand.js.map +1 -0
- package/dist/utils/usedBinFlag.d.ts +6 -0
- package/dist/utils/usedBinFlag.js +15 -0
- package/dist/utils/usedBinFlag.js.map +1 -0
- package/dist/utils/withLock.d.ts +1 -0
- package/dist/utils/withLock.js +19 -0
- package/dist/utils/withLock.js.map +1 -0
- package/dist/utils/withOra.d.ts +5 -0
- package/dist/utils/withOra.js +21 -0
- package/dist/utils/withOra.js.map +1 -0
- package/llama/.clang-format +46 -0
- package/llama/addon.cpp +183 -0
- package/llama/binding.gyp +24 -0
- package/llama/usedBin.json +3 -0
- package/llamaBins/linux-arm64-16.node +0 -0
- package/llamaBins/linux-arm64-17.node +0 -0
- package/llamaBins/linux-arm64-18.node +0 -0
- package/llamaBins/linux-arm64-19.node +0 -0
- package/llamaBins/linux-arm64-20.node +0 -0
- package/llamaBins/linux-armv7l-16.node +0 -0
- package/llamaBins/linux-armv7l-17.node +0 -0
- package/llamaBins/linux-armv7l-18.node +0 -0
- package/llamaBins/linux-armv7l-19.node +0 -0
- package/llamaBins/linux-armv7l-20.node +0 -0
- package/llamaBins/linux-ppc64le-16.node +0 -0
- package/llamaBins/linux-ppc64le-17.node +0 -0
- package/llamaBins/linux-ppc64le-18.node +0 -0
- package/llamaBins/linux-ppc64le-19.node +0 -0
- package/llamaBins/linux-ppc64le-20.node +0 -0
- package/llamaBins/linux-x64-16.node +0 -0
- package/llamaBins/linux-x64-17.node +0 -0
- package/llamaBins/linux-x64-18.node +0 -0
- package/llamaBins/linux-x64-19.node +0 -0
- package/llamaBins/linux-x64-20.node +0 -0
- package/llamaBins/mac-arm64-16.node +0 -0
- package/llamaBins/mac-arm64-17.node +0 -0
- package/llamaBins/mac-arm64-18.node +0 -0
- package/llamaBins/mac-arm64-19.node +0 -0
- package/llamaBins/mac-arm64-20.node +0 -0
- package/llamaBins/mac-x64-16.node +0 -0
- package/llamaBins/mac-x64-17.node +0 -0
- package/llamaBins/mac-x64-18.node +0 -0
- package/llamaBins/mac-x64-19.node +0 -0
- package/llamaBins/mac-x64-20.node +0 -0
- package/llamaBins/win-x64-16.node +0 -0
- package/llamaBins/win-x64-17.node +0 -0
- package/llamaBins/win-x64-18.node +0 -0
- package/llamaBins/win-x64-19.node +0 -0
- package/llamaBins/win-x64-20.node +0 -0
- package/package.json +71 -10
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as readline from "readline/promises";
|
|
2
|
+
import process from "process";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import withOra from "../../utils/withOra.js";
|
|
5
|
+
import { defaultChatSystemPrompt } from "../../config.js";
|
|
6
|
+
import { LlamaChatPromptWrapper } from "../../chatWrappers/LlamaChatPromptWrapper.js";
|
|
7
|
+
export const ChatCommand = {
|
|
8
|
+
command: "chat",
|
|
9
|
+
describe: "Chat with a LLama model",
|
|
10
|
+
builder(yargs) {
|
|
11
|
+
return yargs
|
|
12
|
+
.option("model", {
|
|
13
|
+
type: "string",
|
|
14
|
+
demandOption: true,
|
|
15
|
+
description: "LLama model file to use for the chat",
|
|
16
|
+
group: "Required:"
|
|
17
|
+
})
|
|
18
|
+
.option("systemInfo", {
|
|
19
|
+
type: "boolean",
|
|
20
|
+
default: false,
|
|
21
|
+
description: "Print llama.cpp system info",
|
|
22
|
+
group: "Optional:"
|
|
23
|
+
})
|
|
24
|
+
.option("systemPrompt", {
|
|
25
|
+
type: "string",
|
|
26
|
+
default: defaultChatSystemPrompt,
|
|
27
|
+
defaultDescription: "",
|
|
28
|
+
description: "System prompt to use against the model. " +
|
|
29
|
+
"[default value: " + defaultChatSystemPrompt.split("\n").join(" ") + "]",
|
|
30
|
+
group: "Optional:"
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
async handler({ model, systemInfo, systemPrompt }) {
|
|
34
|
+
try {
|
|
35
|
+
await RunChat({ model, systemInfo, systemPrompt });
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
console.error(err);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
async function RunChat({ model: modelArg, systemInfo, systemPrompt }) {
|
|
44
|
+
const { LlamaChatSession } = await import("../../LlamaChatSession.js");
|
|
45
|
+
const { LlamaModel } = await import("../../LlamaModel.js");
|
|
46
|
+
const model = new LlamaModel({
|
|
47
|
+
modelPath: modelArg
|
|
48
|
+
});
|
|
49
|
+
const session = new LlamaChatSession({
|
|
50
|
+
model,
|
|
51
|
+
printLLamaSystemInfo: systemInfo,
|
|
52
|
+
systemPrompt,
|
|
53
|
+
promptWrapper: new LlamaChatPromptWrapper()
|
|
54
|
+
});
|
|
55
|
+
await withOra({
|
|
56
|
+
loading: chalk.blue("Loading model"),
|
|
57
|
+
success: chalk.blue("Model loaded"),
|
|
58
|
+
fail: chalk.blue("Failed to load model")
|
|
59
|
+
}, async () => {
|
|
60
|
+
await session.init();
|
|
61
|
+
});
|
|
62
|
+
// this is for ora to not interfere with readline
|
|
63
|
+
await new Promise(resolve => setTimeout(resolve, 1));
|
|
64
|
+
const rl = readline.createInterface({
|
|
65
|
+
input: process.stdin,
|
|
66
|
+
output: process.stdout
|
|
67
|
+
});
|
|
68
|
+
// eslint-disable-next-line no-constant-condition
|
|
69
|
+
while (true) {
|
|
70
|
+
const input = await rl.question(chalk.yellow("> "));
|
|
71
|
+
if (input === ".exit")
|
|
72
|
+
break;
|
|
73
|
+
process.stdout.write(chalk.yellow("AI: "));
|
|
74
|
+
const [startColor, endColor] = chalk.blue("MIDDLE").split("MIDDLE");
|
|
75
|
+
process.stdout.write(startColor);
|
|
76
|
+
await session.prompt(input, (chunk) => {
|
|
77
|
+
process.stdout.write(model.decode(Uint32Array.from([chunk])));
|
|
78
|
+
});
|
|
79
|
+
process.stdout.write(endColor);
|
|
80
|
+
console.log();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ChatCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ChatCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CommandModule } from "yargs";
|
|
2
|
+
type ClearCommand = {
|
|
3
|
+
type: "source" | "build" | "all";
|
|
4
|
+
};
|
|
5
|
+
export declare const ClearCommand: CommandModule<object, ClearCommand>;
|
|
6
|
+
export declare function ClearLlamaCppBuildCommand({ type }: ClearCommand): Promise<void>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as fs from "fs-extra";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { llamaCppDirectory } from "../../config.js";
|
|
4
|
+
import withOra from "../../utils/withOra.js";
|
|
5
|
+
import { clearLlamaBuild } from "../../utils/clearLlamaBuild.js";
|
|
6
|
+
import { setUsedBinFlag } from "../../utils/usedBinFlag.js";
|
|
7
|
+
export const ClearCommand = {
|
|
8
|
+
command: "clear [type]",
|
|
9
|
+
describe: "Clear files created by llama-cli",
|
|
10
|
+
builder(yargs) {
|
|
11
|
+
return yargs
|
|
12
|
+
.option("type", {
|
|
13
|
+
type: "string",
|
|
14
|
+
choices: ["source", "build", "all"],
|
|
15
|
+
default: "all",
|
|
16
|
+
description: "Files to clear"
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
handler: ClearLlamaCppBuildCommand
|
|
20
|
+
};
|
|
21
|
+
export async function ClearLlamaCppBuildCommand({ type }) {
|
|
22
|
+
if (type === "source" || type === "all") {
|
|
23
|
+
await withOra({
|
|
24
|
+
loading: chalk.blue("Clearing source"),
|
|
25
|
+
success: chalk.blue("Cleared source"),
|
|
26
|
+
fail: chalk.blue("Failed to clear source")
|
|
27
|
+
}, async () => {
|
|
28
|
+
await fs.remove(llamaCppDirectory);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (type === "build" || type === "all") {
|
|
32
|
+
await withOra({
|
|
33
|
+
loading: chalk.blue("Clearing build"),
|
|
34
|
+
success: chalk.blue("Cleared build"),
|
|
35
|
+
fail: chalk.blue("Failed to clear build")
|
|
36
|
+
}, async () => {
|
|
37
|
+
await clearLlamaBuild();
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
await setUsedBinFlag("prebuildBinaries");
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=ClearCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClearCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ClearCommand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAM1D,MAAM,CAAC,MAAM,YAAY,GAAwC;IAC7D,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,kCAAkC;IAC5C,OAAO,CAAC,KAAK;QACT,OAAO,KAAK;aACP,MAAM,CAAC,MAAM,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAA2B;YAC7D,OAAO,EAAE,KAA6B;YACtC,WAAW,EAAE,gBAAgB;SAChC,CAAC,CAAC;IACX,CAAC;IACD,OAAO,EAAE,yBAAyB;CACrC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAAC,IAAI,EAAe;IAChE,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE;QACrC,MAAM,OAAO,CAAC;YACV,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACtC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACrC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC;SAC7C,EAAE,KAAK,IAAI,EAAE;YACV,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;KACN;IAED,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE;QACpC,MAAM,OAAO,CAAC;YACV,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACrC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;YACpC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;SAC5C,EAAE,KAAK,IAAI,EAAE;YACV,MAAM,eAAe,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;KACN;IAED,MAAM,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CommandModule } from "yargs";
|
|
2
|
+
type DownloadCommandArgs = {
|
|
3
|
+
repo: string;
|
|
4
|
+
release: "latest" | string;
|
|
5
|
+
arch?: string;
|
|
6
|
+
nodeTarget?: string;
|
|
7
|
+
skipBuild?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const DownloadCommand: CommandModule<object, DownloadCommandArgs>;
|
|
10
|
+
export declare function DownloadLlamaCppCommand({ repo, release, arch, nodeTarget, skipBuild }: DownloadCommandArgs): Promise<void>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { Octokit } from "octokit";
|
|
3
|
+
import * as fs from "fs-extra";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { DownloaderHelper } from "node-downloader-helper";
|
|
6
|
+
import cliProgress from "cli-progress";
|
|
7
|
+
import bytes from "bytes";
|
|
8
|
+
import StreamZip from "node-stream-zip";
|
|
9
|
+
import { defaultLlamaCppGitHubRepo, defaultLlamaCppRelease, llamaCppDirectory, tempDownloadDirectory } from "../../config.js";
|
|
10
|
+
import { compileLlamaCpp } from "../../utils/compileLLamaCpp.js";
|
|
11
|
+
import withOra from "../../utils/withOra.js";
|
|
12
|
+
import { clearTempFolder } from "../../utils/clearTempFolder.js";
|
|
13
|
+
export const DownloadCommand = {
|
|
14
|
+
command: "download",
|
|
15
|
+
describe: "Download a release of llama.cpp and compile it",
|
|
16
|
+
builder(yargs) {
|
|
17
|
+
return yargs
|
|
18
|
+
.option("repo", {
|
|
19
|
+
type: "string",
|
|
20
|
+
default: defaultLlamaCppGitHubRepo,
|
|
21
|
+
description: "The GitHub repository to download a release of llama.cpp from. Can also be set via the NODE_LLAMA_CPP_REPO environment variable"
|
|
22
|
+
})
|
|
23
|
+
.option("release", {
|
|
24
|
+
type: "string",
|
|
25
|
+
default: defaultLlamaCppRelease,
|
|
26
|
+
description: "The tag of the llama.cpp release to download. Can also be set via the NODE_LLAMA_CPP_REPO_RELEASE environment variable"
|
|
27
|
+
})
|
|
28
|
+
.option("arch", {
|
|
29
|
+
type: "string",
|
|
30
|
+
description: "The architecture to compile llama.cpp for"
|
|
31
|
+
})
|
|
32
|
+
.option("nodeTarget", {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "The Node.js version to compile llama.cpp for. Example: v18.0.0"
|
|
35
|
+
})
|
|
36
|
+
.option("skipBuild", {
|
|
37
|
+
type: "boolean",
|
|
38
|
+
default: false,
|
|
39
|
+
description: "Skip building llama.cpp after downloading it"
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
handler: DownloadLlamaCppCommand
|
|
43
|
+
};
|
|
44
|
+
export async function DownloadLlamaCppCommand({ repo, release, arch, nodeTarget, skipBuild }) {
|
|
45
|
+
const octokit = new Octokit();
|
|
46
|
+
const [githubOwner, githubRepo] = repo.split("/");
|
|
47
|
+
console.log(`${chalk.yellow("Repo:")} ${repo}`);
|
|
48
|
+
console.log(`${chalk.yellow("Release:")} ${release}`);
|
|
49
|
+
console.log();
|
|
50
|
+
let githubRelease = null;
|
|
51
|
+
let zipUrl;
|
|
52
|
+
await withOra({
|
|
53
|
+
loading: chalk.blue("Fetching llama.cpp info"),
|
|
54
|
+
success: chalk.blue("Fetched llama.cpp info"),
|
|
55
|
+
fail: chalk.blue("Failed to fetch llama.cpp info")
|
|
56
|
+
}, async () => {
|
|
57
|
+
try {
|
|
58
|
+
if (release === "latest") {
|
|
59
|
+
githubRelease = await octokit.rest.repos.getLatestRelease({
|
|
60
|
+
owner: githubOwner,
|
|
61
|
+
repo: githubRepo
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
githubRelease = await octokit.rest.repos.getReleaseByTag({
|
|
66
|
+
owner: githubOwner,
|
|
67
|
+
repo: githubRepo,
|
|
68
|
+
tag: release
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
console.error("Failed to fetch llama.cpp release info", err);
|
|
74
|
+
}
|
|
75
|
+
if (githubRelease == null) {
|
|
76
|
+
throw new Error(`Failed to find release "${release}" of "${repo}"`);
|
|
77
|
+
}
|
|
78
|
+
if (githubRelease.data?.zipball_url == null) {
|
|
79
|
+
throw new Error(`Failed to find a zip archive for release "${release}" of "${repo}"`);
|
|
80
|
+
}
|
|
81
|
+
const zipUrlResponse = await octokit.rest.repos.downloadZipballArchive({
|
|
82
|
+
owner: githubOwner,
|
|
83
|
+
repo: githubRepo,
|
|
84
|
+
ref: githubRelease.data.target_commitish
|
|
85
|
+
});
|
|
86
|
+
if (zipUrlResponse.url == null)
|
|
87
|
+
throw new Error(`Failed to get zip archive url for release "${release}" of "${repo}"`);
|
|
88
|
+
zipUrl = zipUrlResponse.url;
|
|
89
|
+
});
|
|
90
|
+
await clearTempFolder();
|
|
91
|
+
console.log(chalk.blue("Downloading zip file"));
|
|
92
|
+
await fs.ensureDir(tempDownloadDirectory);
|
|
93
|
+
await downloadFile(zipUrl, "llama.cpp.zip", tempDownloadDirectory);
|
|
94
|
+
await withOra({
|
|
95
|
+
loading: chalk.blue("Removing existing llama.cpp directory"),
|
|
96
|
+
success: chalk.blue("Removed existing llama.cpp directory"),
|
|
97
|
+
fail: chalk.blue("Failed to remove existing llama.cpp directory")
|
|
98
|
+
}, async () => {
|
|
99
|
+
await fs.remove(llamaCppDirectory);
|
|
100
|
+
});
|
|
101
|
+
await withOra({
|
|
102
|
+
loading: chalk.blue("Extracting llama.cpp.zip file"),
|
|
103
|
+
success: chalk.blue("Extracted llama.cpp.zip file"),
|
|
104
|
+
fail: chalk.blue("Failed to extract llama.cpp.zip file")
|
|
105
|
+
}, async () => {
|
|
106
|
+
await unzipLlamaReleaseZipFile(path.join(tempDownloadDirectory, "llama.cpp.zip"), llamaCppDirectory);
|
|
107
|
+
});
|
|
108
|
+
await withOra({
|
|
109
|
+
loading: chalk.blue("Removing temporary files"),
|
|
110
|
+
success: chalk.blue("Removed temporary files"),
|
|
111
|
+
fail: chalk.blue("Failed to remove temporary files")
|
|
112
|
+
}, async () => {
|
|
113
|
+
await clearTempFolder();
|
|
114
|
+
});
|
|
115
|
+
if (!skipBuild) {
|
|
116
|
+
console.log(chalk.blue("Compiling llama.cpp"));
|
|
117
|
+
await compileLlamaCpp({
|
|
118
|
+
arch: arch ? arch : undefined,
|
|
119
|
+
nodeTarget: nodeTarget ? nodeTarget : undefined,
|
|
120
|
+
setUsedBingFlag: true
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
console.log();
|
|
124
|
+
console.log();
|
|
125
|
+
console.log(`${chalk.yellow("Repo:")} ${repo}`);
|
|
126
|
+
console.log(`${chalk.yellow("Release:")} ${release}`);
|
|
127
|
+
console.log();
|
|
128
|
+
console.log(chalk.green("Done"));
|
|
129
|
+
}
|
|
130
|
+
async function downloadFile(url, fileName, directory) {
|
|
131
|
+
const download = new DownloaderHelper(url, directory, {
|
|
132
|
+
fileName: fileName,
|
|
133
|
+
retry: {
|
|
134
|
+
maxRetries: 10,
|
|
135
|
+
delay: 1000 * 6
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
const progressBar = new cliProgress.Bar({
|
|
139
|
+
clearOnComplete: false,
|
|
140
|
+
hideCursor: true,
|
|
141
|
+
autopadding: true,
|
|
142
|
+
format: `${chalk.bold("{filename}")} ${chalk.yellow("{percentage}%")} ${chalk.cyan("{bar}")} {speed}${chalk.grey("{eta_formatted}")}`
|
|
143
|
+
}, cliProgress.Presets.shades_classic);
|
|
144
|
+
progressBar.start(100, 0, {
|
|
145
|
+
speed: "",
|
|
146
|
+
filename: fileName
|
|
147
|
+
});
|
|
148
|
+
download.on("progress", (stats) => {
|
|
149
|
+
progressBar.update(Math.floor((stats.downloaded / stats.total) * 10000) / 100, {
|
|
150
|
+
speed: Number.isFinite(stats.speed) ? chalk.blue((bytes(stats.speed) + "/s").padEnd(10)) + chalk.grey(" | ") : ""
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
download.on("end", () => {
|
|
154
|
+
progressBar.update(100);
|
|
155
|
+
progressBar.stop();
|
|
156
|
+
});
|
|
157
|
+
// errors are handled by the .start() method
|
|
158
|
+
// this listener is here to not get an unhandled error exception
|
|
159
|
+
download.on("error", () => { });
|
|
160
|
+
await download.start();
|
|
161
|
+
}
|
|
162
|
+
async function unzipLlamaReleaseZipFile(zipFilePath, directory) {
|
|
163
|
+
const zip = new StreamZip.async({ file: zipFilePath });
|
|
164
|
+
const entires = await zip.entries();
|
|
165
|
+
const rootFolderEntries = new Map();
|
|
166
|
+
for (const entry of Object.values(entires)) {
|
|
167
|
+
const entryPath = entry.name.split("/");
|
|
168
|
+
const rootFolderName = entryPath[0];
|
|
169
|
+
const rootFolderEntryCount = rootFolderEntries.get(rootFolderName) ?? 0;
|
|
170
|
+
rootFolderEntries.set(rootFolderName, rootFolderEntryCount + 1);
|
|
171
|
+
}
|
|
172
|
+
const mostUsedRootFolderName = [...rootFolderEntries.keys()]
|
|
173
|
+
.sort((a, b) => rootFolderEntries.get(b) - rootFolderEntries.get(a))
|
|
174
|
+
.shift();
|
|
175
|
+
if (mostUsedRootFolderName == null)
|
|
176
|
+
throw new Error("Failed to find the root folder of the llama.cpp release zip file");
|
|
177
|
+
await zip.extract(mostUsedRootFolderName, directory);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=DownloadCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DownloadCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/DownloadCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defaultLlamaCppGitHubRepo, defaultLlamaCppRelease, defaultSkipDownload } from "../../config.js";
|
|
2
|
+
import { getPrebuildBinPath } from "../../utils/getBin.js";
|
|
3
|
+
import { DownloadLlamaCppCommand } from "./DownloadCommand.js";
|
|
4
|
+
export const OnPostInstallCommand = {
|
|
5
|
+
command: "postinstall",
|
|
6
|
+
describe: false,
|
|
7
|
+
async handler() {
|
|
8
|
+
if (defaultSkipDownload)
|
|
9
|
+
return;
|
|
10
|
+
if (await getPrebuildBinPath() != null)
|
|
11
|
+
return;
|
|
12
|
+
try {
|
|
13
|
+
await DownloadLlamaCppCommand({
|
|
14
|
+
repo: defaultLlamaCppGitHubRepo,
|
|
15
|
+
release: defaultLlamaCppRelease
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
console.error(err);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=OnPostInstallCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnPostInstallCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/OnPostInstallCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,yBAAyB,EAAE,sBAAsB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAI7D,MAAM,CAAC,MAAM,oBAAoB,GAAgD;IAC7E,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,KAAK;IACf,KAAK,CAAC,OAAO;QACT,IAAI,mBAAmB;YACnB,OAAO;QAEX,IAAI,MAAM,kBAAkB,EAAE,IAAI,IAAI;YAClC,OAAO;QAEX,IAAI;YACA,MAAM,uBAAuB,CAAC;gBAC1B,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,sBAAsB;aAClC,CAAC,CAAC;SACN;QAAC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB;IACL,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BuildLlamaCppCommand } from "./cli/commands/BuildCommand.js";
|
|
2
|
+
import { DownloadLlamaCppCommand } from "./cli/commands/DownloadCommand.js";
|
|
3
|
+
import { ClearLlamaCppBuildCommand } from "./cli/commands/ClearCommand.js";
|
|
4
|
+
export { BuildLlamaCppCommand, DownloadLlamaCppCommand, ClearLlamaCppBuildCommand };
|
package/dist/commands.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BuildLlamaCppCommand } from "./cli/commands/BuildCommand.js";
|
|
2
|
+
import { DownloadLlamaCppCommand } from "./cli/commands/DownloadCommand.js";
|
|
3
|
+
import { ClearLlamaCppBuildCommand } from "./cli/commands/ClearCommand.js";
|
|
4
|
+
export { BuildLlamaCppCommand, DownloadLlamaCppCommand, ClearLlamaCppBuildCommand };
|
|
5
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAC,oBAAoB,EAAE,uBAAuB,EAAE,yBAAyB,EAAC,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const llamaDirectory: string;
|
|
2
|
+
export declare const llamaBinsDirectory: string;
|
|
3
|
+
export declare const llamaCppDirectory: string;
|
|
4
|
+
export declare const tempDownloadDirectory: string;
|
|
5
|
+
export declare const usedBinFlagJsonPath: string;
|
|
6
|
+
export declare const defaultLlamaCppGitHubRepo: string;
|
|
7
|
+
export declare const defaultLlamaCppRelease: string;
|
|
8
|
+
export declare const defaultSkipDownload: boolean;
|
|
9
|
+
export declare const defaultChatSystemPrompt: string;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { fileURLToPath } from "url";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import * as os from "os";
|
|
4
|
+
import envVar from "env-var";
|
|
5
|
+
import * as uuid from "uuid";
|
|
6
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const env = envVar.from(process.env);
|
|
8
|
+
export const llamaDirectory = path.join(__dirname, "..", "llama");
|
|
9
|
+
export const llamaBinsDirectory = path.join(__dirname, "..", "llamaBins");
|
|
10
|
+
export const llamaCppDirectory = path.join(llamaDirectory, "llama.cpp");
|
|
11
|
+
export const tempDownloadDirectory = path.join(os.tmpdir(), "node-llama-cpp", uuid.v4());
|
|
12
|
+
export const usedBinFlagJsonPath = path.join(llamaDirectory, "usedBin.json");
|
|
13
|
+
export const defaultLlamaCppGitHubRepo = env.get("NODE_LLAMA_CPP_REPO")
|
|
14
|
+
.default("ggerganov/llama.cpp")
|
|
15
|
+
.asString();
|
|
16
|
+
export const defaultLlamaCppRelease = env.get("NODE_LLAMA_CPP_REPO_RELEASE")
|
|
17
|
+
.default("latest")
|
|
18
|
+
.asString();
|
|
19
|
+
export const defaultSkipDownload = env.get("NODE_LLAMA_CPP_SKIP_DOWNLOAD")
|
|
20
|
+
.default("false")
|
|
21
|
+
.asBool();
|
|
22
|
+
export const defaultChatSystemPrompt = "You are a helpful, respectful and honest assistant. Always answer as helpfully as possible.\n" +
|
|
23
|
+
"If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. " +
|
|
24
|
+
"If you don't know the answer to a question, please don't share false information.";
|
|
25
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAGrC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC;KAClE,OAAO,CAAC,qBAAqB,CAAC;KAC9B,QAAQ,EAAE,CAAC;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC;KACvE,OAAO,CAAC,QAAQ,CAAC;KACjB,QAAQ,EAAE,CAAC;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC,GAAG,CAAC,8BAA8B,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,EAAE,CAAC;AACd,MAAM,CAAC,MAAM,uBAAuB,GAAG,+FAA+F;IAClI,+HAA+H;IAC/H,mFAAmF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LlamaChatSession } from "./LlamaChatSession.js";
|
|
2
|
+
import { LlamaModel } from "./LlamaModel.js";
|
|
3
|
+
import { AbortError } from "./AbortError.js";
|
|
4
|
+
import { ChatPromptWrapper } from "./ChatPromptWrapper.js";
|
|
5
|
+
import { EmptyChatPromptWrapper } from "./chatWrappers/EmptyChatPromptWrapper.js";
|
|
6
|
+
import { LlamaChatPromptWrapper } from "./chatWrappers/LlamaChatPromptWrapper.js";
|
|
7
|
+
export { LlamaModel, LlamaChatSession, AbortError, ChatPromptWrapper, EmptyChatPromptWrapper, LlamaChatPromptWrapper };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LlamaChatSession } from "./LlamaChatSession.js";
|
|
2
|
+
import { LlamaModel } from "./LlamaModel.js";
|
|
3
|
+
import { AbortError } from "./AbortError.js";
|
|
4
|
+
import { ChatPromptWrapper } from "./ChatPromptWrapper.js";
|
|
5
|
+
import { EmptyChatPromptWrapper } from "./chatWrappers/EmptyChatPromptWrapper.js";
|
|
6
|
+
import { LlamaChatPromptWrapper } from "./chatWrappers/LlamaChatPromptWrapper.js";
|
|
7
|
+
export { LlamaModel, LlamaChatSession, AbortError, ChatPromptWrapper, EmptyChatPromptWrapper, LlamaChatPromptWrapper };
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,sBAAsB,EAAC,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAC,sBAAsB,EAAC,MAAM,0CAA0C,CAAC;AAEhF,OAAO,EACH,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function clearLlamaBuild(): Promise<void>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import * as fs from "fs-extra";
|
|
3
|
+
import { llamaDirectory } from "../config.js";
|
|
4
|
+
import { clearTempFolder } from "./clearTempFolder.js";
|
|
5
|
+
export async function clearLlamaBuild() {
|
|
6
|
+
await fs.remove(path.join(llamaDirectory, "Debug"));
|
|
7
|
+
await fs.remove(path.join(llamaDirectory, "Release"));
|
|
8
|
+
await fs.remove(path.join(llamaDirectory, "compile_commands.json"));
|
|
9
|
+
await fs.remove(path.join(llamaDirectory, "build"));
|
|
10
|
+
await clearTempFolder();
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=clearLlamaBuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearLlamaBuild.js","sourceRoot":"","sources":["../../src/utils/clearLlamaBuild.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACpE,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpD,MAAM,eAAe,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function clearTempFolder(): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import process from "process";
|
|
2
|
+
import * as fs from "fs-extra";
|
|
3
|
+
import { tempDownloadDirectory } from "../config.js";
|
|
4
|
+
export async function clearTempFolder() {
|
|
5
|
+
if (process.platform === "win32") {
|
|
6
|
+
try {
|
|
7
|
+
await fs.remove(tempDownloadDirectory);
|
|
8
|
+
}
|
|
9
|
+
catch (err) {
|
|
10
|
+
// do nothing as it fails sometime on Windows, and since it's a temp folder, it's not a big deal
|
|
11
|
+
}
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
await fs.remove(tempDownloadDirectory);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=clearTempFolder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearTempFolder.js","sourceRoot":"","sources":["../../src/utils/clearTempFolder.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAC9B,IAAI;YACA,MAAM,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;SAC1C;QAAC,OAAO,GAAG,EAAE;YACV,gGAAgG;SACnG;QAED,OAAO;KACV;IAED,MAAM,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
import process from "process";
|
|
4
|
+
import fs from "fs-extra";
|
|
5
|
+
import { llamaCppDirectory, llamaDirectory } from "../config.js";
|
|
6
|
+
import { clearLlamaBuild } from "./clearLlamaBuild.js";
|
|
7
|
+
import { setUsedBinFlag } from "./usedBinFlag.js";
|
|
8
|
+
import { spawnCommand } from "./spawnCommand.js";
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
export async function compileLlamaCpp({ arch = process.arch, nodeTarget = process.version, setUsedBingFlag = true }) {
|
|
11
|
+
try {
|
|
12
|
+
if (!(await fs.exists(llamaCppDirectory))) {
|
|
13
|
+
throw new Error(`"${llamaCppDirectory}" directory does not exist`);
|
|
14
|
+
}
|
|
15
|
+
await clearLlamaBuild();
|
|
16
|
+
await spawnCommand("npm", ["run", "-s", "node-gyp-llama", "--", "configure", "--arch=" + arch, "--target=" + nodeTarget], __dirname);
|
|
17
|
+
await spawnCommand("npm", ["run", "-s", "node-gyp-llama", "--", "configure", "--arch=" + arch, "--target=" + nodeTarget, "--", "-f", "compile_commands_json"], __dirname);
|
|
18
|
+
if (await fs.exists(path.join(llamaDirectory, "Release", "compile_commands.json"))) {
|
|
19
|
+
await fs.move(path.join(llamaDirectory, "Release", "compile_commands.json"), path.join(llamaDirectory, "compile_commands.json"));
|
|
20
|
+
}
|
|
21
|
+
else if (await fs.exists(path.join(llamaDirectory, "Debug", "compile_commands.json"))) {
|
|
22
|
+
await fs.move(path.join(llamaDirectory, "Debug", "compile_commands.json"), path.join(llamaDirectory, "compile_commands.json"));
|
|
23
|
+
}
|
|
24
|
+
await fs.remove(path.join(llamaDirectory, "Release"));
|
|
25
|
+
await fs.remove(path.join(llamaDirectory, "Debug"));
|
|
26
|
+
await spawnCommand("npm", ["run", "-s", "node-gyp-llama-build", "--", "--arch=" + arch, "--target=" + nodeTarget], __dirname);
|
|
27
|
+
if (setUsedBingFlag) {
|
|
28
|
+
await setUsedBinFlag("localBuildFromSource");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
if (setUsedBingFlag)
|
|
33
|
+
await setUsedBinFlag("prebuildBinaries");
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function getCompiledLlamaCppBinaryPath() {
|
|
38
|
+
const modulePath = path.join(__dirname, "..", "..", "llama", "build", "Release", "llama.node");
|
|
39
|
+
if (await fs.exists(modulePath))
|
|
40
|
+
return modulePath;
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=compileLLamaCpp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compileLLamaCpp.js","sourceRoot":"","sources":["../../src/utils/compileLLamaCpp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function getPrebuildBinPath(): Promise<string | null>;
|
|
2
|
+
export declare function loadBin(): Promise<LlamaCppNodeModule>;
|
|
3
|
+
export type LlamaCppNodeModule = {
|
|
4
|
+
LLAMAModel: LLAMAModel;
|
|
5
|
+
LLAMAContext: LLAMAContext;
|
|
6
|
+
tokenBos(): number;
|
|
7
|
+
systemInfo(): string;
|
|
8
|
+
tokenEos(): number;
|
|
9
|
+
};
|
|
10
|
+
export type LLAMAModel = {
|
|
11
|
+
new (modelPath: string): LLAMAModel;
|
|
12
|
+
};
|
|
13
|
+
export type LLAMAContext = {
|
|
14
|
+
new (model: LLAMAModel): LLAMAContext;
|
|
15
|
+
encode(text: string): Uint32Array;
|
|
16
|
+
eval(tokens: Uint32Array, restrictions?: Uint32Array): Promise<number>;
|
|
17
|
+
decode(tokens: Uint32Array): string;
|
|
18
|
+
};
|