АРЧ АП11 - Выделить route policy adapter для архитектуры assistant runtime
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { runAssistantRoutePolicyRuntime } from "./assistantRoutePolicyRuntimeAdapter";
|
||||
|
||||
export interface BuildAssistantAddressOrchestrationRuntimeInput {
|
||||
userMessage: string;
|
||||
sessionItems: unknown[];
|
||||
@@ -195,15 +197,17 @@ export async function buildAssistantAddressOrchestrationRuntime(
|
||||
}
|
||||
|
||||
const followupContext = carryover?.followupContext ?? null;
|
||||
const orchestrationDecision = input.resolveAssistantOrchestrationDecision({
|
||||
const routePolicyRuntime = 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,
|
||||
@@ -215,11 +219,8 @@ export async function buildAssistantAddressOrchestrationRuntime(
|
||||
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 {
|
||||
@@ -228,6 +229,6 @@ export async function buildAssistantAddressOrchestrationRuntime(
|
||||
carryover,
|
||||
orchestrationDecision,
|
||||
addressRuntimeMeta,
|
||||
livingModeDecision
|
||||
livingModeDecision: routePolicyRuntime.livingModeDecision
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
export const ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION = "assistant_route_policy_runtime_v1" as const;
|
||||
|
||||
export interface RunAssistantRoutePolicyRuntimeInput {
|
||||
rawUserMessage: string;
|
||||
effectiveAddressUserMessage: string;
|
||||
followupContext: unknown;
|
||||
llmPreDecomposeMeta: Record<string, unknown>;
|
||||
sessionItems?: unknown[];
|
||||
sessionOrganizationScope?: unknown;
|
||||
useMock: boolean;
|
||||
resolveAssistantOrchestrationDecision: (input: {
|
||||
rawUserMessage: string;
|
||||
effectiveAddressUserMessage: string;
|
||||
followupContext: unknown;
|
||||
llmPreDecomposeMeta: Record<string, unknown>;
|
||||
sessionItems?: unknown[];
|
||||
sessionOrganizationScope?: unknown;
|
||||
useMock: boolean;
|
||||
}) => Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface AssistantRoutePolicyRuntimeContract {
|
||||
schema_version: typeof ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION;
|
||||
policy_owner: "assistantRoutePolicyRuntimeAdapter";
|
||||
decision_source: "resolveAssistantOrchestrationDecision";
|
||||
living_mode: unknown;
|
||||
living_reason: unknown;
|
||||
tool_gate_decision: unknown;
|
||||
tool_gate_reason: unknown;
|
||||
has_followup_context: boolean;
|
||||
has_orchestration_contract: boolean;
|
||||
}
|
||||
|
||||
export interface RunAssistantRoutePolicyRuntimeOutput {
|
||||
orchestrationDecision: Record<string, unknown>;
|
||||
livingModeDecision: {
|
||||
mode: unknown;
|
||||
reason: unknown;
|
||||
};
|
||||
routePolicyContract: AssistantRoutePolicyRuntimeContract;
|
||||
}
|
||||
|
||||
function hasObject(value: unknown): boolean {
|
||||
return Boolean(value && typeof value === "object");
|
||||
}
|
||||
|
||||
export function runAssistantRoutePolicyRuntime(
|
||||
input: RunAssistantRoutePolicyRuntimeInput
|
||||
): RunAssistantRoutePolicyRuntimeOutput {
|
||||
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: 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)
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user