NODEDC_1C/llm_normalizer/backend/tests/assistantMetaFollowupPolicy...

76 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from "vitest";
import { createAssistantMetaFollowupPolicy } from "../src/services/assistantMetaFollowupPolicy";
const policy = createAssistantMetaFollowupPolicy({
hasAssistantDataScopeMetaQuestionSignal: (text: unknown) =>
/по какой компании|какая база/i.test(String(text ?? "")),
shouldHandleAsAssistantCapabilityMetaQuery: (text: unknown) =>
/что ты можешь|что ты умеешь/i.test(String(text ?? "")),
hasMetaAnswerFollowupSignal: (text: unknown) =>
/это норм|что думаешь/i.test(String(text ?? ""))
});
describe("assistantMetaFollowupPolicy", () => {
it("collects meta signals across message variants", () => {
const signals = policy.resolveMetaSignalSet({
rawUserMessage: "",
repairedRawUserMessage: "",
effectiveAddressUserMessage: "по какой компании мы можем работать?",
repairedEffectiveAddressUserMessage: ""
});
expect(signals.dataScopeMetaQuery).toBe(true);
expect(signals.capabilityMetaQuery).toBe(false);
expect(signals.metaAnswerFollowupSignal).toBe(false);
});
it("treats historical capability phrasing as capability meta follow-up", () => {
const signals = policy.resolveMetaSignalSet({
rawUserMessage: "а исторические остатки тоже можешь?",
repairedRawUserMessage: "",
effectiveAddressUserMessage: "",
repairedEffectiveAddressUserMessage: ""
});
expect(signals.capabilityMetaQuery).toBe(true);
});
it("resolves hard meta mode with data retrieval guard", () => {
expect(
policy.resolveHardMetaMode({
dataScopeMetaQuery: true,
capabilityMetaQuery: false,
dataRetrievalSignal: false
})
).toBe("data_scope");
expect(
policy.resolveHardMetaMode({
dataScopeMetaQuery: false,
capabilityMetaQuery: true,
dataRetrievalSignal: true
})
).toBeNull();
});
it("detects evaluative meta follow-up over grounded answer", () => {
const detected = policy.isMetaFollowupOverGroundedAnswer({
followupContext: { previous_intent: "vat_payable_forecast" },
hasPriorAddressAnswerContext: true,
metaAnswerFollowupSignal: true,
vatEvaluativeFollowupSignal: false,
dataScopeMetaQuery: false,
capabilityMetaQuery: false,
aggregateBusinessAnalyticsSignal: false,
dataRetrievalSignal: false,
strongDataSignal: false,
resolvedMode: "unsupported",
resolvedIntent: "unknown",
llmContractIntent: "unknown",
llmContractMode: "unsupported"
});
expect(detected).toBe(true);
});
});