node-llama-cpp 1.1.0 → 1.2.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.
Files changed (66) hide show
  1. package/dist/chatWrappers/GeneralChatPromptWrapper.d.ts +8 -0
  2. package/dist/chatWrappers/GeneralChatPromptWrapper.js +11 -0
  3. package/dist/chatWrappers/GeneralChatPromptWrapper.js.map +1 -0
  4. package/dist/cli/commands/ChatCommand.d.ts +1 -0
  5. package/dist/cli/commands/ChatCommand.js +25 -8
  6. package/dist/cli/commands/ChatCommand.js.map +1 -1
  7. package/dist/cli/commands/ClearCommand.js +1 -1
  8. package/dist/index.d.ts +5 -3
  9. package/dist/index.js +5 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/llamaEvaluator/LlamaBins.d.ts +4 -0
  12. package/dist/llamaEvaluator/LlamaBins.js +5 -0
  13. package/dist/llamaEvaluator/LlamaBins.js.map +1 -0
  14. package/dist/{LlamaChatSession.d.ts → llamaEvaluator/LlamaChatSession.d.ts} +8 -7
  15. package/dist/llamaEvaluator/LlamaChatSession.js +97 -0
  16. package/dist/llamaEvaluator/LlamaChatSession.js.map +1 -0
  17. package/dist/llamaEvaluator/LlamaContext.d.ts +15 -0
  18. package/dist/{LlamaModel.js → llamaEvaluator/LlamaContext.js} +9 -15
  19. package/dist/llamaEvaluator/LlamaContext.js.map +1 -0
  20. package/dist/llamaEvaluator/LlamaModel.d.ts +11 -0
  21. package/dist/llamaEvaluator/LlamaModel.js +20 -0
  22. package/dist/llamaEvaluator/LlamaModel.js.map +1 -0
  23. package/dist/utils/compileLLamaCpp.js +1 -1
  24. package/dist/utils/getBin.js +1 -1
  25. package/dist/utils/usedBinFlag.d.ts +2 -2
  26. package/llama/usedBin.json +1 -1
  27. package/llamaBins/linux-arm64-16.node +0 -0
  28. package/llamaBins/linux-arm64-17.node +0 -0
  29. package/llamaBins/linux-arm64-18.node +0 -0
  30. package/llamaBins/linux-arm64-19.node +0 -0
  31. package/llamaBins/linux-arm64-20.node +0 -0
  32. package/llamaBins/linux-armv7l-16.node +0 -0
  33. package/llamaBins/linux-armv7l-17.node +0 -0
  34. package/llamaBins/linux-armv7l-18.node +0 -0
  35. package/llamaBins/linux-armv7l-19.node +0 -0
  36. package/llamaBins/linux-armv7l-20.node +0 -0
  37. package/llamaBins/linux-ppc64le-16.node +0 -0
  38. package/llamaBins/linux-ppc64le-17.node +0 -0
  39. package/llamaBins/linux-ppc64le-18.node +0 -0
  40. package/llamaBins/linux-ppc64le-19.node +0 -0
  41. package/llamaBins/linux-ppc64le-20.node +0 -0
  42. package/llamaBins/linux-x64-16.node +0 -0
  43. package/llamaBins/linux-x64-17.node +0 -0
  44. package/llamaBins/linux-x64-18.node +0 -0
  45. package/llamaBins/linux-x64-19.node +0 -0
  46. package/llamaBins/linux-x64-20.node +0 -0
  47. package/llamaBins/mac-arm64-16.node +0 -0
  48. package/llamaBins/mac-arm64-17.node +0 -0
  49. package/llamaBins/mac-arm64-18.node +0 -0
  50. package/llamaBins/mac-arm64-19.node +0 -0
  51. package/llamaBins/mac-arm64-20.node +0 -0
  52. package/llamaBins/mac-x64-16.node +0 -0
  53. package/llamaBins/mac-x64-17.node +0 -0
  54. package/llamaBins/mac-x64-18.node +0 -0
  55. package/llamaBins/mac-x64-19.node +0 -0
  56. package/llamaBins/mac-x64-20.node +0 -0
  57. package/llamaBins/win-x64-16.node +0 -0
  58. package/llamaBins/win-x64-17.node +0 -0
  59. package/llamaBins/win-x64-18.node +0 -0
  60. package/llamaBins/win-x64-19.node +0 -0
  61. package/llamaBins/win-x64-20.node +0 -0
  62. package/package.json +1 -1
  63. package/dist/LlamaChatSession.js +0 -86
  64. package/dist/LlamaChatSession.js.map +0 -1
  65. package/dist/LlamaModel.d.ts +0 -13
  66. package/dist/LlamaModel.js.map +0 -1
