ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.45 - объединены три выделенных слоя (NormalizationAttempt + AnalysisAttempt + ResponseAttempt) в один assistantDeepTurnAttemptRuntimeAdapter, после чего в handleMessage остался один вызов вместо трёх

This commit is contained in:
2026-04-10 23:55:11 +03:00
parent fcfcba47b0
commit 5790e25b68
6 changed files with 540 additions and 81 deletions
@@ -0,0 +1,174 @@
import type { AssistantMessageResponsePayload } from "../types/assistant";
import type { InvestigationStateWithProblemUnits } from "../types/stage2ProblemUnits";
import {
buildAssistantDeepTurnNormalizationRuntime,
type BuildAssistantDeepTurnNormalizationRuntimeInput,
type BuildAssistantDeepTurnNormalizationRuntimeOutput
} from "./assistantDeepTurnNormalizationRuntimeAdapter";
import {
runAssistantDeepTurnAnalysisAttemptRuntime,
type RunAssistantDeepTurnAnalysisAttemptRuntimeInput
} from "./assistantDeepTurnAnalysisAttemptRuntimeAdapter";
import {
runAssistantDeepTurnResponseAttemptRuntime,
type RunAssistantDeepTurnResponseAttemptRuntimeInput
} from "./assistantDeepTurnResponseAttemptRuntimeAdapter";
import type { RunAssistantDeepTurnAnalysisRuntimeOutput } from "./assistantDeepTurnAnalysisRuntimeAdapter";
export interface RunAssistantDeepTurnAttemptRuntimeInput<ResponseType = AssistantMessageResponsePayload> {
sessionId: string;
questionId: string;
userMessage: string;
payload: BuildAssistantDeepTurnNormalizationRuntimeInput["payload"];
runtimeAnalysisContext: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["runtimeAnalysisContext"];
sessionInvestigationState: InvestigationStateWithProblemUnits | null | undefined;
addressRuntimeMetaForDeep: unknown;
featureInvestigationStateV1: boolean;
featureStateFollowupBindingV1: boolean;
featureContractsV11: boolean;
featureAnswerPolicyV11: boolean;
featureProblemCentricAnswerV1: boolean;
featureLifecycleAnswerV1: boolean;
buildFollowupStateBinding: BuildAssistantDeepTurnNormalizationRuntimeInput["buildFollowupStateBinding"];
normalize: BuildAssistantDeepTurnNormalizationRuntimeInput["normalize"];
resolveBusinessScopeAlignment: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["resolveBusinessScopeAlignment"];
inferP0DomainFromMessage: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["inferP0DomainFromMessage"];
resolveBusinessScopeFromLiveContext: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["resolveBusinessScopeFromLiveContext"];
extractRequirements: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["extractRequirements"];
toExecutionPlan: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["toExecutionPlan"];
enforceRbpLiveRoutePlan: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["enforceRbpLiveRoutePlan"];
enforceFaLiveRoutePlan: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["enforceFaLiveRoutePlan"];
executeRouteRuntime: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["executeRouteRuntime"];
mapNoRouteReason: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["mapNoRouteReason"];
buildSkippedResult: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["buildSkippedResult"];
evaluateCoverage: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["evaluateCoverage"];
checkGrounding: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["checkGrounding"];
collectRbpLiveRouteAudit: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["collectRbpLiveRouteAudit"];
collectFaLiveRouteAudit: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["collectFaLiveRouteAudit"];
hasExplicitPeriodAnchor: RunAssistantDeepTurnAnalysisAttemptRuntimeInput["hasExplicitPeriodAnchor"];
extractDroppedIntentSegments: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["extractDroppedIntentSegments"];
buildDebugRoutes: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["buildDebugRoutes"];
extractExecutionState: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["extractExecutionState"];
sanitizeReply: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["sanitizeReply"];
persistInvestigationState: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["persistInvestigationState"];
messageIdFactory: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["messageIdFactory"];
appendItem: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["appendItem"];
getSession: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["getSession"];
persistSession: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["persistSession"];
cloneConversation: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["cloneConversation"];
logEvent: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["logEvent"];
runPackagingRuntime?: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["runPackagingRuntime"];
runFinalizeDeepTurn?: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>["runFinalizeDeepTurn"];
runDeepTurnNormalizationRuntime?: (
input: BuildAssistantDeepTurnNormalizationRuntimeInput
) => Promise<BuildAssistantDeepTurnNormalizationRuntimeOutput>;
runDeepTurnAnalysisAttemptRuntime?: (
input: RunAssistantDeepTurnAnalysisAttemptRuntimeInput
) => Promise<RunAssistantDeepTurnAnalysisRuntimeOutput>;
runDeepTurnResponseAttemptRuntime?: (
input: RunAssistantDeepTurnResponseAttemptRuntimeInput<ResponseType>
) => {
response: ResponseType;
debug: Record<string, unknown>;
};
}
export interface RunAssistantDeepTurnAttemptRuntimeOutput<ResponseType = AssistantMessageResponsePayload> {
response: ResponseType;
debug: Record<string, unknown>;
normalizationRuntime: BuildAssistantDeepTurnNormalizationRuntimeOutput;
deepTurnAnalysisRuntime: RunAssistantDeepTurnAnalysisRuntimeOutput;
}
export async function runAssistantDeepTurnAttemptRuntime<ResponseType = AssistantMessageResponsePayload>(
input: RunAssistantDeepTurnAttemptRuntimeInput<ResponseType>
): Promise<RunAssistantDeepTurnAttemptRuntimeOutput<ResponseType>> {
const runDeepTurnNormalizationRuntimeSafe =
input.runDeepTurnNormalizationRuntime ?? buildAssistantDeepTurnNormalizationRuntime;
const runDeepTurnAnalysisAttemptRuntimeSafe =
input.runDeepTurnAnalysisAttemptRuntime ?? runAssistantDeepTurnAnalysisAttemptRuntime;
const runDeepTurnResponseAttemptRuntimeSafe =
input.runDeepTurnResponseAttemptRuntime ?? runAssistantDeepTurnResponseAttemptRuntime;
const normalizationRuntime = await runDeepTurnNormalizationRuntimeSafe({
userMessage: input.userMessage,
payload: input.payload,
featureInvestigationStateV1: input.featureInvestigationStateV1,
featureStateFollowupBindingV1: input.featureStateFollowupBindingV1,
sessionInvestigationState: input.sessionInvestigationState,
buildFollowupStateBinding: input.buildFollowupStateBinding,
normalize: input.normalize
});
const followupBinding = normalizationRuntime.followupBinding;
const normalized = normalizationRuntime.normalized;
const deepTurnAnalysisRuntime = await runDeepTurnAnalysisAttemptRuntimeSafe({
userMessage: input.userMessage,
normalizedPayload: normalized.normalized,
routeSummary: normalized.route_hint_summary,
runtimeAnalysisContext: input.runtimeAnalysisContext,
followupUsage: followupBinding.usage,
investigationState: input.sessionInvestigationState,
featureAnswerPolicyV11: input.featureAnswerPolicyV11,
featureProblemCentricAnswerV1: input.featureProblemCentricAnswerV1,
featureLifecycleAnswerV1: input.featureLifecycleAnswerV1,
resolveBusinessScopeAlignment: input.resolveBusinessScopeAlignment,
inferP0DomainFromMessage: input.inferP0DomainFromMessage,
resolveBusinessScopeFromLiveContext: input.resolveBusinessScopeFromLiveContext,
extractRequirements: input.extractRequirements,
toExecutionPlan: input.toExecutionPlan,
enforceRbpLiveRoutePlan: input.enforceRbpLiveRoutePlan,
enforceFaLiveRoutePlan: input.enforceFaLiveRoutePlan,
executeRouteRuntime: input.executeRouteRuntime,
mapNoRouteReason: input.mapNoRouteReason,
buildSkippedResult: input.buildSkippedResult,
evaluateCoverage: input.evaluateCoverage,
checkGrounding: input.checkGrounding,
collectRbpLiveRouteAudit: input.collectRbpLiveRouteAudit,
collectFaLiveRouteAudit: input.collectFaLiveRouteAudit,
hasExplicitPeriodAnchor: input.hasExplicitPeriodAnchor
});
const deepTurnResponseRuntime = runDeepTurnResponseAttemptRuntimeSafe({
featureInvestigationStateV1: input.featureInvestigationStateV1,
featureContractsV11: input.featureContractsV11,
featureAnswerPolicyV11: input.featureAnswerPolicyV11,
sessionId: input.sessionId,
questionId: input.questionId,
userMessage: input.userMessage,
normalized: {
trace_id: normalized.trace_id,
prompt_version: normalized.prompt_version,
schema_version: normalized.schema_version,
normalized: normalized.normalized
},
normalizedQuestion: followupBinding.normalizedQuestion,
deepTurnAnalysisRuntime,
runtimeAnalysisContext: input.runtimeAnalysisContext,
followupStateUsage: followupBinding.usage,
followupApplied: Boolean((followupBinding.usage as { applied?: unknown } | null)?.applied),
previousInvestigationState: input.sessionInvestigationState,
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: deepTurnResponseRuntime.response,
debug: deepTurnResponseRuntime.debug,
normalizationRuntime,
deepTurnAnalysisRuntime
};
}