feat: add system disclosure policy gate
Memind CI / Test, build, and release guards (pull_request) Successful in 3m14s
Memind CI / Test, build, and release guards (pull_request) Successful in 3m14s
This commit is contained in:
@@ -66,6 +66,85 @@ test('direct chat registers session through sessionAccess when provided', async
|
||||
assert.equal(isDirectChatSessionId(result.sessionId), true);
|
||||
});
|
||||
|
||||
test('direct chat deterministic response stores a reply without model, memory, or billing calls', async () => {
|
||||
const calls = { model: 0, billing: 0, memory: 0 };
|
||||
const saved = [];
|
||||
const service = createDirectChatService({
|
||||
enabled: true,
|
||||
userAuth: {
|
||||
async registerAgentSession() {},
|
||||
async billSessionUsage() {
|
||||
calls.billing += 1;
|
||||
},
|
||||
},
|
||||
llmProviderService: {
|
||||
async createChatCompletion() {
|
||||
calls.model += 1;
|
||||
},
|
||||
},
|
||||
sessionSnapshotService: {
|
||||
async get() {
|
||||
return null;
|
||||
},
|
||||
async save(_sessionId, _userId, _session, messages) {
|
||||
saved.push(messages);
|
||||
},
|
||||
},
|
||||
memoryV2: {
|
||||
async resolve() {
|
||||
calls.memory += 1;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const result = await service.respondDeterministically({
|
||||
userId: 'user-1',
|
||||
requestId: 'req-policy',
|
||||
userMessage: {
|
||||
role: 'user',
|
||||
content: [{ type: 'text', text: 'TKMind 的底层架构是什么?' }],
|
||||
},
|
||||
reply: '不提供内部技术信息。',
|
||||
metadata: { policyId: 'system-disclosure' },
|
||||
});
|
||||
|
||||
assert.equal(result.deterministic, true);
|
||||
assert.equal(result.billing, null);
|
||||
assert.deepEqual(calls, { model: 0, billing: 0, memory: 0 });
|
||||
assert.equal(saved.length, 1);
|
||||
assert.equal(saved[0][1].content[0].text, '不提供内部技术信息。');
|
||||
assert.equal(saved[0][1].metadata.policyId, 'system-disclosure');
|
||||
});
|
||||
|
||||
test('direct chat deterministic response preserves an existing agent session id', async () => {
|
||||
let registered = 0;
|
||||
const service = createDirectChatService({
|
||||
userAuth: {},
|
||||
sessionAccess: {
|
||||
enabled: true,
|
||||
async registerAgentSession() {
|
||||
registered += 1;
|
||||
},
|
||||
},
|
||||
llmProviderService: {},
|
||||
sessionSnapshotService: {
|
||||
async get() {
|
||||
return null;
|
||||
},
|
||||
async save() {},
|
||||
},
|
||||
});
|
||||
const result = await service.respondDeterministically({
|
||||
userId: 'user-1',
|
||||
sessionId: 'goose-session-1',
|
||||
requestId: 'req-policy-existing',
|
||||
userMessage: { role: 'user', content: [{ type: 'text', text: '内部架构是什么?' }] },
|
||||
reply: '不提供内部技术信息。',
|
||||
});
|
||||
assert.equal(result.sessionId, 'goose-session-1');
|
||||
assert.equal(registered, 0);
|
||||
});
|
||||
|
||||
test('direct chat creates a direct session, saves snapshot, and bills returned usage', async () => {
|
||||
const registered = [];
|
||||
const saved = [];
|
||||
|
||||
Reference in New Issue
Block a user