node-llama-cpp 3.6.0 → 3.7.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 (84) 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 +1 -1
  5. package/dist/bindings/Llama.js +2 -0
  6. package/dist/bindings/Llama.js.map +1 -1
  7. package/dist/chatWrappers/AlpacaChatWrapper.js.map +1 -1
  8. package/dist/chatWrappers/DeepSeekChatWrapper.js +6 -6
  9. package/dist/chatWrappers/DeepSeekChatWrapper.js.map +1 -1
  10. package/dist/chatWrappers/FalconChatWrapper.js.map +1 -1
  11. package/dist/chatWrappers/FunctionaryChatWrapper.js +1 -1
  12. package/dist/chatWrappers/FunctionaryChatWrapper.js.map +1 -1
  13. package/dist/chatWrappers/GeneralChatWrapper.js.map +1 -1
  14. package/dist/chatWrappers/Llama2ChatWrapper.js.map +1 -1
  15. package/dist/chatWrappers/Llama3_1ChatWrapper.js +19 -9
  16. package/dist/chatWrappers/Llama3_1ChatWrapper.js.map +1 -1
  17. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js +21 -10
  18. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js.map +1 -1
  19. package/dist/chatWrappers/MistralChatWrapper.d.ts +2 -1
  20. package/dist/chatWrappers/MistralChatWrapper.js +39 -28
  21. package/dist/chatWrappers/MistralChatWrapper.js.map +1 -1
  22. package/dist/chatWrappers/QwenChatWrapper.d.ts +21 -0
  23. package/dist/chatWrappers/QwenChatWrapper.js +162 -0
  24. package/dist/chatWrappers/QwenChatWrapper.js.map +1 -0
  25. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.d.ts +32 -3
  26. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js +337 -126
  27. package/dist/chatWrappers/generic/JinjaTemplateChatWrapper.js.map +1 -1
  28. package/dist/chatWrappers/generic/utils/UniqueIdGenerator.d.ts +7 -0
  29. package/dist/chatWrappers/generic/utils/UniqueIdGenerator.js +30 -0
  30. package/dist/chatWrappers/generic/utils/UniqueIdGenerator.js.map +1 -0
  31. package/dist/chatWrappers/generic/utils/chatHistoryFunctionCallMessageTemplate.d.ts +5 -4
  32. package/dist/chatWrappers/generic/utils/extractFunctionCallSettingsFromJinjaTemplate.d.ts +19 -0
  33. package/dist/chatWrappers/generic/utils/extractFunctionCallSettingsFromJinjaTemplate.js +446 -0
  34. package/dist/chatWrappers/generic/utils/extractFunctionCallSettingsFromJinjaTemplate.js.map +1 -0
  35. package/dist/chatWrappers/generic/utils/extractSegmentSettingsFromTokenizerAndChatTemplate.d.ts +2 -0
  36. package/dist/chatWrappers/generic/utils/extractSegmentSettingsFromTokenizerAndChatTemplate.js +38 -0
  37. package/dist/chatWrappers/generic/utils/extractSegmentSettingsFromTokenizerAndChatTemplate.js.map +1 -0
  38. package/dist/chatWrappers/generic/utils/getFirstValidResult.d.ts +6 -0
  39. package/dist/chatWrappers/generic/utils/getFirstValidResult.js +19 -0
  40. package/dist/chatWrappers/generic/utils/getFirstValidResult.js.map +1 -0
  41. package/dist/chatWrappers/generic/utils/squashChatHistoryItems.d.ts +2 -0
  42. package/dist/chatWrappers/generic/utils/squashChatHistoryItems.js +35 -0
  43. package/dist/chatWrappers/generic/utils/squashChatHistoryItems.js.map +1 -0
  44. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.d.ts +3 -0
  45. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js +25 -0
  46. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js.map +1 -1
  47. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js +197 -30
  48. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js.map +1 -1
  49. package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +5 -3
  50. package/dist/chatWrappers/utils/resolveChatWrapper.js +11 -5
  51. package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
  52. package/dist/cli/recommendedModels.js +13 -0
  53. package/dist/cli/recommendedModels.js.map +1 -1
  54. package/dist/evaluator/LlamaChat/LlamaChat.js +11 -2
  55. package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
  56. package/dist/evaluator/LlamaChatSession/utils/defineChatSessionFunction.d.ts +1 -8
  57. package/dist/evaluator/LlamaGrammar.js +3 -1
  58. package/dist/evaluator/LlamaGrammar.js.map +1 -1
  59. package/dist/evaluator/LlamaModel/LlamaModel.d.ts +2 -0
  60. package/dist/evaluator/LlamaModel/LlamaModel.js +3 -0
  61. package/dist/evaluator/LlamaModel/LlamaModel.js.map +1 -1
  62. package/dist/evaluator/LlamaRankingContext.js +1 -1
  63. package/dist/evaluator/LlamaRankingContext.js.map +1 -1
  64. package/dist/gguf/types/GgufMetadataTypes.d.ts +1 -1
  65. package/dist/gguf/types/GgufMetadataTypes.js.map +1 -1
  66. package/dist/index.d.ts +2 -1
  67. package/dist/index.js +2 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/tsconfig.tsbuildinfo +1 -1
  70. package/dist/types.d.ts +8 -0
  71. package/dist/types.js.map +1 -1
  72. package/dist/utils/OpenAIFormat.d.ts +177 -0
  73. package/dist/utils/OpenAIFormat.js +488 -0
  74. package/dist/utils/OpenAIFormat.js.map +1 -0
  75. package/dist/utils/optionsMatrix.d.ts +58 -0
  76. package/dist/utils/optionsMatrix.js +97 -0
  77. package/dist/utils/optionsMatrix.js.map +1 -0
  78. package/llama/addon/AddonContext.cpp +11 -9
  79. package/llama/binariesGithubRelease.json +1 -1
  80. package/llama/gitRelease.bundle +0 -0
  81. package/llama/llama.cpp.info.json +1 -1
  82. package/package.json +47 -45
  83. package/templates/packed/electron-typescript-react.json +1 -1
  84. package/templates/packed/node-typescript.json +1 -1
