File size: 3,041 Bytes
8d3471e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
async function loadUtils() {
return import('../../webui/src/features/chatHistory/chatHistoryUtils.js');
}
test('chat history strict parser merges current input file placeholder', async () => {
const {
buildListModeMessages,
} = await loadUtils();
const t = (key) => key;
const item = {
messages: [{
role: 'user',
content: 'Continue from the latest state in the attached DS2API_HISTORY.txt context. Treat it as the current working state and answer the latest user request directly.',
}],
history_text: [
'<|begin▁of▁sentence|>',
'<|User|>hello',
'<|Assistant|>hi<|end▁of▁sentence|>',
].join(''),
};
const result = buildListModeMessages(item, t);
assert.equal(result.historyMerged, true);
assert.deepEqual(result.messages, [
{ role: 'user', content: 'hello' },
{ role: 'assistant', content: 'hi' },
]);
});
test('chat history strict parser inserts history after system messages', async () => {
const {
buildListModeMessages,
} = await loadUtils();
const t = (key) => key;
const item = {
messages: [
{ role: 'system', content: 'policy' },
{ role: 'user', content: 'latest' },
],
history_text: [
'<|begin▁of▁sentence|>',
'<|User|>old',
'<|Assistant|>done<|end▁of▁sentence|>',
].join(''),
};
const result = buildListModeMessages(item, t);
assert.equal(result.historyMerged, true);
assert.deepEqual(result.messages, [
{ role: 'system', content: 'policy' },
{ role: 'user', content: 'old' },
{ role: 'assistant', content: 'done' },
{ role: 'user', content: 'latest' },
]);
});
test('chat history transcript parser replaces current input file placeholder', async () => {
const {
buildListModeMessages,
} = await loadUtils();
const t = (key) => key;
const item = {
messages: [{
role: 'user',
content: 'Continue from the latest state in the attached DS2API_HISTORY.txt context. Treat it as the current working state and answer the latest user request directly.',
}],
history_text: [
'# DS2API_HISTORY.txt',
'Prior conversation history and tool progress.',
'',
'=== 1. SYSTEM ===',
'policy',
'',
'=== 2. USER ===',
'hello',
'',
'=== 3. ASSISTANT ===',
'hi',
'',
'=== 4. TOOL ===',
'[name=search_web tool_call_id=call_1]',
'{"ok":true}',
'',
'=== 5. USER ===',
'latest',
'',
].join('\n'),
};
const result = buildListModeMessages(item, t);
assert.equal(result.historyMerged, true);
assert.deepEqual(result.messages, [
{ role: 'system', content: 'policy' },
{ role: 'user', content: 'hello' },
{ role: 'assistant', content: 'hi' },
{ role: 'tool', content: '[name=search_web tool_call_id=call_1]\n{"ok":true}' },
{ role: 'user', content: 'latest' },
]);
});
|