ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.30: вынос ветки tool_gate_skip + chat fallback из assistantService в отдельный runtime-адаптер, чтобы в сервисе остался только orchestration flow.
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
import type { AnswerGroundingCheck, AssistantRequirement, RequirementCoverageReport, UnifiedRetrievalResult } from "../types/assistant";
|
||||
import type { RouteHintSummary } from "../types/normalizer";
|
||||
import type {
|
||||
AssistantPlanEnforcementAuditLike,
|
||||
AssistantRequirementExtractionLike
|
||||
} from "./assistantDeepTurnPlanRuntimeAdapter";
|
||||
import type {
|
||||
AssistantDeepTurnRetrievalExecutionOutput,
|
||||
AssistantLiveTemporalHint
|
||||
} from "./assistantDeepTurnRetrievalRuntimeAdapter";
|
||||
import type { AssistantDeepTurnRetrievalGuardPipelineOutput } from "./assistantDeepTurnGuardRuntimeAdapter";
|
||||
import type { AssistantDeepTurnGroundingRuntimeOutput } from "./assistantDeepTurnGroundingRuntimeAdapter";
|
||||
import type { AssistantDeepTurnCompositionOutput } from "./assistantDeepTurnCompositionRuntimeAdapter";
|
||||
|
||||
export interface AssistantDeepTurnRuntimeContextLike {
|
||||
companyAnchors: unknown;
|
||||
focusDomainForGuards: string | null;
|
||||
temporalGuard: unknown;
|
||||
domainPolarityGuardInitial: unknown;
|
||||
claimAnchorAudit: {
|
||||
claim_type: string;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
businessScopeResolution: {
|
||||
business_scope_resolved?: string[] | null;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
liveTemporalHint: AssistantLiveTemporalHint | null;
|
||||
}
|
||||
|
||||
export interface RunAssistantDeepTurnAnalysisRuntimeInput {
|
||||
userMessage: string;
|
||||
runContextRuntime: () => AssistantDeepTurnRuntimeContextLike;
|
||||
runExecutionPlanRuntime: (input: {
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
temporalGuard: unknown;
|
||||
domainPolarityGuardInitial: unknown;
|
||||
}) => {
|
||||
requirementExtraction: AssistantRequirementExtractionLike;
|
||||
executionPlan: unknown[];
|
||||
rbpRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
|
||||
faRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
|
||||
};
|
||||
runRetrievalRuntime: (input: {
|
||||
executionPlan: unknown[];
|
||||
liveTemporalHint: AssistantLiveTemporalHint | null;
|
||||
}) => Promise<AssistantDeepTurnRetrievalExecutionOutput>;
|
||||
runGuardRuntime: (input: {
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
domainPolarityGuardInitial: unknown;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
temporalGuard: unknown;
|
||||
focusDomainForGuards: string | null;
|
||||
companyAnchors: unknown;
|
||||
userMessage: string;
|
||||
}) => AssistantDeepTurnRetrievalGuardPipelineOutput;
|
||||
runGroundingRuntime: (input: {
|
||||
claimType: string;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
rbpPlanAudit: unknown;
|
||||
faPlanAudit: unknown;
|
||||
routeSummary: RouteHintSummary | null;
|
||||
requirementExtraction: AssistantRequirementExtractionLike;
|
||||
temporalGuard: unknown;
|
||||
polarityAudit: unknown;
|
||||
evidenceAudit: unknown;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
targetedEvidenceHitRate?: number | null;
|
||||
businessScopeResolved?: string[] | null;
|
||||
}) => AssistantDeepTurnGroundingRuntimeOutput;
|
||||
runCompositionRuntime: (input: {
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
requirements: AssistantRequirement[];
|
||||
coverageReport: RequirementCoverageReport;
|
||||
groundingCheck: AnswerGroundingCheck;
|
||||
companyAnchors: unknown;
|
||||
}) => AssistantDeepTurnCompositionOutput;
|
||||
}
|
||||
|
||||
export interface RunAssistantDeepTurnAnalysisRuntimeOutput {
|
||||
companyAnchors: unknown;
|
||||
temporalGuard: unknown;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
businessScopeResolution: AssistantDeepTurnRuntimeContextLike["businessScopeResolution"];
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
requirementExtraction: AssistantRequirementExtractionLike;
|
||||
executionPlan: unknown[];
|
||||
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
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user