@@ -0,0 +1,488 @@
1
+ import { splitText } from "lifecycle-utils";
2
+ import { allSegmentTypes } from "../types.js";
3
+ import { jsonDumps } from "../chatWrappers/utils/jsonDumps.js";
4
+ import { TokenBias } from "../evaluator/TokenBias.js";
5
+ import { getChatWrapperSegmentDefinition } from "./getChatWrapperSegmentDefinition.js";
6
+ import { LlamaText } from "./LlamaText.js";
7
+ import { removeUndefinedFields } from "./removeNullFields.js";
8
+ // Note: this is a work in progress and is not yet complete.
9
+ // Will be exported through the main index.js file once this is complete and fully tested
10
+ export class OpenAIFormat {
11
+ chatWrapper;
12
+ constructor({ chatWrapper }) {
13
+ this.chatWrapper = chatWrapper;
14
+ }
15
+ /**
16
+ * Convert `node-llama-cpp`'s chat history to OpenAI format.
17
+ *
18
+ * Note that this conversion is lossy, as OpenAI's format is more limited than `node-llama-cpp`'s.
19
+ */
20
+ toOpenAiChat({ chatHistory, functionCalls, functions, useRawValues = true }) {
21
+ const res = fromChatHistoryToIntermediateOpenAiMessages({
22
+ chatHistory,
23
+ chatWrapperSettings: this.chatWrapper.settings,
24
+ functionCalls,
25
+ functions,
26
+ useRawValues
27
+ });
28
+ return {
29
+ ...res,
30
+ messages: fromIntermediateToCompleteOpenAiMessages(res.messages)
31
+ };
32
+ }
33
+ async fromOpenAiChat(options, { llama, model } = {}) {
34
+ const { messages, tools } = options;
35
+ if ((options["response_format"]?.type === "json_schema" || options["response_format"]?.type === "json_object") &&
36
+ tools != null && options["tool_choice"] !== "none")
37
+ throw new Error("Using both JSON response format and tools is not supported yet");
38
+ const { chatHistory, functionCalls: pendingFunctionCalls } = fromOpenAiMessagesToChatHistory({
39
+ messages,
40
+ chatWrapper: this.chatWrapper
41
+ });
42
+ const functions = {};
43
+ for (const tool of tools ?? []) {
44
+ functions[tool.function.name] = {
45
+ description: tool.function.description,
46
+ params: tool.function.parameters
47
+ };
48
+ }
49
+ let tokenBias;
50
+ if (options["logit_bias"] != null && model != null) {
51
+ tokenBias = TokenBias.for(model);
52
+ for (const [token, bias] of Object.entries(options["logit_bias"]))
53
+ tokenBias.set(token, { logit: bias });
54
+ }
55
+ let grammar;
56
+ if (options["response_format"]?.type === "json_schema" && llama != null) {
57
+ const schema = options["response_format"]?.json_schema?.schema;
58
+ if (schema != null)
59
+ grammar = await llama.createGrammarForJsonSchema(schema);
60
+ else
61
+ grammar = await llama.getGrammarFor("json");
62
+ }
63
+ else if (options["response_format"]?.type === "json_object" && llama != null)
64
+ grammar = await llama.getGrammarFor("json");
65
+ return {
66
+ chatHistory,
67
+ functionCalls: pendingFunctionCalls,
68
+ functions: Object.keys(functions).length === 0
69
+ ? undefined
70
+ : functions,
71
+ tokenBias,
72
+ maxTokens: options["max_completion_tokens"] ?? options["max_tokens"] ?? undefined,
73
+ maxParallelFunctionCalls: options["parallel_tool_calls"] === false ? 1 : undefined,
74
+ grammar,
75
+ seed: options.seed ?? undefined,
76
+ customStopTriggers: typeof options.stop === "string"
77
+ ? [options.stop]
78
+ : options.stop instanceof Array
79
+ ? options.stop.filter((item) => typeof item === "string")
80
+ : undefined,
81
+ temperature: options.temperature ?? undefined,
82
+ minP: options["min_p"] ?? undefined,
83
+ topK: options["top_k"] ?? undefined,
84
+ topP: options["top_p"] ?? undefined
85
+ };
86
+ }
87
+ }
88
+ export function fromIntermediateToCompleteOpenAiMessages(messages) {
89
+ return messages.map((message) => {
90
+ if (message.content != null && LlamaText.isLlamaText(message.content))
91
+ return {
92
+ ...message,
93
+ content: message.content.toString()
94
+ };
95
+ return message;
96
+ });
97
+ }
98
+ export function fromChatHistoryToIntermediateOpenAiMessages({ chatHistory, chatWrapperSettings, functionCalls, functions, useRawValues = true, combineModelMessageAndToolCalls = true, stringifyFunctionParams = true, stringifyFunctionResults = true, squashModelTextResponses = true }) {
99
+ const messages = [];
100
+ for (let i = 0; i < chatHistory.length; i++) {
101
+ const item = chatHistory[i];
102
+ if (item == null)
103
+ continue;
104
+ if (item.type === "system")
105
+ messages.push({
106
+ role: "system",
107
+ content: LlamaText.fromJSON(item.text)
108
+ });
109
+ else if (item.type === "user")
110
+ messages.push({
111
+ role: "user",
112
+ content: item.text
113
+ });
114
+ else if (item.type === "model") {
115
+ let lastModelTextMessage = null;
116
+ const segmentStack = [];
117
+ let canUseLastAssistantMessage = squashModelTextResponses;
118
+ const addResponseText = (text) => {
119
+ const lastResItem = canUseLastAssistantMessage
120
+ ? messages.at(-1)
121
+ : undefined;
122
+ if (lastResItem?.role === "assistant" && (lastResItem.tool_calls == null || lastResItem.tool_calls.length === 0)) {
123
+ if (lastResItem.content == null)
124
+ lastResItem.content = text;
125
+ else
126
+ lastResItem.content = LlamaText([lastResItem.content, text]);
127
+ }
128
+ else {
129
+ lastModelTextMessage = {
130
+ role: "assistant",
131
+ content: text
132
+ };
133
+ messages.push(lastModelTextMessage);
134
+ canUseLastAssistantMessage = true;
135
+ }
136
+ };
137
+ for (let j = 0; j < item.response.length; j++) {
138
+ const response = item.response[j];
139
+ if (response == null)
140
+ continue;
141
+ if (typeof response === "string")
142
+ addResponseText(response);
143
+ else if (response.type === "segment") {
144
+ const segmentDefinition = getChatWrapperSegmentDefinition(chatWrapperSettings, response.segmentType);
145
+ if (response.raw != null && useRawValues)
146
+ addResponseText(LlamaText.fromJSON(response.raw));
147
+ else
148
+ addResponseText(LlamaText([
149
+ (segmentStack.length > 0 && segmentStack.at(-1) === response.segmentType)
150
+ ? ""
151
+ : segmentDefinition?.prefix ?? "",
152
+ response.text,
153
+ response.ended
154
+ ? (segmentDefinition?.suffix ?? "")
155
+ : ""
156
+ ]));
157
+ if (!response.ended && segmentStack.at(-1) !== response.segmentType)
158
+ segmentStack.push(response.segmentType);
159
+ else if (response.ended && segmentStack.at(-1) === response.segmentType) {
160
+ segmentStack.pop();
161
+ if (segmentStack.length === 0 && segmentDefinition?.suffix == null &&
162
+ chatWrapperSettings.segments?.closeAllSegments != null)
163
+ addResponseText(LlamaText(chatWrapperSettings.segments.closeAllSegments));
164
+ }
165
+ }
166
+ else if (response.type === "functionCall") {
167
+ const toolCallId = generateToolCallId(i, j);
168
+ if (lastModelTextMessage == null ||
169
+ (!combineModelMessageAndToolCalls && lastModelTextMessage.content != null && lastModelTextMessage.content !== "") ||
170
+ (response.startsNewChunk &&
171
+ lastModelTextMessage.tool_calls != null && lastModelTextMessage.tool_calls.length > 0)) {
172
+ lastModelTextMessage = {
173
+ role: "assistant"
174
+ };
175
+ messages.push(lastModelTextMessage);
176
+ }
177
+ lastModelTextMessage["tool_calls"] ||= [];
178
+ lastModelTextMessage["tool_calls"].push({
179
+ id: toolCallId,
180
+ type: "function",
181
+ function: {
182
+ name: response.name,
183
+ arguments: stringifyFunctionParams
184
+ ? response.params === undefined
185
+ ? ""
186
+ : jsonDumps(response.params)
187
+ : response.params
188
+ }
189
+ });
190
+ messages.push({
191
+ role: "tool",
192
+ "tool_call_id": toolCallId,
193
+ content: stringifyFunctionResults
194
+ ? response.result === undefined
195
+ ? ""
196
+ : jsonDumps(response.result)
197
+ : response.result
198
+ });
199
+ }
200
+ }
201
+ addResponseText("");
202
+ }
203
+ else
204
+ void item;
205
+ }
206
+ if (functionCalls != null && functionCalls.length > 0) {
207
+ let modelMessage = messages.at(-1);
208
+ const messageIndex = chatHistory.length - 1;
209
+ const functionCallStartIndex = modelMessage?.role === "assistant"
210
+ ? (modelMessage.tool_calls?.length ?? 0)
211
+ : 0;
212
+ if (modelMessage?.role !== "assistant" ||
213
+ (!combineModelMessageAndToolCalls && modelMessage.content != null && modelMessage.content !== "")) {
214
+ modelMessage = {
215
+ role: "assistant"
216
+ };
217
+ messages.push(modelMessage);
218
+ }
219
+ modelMessage["tool_calls"] ||= [];
220
+ for (let i = 0; i < functionCalls.length; i++) {
221
+ const functionCall = functionCalls[i];
222
+ if (functionCall == null)
223
+ continue;
224
+ const toolCallId = generateToolCallId(messageIndex, functionCallStartIndex + i);
225
+ modelMessage["tool_calls"].push({
226
+ id: toolCallId,
227
+ type: "function",
228
+ function: {
229
+ name: functionCall.functionName,
230
+ arguments: stringifyFunctionParams
231
+ ? functionCall.params === undefined
232
+ ? ""
233
+ : jsonDumps(functionCall.params)
234
+ : functionCall.params
235
+ }
236
+ });
237
+ }
238
+ }
239
+ const tools = [];
240
+ for (const [funcName, func] of Object.entries(functions ?? {}))
241
+ tools.push({
242
+ type: "function",
243
+ function: {
244
+ name: funcName,
245
+ ...removeUndefinedFields({
246
+ description: func.description,
247
+ parameters: func.params
248
+ })
249
+ }
250
+ });
251
+ return removeUndefinedFields({
252
+ messages,
253
+ tools: tools.length > 0
254
+ ? tools
255
+ : undefined
256
+ });
257
+ }
258
+ function fromOpenAiMessagesToChatHistory({ messages, chatWrapper }) {
259
+ const chatHistory = [];
260
+ const pendingFunctionCalls = [];
261
+ const findToolCallResult = (startIndex, toolCallId, toolCallIndex) => {
262
+ let foundToolIndex = 0;
263
+ for (let i = startIndex; i < messages.length; i++) {
264
+ const message = messages[i];
265
+ if (message == null)
266
+ continue;
267
+ if (message.role === "user" || message.role === "assistant")
268
+ break;
269
+ if (message.role !== "tool")
270
+ continue;
271
+ if (toolCallId == null) {
272
+ if (toolCallIndex === foundToolIndex)
273
+ return message;
274
+ else if (foundToolIndex > foundToolIndex)
275
+ return undefined;
276
+ }
277
+ else if (message?.tool_call_id === toolCallId)
278
+ return message;
279
+ foundToolIndex++;
280
+ }
281
+ return undefined;
282
+ };
283
+ let lastUserOrAssistantMessageIndex = messages.length - 1;
284
+ for (let i = messages.length - 1; i >= 0; i--) {
285
+ const message = messages[i];
286
+ if (message == null)
287
+ continue;
288
+ if (message.role === "user" || message.role === "assistant") {
289
+ lastUserOrAssistantMessageIndex = i;
290
+ break;
291
+ }
292
+ }
293
+ for (let i = 0; i < messages.length; i++) {
294
+ const message = messages[i];
295
+ if (message == null)
296
+ continue;
297
+ if (message.role === "system") {
298
+ if (message.content != null)
299
+ chatHistory.push({
300
+ type: "system",
301
+ text: LlamaText(resolveOpenAiText(message.content)).toJSON()
302
+ });
303
+ }
304
+ else if (message.role === "user")
305
+ chatHistory.push({
306
+ type: "user",
307
+ text: resolveOpenAiText(message.content) ?? ""
308
+ });
309
+ else if (message.role === "assistant") {
310
+ const isLastAssistantMessage = i === lastUserOrAssistantMessageIndex;
311
+ let chatItem = chatHistory.at(-1);
312
+ if (chatItem?.type !== "model") {
313
+ chatItem = {
314
+ type: "model",
315
+ response: []
316
+ };
317
+ chatHistory.push(chatItem);
318
+ }
319
+ const text = resolveOpenAiText(message.content);
320
+ if (text != null && text !== "") {
321
+ const segmentDefinitions = new Map();
322
+ for (const segmentType of allSegmentTypes) {
323
+ const segmentDefinition = getChatWrapperSegmentDefinition(chatWrapper.settings, segmentType);
324
+ if (segmentDefinition != null)
325
+ segmentDefinitions.set(segmentType, {
326
+ prefix: LlamaText(segmentDefinition.prefix).toString(),
327
+ suffix: segmentDefinition.suffix != null
328
+ ? LlamaText(segmentDefinition.suffix).toString()
329
+ : undefined
330
+ });
331
+ }
332
+ const modelResponseSegments = segmentModelResponseText(text, {
333
+ segmentDefinitions,
334
+ closeAllSegments: chatWrapper.settings.segments?.closeAllSegments != null
335
+ ? LlamaText(chatWrapper.settings.segments.closeAllSegments).toString()
336
+ : undefined
337
+ });
338
+ for (const segment of modelResponseSegments) {
339
+ if (segment.type == null) {
340
+ if (typeof chatItem.response.at(-1) === "string")
341
+ chatItem.response[chatItem.response.length - 1] += segment.text;
342
+ else
343
+ chatItem.response.push(segment.text);
344
+ }
345
+ else
346
+ chatItem.response.push({
347
+ type: "segment",
348
+ segmentType: segment.type,
349
+ text: segment.text,
350
+ ended: segment.ended
351
+ });
352
+ }
353
+ }
354
+ let toolCallIndex = 0;
355
+ for (const toolCall of message.tool_calls ?? []) {
356
+ const functionName = toolCall.function.name;
357
+ const callParams = parseToolSerializedValue(toolCall.function.arguments);
358
+ const toolCallResult = findToolCallResult(i + 1, toolCall.id, toolCallIndex);
359
+ if (toolCallResult == null) {
360
+ pendingFunctionCalls.push({
361
+ functionName,
362
+ params: callParams,
363
+ raw: chatWrapper.generateFunctionCall(functionName, callParams).toJSON()
364
+ });
365
+ }
366
+ if (toolCallResult != null || !isLastAssistantMessage)
367
+ chatItem.response.push({
368
+ type: "functionCall",
369
+ name: functionName,
370
+ params: callParams,
371
+ result: parseToolSerializedValue(toolCallResult?.content),
372
+ startsNewChunk: toolCallIndex === 0
373
+ ? true
374
+ : undefined
375
+ });
376
+ toolCallIndex++;
377
+ }
378
+ }
379
+ }
380
+ return {
381
+ chatHistory,
382
+ functionCalls: pendingFunctionCalls
383
+ };
384
+ }
385
+ function generateToolCallId(messageIndex, callIndex) {
386
+ const length = 9;
387
+ const start = "fc_" + String(messageIndex) + "_";
388
+ return start + String(callIndex).padStart(length - start.length, "0");
389
+ }
390
+ export function resolveOpenAiText(text) {
391
+ if (typeof text === "string")
392
+ return text;
393
+ if (text instanceof Array)
394
+ return text.map((item) => item?.text ?? "").join("");
395
+ return null;
396
+ }
397
+ function parseToolSerializedValue(value) {
398
+ const text = resolveOpenAiText(value);
399
+ if (text == null || text === "")
400
+ return undefined;
401
+ try {
402
+ return JSON.parse(text);
403
+ }
404
+ catch (err) {
405
+ return text;
406
+ }
407
+ }
408
+ function segmentModelResponseText(text, { segmentDefinitions, closeAllSegments }) {
409
+ const separatorActions = new Map();
410
+ for (const [segmentType, { prefix, suffix }] of segmentDefinitions) {
411
+ separatorActions.set(prefix, { type: "prefix", segmentType });
412
+ if (suffix != null)
413
+ separatorActions.set(suffix, { type: "suffix", segmentType });
414
+ }
415
+ if (closeAllSegments != null)
416
+ separatorActions.set(closeAllSegments, { type: "closeAll" });
417
+ const textParts = splitText(text, [...separatorActions.keys()]);
418
+ const segments = [];
419
+ const stack = [];
420
+ const stackSet = new Set();
421
+ const pushTextToLastSegment = (text) => {
422
+ const lastSegment = segments.at(-1);
423
+ if (lastSegment != null && !lastSegment.ended)
424
+ lastSegment.text += text;
425
+ else
426
+ segments.push({
427
+ type: undefined,
428
+ text,
429
+ ended: false
430
+ });
431
+ };
432
+ for (const item of textParts) {
433
+ if (typeof item === "string" || !separatorActions.has(item.separator))
434
+ pushTextToLastSegment(typeof item === "string"
435
+ ? item
436
+ : item.separator);
437
+ else {
438
+ const action = separatorActions.get(item.separator);
439
+ if (action.type === "closeAll") {
440
+ while (stack.length > 0) {
441
+ const segmentType = stack.pop();
442
+ stackSet.delete(segmentType);
443
+ const lastSegment = segments.at(-1);
444
+ if (lastSegment != null && lastSegment.type != undefined && lastSegment.type === segmentType)
445
+ lastSegment.ended = true;
446
+ else
447
+ segments.push({ type: segmentType, text: "", ended: true });
448
+ }
449
+ }
450
+ else if (action.type === "prefix") {
451
+ if (!stackSet.has(action.segmentType)) {
452
+ stack.push(action.segmentType);
453
+ stackSet.add(action.segmentType);
454
+ segments.push({ type: action.segmentType, text: "", ended: false });
455
+ }
456
+ else
457
+ pushTextToLastSegment(item.separator);
458
+ }
459
+ else if (action.type === "suffix") {
460
+ const currentType = stack.at(-1);
461
+ if (currentType != null && currentType === action.segmentType) {
462
+ const lastSegment = segments.at(-1);
463
+ if (lastSegment != null && lastSegment.type != null && lastSegment.type === action.segmentType) {
464
+ lastSegment.ended = true;
465
+ stack.pop();
466
+ stackSet.delete(action.segmentType);
467
+ }
468
+ else
469
+ segments.push({ type: action.segmentType, text: "", ended: true });
470
+ }
471
+ else {
472
+ const segmentTypeIndex = stack.lastIndexOf(action.segmentType);
473
+ if (segmentTypeIndex < 0)
474
+ pushTextToLastSegment(item.separator);
475
+ else {
476
+ for (let i = stack.length - 1; i >= segmentTypeIndex; i--) {
477
+ const segmentType = stack.pop();
478
+ stackSet.delete(segmentType);
479
+ segments.push({ type: segmentType, text: "", ended: true });
480
+ }
481
+ }
482
+ }
483
+ }
484
+ }
485
+ }
486
+ return segments;
487
+ }
488
+ //# sourceMappingURL=OpenAIFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIFormat.js","sourceRoot":"","sources":["../../src/utils/OpenAIFormat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Iterate of all possible combinations of the given options.
3
+ * @example
4
+ * ```typescript
5
+ * for (const {a, b} of optionsMatrix({a: [1, 2], b: ["x", "y"]}))
6
+ * console.log(a, b);
7
+ * ```
8
+ *
9
+ * Will output:
10
+ * ```txt
11
+ * 1 x
12
+ * 1 y
13
+ * 2 x
14
+ * 2 y
15
+ * ```
16
+ */
17
+ export declare function optionsMatrix<const T extends Record<string, any>>(options: {
18
+ [K in keyof T]: T[K][];
19
+ }): Generator<{
20
+ [K in keyof T]: T[K];
21
+ }>;
22
+ /**
23
+ * Iterate of all possible combinations of the given options and call the callback with each combination.
24
+ *
25
+ * The result of the first combination that doesn't throw an error will be returned as the result of this function.
26
+ *
27
+ * If all combinations throw an error, the error of the last combination will be thrown.
28
+ * @example
29
+ * ```typescript
30
+ * const result = tryMatrix({
31
+ * a: [1, 2],
32
+ * b: ["x", "y"]
33
+ * }, ({a, b}) => {
34
+ * console.log(a, b);
35
+ *
36
+ * if (a === 2 && b === "y")
37
+ * return `success ${a} ${b}`;
38
+ *
39
+ * throw new Error("fail");
40
+ * });
41
+ *
42
+ * console.log(result);
43
+ * ```
44
+ *
45
+ * Will output:
46
+ * ```txt
47
+ * 1 x
48
+ * 1 y
49
+ * 2 x
50
+ * 2 y
51
+ * success 2 y
52
+ * ```
53
+ */
54
+ export declare function tryMatrix<const T extends Record<string, any>, R>(options: {
55
+ [K in keyof T]: T[K][];
56
+ }, callback: (options: {
57
+ [K in keyof T]: T[K];
58
+ }) => R): R;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Iterate of all possible combinations of the given options.
3
+ * @example
4
+ * ```typescript
5
+ * for (const {a, b} of optionsMatrix({a: [1, 2], b: ["x", "y"]}))
6
+ * console.log(a, b);
7
+ * ```
8
+ *
9
+ * Will output:
10
+ * ```txt
11
+ * 1 x
12
+ * 1 y
13
+ * 2 x
14
+ * 2 y
15
+ * ```
16
+ */
17
+ export function* optionsMatrix(options) {
18
+ const keys = Object.keys(options);
19
+ const indexes = keys.map(() => 0);
20
+ while (true) {
21
+ const result = {};
22
+ for (let i = 0; i < keys.length; i++) {
23
+ const key = keys[i];
24
+ const keyOptions = options[key];
25
+ result[key] = keyOptions[indexes[i]];
26
+ }
27
+ yield result;
28
+ let moved = false;
29
+ for (let i = keys.length - 1; i >= 0; i--) {
30
+ const key = keys[i];
31
+ const keyOptions = options[key];
32
+ if (indexes[i] >= keyOptions.length - 1) {
33
+ if (i === 0)
34
+ return;
35
+ indexes[i] = 0;
36
+ }
37
+ else if (indexes[i] < keyOptions.length - 1) {
38
+ indexes[i]++;
39
+ moved = true;
40
+ break;
41
+ }
42
+ }
43
+ if (!moved)
44
+ return;
45
+ }
46
+ }
47
+ /**
48
+ * Iterate of all possible combinations of the given options and call the callback with each combination.
49
+ *
50
+ * The result of the first combination that doesn't throw an error will be returned as the result of this function.
51
+ *
52
+ * If all combinations throw an error, the error of the last combination will be thrown.
53
+ * @example
54
+ * ```typescript
55
+ * const result = tryMatrix({
56
+ * a: [1, 2],
57
+ * b: ["x", "y"]
58
+ * }, ({a, b}) => {
59
+ * console.log(a, b);
60
+ *
61
+ * if (a === 2 && b === "y")
62
+ * return `success ${a} ${b}`;
63
+ *
64
+ * throw new Error("fail");
65
+ * });
66
+ *
67
+ * console.log(result);
68
+ * ```
69
+ *
70
+ * Will output:
71
+ * ```txt
72
+ * 1 x
73
+ * 1 y
74
+ * 2 x
75
+ * 2 y
76
+ * success 2 y
77
+ * ```
78
+ */
79
+ export function tryMatrix(options, callback) {
80
+ let nextOption = undefined;
81
+ for (const option of optionsMatrix(options)) {
82
+ if (nextOption == null) {
83
+ nextOption = option;
84
+ continue;
85
+ }
86
+ try {
87
+ return callback(nextOption);
88
+ }
89
+ catch (err) {
90
+ nextOption = option;
91
+ }
92
+ }
93
+ if (nextOption != null)
94
+ return callback(nextOption);
95
+ throw new Error("All options failed");
96
+ }
97
+ //# sourceMappingURL=optionsMatrix.js.map