ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.44 - Вынос deep-response склейку из assistantService в новый bridge и Переподключение assistantService на этот адаптер

This commit is contained in:
2026-04-10 23:43:55 +03:00
parent 80754e016c
commit fcfcba47b0
6 changed files with 355 additions and 97 deletions
@@ -0,0 +1,116 @@
import type { AssistantMessageResponsePayload } from "../types/assistant";
import type { NormalizeResponsePayload } from "../types/normalizer";
import type { InvestigationStateWithProblemUnits } from "../types/stage2ProblemUnits";
import type { RunAssistantDeepTurnAnalysisRuntimeOutput } from "./assistantDeepTurnAnalysisRuntimeAdapter";
import {
runAssistantDeepTurnResponseRuntime,
type RunAssistantDeepTurnResponseRuntimeInput,
type RunAssistantDeepTurnResponseRuntimeOutput
} from "./assistantDeepTurnResponseRuntimeAdapter";
export interface RunAssistantDeepTurnResponseAttemptRuntimeInput<
ResponseType = AssistantMessageResponsePayload
> {
featureInvestigationStateV1: boolean;
featureContractsV11: boolean;
featureAnswerPolicyV11: boolean;
sessionId: string;
questionId: string;
userMessage: string;
normalized: {
trace_id: string;
prompt_version: string;
schema_version: string;
normalized: NormalizeResponsePayload["normalized"];
};
normalizedQuestion: string;
deepTurnAnalysisRuntime: RunAssistantDeepTurnAnalysisRuntimeOutput;
runtimeAnalysisContext: unknown;
followupStateUsage: unknown;
followupApplied: boolean;
previousInvestigationState: InvestigationStateWithProblemUnits | null | undefined;
addressRuntimeMetaForDeep: unknown;
extractDroppedIntentSegments: RunAssistantDeepTurnResponseRuntimeInput["extractDroppedIntentSegments"];
buildDebugRoutes: RunAssistantDeepTurnResponseRuntimeInput["buildDebugRoutes"];
extractExecutionState: RunAssistantDeepTurnResponseRuntimeInput["extractExecutionState"];
sanitizeReply: RunAssistantDeepTurnResponseRuntimeInput["sanitizeReply"];
persistInvestigationState: RunAssistantDeepTurnResponseRuntimeInput["persistInvestigationState"];
messageIdFactory: RunAssistantDeepTurnResponseRuntimeInput["messageIdFactory"];
appendItem: RunAssistantDeepTurnResponseRuntimeInput["appendItem"];
getSession: RunAssistantDeepTurnResponseRuntimeInput["getSession"];
persistSession: RunAssistantDeepTurnResponseRuntimeInput["persistSession"];
cloneConversation: RunAssistantDeepTurnResponseRuntimeInput["cloneConversation"];
logEvent: RunAssistantDeepTurnResponseRuntimeInput["logEvent"];
runPackagingRuntime?: RunAssistantDeepTurnResponseRuntimeInput["runPackagingRuntime"];
runFinalizeDeepTurn?: RunAssistantDeepTurnResponseRuntimeInput["runFinalizeDeepTurn"];
runDeepTurnResponseRuntime?: (
input: RunAssistantDeepTurnResponseRuntimeInput
) => RunAssistantDeepTurnResponseRuntimeOutput;
}
export function runAssistantDeepTurnResponseAttemptRuntime<
ResponseType = AssistantMessageResponsePayload
>(
input: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>
): {
response: ResponseType;
debug: Record<string, unknown>;
} {
const runDeepTurnResponseRuntimeSafe =
input.runDeepTurnResponseRuntime ?? runAssistantDeepTurnResponseRuntime;
const analysis = input.deepTurnAnalysisRuntime;
const responseRuntime = runDeepTurnResponseRuntimeSafe({
featureInvestigationStateV1: input.featureInvestigationStateV1,
featureContractsV11: input.featureContractsV11,
featureAnswerPolicyV11: input.featureAnswerPolicyV11,
sessionId: input.sessionId,
questionId: input.questionId,
userMessage: input.userMessage,
normalized: input.normalized,
normalizedQuestion: input.normalizedQuestion,
routeSummary: analysis.resolvedRouteSummary,
executionPlan: analysis.executionPlan,
requirementExtractionRequirements: analysis.requirementExtraction.requirements,
coverageEvaluationRequirements: analysis.coverageEvaluation.requirements,
coverageReport: analysis.coverageEvaluation.coverage,
groundingCheck: analysis.groundingCheck,
retrievalCalls: analysis.retrievalCalls,
retrievalResultsRaw: analysis.retrievalResultsRaw,
retrievalResults: analysis.retrievalResults,
questionTypeClass: analysis.questionTypeClass,
companyAnchors: analysis.companyAnchors,
runtimeAnalysisContext: input.runtimeAnalysisContext,
businessScopeResolution: analysis.businessScopeResolution,
temporalGuard: analysis.temporalGuard,
polarityAudit: analysis.polarityGuardResult.audit,
claimAnchorAudit: analysis.claimAnchorAudit,
targetedEvidenceAudit: analysis.targetedEvidenceResult.audit,
evidenceAdmissibilityGateAudit: analysis.evidenceGateResult.audit,
rbpLiveRouteAudit: analysis.rbpLiveRouteAudit,
faLiveRouteAudit: analysis.faLiveRouteAudit,
groundedAnswerEligibilityGuard: analysis.groundedAnswerEligibilityGuard,
followupStateUsage: input.followupStateUsage,
followupApplied: input.followupApplied,
composition: analysis.composition as any,
previousInvestigationState: input.previousInvestigationState ?? null,
addressRuntimeMetaForDeep: input.addressRuntimeMetaForDeep,
extractDroppedIntentSegments: input.extractDroppedIntentSegments,
buildDebugRoutes: input.buildDebugRoutes,
extractExecutionState: input.extractExecutionState,
sanitizeReply: input.sanitizeReply,
persistInvestigationState: input.persistInvestigationState,
messageIdFactory: input.messageIdFactory,
appendItem: input.appendItem,
getSession: input.getSession,
persistSession: input.persistSession,
cloneConversation: input.cloneConversation,
logEvent: input.logEvent,
runPackagingRuntime: input.runPackagingRuntime,
runFinalizeDeepTurn: input.runFinalizeDeepTurn
});
return {
response: responseRuntime.response as ResponseType,
debug: responseRuntime.debug
};
}
@@ -19,10 +19,8 @@ import * as assistantCanon_1 from "./assistantCanon";
import * as assistantAddressLaneResponseAttemptRuntimeAdapter_1 from "./assistantAddressLaneResponseAttemptRuntimeAdapter";
import * as assistantCoverageGrounding_1 from "./assistantCoverageGrounding";
import * as assistantDeepTurnAnalysisAttemptRuntimeAdapter_1 from "./assistantDeepTurnAnalysisAttemptRuntimeAdapter";
import * as assistantDeepTurnFinalizeRuntimeAdapter_1 from "./assistantDeepTurnFinalizeRuntimeAdapter";
import * as assistantDeepTurnPackagingRuntimeAdapter_1 from "./assistantDeepTurnPackagingRuntimeAdapter";
import * as assistantDeepTurnNormalizationRuntimeAdapter_1 from "./assistantDeepTurnNormalizationRuntimeAdapter";
import * as assistantDeepTurnResponseRuntimeAdapter_1 from "./assistantDeepTurnResponseRuntimeAdapter";
import * as assistantDeepTurnResponseAttemptRuntimeAdapter_1 from "./assistantDeepTurnResponseAttemptRuntimeAdapter";
import * as assistantAddressRuntimeAdapter_1 from "./assistantAddressRuntimeAdapter";
import * as assistantAddressLaneAttemptRuntimeAdapter_1 from "./assistantAddressLaneAttemptRuntimeAdapter";
import * as assistantLivingChatAttemptRuntimeAdapter_1 from "./assistantLivingChatAttemptRuntimeAdapter";
@@ -4487,27 +4485,7 @@ export class AssistantService {
collectFaLiveRouteAudit,
hasExplicitPeriodAnchor: (normalizedPayload) => hasExplicitPeriodAnchorFromNormalized(normalizedPayload)
});
const companyAnchors = deepTurnAnalysisRuntime.companyAnchors;
const temporalGuard = deepTurnAnalysisRuntime.temporalGuard;
const claimAnchorAudit = deepTurnAnalysisRuntime.claimAnchorAudit;
const businessScopeResolution = deepTurnAnalysisRuntime.businessScopeResolution;
const resolvedRouteSummary = deepTurnAnalysisRuntime.resolvedRouteSummary;
const requirementExtraction = deepTurnAnalysisRuntime.requirementExtraction;
const executionPlan = deepTurnAnalysisRuntime.executionPlan;
const retrievalCalls = deepTurnAnalysisRuntime.retrievalCalls;
const retrievalResultsRaw = deepTurnAnalysisRuntime.retrievalResultsRaw;
const retrievalResults = deepTurnAnalysisRuntime.retrievalResults;
const polarityGuardResult = deepTurnAnalysisRuntime.polarityGuardResult;
const targetedEvidenceResult = deepTurnAnalysisRuntime.targetedEvidenceResult;
const evidenceGateResult = deepTurnAnalysisRuntime.evidenceGateResult;
const rbpLiveRouteAudit = deepTurnAnalysisRuntime.rbpLiveRouteAudit;
const faLiveRouteAudit = deepTurnAnalysisRuntime.faLiveRouteAudit;
const coverageEvaluation = deepTurnAnalysisRuntime.coverageEvaluation;
const groundedAnswerEligibilityGuard = deepTurnAnalysisRuntime.groundedAnswerEligibilityGuard;
const groundingCheck = deepTurnAnalysisRuntime.groundingCheck;
const questionTypeClass = deepTurnAnalysisRuntime.questionTypeClass;
const composition = deepTurnAnalysisRuntime.composition;
const deepTurnResponseRuntime = (0, assistantDeepTurnResponseRuntimeAdapter_1.runAssistantDeepTurnResponseRuntime)({
const deepTurnResponseRuntime = (0, assistantDeepTurnResponseAttemptRuntimeAdapter_1.runAssistantDeepTurnResponseAttemptRuntime)({
featureInvestigationStateV1: config_1.FEATURE_ASSISTANT_INVESTIGATION_STATE_V1,
featureContractsV11: config_1.FEATURE_ASSISTANT_CONTRACTS_V11,
featureAnswerPolicyV11: config_1.FEATURE_ASSISTANT_ANSWER_POLICY_V11,
@@ -4521,30 +4499,10 @@ export class AssistantService {
normalized: normalized.normalized
},
normalizedQuestion: followupBinding.normalizedQuestion,
routeSummary: resolvedRouteSummary,
executionPlan,
requirementExtractionRequirements: requirementExtraction.requirements,
coverageEvaluationRequirements: coverageEvaluation.requirements,
coverageReport: coverageEvaluation.coverage,
groundingCheck,
retrievalCalls,
retrievalResultsRaw,
retrievalResults,
questionTypeClass,
companyAnchors,
deepTurnAnalysisRuntime,
runtimeAnalysisContext,
businessScopeResolution,
temporalGuard,
polarityAudit: polarityGuardResult.audit,
claimAnchorAudit,
targetedEvidenceAudit: targetedEvidenceResult.audit,
evidenceAdmissibilityGateAudit: evidenceGateResult.audit,
rbpLiveRouteAudit,
faLiveRouteAudit,
groundedAnswerEligibilityGuard,
followupStateUsage: followupBinding.usage,
followupApplied: Boolean(followupBinding.usage?.applied),
composition,
previousInvestigationState: session.investigation_state,
addressRuntimeMetaForDeep,
extractDroppedIntentSegments: (normalizedPayload) => extractDiscardedIntentSegments(normalizedPayload),
@@ -4557,9 +4515,7 @@ export class AssistantService {
getSession: (targetSessionId) => this.sessions.getSession(targetSessionId),
persistSession: (sessionState) => this.sessionLogger.persistSession(sessionState),
cloneConversation: (items) => cloneItems(items),
logEvent: (payload) => (0, log_1.logJson)(payload),
runPackagingRuntime: (input) => (0, assistantDeepTurnPackagingRuntimeAdapter_1.runAssistantDeepTurnPackagingRuntime)(input),
runFinalizeDeepTurn: (input) => (0, assistantDeepTurnFinalizeRuntimeAdapter_1.finalizeAssistantDeepTurn)(input)
logEvent: (payload) => (0, log_1.logJson)(payload)
});
return deepTurnResponseRuntime.response;
}