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.
Files changed (64) hide show
  1. package/README.md +10 -8
  2. package/dist/AbortError.d.ts +0 -1
  3. package/dist/AbortError.js +1 -0
  4. package/dist/AbortError.js.map +1 -1
  5. package/dist/chatWrappers/GeneralChatPromptWrapper.d.ts +8 -0
  6. package/dist/chatWrappers/GeneralChatPromptWrapper.js +11 -0
  7. package/dist/chatWrappers/GeneralChatPromptWrapper.js.map +1 -0
  8. package/dist/cli/commands/ChatCommand.d.ts +1 -0
  9. package/dist/cli/commands/ChatCommand.js +25 -8
  10. package/dist/cli/commands/ChatCommand.js.map +1 -1
  11. package/dist/index.d.ts +5 -3
  12. package/dist/index.js +5 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/llamaEvaluator/LlamaBins.d.ts +4 -0
  15. package/dist/llamaEvaluator/LlamaBins.js +5 -0
  16. package/dist/llamaEvaluator/LlamaBins.js.map +1 -0
  17. package/dist/{LlamaChatSession.d.ts → llamaEvaluator/LlamaChatSession.d.ts} +8 -7
  18. package/dist/llamaEvaluator/LlamaChatSession.js +97 -0
  19. package/dist/llamaEvaluator/LlamaChatSession.js.map +1 -0
  20. package/dist/{LlamaModel.d.ts → llamaEvaluator/LlamaContext.d.ts} +1 -7
  21. package/dist/{LlamaModel.js → llamaEvaluator/LlamaContext.js} +9 -15
  22. package/dist/llamaEvaluator/LlamaContext.js.map +1 -0
  23. package/dist/llamaEvaluator/LlamaModel.d.ts +11 -0
  24. package/dist/llamaEvaluator/LlamaModel.js +20 -0
  25. package/dist/llamaEvaluator/LlamaModel.js.map +1 -0
  26. package/llamaBins/linux-arm64-16.node +0 -0
  27. package/llamaBins/linux-arm64-17.node +0 -0
  28. package/llamaBins/linux-arm64-18.node +0 -0
  29. package/llamaBins/linux-arm64-19.node +0 -0
  30. package/llamaBins/linux-arm64-20.node +0 -0
  31. package/llamaBins/linux-armv7l-16.node +0 -0
  32. package/llamaBins/linux-armv7l-17.node +0 -0
  33. package/llamaBins/linux-armv7l-18.node +0 -0
  34. package/llamaBins/linux-armv7l-19.node +0 -0
  35. package/llamaBins/linux-armv7l-20.node +0 -0
  36. package/llamaBins/linux-ppc64le-16.node +0 -0
  37. package/llamaBins/linux-ppc64le-17.node +0 -0
  38. package/llamaBins/linux-ppc64le-18.node +0 -0
  39. package/llamaBins/linux-ppc64le-19.node +0 -0
  40. package/llamaBins/linux-ppc64le-20.node +0 -0
  41. package/llamaBins/linux-x64-16.node +0 -0
  42. package/llamaBins/linux-x64-17.node +0 -0
  43. package/llamaBins/linux-x64-18.node +0 -0
  44. package/llamaBins/linux-x64-19.node +0 -0
  45. package/llamaBins/linux-x64-20.node +0 -0
  46. package/llamaBins/mac-arm64-16.node +0 -0
  47. package/llamaBins/mac-arm64-17.node +0 -0
  48. package/llamaBins/mac-arm64-18.node +0 -0
  49. package/llamaBins/mac-arm64-19.node +0 -0
  50. package/llamaBins/mac-arm64-20.node +0 -0
  51. package/llamaBins/mac-x64-16.node +0 -0
  52. package/llamaBins/mac-x64-17.node +0 -0
  53. package/llamaBins/mac-x64-18.node +0 -0
  54. package/llamaBins/mac-x64-19.node +0 -0
  55. package/llamaBins/mac-x64-20.node +0 -0
  56. package/llamaBins/win-x64-16.node +0 -0
  57. package/llamaBins/win-x64-17.node +0 -0
  58. package/llamaBins/win-x64-18.node +0 -0
  59. package/llamaBins/win-x64-19.node +0 -0
  60. package/llamaBins/win-x64-20.node +0 -0
  61. package/package.json +1 -1
  62. package/dist/LlamaChatSession.js +0 -86
  63. package/dist/LlamaChatSession.js.map +0 -1
  64. 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 LlamaChatSession({
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 = model.encode(q1);
110
+ const tokens = context.encode(q1);
109
111
  const res: number[] = [];
110
- for await (const chunk of model.evaluate(tokens)) {
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 = model.decode(Uint32Array.from(res));
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 = model.decode(Uint32Array.from(res)).split("USER:")[0];
125
+ const a1 = context.decode(Uint32Array.from(res)).split("USER:")[0];
124
126
  console.log("AI: " + a1);
125
127
  ```
126
128
 
@@ -1,3 +1,2 @@
1
1
  export declare class AbortError extends Error {
2
- constructor();
3
2
  }
@@ -1,4 +1,5 @@
1
1
  export class AbortError extends Error {
2
+ /** @internal */
2
3
  constructor() {
3
4
  super("AbortError");
4
5
  }
@@ -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"}
@@ -3,6 +3,7 @@ type ChatCommand = {
3
3
  model: string;
4
4
  systemInfo: boolean;
5
5
  systemPrompt: string;
6
+ wrapper: string;
6
7
  };
7
8
  export declare const ChatCommand: CommandModule<object, ChatCommand>;
8
9
  export {};
@@ -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: new LlamaChatPromptWrapper()
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(model.decode(Uint32Array.from([chunk])));
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":"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"}
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
- export { LlamaModel, LlamaChatSession, AbortError, ChatPromptWrapper, EmptyChatPromptWrapper, LlamaChatPromptWrapper };
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
- export { LlamaModel, LlamaChatSession, AbortError, ChatPromptWrapper, EmptyChatPromptWrapper, LlamaChatPromptWrapper };
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,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"}
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,4 @@
1
+ import { type LLAMAModel, type LLAMAContext } from "../utils/getBin.js";
2
+ export declare const llamaCppNode: import("../utils/getBin.js").LlamaCppNodeModule;
3
+ declare const LLAMAModel: LLAMAModel, LLAMAContext: LLAMAContext;
4
+ export { LLAMAModel, LLAMAContext };
@@ -0,0 +1,5 @@
1
+ import { loadBin } from "../utils/getBin.js";
2
+ export const llamaCppNode = await loadBin();
3
+ const { LLAMAModel, LLAMAContext } = llamaCppNode;
4
+ export { LLAMAModel, LLAMAContext };
5
+ //# sourceMappingURL=LlamaBins.js.map
@@ -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 { LlamaModel } from "./LlamaModel.js";
3
- import { ChatPromptWrapper } from "./ChatPromptWrapper.js";
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
- constructor({ model, printLLamaSystemInfo, promptWrapper, systemPrompt }: {
12
- model: LlamaModel;
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 model(): LlamaModel;
18
+ get context(): LlamaContext;
19
19
  init(): Promise<void>;
20
- prompt(prompt: string, onToken?: (token: number) => void, { signal }?: {
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 LlamaModel {
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 { loadBin } from "./utils/getBin.js";
2
- const llamaCppNode = await loadBin();
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
- constructor({ modelPath, prependBos = true }) {
9
- this._model = new LLAMAModel(modelPath);
10
- this._ctx = new LLAMAContext(this._model);
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 tokensArray = Array.from(tokens);
26
- tokensArray.unshift(llamaCppNode.tokenBos());
27
- evalTokens = Uint32Array.from(tokensArray);
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=LlamaModel.js.map
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-llama-cpp",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "description": "node.js bindings for llama.cpp",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -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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"}
@@ -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"}