ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.85 - 2.88 - Убран последний as any из backend/src и довел тип debug до конца цепочки deep-turn
This commit is contained in:
+155
-35
@@ -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))
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user