@@ -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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"}
@@ -37,6 +37,6 @@ export async function ClearLlamaCppBuildCommand({ type }) {
37
37
  await clearLlamaBuild();
38
38
  });
39
39
  }
40
- await setUsedBinFlag("prebuildBinaries");
40
+ await setUsedBinFlag("prebuiltBinaries");
41
41
  }
42
42
  //# sourceMappingURL=ClearCommand.js.map
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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"}
@@ -0,0 +1,15 @@
1
+ import { LLAMAContext } from "./LlamaBins.js";
2
+ type LlamaContextConstructorParameters = {
3
+ prependBos: boolean;
4
+ ctx: LLAMAContext;
5
+ };
6
+ export declare class LlamaContext {
7
+ private readonly _ctx;
8
+ private _prependBos;
9
+ /** @internal */
10
+ constructor({ ctx, prependBos }: LlamaContextConstructorParameters);
11
+ encode(text: string): Uint32Array;
12
+ decode(tokens: Uint32Array): string;
13
+ evaluate(tokens: Uint32Array, getRestrictions?: () => Uint32Array): AsyncGenerator<number, void, unknown>;
14
+ }
15
+ export {};
@@ -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"}
@@ -30,7 +30,7 @@ export async function compileLlamaCpp({ arch = process.arch, nodeTarget = proces
30
30
  }
31
31
  catch (err) {
32
32
  if (setUsedBingFlag)
33
- await setUsedBinFlag("prebuildBinaries");
33
+ await setUsedBinFlag("prebuiltBinaries");
34
34
  throw err;
35
35
  }
36
36
  }
@@ -39,7 +39,7 @@ export async function getPrebuildBinPath() {
39
39
  }
40
40
  export async function loadBin() {
41
41
  const usedBingFlag = await getUsedBinFlag();
42
- if (usedBingFlag === "prebuildBinaries") {
42
+ if (usedBingFlag === "prebuiltBinaries") {
43
43
  const prebuildBinPath = await getPrebuildBinPath();
44
44
  if (prebuildBinPath == null) {
45
45
  console.warn("Prebuild binaries not found, falling back to to locally built binaries");
@@ -1,6 +1,6 @@
1
1
  type UsedBinFlagFile = {
2
- use: "prebuildBinaries" | "localBuildFromSource";
2
+ use: "prebuiltBinaries" | "localBuildFromSource";
3
3
  };
4
- export declare function getUsedBinFlag(): Promise<"prebuildBinaries" | "localBuildFromSource">;
4
+ export declare function getUsedBinFlag(): Promise<"prebuiltBinaries" | "localBuildFromSource">;
5
5
  export declare function setUsedBinFlag(useFlag: UsedBinFlagFile["use"]): Promise<void>;
6
6
  export {};
@@ -1,3 +1,3 @@
1
1
  {
2
- "use": "localBuildFromSource"
2
+ "use": "prebuiltBinaries"
3
3
  }
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.0",
3
+ "version": "1.2.0",
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,13 +0,0 @@
1
- export declare class LlamaModel {
2
- private readonly _model;
3
- private readonly _ctx;
4
- private _prependBos;
5
- constructor({ modelPath, prependBos }: {
6
- modelPath: string;
7
- prependBos?: boolean;
8
- });
9
- get systemInfo(): string;
10
- encode(text: string): Uint32Array;
11
- decode(tokens: Uint32Array): string;
12
- evaluate(tokens: Uint32Array, getRestrictions?: () => Uint32Array): AsyncGenerator<number, void, unknown>;
13
- }
@@ -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"}