101 lines
3.7 KiB
TypeScript
101 lines
3.7 KiB
TypeScript
import type { AssistantRequirement } from "../types/assistant";
|
|
import type { NormalizeResponsePayload, RouteHintSummary } from "../types/normalizer";
|
|
import type { AssistantExecutionPlanItem } from "./assistantQueryPlanning";
|
|
import type { DomainPolarityGuardAudit, TemporalGuardAudit } from "./assistantRuntimeGuards";
|
|
|
|
export interface AssistantRequirementExtractionLike {
|
|
requirements: AssistantRequirement[];
|
|
byFragment: Map<string, string[]>;
|
|
}
|
|
|
|
export interface AssistantPlanEnforcementAuditLike {
|
|
executionPlan: AssistantExecutionPlanItem[];
|
|
audit: AssistantLiveRoutePlanAudit | null;
|
|
}
|
|
|
|
export interface AssistantLiveRoutePlanAudit extends Record<string, unknown> {
|
|
required_live_calls: string[];
|
|
route_adjustments_applied: number;
|
|
rescued_no_route_fragments: number;
|
|
replaced_routes: string[];
|
|
route_gap_reason: string | null;
|
|
}
|
|
|
|
export interface BuildAssistantDeepTurnExecutionPlanInput {
|
|
routeSummary: RouteHintSummary | null;
|
|
normalizedPayload: NormalizeResponsePayload["normalized"];
|
|
userMessage: string;
|
|
claimType: string;
|
|
temporalGuard: TemporalGuardAudit;
|
|
domainPolarityGuardInitial: DomainPolarityGuardAudit;
|
|
extractRequirements: (
|
|
routeSummary: RouteHintSummary | null,
|
|
normalizedPayload: NormalizeResponsePayload["normalized"],
|
|
userMessage: string
|
|
) => AssistantRequirementExtractionLike;
|
|
toExecutionPlan: (
|
|
routeSummary: RouteHintSummary | null,
|
|
normalizedPayload: NormalizeResponsePayload["normalized"],
|
|
userMessage: string,
|
|
requirementByFragment: Map<string, string[]>
|
|
) => AssistantExecutionPlanItem[];
|
|
enforceRbpLiveRoutePlan: (input: {
|
|
executionPlan: AssistantExecutionPlanItem[];
|
|
claimType: string;
|
|
temporalGuard: TemporalGuardAudit;
|
|
}) => AssistantPlanEnforcementAuditLike;
|
|
enforceFaLiveRoutePlan: (input: {
|
|
executionPlan: AssistantExecutionPlanItem[];
|
|
claimType: string;
|
|
temporalGuard: TemporalGuardAudit;
|
|
}) => AssistantPlanEnforcementAuditLike;
|
|
applyTemporalHintToExecutionPlan: (
|
|
executionPlan: AssistantExecutionPlanItem[],
|
|
temporalGuard: TemporalGuardAudit
|
|
) => AssistantExecutionPlanItem[];
|
|
applyPolarityHintToExecutionPlan: (
|
|
executionPlan: AssistantExecutionPlanItem[],
|
|
domainPolarityGuardInitial: DomainPolarityGuardAudit
|
|
) => AssistantExecutionPlanItem[];
|
|
}
|
|
|
|
export interface BuildAssistantDeepTurnExecutionPlanOutput {
|
|
requirementExtraction: AssistantRequirementExtractionLike;
|
|
executionPlan: AssistantExecutionPlanItem[];
|
|
rbpRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
|
|
faRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
|
|
}
|
|
|
|
export function buildAssistantDeepTurnExecutionPlan(
|
|
input: BuildAssistantDeepTurnExecutionPlanInput
|
|
): BuildAssistantDeepTurnExecutionPlanOutput {
|
|
const requirementExtraction = input.extractRequirements(input.routeSummary, input.normalizedPayload, input.userMessage);
|
|
let executionPlan = input.toExecutionPlan(
|
|
input.routeSummary,
|
|
input.normalizedPayload,
|
|
input.userMessage,
|
|
requirementExtraction.byFragment
|
|
);
|
|
const rbpRoutePlanEnforcement = input.enforceRbpLiveRoutePlan({
|
|
executionPlan,
|
|
claimType: input.claimType,
|
|
temporalGuard: input.temporalGuard
|
|
});
|
|
executionPlan = rbpRoutePlanEnforcement.executionPlan;
|
|
const faRoutePlanEnforcement = input.enforceFaLiveRoutePlan({
|
|
executionPlan,
|
|
claimType: input.claimType,
|
|
temporalGuard: input.temporalGuard
|
|
});
|
|
executionPlan = faRoutePlanEnforcement.executionPlan;
|
|
executionPlan = input.applyTemporalHintToExecutionPlan(executionPlan, input.temporalGuard);
|
|
executionPlan = input.applyPolarityHintToExecutionPlan(executionPlan, input.domainPolarityGuardInitial);
|
|
|
|
return {
|
|
requirementExtraction,
|
|
executionPlan,
|
|
rbpRoutePlanEnforcement,
|
|
faRoutePlanEnforcement
|
|
};
|
|
}
|