АРЧ АП11 - Вынести meta и memory recap policy из route runtime и закрыть Phase 5 агентным прогоном

This commit is contained in:
2026-04-17 11:39:45 +03:00
parent b3572d9d11
commit 15fa643fc8
17 changed files with 1342 additions and 142 deletions
@@ -50,8 +50,9 @@ export function createAssistantRoutePolicy(deps) {
mergeKnownOrganizations,
normalizeOrganizationScopeValue,
resolveOrganizationSelectionFromMessage,
hasAssistantDataScopeMetaQuestionSignal,
shouldHandleAsAssistantCapabilityMetaQuery,
resolveMetaSignalSet,
resolveHardMetaMode,
isMetaFollowupOverGroundedAnswer,
hasDataRetrievalRequestSignal,
hasAggregateBusinessAnalyticsSignal,
hasStandaloneAddressTopicSignal,
@@ -67,11 +68,9 @@ export function createAssistantRoutePolicy(deps) {
hasShortDebtMirrorFollowupSignal,
isInventorySelectedObjectIntent,
hasShortInventoryObjectFollowupSignal,
hasHistoricalCapabilityFollowupSignal,
isGroundedInventoryContextDebug,
hasConversationMemoryRecallFollowupSignal,
resolveRouteMemorySignals,
findLastAddressAssistantItem,
hasMetaAnswerFollowupSignal,
resolveAddressToolGateDecision,
hasSameDateAccountFollowupSignalForPredecompose,
hasLooseAllTimeAddressLookupSignal,
@@ -112,14 +111,14 @@ export function createAssistantRoutePolicy(deps) {
organizationClarificationCandidates.some((candidate) => normalizeOrganizationScopeValue(candidate) === organizationClarificationSelectionFromScope)
? organizationClarificationSelectionFromScope
: null);
const dataScopeMetaQuery = hasAssistantDataScopeMetaQuestionSignal(rawUserMessage) ||
hasAssistantDataScopeMetaQuestionSignal(repairedRawUserMessage) ||
hasAssistantDataScopeMetaQuestionSignal(effectiveAddressUserMessage) ||
hasAssistantDataScopeMetaQuestionSignal(repairedEffectiveAddressUserMessage);
const capabilityMetaQuery = shouldHandleAsAssistantCapabilityMetaQuery(rawUserMessage) ||
shouldHandleAsAssistantCapabilityMetaQuery(repairedRawUserMessage) ||
shouldHandleAsAssistantCapabilityMetaQuery(effectiveAddressUserMessage) ||
shouldHandleAsAssistantCapabilityMetaQuery(repairedEffectiveAddressUserMessage);
const metaSignals = resolveMetaSignalSet({
rawUserMessage,
repairedRawUserMessage,
effectiveAddressUserMessage,
repairedEffectiveAddressUserMessage
});
const dataScopeMetaQuery = metaSignals.dataScopeMetaQuery;
const capabilityMetaQuery = metaSignals.capabilityMetaQuery;
const dataRetrievalSignal = hasDataRetrievalRequestSignal(rawUserMessage) ||
hasDataRetrievalRequestSignal(repairedRawUserMessage) ||
hasDataRetrievalRequestSignal(effectiveAddressUserMessage) ||
@@ -225,30 +224,29 @@ export function createAssistantRoutePolicy(deps) {
(llmFirstUnsupportedCandidate || llmContractMode === null) &&
!protectedInventoryShortFollowup &&
!organizationClarificationContinuationDetected);
const contextualHistoricalCapabilityFollowupDetected = Boolean(capabilityMetaQuery &&
!dataScopeMetaQuery &&
!dataRetrievalSignal &&
(hasHistoricalCapabilityFollowupSignal(rawUserMessage) ||
hasHistoricalCapabilityFollowupSignal(repairedRawUserMessage) ||
hasHistoricalCapabilityFollowupSignal(effectiveAddressUserMessage) ||
hasHistoricalCapabilityFollowupSignal(repairedEffectiveAddressUserMessage)) &&
isGroundedInventoryContextDebug(lastGroundedAddressDebug));
const contextualMemoryRecapFollowupDetected = Boolean(!dataScopeMetaQuery &&
!capabilityMetaQuery &&
!dataRetrievalSignal &&
!strongDataSignal &&
!aggregateBusinessAnalyticsSignal &&
(hasConversationMemoryRecallFollowupSignal(rawUserMessage) ||
hasConversationMemoryRecallFollowupSignal(repairedRawUserMessage) ||
hasConversationMemoryRecallFollowupSignal(effectiveAddressUserMessage) ||
hasConversationMemoryRecallFollowupSignal(repairedEffectiveAddressUserMessage)) &&
(lastGroundedAddressDebug ||
findLastAddressAssistantItem(sessionItems)?.debug));
const hardMetaMode = dataScopeMetaQuery
? "data_scope"
: capabilityMetaQuery && !dataRetrievalSignal
? "capability"
: null;
const lastAddressAssistantDebug = sessionItems
? findLastAddressAssistantItem(sessionItems)?.debug ?? null
: null;
const memorySignals = resolveRouteMemorySignals({
rawUserMessage,
repairedRawUserMessage,
effectiveAddressUserMessage,
repairedEffectiveAddressUserMessage,
dataScopeMetaQuery,
capabilityMetaQuery,
dataRetrievalSignal,
strongDataSignal,
aggregateBusinessAnalyticsSignal,
lastGroundedAddressDebug,
hasPriorAddressDebug: Boolean(lastGroundedAddressDebug || lastAddressAssistantDebug)
});
const contextualHistoricalCapabilityFollowupDetected = memorySignals.contextualHistoricalCapabilityFollowupDetected;
const contextualMemoryRecapFollowupDetected = memorySignals.contextualMemoryRecapFollowupDetected;
const hardMetaMode = resolveHardMetaMode({
dataScopeMetaQuery,
capabilityMetaQuery,
dataRetrievalSignal
});
if (hardMetaMode === "data_scope") {
return {
runAddressLane: false,
@@ -389,10 +387,7 @@ export function createAssistantRoutePolicy(deps) {
}
};
}
const metaAnswerFollowupSignal = hasMetaAnswerFollowupSignal(rawUserMessage) ||
hasMetaAnswerFollowupSignal(repairedRawUserMessage) ||
hasMetaAnswerFollowupSignal(effectiveAddressUserMessage) ||
hasMetaAnswerFollowupSignal(repairedEffectiveAddressUserMessage);
const metaAnswerFollowupSignal = metaSignals.metaAnswerFollowupSignal;
const baseToolGate = resolveAddressToolGateDecision(effectiveAddressUserMessage, followupContext, llmPreDecomposeMeta, rawUserMessage);
const preserveAddressLaneSignal = Boolean((llmPreDecomposeMeta?.llmCanonicalCandidateDetected &&
llmPreDecomposeMeta?.applied &&
@@ -497,18 +492,21 @@ export function createAssistantRoutePolicy(deps) {
sessionItems
}));
const hasPriorAddressAnswerContext = Boolean(lastGroundedAddressDebug || toNonEmptyString(followupContext?.previous_intent));
const metaFollowupOverGroundedAnswer = Boolean(followupContext &&
hasPriorAddressAnswerContext &&
(metaAnswerFollowupSignal || vatEvaluativeFollowupSignal) &&
!dataScopeMetaQuery &&
!capabilityMetaQuery &&
!aggregateBusinessAnalyticsSignal &&
!dataRetrievalSignal &&
!strongDataSignal &&
resolvedModeDetection.mode !== "address_query" &&
resolvedIntentResolution.intent === "unknown" &&
(!llmContractIntent || llmContractIntent === "unknown") &&
llmContractMode !== "address_query");
const metaFollowupOverGroundedAnswer = isMetaFollowupOverGroundedAnswer({
followupContext,
hasPriorAddressAnswerContext,
metaAnswerFollowupSignal,
vatEvaluativeFollowupSignal,
dataScopeMetaQuery,
capabilityMetaQuery,
aggregateBusinessAnalyticsSignal,
dataRetrievalSignal,
strongDataSignal,
resolvedMode: resolvedModeDetection.mode,
resolvedIntent: resolvedIntentResolution.intent,
llmContractIntent,
llmContractMode
});
let runAddressLane = Boolean(baseToolGate?.runAddressLane);
let toolGateDecision = String(baseToolGate?.decision ?? "skip_address_lane");
let toolGateReason = String(baseToolGate?.reason ?? "no_address_signal_after_l0");