ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 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
@@ -4,6 +4,7 @@ import type { InvestigationStateWithProblemUnits } from "../types/stage2ProblemU
import type { QuestionTypeClass } from "./questionTypeResolver";
import { resolveQuestionType } from "./questionTypeResolver";
import { composeAssistantAnswer } from "./answerComposer";
import type { CompanyAnchorSet } from "./companyAnchorResolver";
export interface BuildAssistantDeepTurnCompositionInput {
userMessage: string;
@@ -32,6 +33,32 @@ export interface AssistantDeepTurnCompositionOutput {
composition: ReturnType<typeof composeAssistantAnswer>;
}
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 normalizeCompanyAnchorSet(value: unknown): CompanyAnchorSet | null {
if (!value || typeof value !== "object" || Array.isArray(value)) {
return null;
}
const source = value as Record<string, unknown>;
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)
};
}
export function buildAssistantDeepTurnComposition(
input: BuildAssistantDeepTurnCompositionInput
): AssistantDeepTurnCompositionOutput {
@@ -43,10 +70,7 @@ export function buildAssistantDeepTurnComposition(
? input.investigationState?.followup_context?.active_domain ?? input.investigationState?.focus.domain ?? null
: null;
const questionTypeClass = resolveQuestionTypeSafe(input.userMessage);
const companyAnchorSet = input.companyAnchors as {
dates?: unknown[];
periods?: unknown[];
} | null;
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));
@@ -60,7 +84,7 @@ export function buildAssistantDeepTurnComposition(
groundingCheck: input.groundingCheck,
focusDomainHint,
questionTypeHint: questionTypeClass,
companyAnchors: input.companyAnchors as any,
companyAnchors: companyAnchorSet,
normalizationPeriodExplicit,
enableAnswerPolicyV11: input.featureAnswerPolicyV11,
enableProblemCentricAnswerV1: input.featureProblemCentricAnswerV1,