ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.85 - 2.88 - Убран последний as any из backend/src и довел тип debug до конца цепочки deep-turn

This commit is contained in:
2026-04-11 10:58:28 +03:00
parent dedf193542
commit 966be04af9
19 changed files with 485 additions and 159 deletions
@@ -2,6 +2,8 @@ import { resolveCompanyAnchors } from "./companyAnchorResolver";
import {
applyPolarityHintToExecutionPlan,
applyTemporalHintToExecutionPlan,
type DomainPolarityGuardAudit,
type TemporalGuardAudit,
resolveDomainPolarityGuard,
resolveTemporalGuard
} from "./assistantRuntimeGuards";
@@ -13,8 +15,7 @@ import type {
} from "./assistantDeepTurnContextRuntimeAdapter";
import type {
BuildAssistantDeepTurnExecutionPlanInput,
BuildAssistantDeepTurnExecutionPlanOutput,
AssistantRequirementExtractionLike
BuildAssistantDeepTurnExecutionPlanOutput
} from "./assistantDeepTurnPlanRuntimeAdapter";
import type {
AssistantDeepTurnRetrievalExecutionInput,
@@ -32,14 +33,120 @@ import type {
BuildAssistantDeepTurnCompositionInput,
AssistantDeepTurnCompositionOutput
} from "./assistantDeepTurnCompositionRuntimeAdapter";
import type { AssistantExecutionPlanItem } from "./assistantQueryPlanning";
import type { RunAssistantDeepTurnAnalysisAttemptRuntimeInput } from "./assistantDeepTurnAnalysisAttemptRuntimeAdapter";
import type { CompanyAnchorSet } from "./companyAnchorResolver";
type ExecutionPlanRuntimeArgs = Parameters<RunAssistantDeepTurnAnalysisRuntimeInput["runExecutionPlanRuntime"]>[0];
type RetrievalRuntimeArgs = Parameters<RunAssistantDeepTurnAnalysisRuntimeInput["runRetrievalRuntime"]>[0];
type GuardRuntimeArgs = Parameters<RunAssistantDeepTurnAnalysisRuntimeInput["runGuardRuntime"]>[0];
type GroundingRuntimeArgs = Parameters<RunAssistantDeepTurnAnalysisRuntimeInput["runGroundingRuntime"]>[0];
type CompositionRuntimeArgs = Parameters<RunAssistantDeepTurnAnalysisRuntimeInput["runCompositionRuntime"]>[0];
type ClaimBoundPrimaryPeriod = Parameters<typeof resolveClaimBoundAnchors>[0]["primaryPeriod"];
const KNOWN_GUARD_DOMAINS = [
"settlements_60_62",
"vat_document_register_book",
"month_close_costs_20_44",
"fixed_asset_amortization"
] as const;
function toRecordObject(value: unknown): Record<string, unknown> | null {
if (!value || typeof value !== "object" || Array.isArray(value)) {
return null;
}
return value as Record<string, unknown>;
}
function toStringArray(value: unknown): string[] {
if (!Array.isArray(value)) {
return [];
}
return value
.map((item) => (typeof item === "string" ? item.trim() : ""))
.filter((item) => item.length > 0);
}
function toCompanyAnchorSet(value: unknown): CompanyAnchorSet | null {
const source = toRecordObject(value);
if (!source) {
return null;
}
return {
contract_numbers: toStringArray(source.contract_numbers),
document_numbers: toStringArray(source.document_numbers),
dates: toStringArray(source.dates),
amounts: toStringArray(source.amounts),
accounts: toStringArray(source.accounts),
periods: toStringArray(source.periods),
document_types: toStringArray(source.document_types),
all: toStringArray(source.all)
};
}
function toClaimBoundPrimaryPeriod(value: unknown): ClaimBoundPrimaryPeriod {
const source = toRecordObject(value);
if (!source) {
return null;
}
const from = typeof source.from === "string" ? source.from.trim() : "";
const to = typeof source.to === "string" ? source.to.trim() : "";
const granularity = source.granularity === "day" || source.granularity === "month" ? source.granularity : null;
if (!from || !to || !granularity) {
return null;
}
return {
from,
to,
granularity
};
}
function normalizeFocusDomainForGuards(
value: unknown
): AssistantDeepTurnRetrievalGuardPipelineInput["focusDomainForGuards"] {
const normalized = typeof value === "string" ? value.trim() : "";
if (!normalized) {
return null;
}
if (KNOWN_GUARD_DOMAINS.includes(normalized as (typeof KNOWN_GUARD_DOMAINS)[number])) {
return normalized as AssistantDeepTurnRetrievalGuardPipelineInput["focusDomainForGuards"];
}
return null;
}
const resolveTemporalGuardAdapter: BuildAssistantDeepTurnRuntimeContextInput["resolveTemporalGuard"] = (input) =>
resolveTemporalGuard({
userMessage: input.userMessage,
normalized: input.normalized,
companyAnchors: toCompanyAnchorSet(input.companyAnchors),
analysisContext: input.analysisContext
});
const resolveDomainPolarityGuardAdapter: BuildAssistantDeepTurnRuntimeContextInput["resolveDomainPolarityGuard"] = (
input
) =>
resolveDomainPolarityGuard({
userMessage: input.userMessage,
companyAnchors: toCompanyAnchorSet(input.companyAnchors),
focusDomainHint: input.focusDomainHint
});
const resolveClaimBoundAnchorsAdapter: BuildAssistantDeepTurnRuntimeContextInput["resolveClaimBoundAnchors"] = (
input
) =>
resolveClaimBoundAnchors({
userMessage: input.userMessage,
companyAnchors: toCompanyAnchorSet(input.companyAnchors),
focusDomainHint: input.focusDomainHint,
primaryPeriod: toClaimBoundPrimaryPeriod(input.primaryPeriod)
});
const applyTemporalHintToExecutionPlanAdapter: BuildAssistantDeepTurnExecutionPlanInput["applyTemporalHintToExecutionPlan"] =
(executionPlan, temporalGuard) =>
applyTemporalHintToExecutionPlan(executionPlan, temporalGuard as TemporalGuardAudit);
const applyPolarityHintToExecutionPlanAdapter: BuildAssistantDeepTurnExecutionPlanInput["applyPolarityHintToExecutionPlan"] =
(executionPlan, domainPolarityGuardInitial) =>
applyPolarityHintToExecutionPlan(executionPlan, domainPolarityGuardInitial as DomainPolarityGuardAudit);
export interface BuildAssistantDeepTurnAnalysisRuntimeInputInput
extends RunAssistantDeepTurnAnalysisAttemptRuntimeInput {
@@ -75,9 +182,9 @@ export function buildAssistantDeepTurnContextRuntimeInput(
resolveCompanyAnchors,
resolveBusinessScopeAlignment: input.resolveBusinessScopeAlignment,
inferP0DomainFromMessage: input.inferP0DomainFromMessage,
resolveTemporalGuard: resolveTemporalGuard as any,
resolveDomainPolarityGuard: resolveDomainPolarityGuard as any,
resolveClaimBoundAnchors: resolveClaimBoundAnchors as any,
resolveTemporalGuard: resolveTemporalGuardAdapter,
resolveDomainPolarityGuard: resolveDomainPolarityGuardAdapter,
resolveClaimBoundAnchors: resolveClaimBoundAnchorsAdapter,
resolveBusinessScopeFromLiveContext: input.resolveBusinessScopeFromLiveContext
};
}
@@ -97,8 +204,8 @@ export function buildAssistantDeepTurnExecutionPlanRuntimeInput(
toExecutionPlan: input.toExecutionPlan,
enforceRbpLiveRoutePlan: input.enforceRbpLiveRoutePlan,
enforceFaLiveRoutePlan: input.enforceFaLiveRoutePlan,
applyTemporalHintToExecutionPlan: applyTemporalHintToExecutionPlan as any,
applyPolarityHintToExecutionPlan: applyPolarityHintToExecutionPlan as any
applyTemporalHintToExecutionPlan: applyTemporalHintToExecutionPlanAdapter,
applyPolarityHintToExecutionPlan: applyPolarityHintToExecutionPlanAdapter
};
}
@@ -107,7 +214,7 @@ export function buildAssistantDeepTurnRetrievalRuntimeInput(
runtime: RetrievalRuntimeArgs
): AssistantDeepTurnRetrievalExecutionInput {
return {
executionPlan: runtime.executionPlan as AssistantExecutionPlanItem[],
executionPlan: runtime.executionPlan,
liveTemporalHint: runtime.liveTemporalHint,
executeRouteRuntime: input.executeRouteRuntime,
mapNoRouteReason: input.mapNoRouteReason,
@@ -120,11 +227,11 @@ export function buildAssistantDeepTurnGuardRuntimeInput(
): AssistantDeepTurnRetrievalGuardPipelineInput {
return {
retrievalResults: runtime.retrievalResults,
domainPolarityGuardInitial: runtime.domainPolarityGuardInitial as any,
claimAnchorAudit: runtime.claimAnchorAudit as any,
temporalGuard: runtime.temporalGuard as any,
focusDomainForGuards: runtime.focusDomainForGuards as any,
companyAnchors: runtime.companyAnchors as any,
domainPolarityGuardInitial: runtime.domainPolarityGuardInitial,
claimAnchorAudit: runtime.claimAnchorAudit,
temporalGuard: runtime.temporalGuard,
focusDomainForGuards: normalizeFocusDomainForGuards(runtime.focusDomainForGuards),
companyAnchors: toCompanyAnchorSet(runtime.companyAnchors),
userMessage: runtime.userMessage
};
}
@@ -141,18 +248,19 @@ export function buildAssistantDeepTurnGroundingRuntimeInput(
routeSummary: runtime.routeSummary,
normalizedPayload: input.normalizedPayload,
userMessage: input.userMessage,
requirementExtraction: runtime.requirementExtraction as AssistantRequirementExtractionLike,
extractRequirements: input.extractRequirements as any,
evaluateCoverage: input.evaluateCoverage as any,
checkGrounding: input.checkGrounding as any,
requirementExtraction: runtime.requirementExtraction,
extractRequirements: (routeSummary, normalized, userMessage) =>
input.extractRequirements(routeSummary, normalized ?? null, userMessage),
evaluateCoverage: input.evaluateCoverage,
checkGrounding: input.checkGrounding,
temporalGuard: runtime.temporalGuard,
polarityAudit: runtime.polarityAudit,
evidenceAudit: runtime.evidenceAudit,
claimAnchorAudit: runtime.claimAnchorAudit,
targetedEvidenceHitRate: runtime.targetedEvidenceHitRate,
businessScopeResolved: runtime.businessScopeResolved,
collectRbpLiveRouteAudit: input.collectRbpLiveRouteAudit as any,
collectFaLiveRouteAudit: input.collectFaLiveRouteAudit as any
collectRbpLiveRouteAudit: input.collectRbpLiveRouteAudit,
collectFaLiveRouteAudit: input.collectFaLiveRouteAudit
};
}
@@ -183,25 +291,37 @@ export function buildAssistantDeepTurnAnalysisRuntimeInput(
): RunAssistantDeepTurnAnalysisRuntimeInput {
return {
userMessage: input.userMessage,
runContextRuntime: () =>
input.runDeepTurnContextRuntimeSafe(buildAssistantDeepTurnContextRuntimeInput(input)) as any,
runExecutionPlanRuntime: (runtime) =>
input.runDeepTurnPlanRuntimeSafe(
runContextRuntime: () => {
const runtime = input.runDeepTurnContextRuntimeSafe(buildAssistantDeepTurnContextRuntimeInput(input));
return {
companyAnchors: toCompanyAnchorSet(runtime.companyAnchors),
focusDomainForGuards: normalizeFocusDomainForGuards(runtime.focusDomainForGuards),
temporalGuard: runtime.temporalGuard,
domainPolarityGuardInitial: runtime.domainPolarityGuardInitial,
claimAnchorAudit: runtime.claimAnchorAudit,
businessScopeResolution: runtime.businessScopeResolution,
resolvedRouteSummary: runtime.resolvedRouteSummary,
liveTemporalHint: runtime.liveTemporalHint
};
},
runExecutionPlanRuntime: (runtime) => {
const output = input.runDeepTurnPlanRuntimeSafe(
buildAssistantDeepTurnExecutionPlanRuntimeInput(input, runtime)
) as any,
);
return {
requirementExtraction: output.requirementExtraction,
executionPlan: output.executionPlan,
rbpRoutePlanEnforcement: output.rbpRoutePlanEnforcement,
faRoutePlanEnforcement: output.faRoutePlanEnforcement
};
},
runRetrievalRuntime: (runtime) =>
input.runDeepTurnRetrievalRuntimeSafe(
buildAssistantDeepTurnRetrievalRuntimeInput(input, runtime)
) as any,
input.runDeepTurnRetrievalRuntimeSafe(buildAssistantDeepTurnRetrievalRuntimeInput(input, runtime)),
runGuardRuntime: (runtime) =>
input.runDeepTurnGuardRuntimeSafe(buildAssistantDeepTurnGuardRuntimeInput(runtime) as any),
input.runDeepTurnGuardRuntimeSafe(buildAssistantDeepTurnGuardRuntimeInput(runtime)),
runGroundingRuntime: (runtime) =>
input.runDeepTurnGroundingRuntimeSafe(
buildAssistantDeepTurnGroundingRuntimeInput(input, runtime)
) as any,
input.runDeepTurnGroundingRuntimeSafe(buildAssistantDeepTurnGroundingRuntimeInput(input, runtime)),
runCompositionRuntime: (runtime) =>
input.runDeepTurnCompositionRuntimeSafe(
buildAssistantDeepTurnCompositionRuntimeInput(input, runtime)
) as any
input.runDeepTurnCompositionRuntimeSafe(buildAssistantDeepTurnCompositionRuntimeInput(input, runtime))
};
}