АРЧ АП11 - Выделить route policy adapter для архитектуры assistant runtime

This commit is contained in:
2026-04-15 23:10:46 +03:00
parent 1d95ed9b60
commit 9d5928125d
6 changed files with 207 additions and 16 deletions
@@ -1,6 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildAssistantAddressOrchestrationRuntime = buildAssistantAddressOrchestrationRuntime;
const assistantRoutePolicyRuntimeAdapter_1 = require("./assistantRoutePolicyRuntimeAdapter");
function hasSelectedObjectInventorySignal(text) {
return /(?:по\s+выбранному\s+объекту|по\s+этой\s+позиции|по\s+этому\s+товару|selected\s+object)/iu.test(String(text ?? ""));
}
@@ -78,26 +79,25 @@ async function buildAssistantAddressOrchestrationRuntime(input) {
carryover = input.resolveAddressFollowupCarryoverContext(input.userMessage, input.sessionItems, addressInputMessage, addressPreDecompose, input.sessionAddressNavigationState);
}
const followupContext = carryover?.followupContext ?? null;
const orchestrationDecision = input.resolveAssistantOrchestrationDecision({
const routePolicyRuntime = (0, assistantRoutePolicyRuntimeAdapter_1.runAssistantRoutePolicyRuntime)({
rawUserMessage: input.userMessage,
effectiveAddressUserMessage: addressInputMessage,
followupContext,
llmPreDecomposeMeta: addressPreDecompose,
sessionItems: input.sessionItems,
sessionOrganizationScope: input.sessionOrganizationScope ?? null,
useMock: input.useMock
useMock: input.useMock,
resolveAssistantOrchestrationDecision: input.resolveAssistantOrchestrationDecision
});
const orchestrationDecision = routePolicyRuntime.orchestrationDecision;
const dialogContinuationContract = input.buildAddressDialogContinuationContractV2(input.userMessage, addressInputMessage, carryover, addressPreDecompose);
const addressRuntimeMeta = {
...addressPreDecompose,
toolGateDecision: orchestrationDecision.toolGateDecision ?? null,
toolGateReason: orchestrationDecision.toolGateReason ?? null,
dialogContinuationContract,
orchestrationContract: orchestrationDecision.orchestrationContract ?? null
};
const livingModeDecision = {
mode: orchestrationDecision.livingMode,
reason: orchestrationDecision.livingReason
orchestrationContract: orchestrationDecision.orchestrationContract ?? null,
routePolicyContract: routePolicyRuntime.routePolicyContract
};
return {
addressPreDecompose,
@@ -105,6 +105,6 @@ async function buildAssistantAddressOrchestrationRuntime(input) {
carryover,
orchestrationDecision,
addressRuntimeMeta,
livingModeDecision
livingModeDecision: routePolicyRuntime.livingModeDecision
};
}
@@ -0,0 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION = void 0;
exports.runAssistantRoutePolicyRuntime = runAssistantRoutePolicyRuntime;
exports.ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION = "assistant_route_policy_runtime_v1";
function hasObject(value) {
return Boolean(value && typeof value === "object");
}
function runAssistantRoutePolicyRuntime(input) {
const orchestrationDecision = input.resolveAssistantOrchestrationDecision({
rawUserMessage: input.rawUserMessage,
effectiveAddressUserMessage: input.effectiveAddressUserMessage,
followupContext: input.followupContext,
llmPreDecomposeMeta: input.llmPreDecomposeMeta,
sessionItems: input.sessionItems,
sessionOrganizationScope: input.sessionOrganizationScope,
useMock: input.useMock
});
const livingModeDecision = {
mode: orchestrationDecision.livingMode,
reason: orchestrationDecision.livingReason
};
return {
orchestrationDecision,
livingModeDecision,
routePolicyContract: {
schema_version: exports.ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION,
policy_owner: "assistantRoutePolicyRuntimeAdapter",
decision_source: "resolveAssistantOrchestrationDecision",
living_mode: livingModeDecision.mode,
living_reason: livingModeDecision.reason,
tool_gate_decision: orchestrationDecision.toolGateDecision ?? null,
tool_gate_reason: orchestrationDecision.toolGateReason ?? null,
has_followup_context: hasObject(input.followupContext),
has_orchestration_contract: hasObject(orchestrationDecision.orchestrationContract)
}
};
}