АРЧ АП11 - Выделить route policy adapter для архитектуры assistant runtime
This commit is contained in:
@@ -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