29 lines
1.4 KiB
JavaScript
29 lines
1.4 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const {PipelineFallbackNotificationRegistry} = await import("../dist/ai/user-request-pipeline/fallback-notifier-registry.js");
|
|
const {resolvePipelineFallbackText} = await import("../dist/ai/user-request-pipeline/fallback-notifier-text.js");
|
|
|
|
test("pipeline fallback text maps notify_user to a user-facing message", () => {
|
|
assert.match(resolvePipelineFallbackText("document_rag", "notify_user"), /RAG/i);
|
|
assert.match(resolvePipelineFallbackText("speech_to_text", "notify_user"), /transcription/i);
|
|
assert.match(resolvePipelineFallbackText("tool_loop", "notify_user"), /tool/i);
|
|
});
|
|
|
|
test("pipeline fallback text stays silent for continue_without_stage", () => {
|
|
assert.equal(resolvePipelineFallbackText("document_rag", "continue_without_stage"), undefined);
|
|
assert.equal(resolvePipelineFallbackText("tool_loop", "continue_without_stage"), undefined);
|
|
});
|
|
|
|
test("pipeline fallback notification registry deduplicates one request-stage-action", () => {
|
|
const registry = new PipelineFallbackNotificationRegistry();
|
|
const decision = {
|
|
stage: "tool_loop",
|
|
action: "notify_user",
|
|
};
|
|
|
|
assert.equal(registry.claim("request-1", decision), true);
|
|
assert.equal(registry.claim("request-1", decision), false);
|
|
assert.equal(registry.claim("request-2", decision), true);
|
|
});
|