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' },
  ]);
});