node-llama-cpp 3.6.0 → 3.8.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 (150) hide show
  1. package/dist/ChatWrapper.d.ts +3 -5
  2. package/dist/ChatWrapper.js +20 -13
  3. package/dist/ChatWrapper.js.map +1 -1
  4. package/dist/bindings/AddonTypes.d.ts +3 -1
  5. package/dist/bindings/Llama.js +2 -0
  6. package/dist/bindings/Llama.js.map +1 -1
  7. package/dist/bindings/getLlama.d.ts +30 -1
  8. package/dist/bindings/getLlama.js +32 -8
  9. package/dist/bindings/getLlama.js.map +1 -1
  10. package/dist/bindings/utils/compileLLamaCpp.js +7 -0
  11. package/dist/bindings/utils/compileLLamaCpp.js.map +1 -1
  12. package/dist/bindings/utils/getLlamaGpuTypes.d.ts +13 -0
  13. package/dist/bindings/utils/getLlamaGpuTypes.js +30 -0
  14. package/dist/bindings/utils/getLlamaGpuTypes.js.map +1 -0
  15. package/dist/bindings/utils/testBindingBinary.js +26 -2
  16. package/dist/bindings/utils/testBindingBinary.js.map +1 -1
  17. package/dist/chatWrappers/AlpacaChatWrapper.js.map +1 -1
  18. package/dist/chatWrappers/DeepSeekChatWrapper.js +6 -6
  19. package/dist/chatWrappers/DeepSeekChatWrapper.js.map +1 -1
  20. package/dist/chatWrappers/FalconChatWrapper.js.map +1 -1
  21. package/dist/chatWrappers/FunctionaryChatWrapper.js +1 -1
  22. package/dist/chatWrappers/FunctionaryChatWrapper.js.map +1 -1
  23. package/dist/chatWrappers/GeneralChatWrapper.js.map +1 -1
  24. package/dist/chatWrappers/Llama2ChatWrapper.js.map +1 -1
  25. package/dist/chatWrappers/Llama3_1ChatWrapper.js +19 -9
  26. package/dist/chatWrappers/Llama3_1ChatWrapper.js.map +1 -1
  27. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js +21 -10
  28. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js.map +1 -1
  29. package/dist/chatWrappers/MistralChatWrapper.d.ts +2 -1
  30. package/dist/chatWrappers/MistralChatWrapper.js +39 -28
  31. package/dist/chatWrappers/MistralChatWrapper.js.map +1 -1
  32. package/dist/chatWrappers/QwenChatWrapper.d.ts +28 -0
  33. package/dist/chatWrappers/QwenChatWrapper.js +201 -0
  34. package/dist/chatWrappers/QwenChatWrapper.js.map +1 -0
  35. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.d.ts +32 -3
  36. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js +337 -126
  37. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js.map +1 -1
  38. package/dist/chatWrappers/generic/utils/UniqueIdGenerator.d.ts +7 -0
  39. package/dist/chatWrappers/generic/utils/UniqueIdGenerator.js +30 -0
  40. package/dist/chatWrappers/generic/utils/UniqueIdGenerator.js.map +1 -0
  41. package/dist/chatWrappers/generic/utils/chatHistoryFunctionCallMessageTemplate.d.ts +5 -4
  42. package/dist/chatWrappers/generic/utils/extractFunctionCallSettingsFromJinjaTemplate.d.ts +19 -0
  43. package/dist/chatWrappers/generic/utils/extractFunctionCallSettingsFromJinjaTemplate.js +446 -0
  44. package/dist/chatWrappers/generic/utils/extractFunctionCallSettingsFromJinjaTemplate.js.map +1 -0
  45. package/dist/chatWrappers/generic/utils/extractSegmentSettingsFromTokenizerAndChatTemplate.d.ts +2 -0
  46. package/dist/chatWrappers/generic/utils/extractSegmentSettingsFromTokenizerAndChatTemplate.js +38 -0
  47. package/dist/chatWrappers/generic/utils/extractSegmentSettingsFromTokenizerAndChatTemplate.js.map +1 -0
  48. package/dist/chatWrappers/generic/utils/getFirstValidResult.d.ts +6 -0
  49. package/dist/chatWrappers/generic/utils/getFirstValidResult.js +19 -0
  50. package/dist/chatWrappers/generic/utils/getFirstValidResult.js.map +1 -0
  51. package/dist/chatWrappers/generic/utils/squashChatHistoryItems.d.ts +2 -0
  52. package/dist/chatWrappers/generic/utils/squashChatHistoryItems.js +35 -0
  53. package/dist/chatWrappers/generic/utils/squashChatHistoryItems.js.map +1 -0
  54. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.d.ts +3 -0
  55. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js +25 -0
  56. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js.map +1 -1
  57. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js +197 -30
  58. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js.map +1 -1
  59. package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +5 -3
  60. package/dist/chatWrappers/utils/resolveChatWrapper.js +11 -5
  61. package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
  62. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js +1 -0
  63. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js.map +1 -1
  64. package/dist/cli/recommendedModels.js +13 -4
  65. package/dist/cli/recommendedModels.js.map +1 -1
  66. package/dist/config.d.ts +1 -0
  67. package/dist/config.js +1 -0
  68. package/dist/config.js.map +1 -1
  69. package/dist/evaluator/LlamaChat/LlamaChat.d.ts +44 -0
  70. package/dist/evaluator/LlamaChat/LlamaChat.js +31 -6
  71. package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
  72. package/dist/evaluator/LlamaChatSession/LlamaChatSession.d.ts +19 -2
  73. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js +16 -3
  74. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js.map +1 -1
  75. package/dist/evaluator/LlamaChatSession/utils/defineChatSessionFunction.d.ts +1 -8
  76. package/dist/evaluator/LlamaContext/LlamaContext.d.ts +25 -1
  77. package/dist/evaluator/LlamaContext/LlamaContext.js +59 -1
  78. package/dist/evaluator/LlamaContext/LlamaContext.js.map +1 -1
  79. package/dist/evaluator/LlamaGrammar.js +3 -1
  80. package/dist/evaluator/LlamaGrammar.js.map +1 -1
  81. package/dist/evaluator/LlamaModel/LlamaModel.d.ts +2 -0
  82. package/dist/evaluator/LlamaModel/LlamaModel.js +3 -0
  83. package/dist/evaluator/LlamaModel/LlamaModel.js.map +1 -1
  84. package/dist/evaluator/LlamaRankingContext.js +1 -1
  85. package/dist/evaluator/LlamaRankingContext.js.map +1 -1
  86. package/dist/gguf/fileReaders/GgufNetworkFetchFileReader.d.ts +5 -2
  87. package/dist/gguf/fileReaders/GgufNetworkFetchFileReader.js +5 -3
  88. package/dist/gguf/fileReaders/GgufNetworkFetchFileReader.js.map +1 -1
  89. package/dist/gguf/insights/GgufInsights.js +24 -10
  90. package/dist/gguf/insights/GgufInsights.js.map +1 -1
  91. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.js +57 -13
  92. package/dist/gguf/insights/utils/resolveModelGpuLayersOption.js.map +1 -1
  93. package/dist/gguf/parser/GgufV2Parser.js +24 -17
  94. package/dist/gguf/parser/GgufV2Parser.js.map +1 -1
  95. package/dist/gguf/readGgufFileInfo.d.ts +11 -2
  96. package/dist/gguf/readGgufFileInfo.js +6 -5
  97. package/dist/gguf/readGgufFileInfo.js.map +1 -1
  98. package/dist/gguf/types/GgufMetadataTypes.d.ts +23 -2
  99. package/dist/gguf/types/GgufMetadataTypes.js +17 -0
  100. package/dist/gguf/types/GgufMetadataTypes.js.map +1 -1
  101. package/dist/gguf/utils/normalizeGgufDownloadUrl.d.ts +2 -1
  102. package/dist/gguf/utils/normalizeGgufDownloadUrl.js +4 -2
  103. package/dist/gguf/utils/normalizeGgufDownloadUrl.js.map +1 -1
  104. package/dist/index.d.ts +5 -3
  105. package/dist/index.js +3 -1
  106. package/dist/index.js.map +1 -1
  107. package/dist/tsconfig.tsbuildinfo +1 -1
  108. package/dist/types.d.ts +8 -0
  109. package/dist/types.js.map +1 -1
  110. package/dist/utils/OpenAIFormat.d.ts +177 -0
  111. package/dist/utils/OpenAIFormat.js +488 -0
  112. package/dist/utils/OpenAIFormat.js.map +1 -0
  113. package/dist/utils/createModelDownloader.d.ts +12 -3
  114. package/dist/utils/createModelDownloader.js +9 -5
  115. package/dist/utils/createModelDownloader.js.map +1 -1
  116. package/dist/utils/modelDownloadEndpoints.d.ts +13 -0
  117. package/dist/utils/modelDownloadEndpoints.js +27 -0
  118. package/dist/utils/modelDownloadEndpoints.js.map +1 -0
  119. package/dist/utils/modelFileAccessTokens.d.ts +5 -0
  120. package/dist/utils/{modelFileAccesTokens.js → modelFileAccessTokens.js} +4 -4
  121. package/dist/utils/modelFileAccessTokens.js.map +1 -0
  122. package/dist/utils/optionsMatrix.d.ts +58 -0
  123. package/dist/utils/optionsMatrix.js +97 -0
  124. package/dist/utils/optionsMatrix.js.map +1 -0
  125. package/dist/utils/parseModelUri.d.ts +5 -2
  126. package/dist/utils/parseModelUri.js +24 -22
  127. package/dist/utils/parseModelUri.js.map +1 -1
  128. package/dist/utils/resolveModelDestination.d.ts +2 -1
  129. package/dist/utils/resolveModelDestination.js +3 -3
  130. package/dist/utils/resolveModelDestination.js.map +1 -1
  131. package/dist/utils/resolveModelFile.d.ts +7 -1
  132. package/dist/utils/resolveModelFile.js +5 -4
  133. package/dist/utils/resolveModelFile.js.map +1 -1
  134. package/dist/utils/transformPromisable.d.ts +14 -0
  135. package/dist/utils/transformPromisable.js +32 -0
  136. package/dist/utils/transformPromisable.js.map +1 -1
  137. package/llama/CMakeLists.txt +12 -1
  138. package/llama/addon/AddonContext.cpp +150 -10
  139. package/llama/addon/AddonContext.h +3 -0
  140. package/llama/addon/AddonSampler.cpp +0 -1
  141. package/llama/binariesGithubRelease.json +1 -1
  142. package/llama/gitRelease.bundle +0 -0
  143. package/llama/gpuInfo/vulkan-gpu-info.cpp +0 -1
  144. package/llama/grammars/README.md +7 -7
  145. package/llama/llama.cpp.info.json +1 -1
  146. package/package.json +54 -52
  147. package/templates/packed/electron-typescript-react.json +1 -1
  148. package/templates/packed/node-typescript.json +1 -1
  149. package/dist/utils/modelFileAccesTokens.d.ts +0 -4
  150. package/dist/utils/modelFileAccesTokens.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ export declare class UniqueIdGenerator {
2
+ readonly antiText: string;
3
+ private readonly _ids;
4
+ constructor(antiText: string);
5
+ generateId(numbersOnly?: boolean): string;
6
+ removeId(id: string): void;
7
+ }
@@ -0,0 +1,30 @@
1
+ export class UniqueIdGenerator {
2
+ antiText;
3
+ _ids = new Set();
4
+ constructor(antiText) {
5
+ this.antiText = antiText;
6
+ }
7
+ generateId(numbersOnly = false) {
8
+ let id;
9
+ do {
10
+ if (numbersOnly) {
11
+ do {
12
+ id = (Math.random()
13
+ .toString(10)
14
+ .slice(2)
15
+ .slice(0, String(Number.MAX_SAFE_INTEGER).length - 1));
16
+ } while (id.startsWith("0"));
17
+ }
18
+ else
19
+ id = "W" + (Math.random()
20
+ .toString(36)
21
+ .slice(2)) + "W";
22
+ } while (this._ids.has(id) || this.antiText.includes(id));
23
+ this._ids.add(id);
24
+ return id;
25
+ }
26
+ removeId(id) {
27
+ this._ids.delete(id);
28
+ }
29
+ }
30
+ //# sourceMappingURL=UniqueIdGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniqueIdGenerator.js","sourceRoot":"","sources":["../../../../src/chatWrappers/generic/utils/UniqueIdGenerator.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IACV,QAAQ,CAAS;IAChB,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,YAAmB,QAAgB;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAEM,UAAU,CAAC,cAAuB,KAAK;QAC1C,IAAI,EAAU,CAAC;QAEf,GAAG,CAAC;YACA,IAAI,WAAW,EAAE,CAAC;gBACd,GAAG,CAAC;oBACA,EAAE,GAAG,CACD,IAAI,CAAC,MAAM,EAAE;yBACR,QAAQ,CAAC,EAAE,CAAC;yBACZ,KAAK,CAAC,CAAC,CAAC;yBACR,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAC5D,CAAC;gBACN,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACjC,CAAC;;gBACG,EAAE,GAAG,GAAG,GAAG,CACP,IAAI,CAAC,MAAM,EAAE;qBACR,QAAQ,CAAC,EAAE,CAAC;qBACZ,KAAK,CAAC,CAAC,CAAC,CAChB,GAAG,GAAG,CAAC;QAChB,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAE1D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElB,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,QAAQ,CAAC,EAAU;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;CACJ"}
@@ -1,10 +1,11 @@
1
1
  import { ChatWrapperSettings } from "../../../types.js";
