node-llama-cpp 1.1.1 → 1.2.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 +10 -8
- package/dist/AbortError.d.ts +0 -1
- package/dist/AbortError.js +1 -0
- package/dist/AbortError.js.map +1 -1
- package/dist/chatWrappers/GeneralChatPromptWrapper.d.ts +8 -0
- package/dist/chatWrappers/GeneralChatPromptWrapper.js +11 -0
- package/dist/chatWrappers/GeneralChatPromptWrapper.js.map +1 -0
- package/dist/cli/commands/ChatCommand.d.ts +1 -0
- package/dist/cli/commands/ChatCommand.js +25 -8
- package/dist/cli/commands/ChatCommand.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/llamaEvaluator/LlamaBins.d.ts +4 -0
- package/dist/llamaEvaluator/LlamaBins.js +5 -0
- package/dist/llamaEvaluator/LlamaBins.js.map +1 -0
- package/dist/{LlamaChatSession.d.ts → llamaEvaluator/LlamaChatSession.d.ts} +8 -7
- package/dist/llamaEvaluator/LlamaChatSession.js +97 -0
- package/dist/llamaEvaluator/LlamaChatSession.js.map +1 -0
- package/dist/{LlamaModel.d.ts → llamaEvaluator/LlamaContext.d.ts} +1 -7
- package/dist/{LlamaModel.js → llamaEvaluator/LlamaContext.js} +9 -15
- package/dist/llamaEvaluator/LlamaContext.js.map +1 -0
- package/dist/llamaEvaluator/LlamaModel.d.ts +11 -0
- package/dist/llamaEvaluator/LlamaModel.js +20 -0
- package/dist/llamaEvaluator/LlamaModel.js.map +1 -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 +1 -1
- package/dist/LlamaChatSession.js +0 -86
- package/dist/LlamaChatSession.js.map +0 -1
- package/dist/LlamaModel.js.map +0 -1
package/README.md
CHANGED
|
@@ -29,8 +29,8 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
29
29
|
|
|
30
30
|
const model = new LlamaModel({
|
|
31
31
|
modelPath: path.join(__dirname, "models", "vicuna-13b-v1.5-16k.ggmlv3.q5_1.bin")
|
|
32
|
-
})
|
|
33
|
-
const session = new LlamaChatSession({model});
|
|
32
|
+
});
|
|
33
|
+
const session = new LlamaChatSession({context: model.createContext()});
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
const q1 = "Hi there, how are you?";
|
|
@@ -73,7 +73,7 @@ const model = new LlamaModel({
|
|
|
73
73
|
modelPath: path.join(__dirname, "models", "vicuna-13b-v1.5-16k.ggmlv3.q5_1.bin"),
|
|
74
74
|
promptWrapper: new MyCustomChatPromptWrapper() // by default, LlamaChatPromptWrapper is used
|
|
75
75
|
})
|
|
76
|
-
const session = new LlamaChatSession({model});
|
|
76
|
+
const session = new LlamaChatSession({context: model.createContext()});
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
const q1 = "Hi there, how are you?";
|
|
@@ -98,29 +98,31 @@ import {LlamaModel, LlamaChatSession} from "node-llama-cpp";
|
|
|
98
98
|
|
|
99
99
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
100
100
|
|
|
101
|
-
const model = new
|
|
101
|
+
const model = new LlamaModel({
|
|
102
102
|
modelPath: path.join(__dirname, "models", "vicuna-13b-v1.5-16k.ggmlv3.q5_1.bin")
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
+
const context = model.createContext();
|
|
106
|
+
|
|
105
107
|
const q1 = "Hi there, how are you?";
|
|
106
108
|
console.log("AI: " + q1);
|
|
107
109
|
|
|
108
|
-
const tokens =
|
|
110
|
+
const tokens = context.encode(q1);
|
|
109
111
|
const res: number[] = [];
|
|
110
|
-
for await (const chunk of
|
|
112
|
+
for await (const chunk of context.evaluate(tokens)) {
|
|
111
113
|
res.push(chunk);
|
|
112
114
|
|
|
113
115
|
// it's important to not concatinate the results as strings,
|
|
114
116
|
// as doing so will break some characters (like some emojis) that are made of multiple tokens.
|
|
115
117
|
// by using an array of tokens, we can decode them correctly together.
|
|
116
|
-
const resString: string =
|
|
118
|
+
const resString: string = context.decode(Uint32Array.from(res));
|
|
117
119
|
|
|
118
120
|
const lastPart = resString.split("ASSISTANT:").reverse()[0];
|
|
119
121
|
if (lastPart.includes("USER:"))
|
|
120
122
|
break;
|
|
121
123
|
}
|
|
122
124
|
|
|
123
|
-
const a1 =
|
|
125
|
+
const a1 = context.decode(Uint32Array.from(res)).split("USER:")[0];
|
|
124
126
|
console.log("AI: " + a1);
|
|
125
127
|
```
|
|
126
128
|
|
package/dist/AbortError.d.ts
CHANGED
package/dist/AbortError.js
CHANGED
package/dist/AbortError.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbortError.js","sourceRoot":"","sources":["../src/AbortError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACjC;QACI,KAAK,CAAC,YAAY,CAAC,CAAC;IACxB,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"AbortError.js","sourceRoot":"","sources":["../src/AbortError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACjC,gBAAgB;IAChB;QACI,KAAK,CAAC,YAAY,CAAC,CAAC;IACxB,CAAC;CACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChatPromptWrapper } from "../ChatPromptWrapper.js";
|
|
2
|
+
export declare class GeneralChatPromptWrapper extends ChatPromptWrapper {
|
|
3
|
+
wrapPrompt(prompt: string, { systemPrompt, promptIndex }: {
|
|
4
|
+
systemPrompt: string;
|
|
5
|
+
promptIndex: number;
|
|
6
|
+
}): string;
|
|
7
|
+
getStopStrings(): string[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChatPromptWrapper } from "../ChatPromptWrapper.js";
|
|
2
|
+
export class GeneralChatPromptWrapper extends ChatPromptWrapper {
|
|
3
|
+
wrapPrompt(prompt, { systemPrompt, promptIndex }) {
|
|
4
|
+
const conversationPrompt = "\n\n### Human:\n\n" + prompt + "\n\n### Assistant:\n\n";
|
|
5
|
+
return promptIndex === 0 ? systemPrompt + conversationPrompt : conversationPrompt;
|
|
6
|
+
}
|
|
7
|
+
getStopStrings() {
|
|
8
|
+
return ["### Human:", "Human:", "### Assistant:", "Assistant:", "<end>"];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=GeneralChatPromptWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeneralChatPromptWrapper.js","sourceRoot":"","sources":["../../src/chatWrappers/GeneralChatPromptWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,wBAAyB,SAAQ,iBAAiB;IAC3C,UAAU,CAAC,MAAc,EAAE,EAAC,YAAY,EAAE,WAAW,EAAgD;QACjH,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,MAAM,GAAG,wBAAwB,CAAC;QAEpF,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACtF,CAAC;IAEe,cAAc;QAC1B,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;CACJ"}
|
|
@@ -4,6 +4,7 @@ import chalk from "chalk";
|
|
|
4
4
|
import withOra from "../../utils/withOra.js";
|
|
5
5
|
import { defaultChatSystemPrompt } from "../../config.js";
|
|
6
6
|
import { LlamaChatPromptWrapper } from "../../chatWrappers/LlamaChatPromptWrapper.js";
|
|
7
|
+
import { GeneralChatPromptWrapper } from "../../chatWrappers/GeneralChatPromptWrapper.js";
|
|
7
8
|
export const ChatCommand = {
|
|
8
9
|
command: "chat",
|
|
9
10
|
describe: "Chat with a LLama model",
|
|
@@ -28,11 +29,18 @@ export const ChatCommand = {
|
|
|
28
29
|
description: "System prompt to use against the model. " +
|
|
29
30
|
"[default value: " + defaultChatSystemPrompt.split("\n").join(" ") + "]",
|
|
30
31
|
group: "Optional:"
|
|
32
|
+
})
|
|
33
|
+
.option("wrapper", {
|
|
34
|
+
type: "string",
|
|
35
|
+
default: "general",
|
|
36
|
+
choices: ["general", "llama"],
|
|
37
|
+
description: "Chat wrapper to use",
|
|
38
|
+
group: "Optional:"
|
|
31
39
|
});
|
|
32
40
|
},
|
|
33
|
-
async handler({ model, systemInfo, systemPrompt }) {
|
|
41
|
+
async handler({ model, systemInfo, systemPrompt, wrapper }) {
|
|
34
42
|
try {
|
|
35
|
-
await RunChat({ model, systemInfo, systemPrompt });
|
|
43
|
+
await RunChat({ model, systemInfo, systemPrompt, wrapper });
|
|
36
44
|
}
|
|
37
45
|
catch (err) {
|
|
38
46
|
console.error(err);
|
|
@@ -40,17 +48,17 @@ export const ChatCommand = {
|
|
|
40
48
|
}
|
|
41
49
|
}
|
|
42
50
|
};
|
|
43
|
-
async function RunChat({ model: modelArg, systemInfo, systemPrompt }) {
|
|
44
|
-
const { LlamaChatSession } = await import("../../LlamaChatSession.js");
|
|
45
|
-
const { LlamaModel } = await import("../../LlamaModel.js");
|
|
51
|
+
async function RunChat({ model: modelArg, systemInfo, systemPrompt, wrapper }) {
|
|
52
|
+
const { LlamaChatSession } = await import("../../llamaEvaluator/LlamaChatSession.js");
|
|
53
|
+
const { LlamaModel } = await import("../../llamaEvaluator/LlamaModel.js");
|
|
46
54
|
const model = new LlamaModel({
|
|
47
55
|
modelPath: modelArg
|
|
48
56
|
});
|
|
49
57
|
const session = new LlamaChatSession({
|
|
50
|
-
model,
|
|
58
|
+
context: model.createContext(),
|
|
51
59
|
printLLamaSystemInfo: systemInfo,
|
|
52
60
|
systemPrompt,
|
|
53
|
-
promptWrapper:
|
|
61
|
+
promptWrapper: createChatWrapper(wrapper)
|
|
54
62
|
});
|
|
55
63
|
await withOra({
|
|
56
64
|
loading: chalk.blue("Loading model"),
|
|
@@ -74,10 +82,19 @@ async function RunChat({ model: modelArg, systemInfo, systemPrompt }) {
|
|
|
74
82
|
const [startColor, endColor] = chalk.blue("MIDDLE").split("MIDDLE");
|
|
75
83
|
process.stdout.write(startColor);
|
|
76
84
|
await session.prompt(input, (chunk) => {
|
|
77
|
-
process.stdout.write(
|
|
85
|
+
process.stdout.write(session.context.decode(Uint32Array.from(chunk)));
|
|
78
86
|
});
|
|
79
87
|
process.stdout.write(endColor);
|
|
80
88
|
console.log();
|
|
81
89
|
}
|
|
82
90
|
}
|
|
91
|
+
function createChatWrapper(wrapper) {
|
|
92
|
+
switch (wrapper) {
|
|
93
|
+
case "general":
|
|
94
|
+
return new GeneralChatPromptWrapper();
|
|
95
|
+
case "llama":
|
|
96
|
+
return new LlamaChatPromptWrapper();
|
|
97
|
+
}
|
|
98
|
+
throw new Error("Unknown wrapper: " + wrapper);
|
|
99
|
+
}
|
|
83
100
|
//# sourceMappingURL=ChatCommand.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ChatCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAC,uBAAuB,EAAC,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAC,sBAAsB,EAAC,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ChatCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { LlamaChatSession } from "./LlamaChatSession.js";
|
|
2
|
-
import { LlamaModel } from "./LlamaModel.js";
|
|
1
|
+
import { LlamaChatSession } from "./llamaEvaluator/LlamaChatSession.js";
|
|
2
|
+
import { LlamaModel } from "./llamaEvaluator/LlamaModel.js";
|
|
3
3
|
import { AbortError } from "./AbortError.js";
|
|
4
4
|
import { ChatPromptWrapper } from "./ChatPromptWrapper.js";
|
|
5
5
|
import { EmptyChatPromptWrapper } from "./chatWrappers/EmptyChatPromptWrapper.js";
|
|
6
6
|
import { LlamaChatPromptWrapper } from "./chatWrappers/LlamaChatPromptWrapper.js";
|
|
7
|
-
|
|
7
|
+
import { GeneralChatPromptWrapper } from "./chatWrappers/GeneralChatPromptWrapper.js";
|
|
8
|
+
import { LlamaContext } from "./llamaEvaluator/LlamaContext.js";
|
|
9
|
+
export { LlamaModel, LlamaContext, LlamaChatSession, AbortError, ChatPromptWrapper, EmptyChatPromptWrapper, LlamaChatPromptWrapper, GeneralChatPromptWrapper };
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { LlamaChatSession } from "./LlamaChatSession.js";
|
|
2
|
-
import { LlamaModel } from "./LlamaModel.js";
|
|
1
|
+
import { LlamaChatSession } from "./llamaEvaluator/LlamaChatSession.js";
|
|
2
|
+
import { LlamaModel } from "./llamaEvaluator/LlamaModel.js";
|
|
3
3
|
import { AbortError } from "./AbortError.js";
|
|
4
4
|
import { ChatPromptWrapper } from "./ChatPromptWrapper.js";
|
|
5
5
|
import { EmptyChatPromptWrapper } from "./chatWrappers/EmptyChatPromptWrapper.js";
|
|
6
6
|
import { LlamaChatPromptWrapper } from "./chatWrappers/LlamaChatPromptWrapper.js";
|
|
7
|
-
|
|
7
|
+
import { GeneralChatPromptWrapper } from "./chatWrappers/GeneralChatPromptWrapper.js";
|
|
8
|
+
import { LlamaContext } from "./llamaEvaluator/LlamaContext.js";
|
|
9
|
+
export { LlamaModel, LlamaContext, LlamaChatSession, AbortError, ChatPromptWrapper, EmptyChatPromptWrapper, LlamaChatPromptWrapper, GeneralChatPromptWrapper };
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAC,UAAU,EAAC,MAAM,gCAAgC,CAAC;AAC1D,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;AAChF,OAAO,EAAC,wBAAwB,EAAC,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAC,YAAY,EAAC,MAAM,kCAAkC,CAAC;AAG9D,OAAO,EACH,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlamaBins.js","sourceRoot":"","sources":["../../src/llamaEvaluator/LlamaBins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAqC,MAAM,oBAAoB,CAAC;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,OAAO,EAAE,CAAC;AAC5C,MAAM,EAAC,UAAU,EAAE,YAAY,EAAC,GAAG,YAAY,CAAC;AAEhD,OAAO,EAAC,UAAU,EAAE,YAAY,EAAC,CAAC"}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ChatPromptWrapper } from "../ChatPromptWrapper.js";
|
|
3
|
+
import { LlamaContext } from "./LlamaContext.js";
|
|
4
4
|
export declare class LlamaChatSession {
|
|
5
|
-
private readonly _model;
|
|
6
5
|
private readonly _systemPrompt;
|
|
7
6
|
private readonly _printLLamaSystemInfo;
|
|
8
7
|
private readonly _promptWrapper;
|
|
9
8
|
private _promptIndex;
|
|
10
9
|
private _initialized;
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
private readonly _ctx;
|
|
11
|
+
constructor({ context, printLLamaSystemInfo, promptWrapper, systemPrompt }: {
|
|
12
|
+
context: LlamaContext;
|
|
13
13
|
printLLamaSystemInfo?: boolean;
|
|
14
14
|
promptWrapper?: ChatPromptWrapper;
|
|
15
15
|
systemPrompt?: string;
|
|
16
16
|
});
|
|
17
17
|
get initialized(): boolean;
|
|
18
|
-
get
|
|
18
|
+
get context(): LlamaContext;
|
|
19
19
|
init(): Promise<void>;
|
|
20
|
-
prompt(prompt: string, onToken?: (
|
|
20
|
+
prompt(prompt: string, onToken?: (tokens: number[]) => void, { signal }?: {
|
|
21
21
|
signal?: AbortSignal;
|
|
22
22
|
}): Promise<string>;
|
|
23
23
|
private _evalTokens;
|
|
24
|
+
private _checkStopString;
|
|
24
25
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { defaultChatSystemPrompt } from "../config.js";
|
|
2
|
+
import { withLock } from "../utils/withLock.js";
|
|
3
|
+
import { AbortError } from "../AbortError.js";
|
|
4
|
+
import { GeneralChatPromptWrapper } from "../chatWrappers/GeneralChatPromptWrapper.js";
|
|
5
|
+
import { LlamaModel } from "./LlamaModel.js";
|
|
6
|
+
const UNKNOWN_UNICODE_CHAR = "�";
|
|
7
|
+
export class LlamaChatSession {
|
|
8
|
+
_systemPrompt;
|
|
9
|
+
_printLLamaSystemInfo;
|
|
10
|
+
_promptWrapper;
|
|
11
|
+
_promptIndex = 0;
|
|
12
|
+
_initialized = false;
|
|
13
|
+
_ctx;
|
|
14
|
+
constructor({ context, printLLamaSystemInfo = false, promptWrapper = new GeneralChatPromptWrapper(), systemPrompt = defaultChatSystemPrompt }) {
|
|
15
|
+
this._ctx = context;
|
|
16
|
+
this._printLLamaSystemInfo = printLLamaSystemInfo;
|
|
17
|
+
this._promptWrapper = promptWrapper;
|
|
18
|
+
this._systemPrompt = systemPrompt;
|
|
19
|
+
}
|
|
20
|
+
get initialized() {
|
|
21
|
+
return this._initialized;
|
|
22
|
+
}
|
|
23
|
+
get context() {
|
|
24
|
+
return this._ctx;
|
|
25
|
+
}
|
|
26
|
+
async init() {
|
|
27
|
+
await withLock(this, "init", async () => {
|
|
28
|
+
if (this._initialized)
|
|
29
|
+
return;
|
|
30
|
+
if (this._printLLamaSystemInfo)
|
|
31
|
+
console.log("Llama system info", LlamaModel.systemInfo);
|
|
32
|
+
this._initialized = true;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async prompt(prompt, onToken, { signal } = {}) {
|
|
36
|
+
if (!this.initialized)
|
|
37
|
+
await this.init();
|
|
38
|
+
return await withLock(this, "prompt", async () => {
|
|
39
|
+
const promptText = this._promptWrapper.wrapPrompt(prompt, { systemPrompt: this._systemPrompt, promptIndex: this._promptIndex });
|
|
40
|
+
this._promptIndex++;
|
|
41
|
+
return await this._evalTokens(this._ctx.encode(promptText), onToken, { signal });
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async _evalTokens(tokens, onToken, { signal } = {}) {
|
|
45
|
+
const decodeTokens = (tokens) => this._ctx.decode(Uint32Array.from(tokens));
|
|
46
|
+
const stopStrings = this._promptWrapper.getStopStrings();
|
|
47
|
+
const stopStringIndexes = Array(stopStrings.length).fill(0);
|
|
48
|
+
const skippedChunksQueue = [];
|
|
49
|
+
const res = [];
|
|
50
|
+
for await (const chunk of this._ctx.evaluate(tokens)) {
|
|
51
|
+
if (signal?.aborted)
|
|
52
|
+
throw new AbortError();
|
|
53
|
+
const tokenStr = decodeTokens([chunk]);
|
|
54
|
+
const { shouldReturn, skipTokenEvent } = this._checkStopString(tokenStr, stopStringIndexes);
|
|
55
|
+
if (shouldReturn)
|
|
56
|
+
return decodeTokens(res);
|
|
57
|
+
// if the token is unknown, it means it's not complete character
|
|
58
|
+
if (tokenStr === UNKNOWN_UNICODE_CHAR || skipTokenEvent) {
|
|
59
|
+
skippedChunksQueue.push(chunk);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (skippedChunksQueue.length > 0) {
|
|
63
|
+
res.push(...skippedChunksQueue);
|
|
64
|
+
onToken?.(skippedChunksQueue);
|
|
65
|
+
skippedChunksQueue.length = 0;
|
|
66
|
+
}
|
|
67
|
+
res.push(chunk);
|
|
68
|
+
onToken?.([chunk]);
|
|
69
|
+
}
|
|
70
|
+
return decodeTokens(res);
|
|
71
|
+
}
|
|
72
|
+
_checkStopString(tokenStr, stopStringIndexes) {
|
|
73
|
+
const stopStrings = this._promptWrapper.getStopStrings();
|
|
74
|
+
let skipTokenEvent = false;
|
|
75
|
+
for (let stopStringIndex = 0; stopStringIndex < stopStrings.length; stopStringIndex++) {
|
|
76
|
+
const stopString = stopStrings[stopStringIndex];
|
|
77
|
+
let localShouldSkipTokenEvent = false;
|
|
78
|
+
for (let i = 0; i < tokenStr.length && stopStringIndexes[stopStringIndex] !== stopString.length; i++) {
|
|
79
|
+
if (tokenStr[i] === stopString[stopStringIndexes[stopStringIndex]]) {
|
|
80
|
+
stopStringIndexes[stopStringIndex]++;
|
|
81
|
+
localShouldSkipTokenEvent = true;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
stopStringIndexes[stopStringIndex] = 0;
|
|
85
|
+
localShouldSkipTokenEvent = false;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (stopStringIndexes[stopStringIndex] === stopString.length) {
|
|
90
|
+
return { shouldReturn: true };
|
|
91
|
+
}
|
|
92
|
+
skipTokenEvent ||= localShouldSkipTokenEvent;
|
|
93
|
+
}
|
|
94
|
+
return { skipTokenEvent };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=LlamaChatSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlamaChatSession.js","sourceRoot":"","sources":["../../src/llamaEvaluator/LlamaChatSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
export declare class
|
|
2
|
-
private readonly _model;
|
|
1
|
+
export declare class LlamaContext {
|
|
3
2
|
private readonly _ctx;
|
|
4
3
|
private _prependBos;
|
|
5
|
-
constructor({ modelPath, prependBos }: {
|
|
6
|
-
modelPath: string;
|
|
7
|
-
prependBos?: boolean;
|
|
8
|
-
});
|
|
9
|
-
get systemInfo(): string;
|
|
10
4
|
encode(text: string): Uint32Array;
|
|
11
5
|
decode(tokens: Uint32Array): string;
|
|
12
6
|
evaluate(tokens: Uint32Array, getRestrictions?: () => Uint32Array): AsyncGenerator<number, void, unknown>;
|
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const { LLAMAModel, LLAMAContext } = llamaCppNode;
|
|
4
|
-
export class LlamaModel {
|
|
5
|
-
_model;
|
|
1
|
+
import { llamaCppNode } from "./LlamaBins.js";
|
|
2
|
+
export class LlamaContext {
|
|
6
3
|
_ctx;
|
|
7
4
|
_prependBos;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this._ctx =
|
|
5
|
+
/** @internal */
|
|
6
|
+
constructor({ ctx, prependBos }) {
|
|
7
|
+
this._ctx = ctx;
|
|
11
8
|
this._prependBos = prependBos;
|
|
12
9
|
}
|
|
13
|
-
get systemInfo() {
|
|
14
|
-
return llamaCppNode.systemInfo();
|
|
15
|
-
}
|
|
16
10
|
encode(text) {
|
|
17
11
|
return this._ctx.encode(text);
|
|
18
12
|
}
|
|
@@ -22,9 +16,9 @@ export class LlamaModel {
|
|
|
22
16
|
async *evaluate(tokens, getRestrictions) {
|
|
23
17
|
let evalTokens = tokens;
|
|
24
18
|
if (this._prependBos) {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
evalTokens = Uint32Array.from(
|
|
19
|
+
const tokenArray = Array.from(tokens);
|
|
20
|
+
tokenArray.unshift(llamaCppNode.tokenBos());
|
|
21
|
+
evalTokens = Uint32Array.from(tokenArray);
|
|
28
22
|
this._prependBos = false;
|
|
29
23
|
}
|
|
30
24
|
// eslint-disable-next-line no-constant-condition
|
|
@@ -40,4 +34,4 @@ export class LlamaModel {
|
|
|
40
34
|
}
|
|
41
35
|
}
|
|
42
36
|
}
|
|
43
|
-
//# sourceMappingURL=
|
|
37
|
+
//# sourceMappingURL=LlamaContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlamaContext.js","sourceRoot":"","sources":["../../src/llamaEvaluator/LlamaContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAG1D,MAAM,OAAO,YAAY;IACJ,IAAI,CAAe;IAC5B,WAAW,CAAU;IAE7B,gBAAgB;IAChB,YAAoB,EAAC,GAAG,EAAE,UAAU,EAAoC;QACpE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,MAAmB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAmB,EAAE,eAAmC;QAC3E,IAAI,UAAU,GAAG,MAAM,CAAC;QAExB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE5C,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC5B;QAED,iDAAiD;QACjD,OAAO,IAAI,EAAE;YACT,kCAAkC;YAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YAExE,mCAAmC;YACnC,IAAI,SAAS,KAAK,YAAY,CAAC,QAAQ,EAAE;gBACrC,MAAM;YAEV,MAAM,SAAS,CAAC;YAEhB,mCAAmC;YACnC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;SAC9C;IACL,CAAC;CAEJ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LlamaContext } from "./LlamaContext.js";
|
|
2
|
+
export declare class LlamaModel {
|
|
3
|
+
private readonly _model;
|
|
4
|
+
private readonly _prependBos;
|
|
5
|
+
constructor({ modelPath, prependBos }: {
|
|
6
|
+
modelPath: string;
|
|
7
|
+
prependBos?: boolean;
|
|
8
|
+
});
|
|
9
|
+
createContext(): LlamaContext;
|
|
10
|
+
static get systemInfo(): string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LlamaContext } from "./LlamaContext.js";
|
|
2
|
+
import { LLAMAContext, llamaCppNode, LLAMAModel } from "./LlamaBins.js";
|
|
3
|
+
export class LlamaModel {
|
|
4
|
+
_model;
|
|
5
|
+
_prependBos;
|
|
6
|
+
constructor({ modelPath, prependBos = true }) {
|
|
7
|
+
this._model = new LLAMAModel(modelPath);
|
|
8
|
+
this._prependBos = prependBos;
|
|
9
|
+
}
|
|
10
|
+
createContext() {
|
|
11
|
+
return new LlamaContext({
|
|
12
|
+
ctx: new LLAMAContext(this._model),
|
|
13
|
+
prependBos: this._prependBos
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
static get systemInfo() {
|
|
17
|
+
return llamaCppNode.systemInfo();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=LlamaModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlamaModel.js","sourceRoot":"","sources":["../../src/llamaEvaluator/LlamaModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAGtE,MAAM,OAAO,UAAU;IACF,MAAM,CAAa;IACnB,WAAW,CAAU;IAEtC,YAAmB,EAAC,SAAS,EAAE,UAAU,GAAG,IAAI,EAA8C;QAC1F,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,YAAY,CAAC;YACpB,GAAG,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC,UAAU,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,KAAK,UAAU;QACxB,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;CACJ"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
package/dist/LlamaChatSession.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { defaultChatSystemPrompt } from "./config.js";
|
|
2
|
-
import { withLock } from "./utils/withLock.js";
|
|
3
|
-
import { LlamaChatPromptWrapper } from "./chatWrappers/LlamaChatPromptWrapper.js";
|
|
4
|
-
import { AbortError } from "./AbortError.js";
|
|
5
|
-
export class LlamaChatSession {
|
|
6
|
-
_model;
|
|
7
|
-
_systemPrompt;
|
|
8
|
-
_printLLamaSystemInfo;
|
|
9
|
-
_promptWrapper;
|
|
10
|
-
_promptIndex = 0;
|
|
11
|
-
_initialized = false;
|
|
12
|
-
constructor({ model, printLLamaSystemInfo = false, promptWrapper = new LlamaChatPromptWrapper(), systemPrompt = defaultChatSystemPrompt }) {
|
|
13
|
-
this._model = model;
|
|
14
|
-
this._printLLamaSystemInfo = printLLamaSystemInfo;
|
|
15
|
-
this._promptWrapper = promptWrapper;
|
|
16
|
-
this._systemPrompt = systemPrompt;
|
|
17
|
-
}
|
|
18
|
-
get initialized() {
|
|
19
|
-
return this._initialized;
|
|
20
|
-
}
|
|
21
|
-
get model() {
|
|
22
|
-
return this._model;
|
|
23
|
-
}
|
|
24
|
-
async init() {
|
|
25
|
-
await withLock(this, "init", async () => {
|
|
26
|
-
if (this._initialized)
|
|
27
|
-
return;
|
|
28
|
-
if (this._printLLamaSystemInfo)
|
|
29
|
-
console.log("Llama system info", this._model.systemInfo);
|
|
30
|
-
this._initialized = true;
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
async prompt(prompt, onToken, { signal } = {}) {
|
|
34
|
-
if (!this.initialized)
|
|
35
|
-
await this.init();
|
|
36
|
-
return await withLock(this, "prompt", async () => {
|
|
37
|
-
const promptText = this._promptWrapper.wrapPrompt(prompt, { systemPrompt: this._systemPrompt, promptIndex: this._promptIndex });
|
|
38
|
-
this._promptIndex++;
|
|
39
|
-
return await this._evalTokens(this._model.encode(promptText), onToken, { signal });
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
async _evalTokens(tokens, onToken, { signal } = {}) {
|
|
43
|
-
const stopStrings = this._promptWrapper.getStopStrings();
|
|
44
|
-
const stopStringIndexes = Array(stopStrings.length).fill(0);
|
|
45
|
-
const skippedChunksQueue = [];
|
|
46
|
-
let res = "";
|
|
47
|
-
for await (const chunk of this._model.evaluate(tokens)) {
|
|
48
|
-
if (signal?.aborted)
|
|
49
|
-
throw new AbortError();
|
|
50
|
-
const tokenStr = this._model.decode(Uint32Array.from([chunk]));
|
|
51
|
-
let skipTokenEvent = false;
|
|
52
|
-
for (let stopStringIndex = 0; stopStringIndex < stopStrings.length; stopStringIndex++) {
|
|
53
|
-
const stopString = stopStrings[stopStringIndex];
|
|
54
|
-
let localShouldSkipTokenEvent = false;
|
|
55
|
-
for (let i = 0; i < tokenStr.length && stopStringIndexes[stopStringIndex] !== stopString.length; i++) {
|
|
56
|
-
if (tokenStr[i] === stopString[stopStringIndexes[stopStringIndex]]) {
|
|
57
|
-
stopStringIndexes[stopStringIndex]++;
|
|
58
|
-
localShouldSkipTokenEvent = true;
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
stopStringIndexes[stopStringIndex] = 0;
|
|
62
|
-
localShouldSkipTokenEvent = false;
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (stopStringIndexes[stopStringIndex] === stopString.length) {
|
|
67
|
-
return res;
|
|
68
|
-
}
|
|
69
|
-
skipTokenEvent ||= localShouldSkipTokenEvent;
|
|
70
|
-
}
|
|
71
|
-
if (skipTokenEvent) {
|
|
72
|
-
skippedChunksQueue.push(chunk);
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
while (skippedChunksQueue.length > 0) {
|
|
76
|
-
const token = skippedChunksQueue.shift();
|
|
77
|
-
res += this._model.decode(Uint32Array.from([token]));
|
|
78
|
-
onToken?.(token);
|
|
79
|
-
}
|
|
80
|
-
res += tokenStr;
|
|
81
|
-
onToken?.(chunk);
|
|
82
|
-
}
|
|
83
|
-
return res;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=LlamaChatSession.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LlamaChatSession.js","sourceRoot":"","sources":["../src/LlamaChatSession.ts"],"names":[],"mappings":"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"}
|
package/dist/LlamaModel.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LlamaModel.js","sourceRoot":"","sources":["../src/LlamaModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAqC,MAAM,mBAAmB,CAAC;AAE9E,MAAM,YAAY,GAAG,MAAM,OAAO,EAAE,CAAC;AACrC,MAAM,EAAC,UAAU,EAAE,YAAY,EAAC,GAAG,YAAY,CAAC;AAEhD,MAAM,OAAO,UAAU;IACF,MAAM,CAAa;IACnB,IAAI,CAAe;IAC5B,WAAW,CAAU;IAE7B,YAAmB,EACf,SAAS,EAAE,UAAU,GAAG,IAAI,EAG/B;QACG,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,MAAmB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAmB,EAAE,eAAmC;QAC3E,IAAI,UAAU,GAAG,MAAM,CAAC;QAExB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE7C,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC5B;QAED,iDAAiD;QACjD,OAAO,IAAI,EAAE;YACT,kCAAkC;YAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YAExE,mCAAmC;YACnC,IAAI,SAAS,KAAK,YAAY,CAAC,QAAQ,EAAE;gBACrC,MAAM;YAEV,MAAM,SAAS,CAAC;YAEhB,mCAAmC;YACnC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;SAC9C;IACL,CAAC;CACJ"}
|