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); }); });