Архитектура: перенести base address tool gate из assistantService в assistantRoutePolicy и выровнять top-level orchestration owner
This commit is contained in:
@@ -85,6 +85,7 @@ function buildPolicy(overrides: Record<string, unknown> = {}) {
|
||||
contextualMemoryRecapFollowupDetected: false
|
||||
}),
|
||||
findLastAddressAssistantItem: () => null,
|
||||
hasAddressLlmPreDecomposeCandidate: () => false,
|
||||
resolveAddressToolGateDecision: () => ({
|
||||
runAddressLane: false,
|
||||
decision: "skip_address_lane",
|
||||
@@ -159,6 +160,28 @@ describe("assistantRoutePolicy", () => {
|
||||
expect(decision.orchestrationContract?.semantic_route_arbitration?.supported_address_intent_detected).toBe(true);
|
||||
});
|
||||
|
||||
it("uses internal route-policy tool gate when no external override is provided", () => {
|
||||
const policy = buildPolicy({
|
||||
resolveAddressToolGateDecision: undefined,
|
||||
detectAddressQuestionMode: () => ({ mode: "address_query", confidence: "high" }),
|
||||
resolveAddressIntent: () => ({ intent: "inventory_on_hand_as_of_date", confidence: "high" }),
|
||||
hasAddressLlmPreDecomposeCandidate: () => true
|
||||
});
|
||||
|
||||
const decision = policy.resolveAssistantOrchestrationDecision({
|
||||
rawUserMessage: "какие остатки на складе",
|
||||
effectiveAddressUserMessage: "какие остатки на складе",
|
||||
followupContext: null,
|
||||
llmPreDecomposeMeta: null,
|
||||
useMock: false
|
||||
});
|
||||
|
||||
expect(decision.runAddressLane).toBe(true);
|
||||
expect(decision.toolGateDecision).toBe("run_address_lane");
|
||||
expect(decision.toolGateReason).toBe("address_mode_classifier_detected");
|
||||
expect(decision.livingMode).toBe("address_data");
|
||||
});
|
||||
|
||||
it("does not let deep session continuation override an exact VAT period route", () => {
|
||||
const policy = buildPolicy({
|
||||
detectAddressQuestionMode: () => ({ mode: "address_query", confidence: "high" }),
|
||||
|
||||
Reference in New Issue
Block a user