import assert from 'node:assert/strict'; import test from 'node:test'; import { classifyWithRules } from './chat-intent-router.mjs'; import { loadPersonaIntentCases } from './scripts/simulate-persona-intent-routing.mjs'; test('persona intent cases: rule utterances hit rules, llm utterances defer', async () => { const { cases } = await loadPersonaIntentCases(); assert.ok(cases.length >= 20); const personas = new Set(cases.map((item) => item.persona)); for (const required of ['青年男性', '青年女性', '中年男性', '中年女性', '老年', '小孩']) { assert.ok(personas.has(required), `missing persona ${required}`); } for (const item of cases) { const result = classifyWithRules({ text: item.text, sessionId: 'h5direct_persona_sim', sessionMessageCount: 3, userMessage: { role: 'user', content: [{ type: 'text', text: item.text }], metadata: { displayText: item.text }, }, chatSessionDeferEnabled: true, chatSessionDeferMinTextLength: 12, }); if (item.expectSource === 'llm') { assert.equal(result, null, `${item.id} should defer to llm: ${item.text}`); continue; } assert.equal(result?.route, item.expectRoute, `${item.id} route ${item.text}`); assert.equal(result?.source, 'rule', `${item.id} source ${item.text}`); } });