ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.85 - 2.88 - Убран последний as any из backend/src и довел тип debug до конца цепочки deep-turn
This commit is contained in:
+112
-10
@@ -10,6 +10,88 @@ exports.buildAssistantDeepTurnAnalysisRuntimeInput = buildAssistantDeepTurnAnaly
|
||||
const companyAnchorResolver_1 = require("./companyAnchorResolver");
|
||||
const assistantRuntimeGuards_1 = require("./assistantRuntimeGuards");
|
||||
const assistantClaimBoundEvidence_1 = require("./assistantClaimBoundEvidence");
|
||||
const KNOWN_GUARD_DOMAINS = [
|
||||
"settlements_60_62",
|
||||
"vat_document_register_book",
|
||||
"month_close_costs_20_44",
|
||||
"fixed_asset_amortization"
|
||||
];
|
||||
function toRecordObject(value) {
|
||||
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
||||
return null;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
function toStringArray(value) {
|
||||
if (!Array.isArray(value)) {
|
||||
return [];
|
||||
}
|
||||
return value
|
||||
.map((item) => (typeof item === "string" ? item.trim() : ""))
|
||||
.filter((item) => item.length > 0);
|
||||
}
|
||||
function toCompanyAnchorSet(value) {
|
||||
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) {
|
||||
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) {
|
||||
const normalized = typeof value === "string" ? value.trim() : "";
|
||||
if (!normalized) {
|
||||
return null;
|
||||
}
|
||||
if (KNOWN_GUARD_DOMAINS.includes(normalized)) {
|
||||
return normalized;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
const resolveTemporalGuardAdapter = (input) => (0, assistantRuntimeGuards_1.resolveTemporalGuard)({
|
||||
userMessage: input.userMessage,
|
||||
normalized: input.normalized,
|
||||
companyAnchors: toCompanyAnchorSet(input.companyAnchors),
|
||||
analysisContext: input.analysisContext
|
||||
});
|
||||
const resolveDomainPolarityGuardAdapter = (input) => (0, assistantRuntimeGuards_1.resolveDomainPolarityGuard)({
|
||||
userMessage: input.userMessage,
|
||||
companyAnchors: toCompanyAnchorSet(input.companyAnchors),
|
||||
focusDomainHint: input.focusDomainHint
|
||||
});
|
||||
const resolveClaimBoundAnchorsAdapter = (input) => (0, assistantClaimBoundEvidence_1.resolveClaimBoundAnchors)({
|
||||
userMessage: input.userMessage,
|
||||
companyAnchors: toCompanyAnchorSet(input.companyAnchors),
|
||||
focusDomainHint: input.focusDomainHint,
|
||||
primaryPeriod: toClaimBoundPrimaryPeriod(input.primaryPeriod)
|
||||
});
|
||||
const applyTemporalHintToExecutionPlanAdapter = (executionPlan, temporalGuard) => (0, assistantRuntimeGuards_1.applyTemporalHintToExecutionPlan)(executionPlan, temporalGuard);
|
||||
const applyPolarityHintToExecutionPlanAdapter = (executionPlan, domainPolarityGuardInitial) => (0, assistantRuntimeGuards_1.applyPolarityHintToExecutionPlan)(executionPlan, domainPolarityGuardInitial);
|
||||
function buildAssistantDeepTurnContextRuntimeInput(input) {
|
||||
return {
|
||||
userMessage: input.userMessage,
|
||||
@@ -20,9 +102,9 @@ function buildAssistantDeepTurnContextRuntimeInput(input) {
|
||||
resolveCompanyAnchors: companyAnchorResolver_1.resolveCompanyAnchors,
|
||||
resolveBusinessScopeAlignment: input.resolveBusinessScopeAlignment,
|
||||
inferP0DomainFromMessage: input.inferP0DomainFromMessage,
|
||||
resolveTemporalGuard: assistantRuntimeGuards_1.resolveTemporalGuard,
|
||||
resolveDomainPolarityGuard: assistantRuntimeGuards_1.resolveDomainPolarityGuard,
|
||||
resolveClaimBoundAnchors: assistantClaimBoundEvidence_1.resolveClaimBoundAnchors,
|
||||
resolveTemporalGuard: resolveTemporalGuardAdapter,
|
||||
resolveDomainPolarityGuard: resolveDomainPolarityGuardAdapter,
|
||||
resolveClaimBoundAnchors: resolveClaimBoundAnchorsAdapter,
|
||||
resolveBusinessScopeFromLiveContext: input.resolveBusinessScopeFromLiveContext
|
||||
};
|
||||
}
|
||||
@@ -38,8 +120,8 @@ function buildAssistantDeepTurnExecutionPlanRuntimeInput(input, runtime) {
|
||||
toExecutionPlan: input.toExecutionPlan,
|
||||
enforceRbpLiveRoutePlan: input.enforceRbpLiveRoutePlan,
|
||||
enforceFaLiveRoutePlan: input.enforceFaLiveRoutePlan,
|
||||
applyTemporalHintToExecutionPlan: assistantRuntimeGuards_1.applyTemporalHintToExecutionPlan,
|
||||
applyPolarityHintToExecutionPlan: assistantRuntimeGuards_1.applyPolarityHintToExecutionPlan
|
||||
applyTemporalHintToExecutionPlan: applyTemporalHintToExecutionPlanAdapter,
|
||||
applyPolarityHintToExecutionPlan: applyPolarityHintToExecutionPlanAdapter
|
||||
};
|
||||
}
|
||||
function buildAssistantDeepTurnRetrievalRuntimeInput(input, runtime) {
|
||||
@@ -57,8 +139,8 @@ function buildAssistantDeepTurnGuardRuntimeInput(runtime) {
|
||||
domainPolarityGuardInitial: runtime.domainPolarityGuardInitial,
|
||||
claimAnchorAudit: runtime.claimAnchorAudit,
|
||||
temporalGuard: runtime.temporalGuard,
|
||||
focusDomainForGuards: runtime.focusDomainForGuards,
|
||||
companyAnchors: runtime.companyAnchors,
|
||||
focusDomainForGuards: normalizeFocusDomainForGuards(runtime.focusDomainForGuards),
|
||||
companyAnchors: toCompanyAnchorSet(runtime.companyAnchors),
|
||||
userMessage: runtime.userMessage
|
||||
};
|
||||
}
|
||||
@@ -72,7 +154,7 @@ function buildAssistantDeepTurnGroundingRuntimeInput(input, runtime) {
|
||||
normalizedPayload: input.normalizedPayload,
|
||||
userMessage: input.userMessage,
|
||||
requirementExtraction: runtime.requirementExtraction,
|
||||
extractRequirements: input.extractRequirements,
|
||||
extractRequirements: (routeSummary, normalized, userMessage) => input.extractRequirements(routeSummary, normalized ?? null, userMessage),
|
||||
evaluateCoverage: input.evaluateCoverage,
|
||||
checkGrounding: input.checkGrounding,
|
||||
temporalGuard: runtime.temporalGuard,
|
||||
@@ -106,8 +188,28 @@ function buildAssistantDeepTurnCompositionRuntimeInput(input, runtime) {
|
||||
function buildAssistantDeepTurnAnalysisRuntimeInput(input) {
|
||||
return {
|
||||
userMessage: input.userMessage,
|
||||
runContextRuntime: () => input.runDeepTurnContextRuntimeSafe(buildAssistantDeepTurnContextRuntimeInput(input)),
|
||||
runExecutionPlanRuntime: (runtime) => input.runDeepTurnPlanRuntimeSafe(buildAssistantDeepTurnExecutionPlanRuntimeInput(input, runtime)),
|
||||
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));
|
||||
return {
|
||||
requirementExtraction: output.requirementExtraction,
|
||||
executionPlan: output.executionPlan,
|
||||
rbpRoutePlanEnforcement: output.rbpRoutePlanEnforcement,
|
||||
faRoutePlanEnforcement: output.faRoutePlanEnforcement
|
||||
};
|
||||
},
|
||||
runRetrievalRuntime: (runtime) => input.runDeepTurnRetrievalRuntimeSafe(buildAssistantDeepTurnRetrievalRuntimeInput(input, runtime)),
|
||||
runGuardRuntime: (runtime) => input.runDeepTurnGuardRuntimeSafe(buildAssistantDeepTurnGuardRuntimeInput(runtime)),
|
||||
runGroundingRuntime: (runtime) => input.runDeepTurnGroundingRuntimeSafe(buildAssistantDeepTurnGroundingRuntimeInput(input, runtime)),
|
||||
|
||||
+26
-2
@@ -3,6 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.buildAssistantDeepTurnComposition = buildAssistantDeepTurnComposition;
|
||||
const questionTypeResolver_1 = require("./questionTypeResolver");
|
||||
const answerComposer_1 = require("./answerComposer");
|
||||
function toStringArray(value) {
|
||||
if (!Array.isArray(value)) {
|
||||
return [];
|
||||
}
|
||||
return value
|
||||
.map((item) => (typeof item === "string" ? item.trim() : ""))
|
||||
.filter((item) => item.length > 0);
|
||||
}
|
||||
function normalizeCompanyAnchorSet(value) {
|
||||
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
||||
return null;
|
||||
}
|
||||
const source = value;
|
||||
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 buildAssistantDeepTurnComposition(input) {
|
||||
const resolveQuestionTypeSafe = input.resolveQuestionTypeFn ?? questionTypeResolver_1.resolveQuestionType;
|
||||
const composeAssistantAnswerSafe = input.composeAssistantAnswerFn ?? answerComposer_1.composeAssistantAnswer;
|
||||
@@ -11,7 +35,7 @@ function buildAssistantDeepTurnComposition(input) {
|
||||
? input.investigationState?.followup_context?.active_domain ?? input.investigationState?.focus.domain ?? null
|
||||
: null;
|
||||
const questionTypeClass = resolveQuestionTypeSafe(input.userMessage);
|
||||
const companyAnchorSet = input.companyAnchors;
|
||||
const companyAnchorSet = normalizeCompanyAnchorSet(input.companyAnchors);
|
||||
const hasPeriodInCompanyAnchors = (Array.isArray(companyAnchorSet?.dates) && companyAnchorSet.dates.some((item) => String(item ?? "").trim().length > 0)) ||
|
||||
(Array.isArray(companyAnchorSet?.periods) && companyAnchorSet.periods.some((item) => String(item ?? "").trim().length > 0));
|
||||
const normalizationPeriodExplicit = input.hasExplicitPeriodAnchor(input.normalizedPayload) || hasPeriodInCompanyAnchors;
|
||||
@@ -24,7 +48,7 @@ function buildAssistantDeepTurnComposition(input) {
|
||||
groundingCheck: input.groundingCheck,
|
||||
focusDomainHint,
|
||||
questionTypeHint: questionTypeClass,
|
||||
companyAnchors: input.companyAnchors,
|
||||
companyAnchors: companyAnchorSet,
|
||||
normalizationPeriodExplicit,
|
||||
enableAnswerPolicyV11: input.featureAnswerPolicyV11,
|
||||
enableProblemCentricAnswerV1: input.featureProblemCentricAnswerV1,
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ const assistantOrchestrationRuntimeAdapter_1 = require("./assistantOrchestration
|
||||
const assistantDeepTurnGuardRuntimeAdapter_1 = require("./assistantDeepTurnGuardRuntimeAdapter");
|
||||
function runAssistantDeepTurnGroundingRuntime(input) {
|
||||
const runCoverageGroundingPipelineSafe = input.runCoverageGroundingPipelineFn ?? assistantOrchestrationRuntimeAdapter_1.runAssistantCoverageGroundingPipeline;
|
||||
const applyGroundingEligibilitySafe = input.applyGroundingEligibilityFn ??
|
||||
((payload) => (0, assistantDeepTurnGuardRuntimeAdapter_1.applyAssistantDeepTurnGroundingEligibility)(payload));
|
||||
const applyGroundingEligibilityDefault = (payload) => (0, assistantDeepTurnGuardRuntimeAdapter_1.applyAssistantDeepTurnGroundingEligibility)(payload);
|
||||
const applyGroundingEligibilitySafe = input.applyGroundingEligibilityFn ?? applyGroundingEligibilityDefault;
|
||||
const rbpLiveRouteAudit = input.collectRbpLiveRouteAudit({
|
||||
claimType: input.claimType,
|
||||
retrievalResults: input.retrievalResults,
|
||||
|
||||
@@ -83,7 +83,7 @@ function assembleAssistantDeepTurnPackaging(input) {
|
||||
text: deepAnswerArtifacts.safeAssistantReply,
|
||||
replyType: input.composition.reply_type,
|
||||
traceId: input.normalized.trace_id,
|
||||
debug: debug
|
||||
debug
|
||||
});
|
||||
const deepAnalysisLogDetails = (0, assistantMessageLogAssembler_1.buildDeepAnalysisProcessedLogDetails)({
|
||||
sessionId: input.sessionId,
|
||||
|
||||
@@ -391,25 +391,26 @@ function normalizeEvidenceItems(fragmentId, requirementIds, route, value) {
|
||||
});
|
||||
}
|
||||
function normalizeRetrievalResult(fragmentId, requirementIds, route, raw) {
|
||||
const items = normalizeObjectArray(raw.items);
|
||||
const summary = normalizeSummary(raw.summary);
|
||||
const evidence = normalizeEvidenceItems(fragmentId, requirementIds, route, raw.evidence);
|
||||
const rawResult = toObject(raw) ?? {};
|
||||
const items = normalizeObjectArray(rawResult.items);
|
||||
const summary = normalizeSummary(rawResult.summary);
|
||||
const evidence = normalizeEvidenceItems(fragmentId, requirementIds, route, rawResult.evidence);
|
||||
const baseResult = {
|
||||
fragment_id: fragmentId,
|
||||
requirement_ids: requirementIds,
|
||||
route,
|
||||
status: normalizeStatus(raw.status),
|
||||
result_type: normalizeResultType(raw.result_type),
|
||||
status: normalizeStatus(rawResult.status),
|
||||
result_type: normalizeResultType(rawResult.result_type),
|
||||
items,
|
||||
summary,
|
||||
evidence,
|
||||
why_included: normalizeStringArray(raw.why_included),
|
||||
selection_reason: normalizeStringArray(raw.selection_reason),
|
||||
risk_factors: normalizeStringArray(raw.risk_factors),
|
||||
business_interpretation: normalizeStringArray(raw.business_interpretation),
|
||||
confidence: normalizeConfidence(raw.confidence),
|
||||
limitations: normalizeStringArray(raw.limitations),
|
||||
errors: normalizeErrors(raw.errors)
|
||||
why_included: normalizeStringArray(rawResult.why_included),
|
||||
selection_reason: normalizeStringArray(rawResult.selection_reason),
|
||||
risk_factors: normalizeStringArray(rawResult.risk_factors),
|
||||
business_interpretation: normalizeStringArray(rawResult.business_interpretation),
|
||||
confidence: normalizeConfidence(rawResult.confidence),
|
||||
limitations: normalizeStringArray(rawResult.limitations),
|
||||
errors: normalizeErrors(rawResult.errors)
|
||||
};
|
||||
if (!config_1.FEATURE_ASSISTANT_PROBLEM_UNITS_V1) {
|
||||
return baseResult;
|
||||
|
||||
Reference in New Issue
Block a user