2
2
  export declare function parseFunctionCallMessageTemplate(template?: ChatHistoryFunctionCallMessageTemplate): ChatWrapperSettings["functions"] | null;
3
3
  /**
4
- * Template format for how functions can be called by the model and how their results are fed to the model after the function call.
5
- * Consists of an array with two elements:
6
- * 1. The function call template.
7
- * 2. The function call result template.
4
+ * Template format for how functions can be called by the model and how their results are fed to the model after function calls.
5
+ *
6
+ * Consists of an object with two properties:
7
+ * 1. **`call`**: The function call template.
8
+ * 2. **`result`**: The function call result template.
8
9
  *
9
10
  * For example:
10
11
  * ```ts
@@ -0,0 +1,19 @@
1
+ import { ChatHistoryItem, ChatModelFunctions, ChatWrapperSettings } from "../../../types.js";
2
+ import { UniqueIdGenerator } from "./UniqueIdGenerator.js";
3
+ export declare function extractFunctionCallSettingsFromJinjaTemplate({ idsGenerator, renderTemplate }: {
4
+ idsGenerator: UniqueIdGenerator;
5
+ renderTemplate({}: {
6
+ chatHistory: ChatHistoryItem[];
7
+ functions: ChatModelFunctions;
8
+ additionalParams: Record<string, unknown>;
9
+ stringifyFunctionParams: boolean;
10
+ stringifyFunctionResults: boolean;
11
+ combineModelMessageAndToolCalls: boolean;
12
+ squashModelTextResponses?: boolean;
13
+ }): string;
14
+ }): {
15
+ settings: ChatWrapperSettings["functions"] | null;
16
+ stringifyParams: boolean;
17
+ stringifyResult: boolean;
18
+ combineModelMessageAndToolCalls: boolean;
19
+ };
@@ -0,0 +1,446 @@
1
+ import { splitText } from "lifecycle-utils";
2
+ import { LlamaText, SpecialToken, SpecialTokensText } from "../../../utils/LlamaText.js";
3
+ import { getFirstValidResult } from "./getFirstValidResult.js";
4
+ export function extractFunctionCallSettingsFromJinjaTemplate({ idsGenerator, renderTemplate }) {
5
+ const idToStaticContent = new Map();
6
+ const bosTokenId = idsGenerator.generateId();
7
+ const eosTokenId = idsGenerator.generateId();
8
+ const eotTokenId = idsGenerator.generateId();
9
+ idToStaticContent.set(bosTokenId, new SpecialToken("BOS"));
10
+ idToStaticContent.set(eosTokenId, new SpecialToken("EOS"));
11
+ idToStaticContent.set(eotTokenId, new SpecialToken("EOT"));
12
+ const contentIds = new Set();
13
+ const addContentId = (id) => {
14
+ contentIds.add(id);
15
+ return id;
16
+ };
17
+ const systemMessage = addContentId(idsGenerator.generateId());
18
+ const userMessage1 = addContentId(idsGenerator.generateId());
19
+ const modelMessage1 = addContentId(idsGenerator.generateId());
20
+ const func1name = addContentId(idsGenerator.generateId());
21
+ const func1description = addContentId(idsGenerator.generateId());
22
+ const func1params = addContentId(idsGenerator.generateId(true));
23
+ const func1result = addContentId(idsGenerator.generateId(true));
24
+ const func2name = addContentId(idsGenerator.generateId());
25
+ const func2description = addContentId(idsGenerator.generateId());
26
+ const func2params = addContentId(idsGenerator.generateId(true));
27
+ const func2result = addContentId(idsGenerator.generateId(true));
28
+ const modelMessage2 = addContentId(idsGenerator.generateId());
29
+ const func1StringifyParam = addContentId(idsGenerator.generateId());
30
+ const func1StringifyResult = addContentId(idsGenerator.generateId());
31
+ const functions1 = {
32
+ [func1name]: {
33
+ description: func1description,
34
+ params: {
35
+ type: "number"
36
+ }
37
+ }
38
+ };
39
+ const functions2 = {
40
+ ...functions1,
41
+ [func2name]: {
42
+ description: func2description,
43
+ params: {
44
+ type: "number"
45
+ }
46
+ }
47
+ };
48
+ const baseChatHistory = [{
49
+ type: "system",
50
+ text: systemMessage
51
+ }, {
52
+ type: "user",
53
+ text: userMessage1
54
+ }];
55
+ const chatHistory1Call = [...baseChatHistory, {
56
+ type: "model",
57
+ response: [
58
+ modelMessage1,
59
+ {
60
+ type: "functionCall",
61
+ name: func1name,
62
+ // convert to number since this will go through JSON.stringify,
63
+ // and we want to avoid escaping characters in the rendered output
64
+ params: Number(func1params),
65
+ result: Number(func1result),
66
+ startsNewChunk: true
67
+ },
68
+ modelMessage2
69
+ ]
70
+ }];
71
+ const chatHistory2Calls = [...baseChatHistory, {
72
+ type: "model",
73
+ response: [
74
+ modelMessage1,
75
+ {
76
+ type: "functionCall",
77
+ name: func1name,
78
+ // convert to number since this will go through JSON.stringify,
79
+ // and we want to avoid escaping characters in the rendered output
80
+ params: Number(func1params),
81
+ result: Number(func1result),
82
+ startsNewChunk: true
83
+ },
84
+ {
85
+ type: "functionCall",
86
+ name: func2name,
87
+ params: Number(func2params),
88
+ result: Number(func2result),
89
+ startsNewChunk: false
90
+ },
91
+ modelMessage2
92
+ ]
93
+ }];
94
+ const chatHistory2CallsNewChunk = [...baseChatHistory, {
95
+ type: "model",
96
+ response: [
97
+ modelMessage1,
98
+ {
99
+ type: "functionCall",
100
+ name: func1name,
101
+ // convert to number since this will go through JSON.stringify,
102
+ // and we want to avoid escaping characters in the rendered output
103
+ params: Number(func1params),
104
+ result: Number(func1result),
105
+ startsNewChunk: true
106
+ },
107
+ {
108
+ type: "functionCall",
109
+ name: func2name,
110
+ params: Number(func2params),
111
+ result: Number(func2result),
112
+ startsNewChunk: true
113
+ },
114
+ modelMessage2
115
+ ]
116
+ }];
117
+ const additionalParams = {
118
+ "bos_token": bosTokenId,
119
+ "eos_token": eosTokenId,
120
+ "eot_token": eotTokenId
121
+ };
122
+ let combineModelMessageAndToolCalls = true;
123
+ let stringifyParams = true;
124
+ let stringifyResult = true;
125
+ try {
126
+ const paramsObjectTest = renderTemplate({
127
+ chatHistory: [...baseChatHistory, {
128
+ type: "model",
129
+ response: [
130
+ modelMessage1,
131
+ {
132
+ type: "functionCall",
133
+ name: func1name,
134
+ params: { [func1StringifyParam]: "test" },
135
+ result: func1StringifyResult,
136
+ startsNewChunk: true
137
+ },
138
+ modelMessage2
139
+ ]
140
+ }],
141
+ functions: functions1,
142
+ additionalParams,
143
+ stringifyFunctionParams: false,
144
+ stringifyFunctionResults: false,
145
+ combineModelMessageAndToolCalls
146
+ });
147
+ stringifyParams = (!paramsObjectTest.includes(`"${func1StringifyParam}":`) &&
148
+ !paramsObjectTest.includes(`'${func1StringifyParam}':`));
149
+ }
150
+ catch (err) {
151
+ // do nothing
152
+ }
153
+ try {
154
+ const resultObjectTest = renderTemplate({
155
+ chatHistory: [...baseChatHistory, {
156
+ type: "model",
157
+ response: [
158
+ modelMessage1,
159
+ {
160
+ type: "functionCall",
161
+ name: func1name,
162
+ params: func1StringifyParam,
163
+ result: { [func1StringifyResult]: "test" },
164
+ startsNewChunk: true
165
+ },
166
+ modelMessage2
167
+ ]
168
+ }],
169
+ functions: functions1,
170
+ additionalParams,
171
+ stringifyFunctionParams: false,
172
+ stringifyFunctionResults: false,
173
+ combineModelMessageAndToolCalls
174
+ });
175
+ stringifyResult = (!resultObjectTest.includes(`"${func1StringifyResult}":`) &&
176
+ !resultObjectTest.includes(`'${func1StringifyResult}':`));
177
+ }
178
+ catch (err) {
179
+ // do nothing
180
+ }
181
+ combineModelMessageAndToolCalls = renderTemplate({
182
+ chatHistory: chatHistory1Call,
183
+ functions: functions1,
184
+ additionalParams,
185
+ stringifyFunctionParams: true,
186
+ stringifyFunctionResults: true,
187
+ combineModelMessageAndToolCalls
188
+ }).includes(modelMessage1);
189
+ let textBetween2TextualModelResponses = LlamaText();
190
+ if (!combineModelMessageAndToolCalls) {
191
+ try {
192
+ const betweenModelTextualResponsesTest = renderTemplate({
193
+ chatHistory: [...baseChatHistory, {
194
+ type: "model",
195
+ response: [modelMessage1]
196
+ }, {
197
+ type: "model",
198
+ response: [modelMessage2]
199
+ }],
200
+ functions: {},
201
+ additionalParams,
202
+ stringifyFunctionParams: false,
203
+ stringifyFunctionResults: false,
204
+ combineModelMessageAndToolCalls,
205
+ squashModelTextResponses: false
206
+ });
207
+ const textDiff = getTextBetweenIds(betweenModelTextualResponsesTest, modelMessage1, modelMessage2).text ?? "";
208
+ textBetween2TextualModelResponses = reviveSeparatorText(textDiff, idToStaticContent, contentIds);
209
+ }
210
+ catch (err) {
211
+ // do nothing
212
+ }
213
+ }
214
+ let usedNewChunkFor2Calls = false;
215
+ const rendered1Call = renderTemplate({
216
+ chatHistory: chatHistory1Call,
217
+ functions: functions1,
218
+ additionalParams,
219
+ stringifyFunctionParams: stringifyParams,
220
+ stringifyFunctionResults: stringifyResult,
221
+ combineModelMessageAndToolCalls
222
+ });
223
+ const rendered2Calls = getFirstValidResult([
224
+ () => renderTemplate({
225
+ chatHistory: chatHistory2Calls,
226
+ functions: functions2,
227
+ additionalParams,
228
+ stringifyFunctionParams: stringifyParams,
229
+ stringifyFunctionResults: stringifyResult,
230
+ combineModelMessageAndToolCalls
231
+ }),
232
+ () => {
233
+ usedNewChunkFor2Calls = true;
234
+ return renderTemplate({
235
+ chatHistory: chatHistory2CallsNewChunk,
236
+ functions: functions2,
237
+ additionalParams,
238
+ stringifyFunctionParams: stringifyParams,
239
+ stringifyFunctionResults: stringifyResult,
240
+ combineModelMessageAndToolCalls
241
+ });
242
+ }
243
+ ]);
244
+ const modelMessage1ToFunc1Name = getTextBetweenIds(rendered2Calls, modelMessage1, func1name);
245
+ const func1NameToFunc1Params = getTextBetweenIds(rendered2Calls, func1name, func1params, modelMessage1ToFunc1Name.endIndex);
246
+ const func1ResultIndex = rendered2Calls.indexOf(func1result, func1NameToFunc1Params.endIndex);
247
+ const func2NameIndex = rendered2Calls.indexOf(func2name, modelMessage1ToFunc1Name.endIndex);
248
+ if (modelMessage1ToFunc1Name.text == null ||
249
+ func1NameToFunc1Params.text == null ||
250
+ func1ResultIndex < 0 ||
251
+ func2NameIndex < 0)
252
+ return { settings: null, stringifyParams, stringifyResult, combineModelMessageAndToolCalls };
253
+ const supportsParallelCalls = func1ResultIndex > func2NameIndex;
254
+ if (!supportsParallelCalls || usedNewChunkFor2Calls) {
255
+ const prefix = getTextBetweenIds(rendered1Call, modelMessage1, func1name);
256
+ const paramsPrefix = getTextBetweenIds(rendered1Call, func1name, func1params, prefix.endIndex);
257
+ const resultPrefix = getTextBetweenIds(rendered1Call, func1params, func1result, paramsPrefix.endIndex);
258
+ const resultSuffix = getTextBetweenIds(rendered1Call, func1result, modelMessage2, resultPrefix.endIndex);
259
+ if (prefix.text == null || prefix.text === "" || paramsPrefix.text == null || resultPrefix.text == null || resultSuffix.text == null)
260
+ return { settings: null, stringifyParams, stringifyResult, combineModelMessageAndToolCalls };
261
+ return {
262
+ stringifyParams,
263
+ stringifyResult,
264
+ combineModelMessageAndToolCalls,
265
+ settings: {
266
+ call: {
267
+ optionalPrefixSpace: true,
268
+ prefix: removeCommonRevivedPrefix(reviveSeparatorText(prefix.text, idToStaticContent, contentIds), !combineModelMessageAndToolCalls
269
+ ? textBetween2TextualModelResponses
270
+ : LlamaText()),
271
+ paramsPrefix: reviveSeparatorText(paramsPrefix.text, idToStaticContent, contentIds),
272
+ suffix: "",
273
+ emptyCallParamsPlaceholder: {}
274
+ },
275
+ result: {
276
+ prefix: reviveSeparatorText(resultPrefix.text, new Map([
277
+ ...idToStaticContent.entries(),
278
+ [func1name, LlamaText("{{functionName}}")],
279
+ [func1params, LlamaText("{{functionParams}}")]
280
+ ]), contentIds),
281
+ suffix: reviveSeparatorText(resultSuffix.text, new Map([
282
+ ...idToStaticContent.entries(),
283
+ [func1name, LlamaText("{{functionName}}")],
284
+ [func1params, LlamaText("{{functionParams}}")]
285
+ ]), contentIds)
286
+ }
287
+ }
288
+ };
289
+ }
290
+ const func1ParamsToFunc2Name = getTextBetweenIds(rendered2Calls, func1params, func2name, func1NameToFunc1Params.endIndex);
291
+ const func2ParamsToFunc1Result = getTextBetweenIds(rendered2Calls, func2params, func1result, func1ParamsToFunc2Name.endIndex);
292
+ const func1ResultToFunc2Result = getTextBetweenIds(rendered2Calls, func1result, func2result, func2ParamsToFunc1Result.endIndex);
293
+ const func2ResultToModelMessage2 = getTextBetweenIds(rendered2Calls, func2result, modelMessage2, func1ResultToFunc2Result.endIndex);
294
+ if (func1ParamsToFunc2Name.text == null || func2ParamsToFunc1Result.text == null || func1ResultToFunc2Result.text == null ||
295
+ func2ResultToModelMessage2.text == null)
296
+ return { settings: null, stringifyParams, stringifyResult, combineModelMessageAndToolCalls };
297
+ const callPrefixLength = findCommonEndLength(modelMessage1ToFunc1Name.text, func1ParamsToFunc2Name.text);
298
+ const callPrefixText = func1ParamsToFunc2Name.text.slice(-callPrefixLength);
299
+ const parallelismCallPrefix = modelMessage1ToFunc1Name.text.slice(0, -callPrefixLength);
300
+ const callSuffixLength = findCommandStartLength(func1ParamsToFunc2Name.text, func2ParamsToFunc1Result.text);
301
+ const callSuffixText = func1ParamsToFunc2Name.text.slice(0, callSuffixLength);
302
+ const parallelismBetweenCallsText = func1ParamsToFunc2Name.text.slice(callSuffixLength, -callPrefixLength);
303
+ const callParamsPrefixText = func1NameToFunc1Params.text;
304
+ const resultPrefixLength = findCommonEndLength(func2ParamsToFunc1Result.text, func1ResultToFunc2Result.text);
305
+ const resultPrefixText = func2ParamsToFunc1Result.text.slice(-resultPrefixLength);
306
+ const resultSuffixLength = findCommandStartLength(func1ResultToFunc2Result.text, func2ResultToModelMessage2.text);
307
+ const resultSuffixText = func1ResultToFunc2Result.text.slice(0, resultSuffixLength);
308
+ const parallelismResultBetweenResultsText = func1ResultToFunc2Result.text.slice(resultSuffixLength, -resultPrefixLength);
309
+ const parallelismResultSuffixText = func2ResultToModelMessage2.text.slice(resultSuffixLength);
310
+ const resolveParallelismBetweenSectionsParts = (betweenSectionsText) => {
311
+ const { index: endTokenIndex, text: endTokenId } = findFirstTextMatch(betweenSectionsText, [eosTokenId, eosTokenId]);
312
+ if (endTokenIndex >= 0 && endTokenId != null)
313
+ return {
314
+ parallelismCallSuffixText: betweenSectionsText.slice(0, endTokenIndex + endTokenId.length),
315
+ parallelismResultPrefix: betweenSectionsText.slice(endTokenIndex + endTokenId.length)
316
+ };
317
+ const bosIndex = betweenSectionsText.indexOf(bosTokenId);
318
+ if (bosIndex >= 0)
319
+ return {
320
+ parallelismCallSuffixText: betweenSectionsText.slice(0, bosIndex),
321
+ parallelismResultPrefix: betweenSectionsText.slice(bosIndex)
322
+ };
323
+ return {
324
+ parallelismCallSuffixText: betweenSectionsText,
325
+ parallelismResultPrefix: ""
326
+ };
327
+ };
328
+ const { parallelismCallSuffixText, parallelismResultPrefix } = resolveParallelismBetweenSectionsParts(func2ParamsToFunc1Result.text.slice(callSuffixLength, -resultPrefixLength));
329
+ return {
330
+ stringifyParams,
331
+ stringifyResult,
332
+ combineModelMessageAndToolCalls,
333
+ settings: {
334
+ call: {
335
+ optionalPrefixSpace: true,
336
+ prefix: reviveSeparatorText(callPrefixText, idToStaticContent, contentIds),
337
+ paramsPrefix: reviveSeparatorText(callParamsPrefixText, idToStaticContent, contentIds),
338
+ suffix: reviveSeparatorText(callSuffixText, idToStaticContent, contentIds),
339
+ emptyCallParamsPlaceholder: {}
340
+ },
341
+ result: {
342
+ prefix: reviveSeparatorText(resultPrefixText, new Map([
343
+ ...idToStaticContent.entries(),
344
+ [func1name, LlamaText("{{functionName}}")],
345
+ [func1params, LlamaText("{{functionParams}}")]
346
+ ]), contentIds),
347
+ suffix: reviveSeparatorText(resultSuffixText, new Map([
348
+ ...idToStaticContent.entries(),
349
+ [func1name, LlamaText("{{functionName}}")],
350
+ [func1params, LlamaText("{{functionParams}}")]
351
+ ]), contentIds)
352
+ },
353
+ parallelism: {
354
+ call: {
355
+ sectionPrefix: removeCommonRevivedPrefix(reviveSeparatorText(parallelismCallPrefix, idToStaticContent, contentIds), !combineModelMessageAndToolCalls
356
+ ? textBetween2TextualModelResponses
357
+ : LlamaText()),
358
+ betweenCalls: reviveSeparatorText(parallelismBetweenCallsText, idToStaticContent, contentIds),
359
+ sectionSuffix: reviveSeparatorText(parallelismCallSuffixText, idToStaticContent, contentIds)
360
+ },
361
+ result: {
362
+ sectionPrefix: reviveSeparatorText(parallelismResultPrefix, idToStaticContent, contentIds),
363
+ betweenResults: reviveSeparatorText(parallelismResultBetweenResultsText, idToStaticContent, contentIds),
364
+ sectionSuffix: reviveSeparatorText(parallelismResultSuffixText, idToStaticContent, contentIds)
365
+ }
366
+ }
367
+ }
368
+ };
369
+ }
370
+ function getTextBetweenIds(text, startId, endId, startIndex = 0) {
371
+ const foundStartIndex = text.indexOf(startId, startIndex);
372
+ if (foundStartIndex < 0)
373
+ return { text: undefined, endIndex: -1 };
374
+ const foundEndIndex = text.indexOf(endId, foundStartIndex + startId.length);
375
+ if (foundEndIndex < 0)
376
+ return { text: undefined, endIndex: -1 };
377
+ return {
378
+ text: text.slice(foundStartIndex + startId.length, foundEndIndex),
379
+ endIndex: foundEndIndex
380
+ };
381
+ }
382
+ function reviveSeparatorText(text, idMap, contentIds) {
383
+ return LlamaText(splitText(text, [...new Set([...idMap.keys(), ...contentIds])])
384
+ .map((item) => {
385
+ if (typeof item === "string")
386
+ return new SpecialTokensText(item);
387
+ const mappedItem = idMap.get(item.separator);
388
+ if (mappedItem != null)
389
+ return mappedItem;
390
+ if (contentIds.has(item.separator))
391
+ throw new Error("Content ID found in separator text");
392
+ return new SpecialTokensText(item.separator);
393
+ }));
394
+ }
395
+ function removeCommonRevivedPrefix(target, matchStart) {
396
+ for (let commonStartLength = 0; commonStartLength < target.values.length && commonStartLength < matchStart.values.length; commonStartLength++) {
397
+ const targetValue = target.values[commonStartLength];
398
+ const matchStartValue = matchStart.values[commonStartLength];
399
+ if (typeof targetValue === "string" && typeof matchStartValue === "string") {
400
+ if (targetValue === matchStartValue)
401
+ continue;
402
+ }
403
+ else if (targetValue instanceof SpecialTokensText && matchStartValue instanceof SpecialTokensText) {
404
+ const commonLength = findCommandStartLength(targetValue.value, matchStartValue.value);
405
+ if (commonLength === targetValue.value.length && commonLength === matchStartValue.value.length)
406
+ continue;
407
+ return LlamaText([
408
+ new SpecialTokensText(targetValue.value.slice(commonLength)),
409
+ ...target.values.slice(commonStartLength + 1)
410
+ ]);
411
+ }
412
+ else if (targetValue instanceof SpecialToken && matchStartValue instanceof SpecialToken) {
413
+ if (targetValue.value === matchStartValue.value)
414
+ continue;
415
+ }
416
+ return LlamaText(target.values.slice(commonStartLength));
417
+ }
418
+ return LlamaText(target.values.slice(matchStart.values.length));
419
+ }
420
+ function findCommandStartLength(text1, text2) {
421
+ let commonStartLength = 0;
422
+ while (commonStartLength < text1.length && commonStartLength < text2.length) {
423
+ if (text1[commonStartLength] !== text2[commonStartLength])
424
+ break;
425
+ commonStartLength++;
426
+ }
427
+ return commonStartLength;
428
+ }
429
+ function findCommonEndLength(text1, text2) {
430
+ let commonEndLength = 0;
431
+ while (commonEndLength < text1.length && commonEndLength < text2.length) {
432
+ if (text1[text1.length - commonEndLength - 1] !== text2[text2.length - commonEndLength - 1])
433
+ break;
434
+ commonEndLength++;
435
+ }
436
+ return commonEndLength;
437
+ }
438
+ function findFirstTextMatch(text, matchTexts, startIndex = 0) {
439
+ for (const matchText of matchTexts) {
440
+ const index = text.indexOf(matchText, startIndex);
441
+ if (index >= 0)
442
+ return { index, text: matchText };
443
+ }
444
+ return { index: -1, text: undefined };
445
+ }
446
+ //# sourceMappingURL=extractFunctionCallSettingsFromJinjaTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractFunctionCallSettingsFromJinjaTemplate.js","sourceRoot":"","sources":["../../../../src/chatWrappers/generic/utils/extractFunctionCallSettingsFromJinjaTemplate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { ChatWrapperSettings, Tokenizer } from "../../../types.js";
2
+ export declare function extractSegmentSettingsFromTokenizerAndChatTemplate(chatTemplate: string | undefined, tokenizer?: Tokenizer): ChatWrapperSettings["segments"];
@@ -0,0 +1,38 @@
1
+ import { LlamaText, SpecialTokensText } from "../../../utils/LlamaText.js";
2
+ import { removeUndefinedFields } from "../../../utils/removeNullFields.js";
3
+ export function extractSegmentSettingsFromTokenizerAndChatTemplate(chatTemplate, tokenizer) {
4
+ function tryMatchPrefixSuffixPair(tryMatchGroups) {
5
+ if (chatTemplate != null) {
6
+ for (const [prefix, suffix] of tryMatchGroups) {
7
+ if (chatTemplate.includes(prefix) && chatTemplate.includes(suffix))
8
+ return {
9
+ prefix: LlamaText(new SpecialTokensText(prefix)),
10
+ suffix: LlamaText(new SpecialTokensText(suffix))
11
+ };
12
+ }
13
+ }
14
+ if (tokenizer != null) {
15
+ for (const [prefix, suffix] of tryMatchGroups) {
16
+ const thinkTokens = tokenizer(prefix, true, "trimLeadingSpace");
17
+ const thinkEndTokens = tokenizer(suffix, true, "trimLeadingSpace");
18
+ const [thinkToken] = thinkTokens;
19
+ const [thinkEndToken] = thinkEndTokens;
20
+ if (thinkTokens.length === 1 && thinkEndTokens.length === 1 &&
21
+ thinkToken != null && thinkEndToken != null) {
22
+ return {
23
+ prefix: LlamaText(new SpecialTokensText(prefix)),
24
+ suffix: LlamaText(new SpecialTokensText(suffix))
25
+ };
26
+ }
27
+ }
28
+ }
29
+ return undefined;
30
+ }
31
+ return removeUndefinedFields({
32
+ thought: tryMatchPrefixSuffixPair([
33
+ ["<think>", "</think>"], // DeepSeek, QwQ
34
+ ["<thought>", "</thought>"] // EXAONE Deep
35
+ ])
36
+ });
37
+ }
38
+ //# sourceMappingURL=extractSegmentSettingsFromTokenizerAndChatTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractSegmentSettingsFromTokenizerAndChatTemplate.js","sourceRoot":"","sources":["../../../../src/chatWrappers/generic/utils/extractSegmentSettingsFromTokenizerAndChatTemplate.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAC,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAEzE,MAAM,UAAU,kDAAkD,CAC9D,YAAgC,EAAE,SAAqB;IAEvD,SAAS,wBAAwB,CAAC,cAAkD;QAChF,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC5C,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC9D,OAAO;wBACH,MAAM,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;wBAChD,MAAM,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;qBACnD,CAAC;YACV,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC5C,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;gBAChE,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;gBAEnE,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;gBACjC,MAAM,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC;gBAEvC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;oBACvD,UAAU,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,EAC7C,CAAC;oBACC,OAAO;wBACH,MAAM,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;wBAChD,MAAM,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;qBACnD,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,qBAAqB,CAAC;QACzB,OAAO,EAAE,wBAAwB,CAAC;YAC9B,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,gBAAgB;YACzC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,cAAc;SAC7C,CAAC;KACL,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Call the functions in the array one by one and return the result of the first one that doesn't throw an error.
3
+ *
4
+ * If all functions throw an error, throw the error of the last function.
5
+ */
6
+ export declare function getFirstValidResult<const T extends (() => any)[]>(options: T): ReturnType<T[number]>;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Call the functions in the array one by one and return the result of the first one that doesn't throw an error.
3
+ *
4
+ * If all functions throw an error, throw the error of the last function.
5
+ */
6
+ export function getFirstValidResult(options) {
7
+ for (let i = 0; i < options.length; i++) {
8
+ if (i === options.length - 1)
9
+ return options[i]();
10
+ try {
11
+ return options[i]();
12
+ }
13
+ catch (err) {
14
+ // do nothing
15
+ }
16
+ }
17
+ throw new Error("All options failed");
18
+ }
19
+ //# sourceMappingURL=getFirstValidResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFirstValidResult.js","sourceRoot":"","sources":["../../../../src/chatWrappers/generic/utils/getFirstValidResult.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAgC,OAAU;IACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC;YACxB,OAAO,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC;QAEzB,IAAI,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,aAAa;QACjB,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ChatHistoryItem } from "../../../types.js";
2
+ export declare function squashChatHistoryItems(history: readonly ChatHistoryItem[]): ChatHistoryItem[];