NODEDC_1C/llm_normalizer/backend/src/services/assistantRoutePolicyRuntime...

80 lines
2.8 KiB
TypeScript

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)
}
};
}