NODEDC_1C/llm_normalizer/backend/src/services/assistantDeepTurnAnalysisRu...

180 lines
9.3 KiB
TypeScript

import type { AnswerGroundingCheck, AssistantRequirement, RequirementCoverageReport, UnifiedRetrievalResult } from "../types/assistant";
import type { RouteHintSummary } from "../types/normalizer";
import type { ClaimBoundAnchorAudit } from "./assistantClaimBoundEvidence";
import type {
AssistantDeepTurnRetrievalGuardPipelineInput,
AssistantDeepTurnRetrievalGuardPipelineOutput
} from "./assistantDeepTurnGuardRuntimeAdapter";
import type { AssistantBusinessScopeResolution } from "./assistantDeepTurnContextRuntimeAdapter";
import type {
AssistantPlanEnforcementAuditLike,
AssistantRequirementExtractionLike
} from "./assistantDeepTurnPlanRuntimeAdapter";
import type { AssistantExecutionPlanItem } from "./assistantQueryPlanning";
import type {
AssistantDeepTurnRetrievalExecutionOutput,
AssistantLiveTemporalHint
} from "./assistantDeepTurnRetrievalRuntimeAdapter";
import type {
AssistantDeepTurnGroundingRuntimeInput,
AssistantDeepTurnGroundingRuntimeOutput
} from "./assistantDeepTurnGroundingRuntimeAdapter";
import type { AssistantDeepTurnCompositionOutput } from "./assistantDeepTurnCompositionRuntimeAdapter";
import type { DomainPolarityGuardAudit, TemporalGuardAudit } from "./assistantRuntimeGuards";
import type { CompanyAnchorSet } from "./companyAnchorResolver";
export interface AssistantDeepTurnRuntimeContextLike {
companyAnchors: CompanyAnchorSet | null;
focusDomainForGuards: AssistantDeepTurnRetrievalGuardPipelineInput["focusDomainForGuards"];
temporalGuard: TemporalGuardAudit;
domainPolarityGuardInitial: DomainPolarityGuardAudit;
claimAnchorAudit: ClaimBoundAnchorAudit;
businessScopeResolution: AssistantBusinessScopeResolution;
resolvedRouteSummary: RouteHintSummary | null;
liveTemporalHint: AssistantLiveTemporalHint | null;
}
export interface RunAssistantDeepTurnAnalysisRuntimeInput {
userMessage: string;
runContextRuntime: () => AssistantDeepTurnRuntimeContextLike;
runExecutionPlanRuntime: (input: {
resolvedRouteSummary: RouteHintSummary | null;
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
temporalGuard: TemporalGuardAudit;
domainPolarityGuardInitial: DomainPolarityGuardAudit;
}) => {
requirementExtraction: AssistantRequirementExtractionLike;
executionPlan: AssistantExecutionPlanItem[];
rbpRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
faRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
};
runRetrievalRuntime: (input: {
executionPlan: AssistantExecutionPlanItem[];
liveTemporalHint: AssistantLiveTemporalHint | null;
}) => Promise<AssistantDeepTurnRetrievalExecutionOutput>;
runGuardRuntime: (input: {
retrievalResults: UnifiedRetrievalResult[];
domainPolarityGuardInitial: DomainPolarityGuardAudit;
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
temporalGuard: TemporalGuardAudit;
focusDomainForGuards: AssistantDeepTurnRetrievalGuardPipelineInput["focusDomainForGuards"];
companyAnchors: AssistantDeepTurnRetrievalGuardPipelineInput["companyAnchors"];
userMessage: string;
}) => AssistantDeepTurnRetrievalGuardPipelineOutput;
runGroundingRuntime: (input: {
claimType: string;
retrievalResults: UnifiedRetrievalResult[];
rbpPlanAudit: AssistantDeepTurnGroundingRuntimeInput["rbpPlanAudit"];
faPlanAudit: AssistantDeepTurnGroundingRuntimeInput["faPlanAudit"];
routeSummary: RouteHintSummary | null;
requirementExtraction: AssistantRequirementExtractionLike;
temporalGuard: AssistantDeepTurnGroundingRuntimeInput["temporalGuard"];
polarityAudit: AssistantDeepTurnGroundingRuntimeInput["polarityAudit"];
evidenceAudit: AssistantDeepTurnGroundingRuntimeInput["evidenceAudit"];
claimAnchorAudit: AssistantDeepTurnGroundingRuntimeInput["claimAnchorAudit"];
targetedEvidenceHitRate?: number | null;
businessScopeResolved?: string[] | null;
}) => AssistantDeepTurnGroundingRuntimeOutput;
runCompositionRuntime: (input: {
resolvedRouteSummary: RouteHintSummary | null;
retrievalResults: UnifiedRetrievalResult[];
requirements: AssistantRequirement[];
coverageReport: RequirementCoverageReport;
groundingCheck: AnswerGroundingCheck;
companyAnchors: CompanyAnchorSet | null;
}) => AssistantDeepTurnCompositionOutput;
}
export interface RunAssistantDeepTurnAnalysisRuntimeOutput {
companyAnchors: CompanyAnchorSet | null;
temporalGuard: TemporalGuardAudit;
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
businessScopeResolution: AssistantDeepTurnRuntimeContextLike["businessScopeResolution"];
resolvedRouteSummary: RouteHintSummary | null;
requirementExtraction: AssistantRequirementExtractionLike;
executionPlan: AssistantExecutionPlanItem[];
retrievalCalls: AssistantDeepTurnRetrievalExecutionOutput["retrievalCalls"];
retrievalResultsRaw: AssistantDeepTurnRetrievalExecutionOutput["retrievalResultsRaw"];
retrievalResults: UnifiedRetrievalResult[];
polarityGuardResult: AssistantDeepTurnRetrievalGuardPipelineOutput["polarityGuardResult"];
targetedEvidenceResult: AssistantDeepTurnRetrievalGuardPipelineOutput["targetedEvidenceResult"];
evidenceGateResult: AssistantDeepTurnRetrievalGuardPipelineOutput["evidenceGateResult"];
rbpLiveRouteAudit: AssistantDeepTurnGroundingRuntimeOutput["rbpLiveRouteAudit"];
faLiveRouteAudit: AssistantDeepTurnGroundingRuntimeOutput["faLiveRouteAudit"];
coverageEvaluation: AssistantDeepTurnGroundingRuntimeOutput["coverageEvaluation"];
groundedAnswerEligibilityGuard: AssistantDeepTurnGroundingRuntimeOutput["groundedAnswerEligibilityGuard"];
groundingCheck: AssistantDeepTurnGroundingRuntimeOutput["groundingCheck"];
questionTypeClass: AssistantDeepTurnCompositionOutput["questionTypeClass"];
composition: AssistantDeepTurnCompositionOutput["composition"];
}
export async function runAssistantDeepTurnAnalysisRuntime(
input: RunAssistantDeepTurnAnalysisRuntimeInput
): Promise<RunAssistantDeepTurnAnalysisRuntimeOutput> {
const contextRuntime = input.runContextRuntime();
const executionPlanRuntime = input.runExecutionPlanRuntime({
resolvedRouteSummary: contextRuntime.resolvedRouteSummary,
claimAnchorAudit: contextRuntime.claimAnchorAudit,
temporalGuard: contextRuntime.temporalGuard,
domainPolarityGuardInitial: contextRuntime.domainPolarityGuardInitial
});
const retrievalRuntime = await input.runRetrievalRuntime({
executionPlan: executionPlanRuntime.executionPlan,
liveTemporalHint: contextRuntime.liveTemporalHint
});
const guardRuntime = input.runGuardRuntime({
retrievalResults: retrievalRuntime.retrievalResults,
domainPolarityGuardInitial: contextRuntime.domainPolarityGuardInitial,
claimAnchorAudit: contextRuntime.claimAnchorAudit,
temporalGuard: contextRuntime.temporalGuard,
focusDomainForGuards: contextRuntime.focusDomainForGuards,
companyAnchors: contextRuntime.companyAnchors,
userMessage: input.userMessage
});
const groundingRuntime = input.runGroundingRuntime({
claimType: contextRuntime.claimAnchorAudit.claim_type,
retrievalResults: guardRuntime.retrievalResults,
rbpPlanAudit: executionPlanRuntime.rbpRoutePlanEnforcement.audit,
faPlanAudit: executionPlanRuntime.faRoutePlanEnforcement.audit,
routeSummary: contextRuntime.resolvedRouteSummary,
requirementExtraction: executionPlanRuntime.requirementExtraction,
temporalGuard: contextRuntime.temporalGuard,
polarityAudit: guardRuntime.polarityGuardResult.audit,
evidenceAudit: guardRuntime.evidenceGateResult.audit,
claimAnchorAudit: contextRuntime.claimAnchorAudit,
targetedEvidenceHitRate: guardRuntime.targetedEvidenceResult.audit.targeted_evidence_hit_rate,
businessScopeResolved: contextRuntime.businessScopeResolution.business_scope_resolved ?? null
});
const compositionRuntime = input.runCompositionRuntime({
resolvedRouteSummary: contextRuntime.resolvedRouteSummary,
retrievalResults: guardRuntime.retrievalResults,
requirements: groundingRuntime.coverageEvaluation.requirements,
coverageReport: groundingRuntime.coverageEvaluation.coverage,
groundingCheck: groundingRuntime.groundingCheck,
companyAnchors: contextRuntime.companyAnchors
});
return {
companyAnchors: contextRuntime.companyAnchors,
temporalGuard: contextRuntime.temporalGuard,
claimAnchorAudit: contextRuntime.claimAnchorAudit,
businessScopeResolution: contextRuntime.businessScopeResolution,
resolvedRouteSummary: contextRuntime.resolvedRouteSummary,
requirementExtraction: executionPlanRuntime.requirementExtraction,
executionPlan: executionPlanRuntime.executionPlan,
retrievalCalls: retrievalRuntime.retrievalCalls,
retrievalResultsRaw: retrievalRuntime.retrievalResultsRaw,
retrievalResults: guardRuntime.retrievalResults,
polarityGuardResult: guardRuntime.polarityGuardResult,
targetedEvidenceResult: guardRuntime.targetedEvidenceResult,
evidenceGateResult: guardRuntime.evidenceGateResult,
rbpLiveRouteAudit: groundingRuntime.rbpLiveRouteAudit,
faLiveRouteAudit: groundingRuntime.faLiveRouteAudit,
coverageEvaluation: groundingRuntime.coverageEvaluation,
groundedAnswerEligibilityGuard: groundingRuntime.groundedAnswerEligibilityGuard,
groundingCheck: groundingRuntime.groundingCheck,
questionTypeClass: compositionRuntime.questionTypeClass,
composition: compositionRuntime.composition
};
}