78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { deriveFallbackCategory, enrichMessagesWithCategories } from './categoryHelper';
|
|
import { ChatMessage } from '../types/workbench';
|
|
|
|
test('deriveFallbackCategory identifies categories correctly', () => {
|
|
assert.equal(deriveFallbackCategory({ role: 'system', content: '系统启动' }), 'system');
|
|
|
|
assert.equal(
|
|
deriveFallbackCategory({
|
|
role: 'assistant',
|
|
intentTag: '🎯 项目初始画像与责任人就绪',
|
|
content: '初始化完成',
|
|
}),
|
|
'milestone'
|
|
);
|
|
|
|
assert.equal(
|
|
deriveFallbackCategory({
|
|
role: 'assistant',
|
|
intentTag: '📚 监管法规与核心参数咨询',
|
|
content: '法规要点解析',
|
|
}),
|
|
'consult'
|
|
);
|
|
|
|
assert.equal(
|
|
deriveFallbackCategory({
|
|
role: 'assistant',
|
|
phaseEvents: [{ step: '1', icon: '👥', label: '组装小队', status: 'completed' }],
|
|
content: '开始执行声学建模任务',
|
|
}),
|
|
'task'
|
|
);
|
|
|
|
assert.equal(
|
|
deriveFallbackCategory({
|
|
role: 'assistant',
|
|
intentTag: '驳回门禁',
|
|
meta: { interactive_card: true },
|
|
content: '请重新审核',
|
|
}),
|
|
'review'
|
|
);
|
|
});
|
|
|
|
test('enrichMessagesWithCategories backfills categories without overwriting existing ones', () => {
|
|
const input: ChatMessage[] = [
|
|
{
|
|
id: 'm-1',
|
|
sessionId: 'sess-1',
|
|
role: 'user',
|
|
content: '请教三类超声设备的注册审评要求和关键工程参数',
|
|
timestamp: '10:00',
|
|
},
|
|
{
|
|
id: 'm-2',
|
|
sessionId: 'sess-1',
|
|
role: 'assistant',
|
|
content: '三类超声器械审评要求如下:1. 强标符合性...',
|
|
timestamp: '10:01',
|
|
},
|
|
{
|
|
id: 'm-3',
|
|
sessionId: 'sess-1',
|
|
role: 'user',
|
|
category: 'task',
|
|
content: '启动声学仿真任务',
|
|
timestamp: '10:02',
|
|
},
|
|
];
|
|
|
|
const enriched = enrichMessagesWithCategories(input);
|
|
assert.equal(enriched[0].category, 'consult');
|
|
assert.equal(enriched[1].category, 'consult'); // inherited / derived
|
|
assert.equal(enriched[2].category, 'task'); // retained original
|
|
});
|