node-llama-cpp 3.11.0 → 3.12.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.
- package/README.md +1 -1
- package/dist/bindings/Llama.d.ts +5 -1
- package/dist/bindings/Llama.js +11 -1
- package/dist/bindings/Llama.js.map +1 -1
- package/dist/bindings/types.d.ts +5 -2
- package/dist/bindings/types.js +16 -1
- package/dist/bindings/types.js.map +1 -1
- package/dist/chatWrappers/HarmonyChatWrapper.d.ts +78 -0
- package/dist/chatWrappers/HarmonyChatWrapper.js +527 -0
- package/dist/chatWrappers/HarmonyChatWrapper.js.map +1 -0
- package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +4 -2
- package/dist/chatWrappers/utils/resolveChatWrapper.js +21 -6
- package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
- package/dist/cli/commands/ChatCommand.d.ts +2 -1
- package/dist/cli/commands/ChatCommand.js +21 -7
- package/dist/cli/commands/ChatCommand.js.map +1 -1
- package/dist/cli/commands/CompleteCommand.d.ts +2 -1
- package/dist/cli/commands/CompleteCommand.js +21 -7
- package/dist/cli/commands/CompleteCommand.js.map +1 -1
- package/dist/cli/commands/InfillCommand.d.ts +2 -1
- package/dist/cli/commands/InfillCommand.js +21 -7
- package/dist/cli/commands/InfillCommand.js.map +1 -1
- package/dist/cli/commands/inspect/commands/InspectMeasureCommand.d.ts +1 -0
- package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js +16 -5
- package/dist/cli/commands/inspect/commands/InspectMeasureCommand.js.map +1 -1
- package/dist/cli/recommendedModels.js +22 -0
- package/dist/cli/recommendedModels.js.map +1 -1
- package/dist/evaluator/LlamaChat/LlamaChat.js +244 -29
- package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
- package/dist/gguf/insights/GgufInsights.js +22 -3
- package/dist/gguf/insights/GgufInsights.js.map +1 -1
- package/dist/gguf/types/GgufMetadataTypes.d.ts +19 -2
- package/dist/gguf/types/GgufMetadataTypes.js +17 -0
- package/dist/gguf/types/GgufMetadataTypes.js.map +1 -1
- package/dist/gguf/types/GgufTensorInfoTypes.d.ts +2 -1
- package/dist/gguf/types/GgufTensorInfoTypes.js +1 -0
- package/dist/gguf/types/GgufTensorInfoTypes.js.map +1 -1
- package/dist/gguf/utils/getGgufFileTypeName.d.ts +1 -1
- package/dist/gguf/utils/ggufQuantNames.js +1 -0
- package/dist/gguf/utils/ggufQuantNames.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +144 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/gbnfJson/types.d.ts +1 -1
- package/dist/utils/gbnfJson/types.js.map +1 -1
- package/dist/utils/getChatWrapperSegmentDefinition.js +2 -0
- package/dist/utils/getChatWrapperSegmentDefinition.js.map +1 -1
- package/llama/binariesGithubRelease.json +1 -1
- package/llama/gitRelease.bundle +0 -0
- package/llama/llama.cpp.info.json +1 -1
- package/package.json +18 -16
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
import { ChatWrapper } from "../ChatWrapper.js";
|
|
2
|
+
import { SpecialToken, LlamaText, SpecialTokensText } from "../utils/LlamaText.js";
|
|
3
|
+
import { ChatModelFunctionsDocumentationGenerator } from "./utils/ChatModelFunctionsDocumentationGenerator.js";
|
|
4
|
+
import { jsonDumps } from "./utils/jsonDumps.js";
|
|
5
|
+
const defaultModelIdentity = "You are ChatGPT, a large language model trained by OpenAI.";
|
|
6
|
+
const defaultCuttingKnowledgeDate = new Date("2024-06-01T00:00:00Z");
|
|
7
|
+
const defaultReasoningEffort = "medium";
|
|
8
|
+
// source: https://github.com/openai/harmony, https://cookbook.openai.com/articles/openai-harmony,
|
|
9
|
+
// https://github.com/openai/openai-cookbook/blob/main/articles/openai-harmony.md
|
|
10
|
+
export class HarmonyChatWrapper extends ChatWrapper {
|
|
11
|
+
wrapperName = "Harmony";
|
|
12
|
+
modelIdentity;
|
|
13
|
+
cuttingKnowledgeDate;
|
|
14
|
+
todayDate;
|
|
15
|
+
reasoningEffort;
|
|
16
|
+
requiredChannels;
|
|
17
|
+
keepOnlyLastThought;
|
|
18
|
+
/** @internal */ _jinjaFlags;
|
|
19
|
+
settings = {
|
|
20
|
+
supportsSystemMessages: true,
|
|
21
|
+
functions: {
|
|
22
|
+
call: {
|
|
23
|
+
optionalPrefixSpace: true,
|
|
24
|
+
prefix: LlamaText(new SpecialTokensText(" to="), "functions."),
|
|
25
|
+
paramsPrefix: LlamaText(new SpecialTokensText("<|constrain|>json<|message|>")),
|
|
26
|
+
suffix: LlamaText(new SpecialTokensText("<|call|>")),
|
|
27
|
+
emptyCallParamsPlaceholder: {}
|
|
28
|
+
},
|
|
29
|
+
result: {
|
|
30
|
+
prefix: LlamaText(new SpecialTokensText("<|start|>"), "functions.{{functionName}}", new SpecialTokensText(" to=assistant<|channel|>commentary<|message|>")),
|
|
31
|
+
suffix: LlamaText(new SpecialTokensText("<|end|>"))
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
segments: {
|
|
35
|
+
thought: {
|
|
36
|
+
prefix: LlamaText(new SpecialTokensText("<|channel|>analysis<|message|>")),
|
|
37
|
+
suffix: LlamaText(new SpecialTokensText("<|end|>"))
|
|
38
|
+
},
|
|
39
|
+
comment: {
|
|
40
|
+
prefix: LlamaText(new SpecialTokensText("<|channel|>commentary<|message|>")),
|
|
41
|
+
suffix: LlamaText(new SpecialTokensText("<|end|>"))
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
constructor(options = {}) {
|
|
46
|
+
super();
|
|
47
|
+
const { modelIdentity = defaultModelIdentity, cuttingKnowledgeDate = defaultCuttingKnowledgeDate, todayDate = () => new Date(), reasoningEffort = defaultReasoningEffort, requiredChannels = {}, keepOnlyLastThought = true, _jinjaFlags = {} } = options;
|
|
48
|
+
this.modelIdentity = modelIdentity;
|
|
49
|
+
this.cuttingKnowledgeDate = cuttingKnowledgeDate == null
|
|
50
|
+
? null
|
|
51
|
+
: cuttingKnowledgeDate instanceof Function
|
|
52
|
+
? cuttingKnowledgeDate
|
|
53
|
+
: new Date(cuttingKnowledgeDate);
|
|
54
|
+
this.todayDate = todayDate == null
|
|
55
|
+
? null
|
|
56
|
+
: todayDate instanceof Function
|
|
57
|
+
? todayDate
|
|
58
|
+
: new Date(todayDate);
|
|
59
|
+
this.reasoningEffort = reasoningEffort;
|
|
60
|
+
this.requiredChannels = {
|
|
61
|
+
analysis: requiredChannels.analysis ?? true,
|
|
62
|
+
commentary: requiredChannels.commentary ?? true,
|
|
63
|
+
final: requiredChannels.final ?? true
|
|
64
|
+
};
|
|
65
|
+
this.keepOnlyLastThought = keepOnlyLastThought;
|
|
66
|
+
this._jinjaFlags = {
|
|
67
|
+
emptyLastModelResponseIsFinalMessage: false,
|
|
68
|
+
useSpecialTokensForFullSystemMessage: false,
|
|
69
|
+
disableNonFinalFinalMessages: false,
|
|
70
|
+
useNonFinalFinalMessage: false,
|
|
71
|
+
noFinalMessages: false,
|
|
72
|
+
..._jinjaFlags
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
generateContextState({ chatHistory, availableFunctions, documentFunctionParams }) {
|
|
76
|
+
const hasFunctions = Object.keys(availableFunctions ?? {}).length > 0;
|
|
77
|
+
const modifiedChatHistory = chatHistory.slice();
|
|
78
|
+
let systemMessage = LlamaText();
|
|
79
|
+
if (modifiedChatHistory[0]?.type === "system") {
|
|
80
|
+
systemMessage = LlamaText.fromJSON(modifiedChatHistory[0].text);
|
|
81
|
+
modifiedChatHistory.shift();
|
|
82
|
+
}
|
|
83
|
+
const contextContent = [
|
|
84
|
+
this._getPreamble(hasFunctions)
|
|
85
|
+
];
|
|
86
|
+
if (systemMessage.values.length > 0 || hasFunctions)
|
|
87
|
+
contextContent.push(LlamaText([
|
|
88
|
+
new SpecialTokensText("<|start|>developer<|message|>"),
|
|
89
|
+
this._getFirstDeveloperMessage(systemMessage, availableFunctions, { documentParams: documentFunctionParams }),
|
|
90
|
+
new SpecialTokensText("<|end|>")
|
|
91
|
+
]));
|
|
92
|
+
let needsTriggers = true;
|
|
93
|
+
for (let i = 0; i < modifiedChatHistory.length; i++) {
|
|
94
|
+
const isLastItem = i === modifiedChatHistory.length - 1;
|
|
95
|
+
const item = modifiedChatHistory[i];
|
|
96
|
+
if (item == null)
|
|
97
|
+
continue;
|
|
98
|
+
if (item.type === "system") {
|
|
99
|
+
contextContent.push(LlamaText([
|
|
100
|
+
new SpecialTokensText("<|start|>developer<|message|>"),
|
|
101
|
+
LlamaText.fromJSON(item.text),
|
|
102
|
+
isLastItem
|
|
103
|
+
? LlamaText([])
|
|
104
|
+
: new SpecialTokensText("<|end|>")
|
|
105
|
+
]));
|
|
106
|
+
if (isLastItem)
|
|
107
|
+
needsTriggers = false;
|
|
108
|
+
}
|
|
109
|
+
else if (item.type === "user") {
|
|
110
|
+
contextContent.push(LlamaText([
|
|
111
|
+
new SpecialTokensText("<|start|>user<|message|>"),
|
|
112
|
+
item.text,
|
|
113
|
+
isLastItem
|
|
114
|
+
? LlamaText([])
|
|
115
|
+
: new SpecialTokensText("<|end|>")
|
|
116
|
+
]));
|
|
117
|
+
if (isLastItem)
|
|
118
|
+
needsTriggers = false;
|
|
119
|
+
}
|
|
120
|
+
else if (item.type === "model") {
|
|
121
|
+
const { res, needsTriggers: modelNeedsTriggers } = this._getModelResponse(item.response, true, isLastItem, this.keepOnlyLastThought);
|
|
122
|
+
if (isLastItem)
|
|
123
|
+
needsTriggers = modelNeedsTriggers;
|
|
124
|
+
contextContent.push(res);
|
|
125
|
+
}
|
|
126
|
+
else
|
|
127
|
+
void item;
|
|
128
|
+
}
|
|
129
|
+
const contextText = LlamaText(contextContent);
|
|
130
|
+
if (!needsTriggers)
|
|
131
|
+
return {
|
|
132
|
+
contextText,
|
|
133
|
+
stopGenerationTriggers: [
|
|
134
|
+
LlamaText(new SpecialToken("EOS")),
|
|
135
|
+
LlamaText(new SpecialTokensText("<|return|>")),
|
|
136
|
+
LlamaText("<|return|>")
|
|
137
|
+
],
|
|
138
|
+
detectFunctionCalls: false,
|
|
139
|
+
rerender: {
|
|
140
|
+
triggers: [
|
|
141
|
+
LlamaText(new SpecialTokensText("<|end|>"))
|
|
142
|
+
],
|
|
143
|
+
action: "closeResponseItem"
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
contextText,
|
|
148
|
+
stopGenerationTriggers: [
|
|
149
|
+
LlamaText(new SpecialToken("EOS")),
|
|
150
|
+
LlamaText(new SpecialTokensText("<|return|>")),
|
|
151
|
+
LlamaText("<|return|>")
|
|
152
|
+
],
|
|
153
|
+
prefixTriggers: [
|
|
154
|
+
{
|
|
155
|
+
type: "segment",
|
|
156
|
+
segmentType: "thought",
|
|
157
|
+
triggers: [
|
|
158
|
+
LlamaText(new SpecialTokensText("<|channel|>analysis<|message|>"))
|
|
159
|
+
]
|
|
160
|
+
}, {
|
|
161
|
+
type: "segment",
|
|
162
|
+
segmentType: "comment",
|
|
163
|
+
triggers: [
|
|
164
|
+
// the trigger here includes the `<|message|>` part
|
|
165
|
+
// to not conflict with the `<|channel|>commentary to=` prefix used for function calls
|
|
166
|
+
LlamaText(new SpecialTokensText("<|channel|>commentary<|message|>"))
|
|
167
|
+
]
|
|
168
|
+
}, {
|
|
169
|
+
type: "response",
|
|
170
|
+
triggers: [
|
|
171
|
+
LlamaText(new SpecialTokensText("<|channel|>final"))
|
|
172
|
+
],
|
|
173
|
+
inject: LlamaText(new SpecialTokensText("<|message|>"))
|
|
174
|
+
},
|
|
175
|
+
...(!hasFunctions ? [] : [{
|
|
176
|
+
type: "functionCall",
|
|
177
|
+
triggers: [
|
|
178
|
+
LlamaText(new SpecialTokensText("<|channel|>commentary to="))
|
|
179
|
+
],
|
|
180
|
+
replaceTrigger: true,
|
|
181
|
+
inject: LlamaText(new SpecialTokensText("<|channel|>commentary"))
|
|
182
|
+
}, {
|
|
183
|
+
type: "functionCall",
|
|
184
|
+
triggers: [
|
|
185
|
+
LlamaText(new SpecialTokensText("<|channel|>analysis to="))
|
|
186
|
+
],
|
|
187
|
+
replaceTrigger: true,
|
|
188
|
+
inject: LlamaText(new SpecialTokensText("<|channel|>analysis"))
|
|
189
|
+
}])
|
|
190
|
+
],
|
|
191
|
+
noPrefixTrigger: {
|
|
192
|
+
type: "response",
|
|
193
|
+
inject: LlamaText(new SpecialTokensText("<|channel|>final<|message|>"))
|
|
194
|
+
},
|
|
195
|
+
detectFunctionCalls: false,
|
|
196
|
+
rerender: {
|
|
197
|
+
triggers: [
|
|
198
|
+
LlamaText(new SpecialTokensText("<|end|>"))
|
|
199
|
+
],
|
|
200
|
+
action: "closeResponseItem"
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
generateFunctionCall(name, params) {
|
|
205
|
+
const emptyCallParamsPlaceholder = this.settings.functions.call.emptyCallParamsPlaceholder;
|
|
206
|
+
return LlamaText([
|
|
207
|
+
new SpecialTokensText("<|start|>assistant<|channel|>commentary to="),
|
|
208
|
+
"functions.", name,
|
|
209
|
+
this.settings.functions.call.paramsPrefix,
|
|
210
|
+
params === undefined
|
|
211
|
+
? (emptyCallParamsPlaceholder === undefined || emptyCallParamsPlaceholder === "")
|
|
212
|
+
? ""
|
|
213
|
+
: jsonDumps(emptyCallParamsPlaceholder)
|
|
214
|
+
: jsonDumps(params),
|
|
215
|
+
this.settings.functions.call.suffix
|
|
216
|
+
]);
|
|
217
|
+
}
|
|
218
|
+
generateFunctionCallResult(functionName, functionParams, result) {
|
|
219
|
+
return LlamaText([
|
|
220
|
+
new SpecialTokensText("<|start|>"),
|
|
221
|
+
"functions.", functionName,
|
|
222
|
+
new SpecialTokensText(" to=assistant<|channel|>commentary<|message|>"),
|
|
223
|
+
(result === undefined
|
|
224
|
+
? ""
|
|
225
|
+
: jsonDumps(result)),
|
|
226
|
+
new SpecialTokensText("<|end|>")
|
|
227
|
+
]);
|
|
228
|
+
}
|
|
229
|
+
generateModelResponseText(modelResponse, useRawValues = true) {
|
|
230
|
+
const { res } = this._getModelResponse(modelResponse, useRawValues, false, false);
|
|
231
|
+
const [start, ...rest] = res.values;
|
|
232
|
+
let newStart = start;
|
|
233
|
+
let newEnd = rest.pop();
|
|
234
|
+
if (newStart instanceof SpecialTokensText && newStart.value.startsWith("<|start|>assistant"))
|
|
235
|
+
newStart = new SpecialTokensText(newStart.value.slice("<|start|>assistant".length));
|
|
236
|
+
if (newEnd instanceof SpecialTokensText && newEnd.value.startsWith("<|end|>"))
|
|
237
|
+
newEnd = new SpecialTokensText(newEnd.value.slice("<|end|>".length));
|
|
238
|
+
else if (newEnd instanceof SpecialTokensText && newEnd.value.startsWith("<|return|>"))
|
|
239
|
+
newEnd = new SpecialTokensText(newEnd.value.slice("<|return|>".length));
|
|
240
|
+
return LlamaText([
|
|
241
|
+
newStart ?? [],
|
|
242
|
+
...rest,
|
|
243
|
+
newEnd ?? []
|
|
244
|
+
]);
|
|
245
|
+
}
|
|
246
|
+
generateAvailableFunctionsSystemText(availableFunctions, { documentParams = true }) {
|
|
247
|
+
const functionsDocumentationGenerator = new ChatModelFunctionsDocumentationGenerator(availableFunctions);
|
|
248
|
+
if (!functionsDocumentationGenerator.hasAnyFunctions)
|
|
249
|
+
return LlamaText([]);
|
|
250
|
+
return LlamaText.joinValues("\n", [
|
|
251
|
+
"# Tools",
|
|
252
|
+
"",
|
|
253
|
+
"## functions",
|
|
254
|
+
"",
|
|
255
|
+
"namespace functions {",
|
|
256
|
+
"",
|
|
257
|
+
functionsDocumentationGenerator
|
|
258
|
+
.getTypeScriptFunctionTypes({ documentParams })
|
|
259
|
+
.split("\n")
|
|
260
|
+
.map((line) => line.trim())
|
|
261
|
+
.join("\n"),
|
|
262
|
+
"",
|
|
263
|
+
"} // namespace functions"
|
|
264
|
+
]);
|
|
265
|
+
}
|
|
266
|
+
/** @internal */
|
|
267
|
+
_getFirstDeveloperMessage(systemPrompt, availableFunctions, { documentParams = true } = {}) {
|
|
268
|
+
const functionsDocumentationGenerator = new ChatModelFunctionsDocumentationGenerator(availableFunctions);
|
|
269
|
+
if (!functionsDocumentationGenerator.hasAnyFunctions && systemPrompt.values.length === 0)
|
|
270
|
+
return LlamaText([]);
|
|
271
|
+
if (!functionsDocumentationGenerator.hasAnyFunctions)
|
|
272
|
+
return LlamaText([
|
|
273
|
+
this._jinjaFlags.useSpecialTokensForFullSystemMessage
|
|
274
|
+
? new SpecialTokensText("# Instructions\n\n")
|
|
275
|
+
: "# Instruction\n\n",
|
|
276
|
+
systemPrompt
|
|
277
|
+
]);
|
|
278
|
+
return LlamaText([
|
|
279
|
+
this._jinjaFlags.useSpecialTokensForFullSystemMessage
|
|
280
|
+
? new SpecialTokensText("# Instructions\n\n")
|
|
281
|
+
: "# Instructions\n\n",
|
|
282
|
+
systemPrompt.values.length > 0
|
|
283
|
+
? [systemPrompt, "\n\n"]
|
|
284
|
+
: [],
|
|
285
|
+
this.generateAvailableFunctionsSystemText(availableFunctions ?? {}, { documentParams })
|
|
286
|
+
]);
|
|
287
|
+
}
|
|
288
|
+
/** @internal */
|
|
289
|
+
_getModelResponse(modelResponse, useRawValues, isLastItem, keepOnlyLastThought) {
|
|
290
|
+
const res = [];
|
|
291
|
+
let canEnableTriggers = true;
|
|
292
|
+
for (let index = 0; index < modelResponse.length; index++) {
|
|
293
|
+
const isLastResponse = index === modelResponse.length - 1;
|
|
294
|
+
const response = modelResponse[index];
|
|
295
|
+
if (response == null)
|
|
296
|
+
continue;
|
|
297
|
+
else if (response === "" && (!isLastResponse || !isLastItem))
|
|
298
|
+
continue;
|
|
299
|
+
if (typeof response === "string") {
|
|
300
|
+
if (isLastItem && isLastResponse) {
|
|
301
|
+
if (response === "" && !this._jinjaFlags.emptyLastModelResponseIsFinalMessage)
|
|
302
|
+
canEnableTriggers = true;
|
|
303
|
+
else if (!this._jinjaFlags.useNonFinalFinalMessage) {
|
|
304
|
+
res.push(LlamaText([
|
|
305
|
+
new SpecialTokensText("<|start|>assistant<|channel|>final<|message|>"),
|
|
306
|
+
response
|
|
307
|
+
]));
|
|
308
|
+
canEnableTriggers = false;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
res.push(LlamaText([
|
|
312
|
+
new SpecialTokensText("<|start|>assistant<|message|>"),
|
|
313
|
+
response
|
|
314
|
+
]));
|
|
315
|
+
canEnableTriggers = false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else if (!this._jinjaFlags.noFinalMessages && (isLastResponse || !this._jinjaFlags.disableNonFinalFinalMessages))
|
|
319
|
+
res.push(LlamaText([
|
|
320
|
+
new SpecialTokensText("<|start|>assistant<|channel|>final<|message|>"),
|
|
321
|
+
response,
|
|
322
|
+
new SpecialTokensText("<|end|>")
|
|
323
|
+
]));
|
|
324
|
+
else
|
|
325
|
+
res.push(LlamaText([
|
|
326
|
+
new SpecialTokensText("<|start|>assistant<|message|>"),
|
|
327
|
+
response,
|
|
328
|
+
new SpecialTokensText("<|end|>")
|
|
329
|
+
]));
|
|
330
|
+
}
|
|
331
|
+
else if (response.type === "segment") {
|
|
332
|
+
if (response.ended && response.raw != null && useRawValues)
|
|
333
|
+
res.push(LlamaText([
|
|
334
|
+
new SpecialTokensText("<|start|>assistant"),
|
|
335
|
+
LlamaText.fromJSON(response.raw)
|
|
336
|
+
]));
|
|
337
|
+
else if (response.segmentType === "thought") {
|
|
338
|
+
if (keepOnlyLastThought && !isLastItem)
|
|
339
|
+
continue;
|
|
340
|
+
res.push(LlamaText([
|
|
341
|
+
new SpecialTokensText("<|start|>assistant<|channel|>analysis<|message|>"),
|
|
342
|
+
response.text,
|
|
343
|
+
(isLastItem && !response.ended)
|
|
344
|
+
? LlamaText([])
|
|
345
|
+
: new SpecialTokensText("<|end|>")
|
|
346
|
+
]));
|
|
347
|
+
if (isLastItem && isLastResponse && !response.ended)
|
|
348
|
+
canEnableTriggers = false;
|
|
349
|
+
}
|
|
350
|
+
else if (response.segmentType === "comment") {
|
|
351
|
+
res.push(LlamaText([
|
|
352
|
+
new SpecialTokensText("<|start|>assistant<|channel|>commentary<|message|>"),
|
|
353
|
+
response.text,
|
|
354
|
+
(isLastItem && !response.ended)
|
|
355
|
+
? LlamaText([])
|
|
356
|
+
: new SpecialTokensText("<|end|>")
|
|
357
|
+
]));
|
|
358
|
+
if (isLastItem && isLastResponse && !response.ended)
|
|
359
|
+
canEnableTriggers = false;
|
|
360
|
+
}
|
|
361
|
+
else
|
|
362
|
+
void response.segmentType;
|
|
363
|
+
}
|
|
364
|
+
else if (response.type === "functionCall") {
|
|
365
|
+
res.push(LlamaText([
|
|
366
|
+
(response.rawCall != null && useRawValues)
|
|
367
|
+
? LlamaText.fromJSON(response.rawCall)
|
|
368
|
+
: this.generateFunctionCall(response.name, response.params),
|
|
369
|
+
this.generateFunctionCallResult(response.name, response.params, response.result)
|
|
370
|
+
]));
|
|
371
|
+
}
|
|
372
|
+
else
|
|
373
|
+
void response;
|
|
374
|
+
}
|
|
375
|
+
const needsTriggers = canEnableTriggers && isLastItem;
|
|
376
|
+
if (needsTriggers)
|
|
377
|
+
res.push(LlamaText([
|
|
378
|
+
new SpecialTokensText("<|start|>assistant")
|
|
379
|
+
]));
|
|
380
|
+
return {
|
|
381
|
+
res: LlamaText(res),
|
|
382
|
+
needsTriggers
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
/** @internal */
|
|
386
|
+
_getPreamble(hasFunctions) {
|
|
387
|
+
const formatCutoff = (date, timezone) => {
|
|
388
|
+
const month = date.toLocaleDateString("en-US", { month: "numeric", timeZone: timezone }).padStart(2, "0");
|
|
389
|
+
const year = date.toLocaleDateString("en-US", { year: "numeric", timeZone: timezone }).padStart(4, "0");
|
|
390
|
+
return `${year}-${month}`;
|
|
391
|
+
};
|
|
392
|
+
const lines = [];
|
|
393
|
+
if (this.modelIdentity != null && this.modelIdentity !== "")
|
|
394
|
+
lines.push(this.modelIdentity);
|
|
395
|
+
if (this.cuttingKnowledgeDate != null) {
|
|
396
|
+
const date = this.cuttingKnowledgeDate instanceof Function
|
|
397
|
+
? this.cuttingKnowledgeDate()
|
|
398
|
+
: this.cuttingKnowledgeDate;
|
|
399
|
+
lines.push(`Knowledge cutoff: ${formatCutoff(date, "UTC")}`);
|
|
400
|
+
if (this._jinjaFlags.formatting === 1)
|
|
401
|
+
lines.push([lines.shift(), lines.shift()].filter(Boolean).join(""));
|
|
402
|
+
}
|
|
403
|
+
if (this.todayDate != null) {
|
|
404
|
+
const date = this.todayDate instanceof Function
|
|
405
|
+
? this.todayDate()
|
|
406
|
+
: this.todayDate;
|
|
407
|
+
lines.push(`Current date: ${formatDate(date, undefined)}`);
|
|
408
|
+
}
|
|
409
|
+
if (this.reasoningEffort != null) {
|
|
410
|
+
if (lines.length > 0)
|
|
411
|
+
lines.push("");
|
|
412
|
+
if (this._jinjaFlags.formatting === 1)
|
|
413
|
+
lines.push(`reasoning: ${this.reasoningEffort}`);
|
|
414
|
+
else
|
|
415
|
+
lines.push(`Reasoning: ${this.reasoningEffort}`);
|
|
416
|
+
}
|
|
417
|
+
if (this.requiredChannels.analysis || this.requiredChannels.commentary || this.requiredChannels.final) {
|
|
418
|
+
const channels = [
|
|
419
|
+
...(this.requiredChannels.analysis ? ["analysis"] : []),
|
|
420
|
+
...(this.requiredChannels.commentary ? ["commentary"] : []),
|
|
421
|
+
...(this.requiredChannels.final ? ["final"] : [])
|
|
422
|
+
];
|
|
423
|
+
if (lines.length > 0)
|
|
424
|
+
lines.push("");
|
|
425
|
+
lines.push(`# Valid channels: ${channels.join(", ")}. Channel must be included for every message.`);
|
|
426
|
+
if ((this.requiredChannels.commentary && hasFunctions) || this._jinjaFlags.formatting === 1)
|
|
427
|
+
lines.push("Calls to these tools must go to the commentary channel: 'functions'.");
|
|
428
|
+
}
|
|
429
|
+
return LlamaText([
|
|
430
|
+
new SpecialTokensText("<|start|>system<|message|>"),
|
|
431
|
+
this._jinjaFlags.useSpecialTokensForFullSystemMessage
|
|
432
|
+
? new SpecialTokensText(lines.join("\n"))
|
|
433
|
+
: lines.join("\n"),
|
|
434
|
+
new SpecialTokensText("<|end|>")
|
|
435
|
+
]);
|
|
436
|
+
}
|
|
437
|
+
/** @internal */
|
|
438
|
+
static _getOptionConfigurationsToTestIfCanSupersedeJinjaTemplate() {
|
|
439
|
+
const jinjaParameters = {
|
|
440
|
+
"model_identity": defaultModelIdentity,
|
|
441
|
+
"reasoning_effort": defaultReasoningEffort
|
|
442
|
+
};
|
|
443
|
+
return [
|
|
444
|
+
[{}, {}],
|
|
445
|
+
[{ _jinjaFlags: { emptyLastModelResponseIsFinalMessage: true } }, {}],
|
|
446
|
+
[{}, {}, { additionalRenderParameters: jinjaParameters }],
|
|
447
|
+
[{ _jinjaFlags: { emptyLastModelResponseIsFinalMessage: true } }, {}, { additionalRenderParameters: jinjaParameters }],
|
|
448
|
+
[{ _jinjaFlags: { useSpecialTokensForFullSystemMessage: true } }, {}, { additionalRenderParameters: jinjaParameters }],
|
|
449
|
+
[
|
|
450
|
+
{ _jinjaFlags: { emptyLastModelResponseIsFinalMessage: true, useSpecialTokensForFullSystemMessage: true } },
|
|
451
|
+
{},
|
|
452
|
+
{ additionalRenderParameters: jinjaParameters }
|
|
453
|
+
],
|
|
454
|
+
[
|
|
455
|
+
{
|
|
456
|
+
_jinjaFlags: {
|
|
457
|
+
emptyLastModelResponseIsFinalMessage: true,
|
|
458
|
+
useSpecialTokensForFullSystemMessage: true,
|
|
459
|
+
disableNonFinalFinalMessages: true
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
{},
|
|
463
|
+
{ additionalRenderParameters: jinjaParameters }
|
|
464
|
+
],
|
|
465
|
+
[
|
|
466
|
+
{
|
|
467
|
+
_jinjaFlags: {
|
|
468
|
+
emptyLastModelResponseIsFinalMessage: true,
|
|
469
|
+
useSpecialTokensForFullSystemMessage: true,
|
|
470
|
+
disableNonFinalFinalMessages: true,
|
|
471
|
+
useNonFinalFinalMessage: true
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
{},
|
|
475
|
+
{ additionalRenderParameters: jinjaParameters }
|
|
476
|
+
],
|
|
477
|
+
[
|
|
478
|
+
{
|
|
479
|
+
_jinjaFlags: {
|
|
480
|
+
emptyLastModelResponseIsFinalMessage: true,
|
|
481
|
+
useSpecialTokensForFullSystemMessage: true,
|
|
482
|
+
useNonFinalFinalMessage: true
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
{},
|
|
486
|
+
{ additionalRenderParameters: jinjaParameters }
|
|
487
|
+
],
|
|
488
|
+
[
|
|
489
|
+
{
|
|
490
|
+
_jinjaFlags: {
|
|
491
|
+
emptyLastModelResponseIsFinalMessage: true,
|
|
492
|
+
useSpecialTokensForFullSystemMessage: true,
|
|
493
|
+
useNonFinalFinalMessage: true,
|
|
494
|
+
noFinalMessages: true
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
{},
|
|
498
|
+
{ additionalRenderParameters: jinjaParameters }
|
|
499
|
+
],
|
|
500
|
+
[
|
|
501
|
+
{
|
|
502
|
+
_jinjaFlags: {
|
|
503
|
+
emptyLastModelResponseIsFinalMessage: true,
|
|
504
|
+
useSpecialTokensForFullSystemMessage: true,
|
|
505
|
+
useNonFinalFinalMessage: true,
|
|
506
|
+
noFinalMessages: true,
|
|
507
|
+
formatting: 1
|
|
508
|
+
}
|
|
509
|
+
},
|
|
510
|
+
{},
|
|
511
|
+
{ additionalRenderParameters: jinjaParameters }
|
|
512
|
+
],
|
|
513
|
+
[{ todayDate: null }, {}, {}],
|
|
514
|
+
[{ cuttingKnowledgeDate: null }, {}, {}],
|
|
515
|
+
[{ reasoningEffort: null }, {}, {}],
|
|
516
|
+
[{ todayDate: null, cuttingKnowledgeDate: null }, {}, {}],
|
|
517
|
+
[{ todayDate: null, cuttingKnowledgeDate: null, reasoningEffort: null }, {}, {}]
|
|
518
|
+
];
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
function formatDate(date, timezone) {
|
|
522
|
+
const day = date.toLocaleDateString("en-US", { day: "numeric", timeZone: timezone }).padStart(2, "0");
|
|
523
|
+
const month = date.toLocaleDateString("en-US", { month: "numeric", timeZone: timezone }).padStart(2, "0");
|
|
524
|
+
const year = date.toLocaleDateString("en-US", { year: "numeric", timeZone: timezone }).padStart(4, "0");
|
|
525
|
+
return `${year}-${month}-${day}`;
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=HarmonyChatWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HarmonyChatWrapper.js","sourceRoot":"","sources":["../../src/chatWrappers/HarmonyChatWrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,12 +15,13 @@ import { MistralChatWrapper } from "../MistralChatWrapper.js";
|
|
|
15
15
|
import { Tokenizer } from "../../types.js";
|
|
16
16
|
import { LlamaModel } from "../../evaluator/LlamaModel/LlamaModel.js";
|
|
17
17
|
import { QwenChatWrapper } from "../QwenChatWrapper.js";
|
|
18
|
+
import { HarmonyChatWrapper } from "../HarmonyChatWrapper.js";
|
|
18
19
|
import type { GgufFileInfo } from "../../gguf/types/GgufFileInfoTypes.js";
|
|
19
|
-
export declare const specializedChatWrapperTypeNames: readonly ["general", "deepSeek", "qwen", "llama3.2-lightweight", "llama3.1", "llama3", "llama2Chat", "mistral", "alpacaChat", "functionary", "chatML", "falconChat", "gemma"];
|
|
20
|
+
export declare const specializedChatWrapperTypeNames: readonly ["general", "deepSeek", "qwen", "llama3.2-lightweight", "llama3.1", "llama3", "llama2Chat", "mistral", "alpacaChat", "functionary", "chatML", "falconChat", "gemma", "harmony"];
|
|
20
21
|
export type SpecializedChatWrapperTypeName = (typeof specializedChatWrapperTypeNames)[number];
|
|
21
22
|
export declare const templateChatWrapperTypeNames: readonly ["template", "jinjaTemplate"];
|
|
22
23
|
export type TemplateChatWrapperTypeName = (typeof templateChatWrapperTypeNames)[number];
|
|
23
|
-
export declare const resolvableChatWrapperTypeNames: readonly ["auto", "general", "deepSeek", "qwen", "llama3.2-lightweight", "llama3.1", "llama3", "llama2Chat", "mistral", "alpacaChat", "functionary", "chatML", "falconChat", "gemma", "template", "jinjaTemplate"];
|
|
24
|
+
export declare const resolvableChatWrapperTypeNames: readonly ["auto", "general", "deepSeek", "qwen", "llama3.2-lightweight", "llama3.1", "llama3", "llama2Chat", "mistral", "alpacaChat", "functionary", "chatML", "falconChat", "gemma", "harmony", "template", "jinjaTemplate"];
|
|
24
25
|
export type ResolvableChatWrapperTypeName = (typeof resolvableChatWrapperTypeNames)[number];
|
|
25
26
|
export declare const chatWrappers: Readonly<{
|
|
26
27
|
readonly general: typeof GeneralChatWrapper;
|
|
@@ -36,6 +37,7 @@ export declare const chatWrappers: Readonly<{
|
|
|
36
37
|
readonly chatML: typeof ChatMLChatWrapper;
|
|
37
38
|
readonly falconChat: typeof FalconChatWrapper;
|
|
38
39
|
readonly gemma: typeof GemmaChatWrapper;
|
|
40
|
+
readonly harmony: typeof HarmonyChatWrapper;
|
|
39
41
|
readonly template: typeof TemplateChatWrapper;
|
|
40
42
|
readonly jinjaTemplate: typeof JinjaTemplateChatWrapper;
|
|
41
43
|
}>;
|
|
@@ -17,11 +17,12 @@ import { MistralChatWrapper } from "../MistralChatWrapper.js";
|
|
|
17
17
|
import { includesText } from "../../utils/includesText.js";
|
|
18
18
|
import { LlamaModel } from "../../evaluator/LlamaModel/LlamaModel.js";
|
|
19
19
|
import { QwenChatWrapper } from "../QwenChatWrapper.js";
|
|
20
|
+
import { HarmonyChatWrapper } from "../HarmonyChatWrapper.js";
|
|
20
21
|
import { isJinjaTemplateEquivalentToSpecializedChatWrapper } from "./isJinjaTemplateEquivalentToSpecializedChatWrapper.js";
|
|
21
22
|
import { getModelLinageNames } from "./getModelLinageNames.js";
|
|
22
23
|
export const specializedChatWrapperTypeNames = Object.freeze([
|
|
23
24
|
"general", "deepSeek", "qwen", "llama3.2-lightweight", "llama3.1", "llama3", "llama2Chat", "mistral", "alpacaChat", "functionary",
|
|
24
|
-
"chatML", "falconChat", "gemma"
|
|
25
|
+
"chatML", "falconChat", "gemma", "harmony"
|
|
25
26
|
]);
|
|
26
27
|
export const templateChatWrapperTypeNames = Object.freeze([
|
|
27
28
|
"template", "jinjaTemplate"
|
|
@@ -45,11 +46,15 @@ export const chatWrappers = Object.freeze({
|
|
|
45
46
|
"chatML": ChatMLChatWrapper,
|
|
46
47
|
"falconChat": FalconChatWrapper,
|
|
47
48
|
"gemma": GemmaChatWrapper,
|
|
49
|
+
"harmony": HarmonyChatWrapper,
|
|
48
50
|
"template": TemplateChatWrapper,
|
|
49
51
|
"jinjaTemplate": JinjaTemplateChatWrapper
|
|
50
52
|
});
|
|
51
53
|
const chatWrapperToConfigType = new Map(Object.entries(chatWrappers)
|
|
52
54
|
.map(([configType, Wrapper]) => ([Wrapper, configType])));
|
|
55
|
+
const specializedChatWrapperRelatedTexts = {
|
|
56
|
+
"harmony": ["gpt", "gpt-oss"]
|
|
57
|
+
};
|
|
53
58
|
export function resolveChatWrapper(options, modelOptions) {
|
|
54
59
|
if (options instanceof LlamaModel)
|
|
55
60
|
return resolveChatWrapper({
|
|
@@ -189,11 +194,15 @@ export function resolveChatWrapper(options, modelOptions) {
|
|
|
189
194
|
return createSpecializedChatWrapper(MistralChatWrapper);
|
|
190
195
|
else if (includesText(modelNames, ["Gemma", "Gemma 2"]))
|
|
191
196
|
return createSpecializedChatWrapper(GemmaChatWrapper);
|
|
197
|
+
else if (includesText(modelNames, ["gpt-oss", "Gpt Oss", "Gpt-Oss", "openai_gpt-oss", "Openai_Gpt Oss", "openai.gpt-oss", "Openai.Gpt Oss"]))
|
|
198
|
+
return createSpecializedChatWrapper(HarmonyChatWrapper);
|
|
192
199
|
}
|
|
193
200
|
// try to find a pattern in the Jinja template to resolve to a specialized chat wrapper,
|
|
194
201
|
// with a logic similar to `llama.cpp`'s `llama_chat_apply_template_internal` function
|
|
195
202
|
if (modelJinjaTemplate != null && modelJinjaTemplate.trim() !== "") {
|
|
196
|
-
if (modelJinjaTemplate.includes("<|
|
|
203
|
+
if (modelJinjaTemplate.includes("<|start|>") && modelJinjaTemplate.includes("<|channel|>"))
|
|
204
|
+
return createSpecializedChatWrapper(HarmonyChatWrapper);
|
|
205
|
+
else if (modelJinjaTemplate.includes("<|im_start|>"))
|
|
197
206
|
return createSpecializedChatWrapper(ChatMLChatWrapper);
|
|
198
207
|
else if (modelJinjaTemplate.includes("[INST]"))
|
|
199
208
|
return createSpecializedChatWrapper(Llama2ChatWrapper, {
|
|
@@ -288,16 +297,22 @@ function orderChatWrapperNamesByAssumedCompatibilityWithModel(chatWrapperNames,
|
|
|
288
297
|
return existsPoints + (((index + 1) / fullText.length) * positionPoints);
|
|
289
298
|
return 0;
|
|
290
299
|
}
|
|
300
|
+
function getPointsForWrapperName(wrapperName, fullText, existsPoints, positionPoints) {
|
|
301
|
+
const additionalNames = specializedChatWrapperRelatedTexts[wrapperName] ?? [];
|
|
302
|
+
return [wrapperName, ...additionalNames]
|
|
303
|
+
.map((pattern) => getPointsForTextMatch(pattern, fullText, existsPoints, positionPoints))
|
|
304
|
+
.reduce((res, item) => Math.max(res, item), 0);
|
|
305
|
+
}
|
|
291
306
|
const modelName = fileInfo?.metadata?.general?.name;
|
|
292
307
|
return chatWrapperNames
|
|
293
308
|
.slice()
|
|
294
309
|
.sort((a, b) => {
|
|
295
310
|
let aPoints = 0;
|
|
296
311
|
let bPoints = 0;
|
|
297
|
-
aPoints +=
|
|
298
|
-
bPoints +=
|
|
299
|
-
aPoints +=
|
|
300
|
-
bPoints +=
|
|
312
|
+
aPoints += getPointsForWrapperName(a, modelName, rankPoints.modelName, rankPoints.modelNamePosition);
|
|
313
|
+
bPoints += getPointsForWrapperName(b, modelName, rankPoints.modelName, rankPoints.modelNamePosition);
|
|
314
|
+
aPoints += getPointsForWrapperName(a, filename, rankPoints.fileName, rankPoints.fileNamePosition);
|
|
315
|
+
bPoints += getPointsForWrapperName(b, filename, rankPoints.fileName, rankPoints.fileNamePosition);
|
|
301
316
|
return bPoints - aPoints;
|
|
302
317
|
});
|
|
303
318
|
}
|