ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.12.23: декомпозиция deep-turn пайплайна ассистента в runtime-адаптеры
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
import type {
|
||||
AssistantConversationItem,
|
||||
AssistantReplyType,
|
||||
AssistantRequirement,
|
||||
AnswerGroundingCheck,
|
||||
RequirementCoverageReport,
|
||||
UnifiedRetrievalResult
|
||||
} from "../types/assistant";
|
||||
import type { NormalizeResponsePayload, RouteHintSummary } from "../types/normalizer";
|
||||
import type { AnswerStructureV11 } from "../types/stage1Contracts";
|
||||
import {
|
||||
assembleAssistantEvidenceBundle,
|
||||
type AssistantEvidenceBundleAssembly
|
||||
} from "./assistantEvidenceBundleAssembler";
|
||||
import { assembleAssistantContractsBundleV1, type AssistantContractsBundleV1 } from "./assistantContractsBundleAssembler";
|
||||
import { buildDeepAnswerArtifacts, buildAssistantConversationItem, type DeepAnswerArtifacts } from "./assistantDeepResponseAssembler";
|
||||
import { buildDeepAnalysisDebugPayload } from "./assistantDebugPayloadAssembler";
|
||||
import { buildDeepAnalysisProcessedLogDetails } from "./assistantMessageLogAssembler";
|
||||
|
||||
export interface AssistantDeepTurnPackagingInput {
|
||||
sessionId: string;
|
||||
messageId: string;
|
||||
userMessage: string;
|
||||
normalized: {
|
||||
trace_id: string;
|
||||
prompt_version: string;
|
||||
schema_version: string;
|
||||
normalized: NormalizeResponsePayload["normalized"];
|
||||
};
|
||||
normalizedQuestion: string;
|
||||
routeSummary: RouteHintSummary | null;
|
||||
droppedIntentSegments: string[];
|
||||
analysisContextForContract: {
|
||||
as_of_date: string | null;
|
||||
period_from: string | null;
|
||||
period_to: string | null;
|
||||
source: string | null;
|
||||
snapshot_mode: "auto" | "force_snapshot" | "force_live";
|
||||
} | null;
|
||||
executionPlan: Array<{
|
||||
fragment_id: string;
|
||||
requirement_ids: string[];
|
||||
route: string;
|
||||
should_execute: boolean;
|
||||
no_route_reason?: string | null;
|
||||
clarification_reason?: string | null;
|
||||
}>;
|
||||
requirementExtractionRequirements: AssistantRequirement[];
|
||||
coverageEvaluationRequirements: AssistantRequirement[];
|
||||
coverageReport: RequirementCoverageReport;
|
||||
groundingCheck: AnswerGroundingCheck;
|
||||
retrievalCalls: Array<Record<string, unknown>>;
|
||||
retrievalResultsRaw: unknown[];
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
routesForDebug: Array<Record<string, unknown>>;
|
||||
resolvedExecutionState: unknown;
|
||||
questionTypeClass: string;
|
||||
companyAnchors: unknown;
|
||||
runtimeAnalysisContext: {
|
||||
active: boolean;
|
||||
as_of_date: string | null;
|
||||
period_from: string | null;
|
||||
period_to: string | null;
|
||||
source: string | null;
|
||||
snapshot_mode: "auto" | "force_snapshot" | "force_live";
|
||||
};
|
||||
businessScopeResolution: {
|
||||
business_scope_raw?: string[];
|
||||
business_scope_resolved?: string[];
|
||||
company_grounding_applied?: boolean;
|
||||
scope_resolution_reason?: string[];
|
||||
};
|
||||
temporalGuard: Record<string, unknown>;
|
||||
polarityAudit: Record<string, unknown>;
|
||||
claimAnchorAudit: Record<string, unknown>;
|
||||
targetedEvidenceAudit: unknown;
|
||||
evidenceAdmissibilityGateAudit: unknown;
|
||||
rbpLiveRouteAudit: unknown | null;
|
||||
faLiveRouteAudit: unknown | null;
|
||||
groundedAnswerEligibilityGuard: Record<string, unknown>;
|
||||
followupStateUsage: unknown | null;
|
||||
composition: {
|
||||
reply_type: AssistantReplyType;
|
||||
fallback_type: unknown;
|
||||
answer_structure_v11?: AnswerStructureV11 | null;
|
||||
problem_centric_answer_applied?: boolean;
|
||||
problem_units_used_count?: number;
|
||||
problem_answer_mode?: string;
|
||||
problem_unit_ids_used?: string[];
|
||||
};
|
||||
safeAssistantReplyBase: string;
|
||||
featureContractsV11: boolean;
|
||||
featureAnswerPolicyV11: boolean;
|
||||
investigationStateSnapshot: unknown;
|
||||
addressRuntimeMetaForDeep:
|
||||
| {
|
||||
attempted?: boolean;
|
||||
applied?: boolean;
|
||||
reason?: string | null;
|
||||
provider?: string | null;
|
||||
fallbackRuleHit?: string | null;
|
||||
toolGateDecision?: string | null;
|
||||
toolGateReason?: string | null;
|
||||
predecomposeContract?: unknown;
|
||||
orchestrationContract?: unknown;
|
||||
}
|
||||
| null
|
||||
| undefined;
|
||||
}
|
||||
|
||||
export interface AssistantDeepTurnPackagingOutput {
|
||||
evidenceBundleAssembly: AssistantEvidenceBundleAssembly;
|
||||
contractsBundleV1: AssistantContractsBundleV1;
|
||||
deepAnswerArtifacts: DeepAnswerArtifacts;
|
||||
debug: Record<string, unknown>;
|
||||
assistantItem: AssistantConversationItem;
|
||||
deepAnalysisLogDetails: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export function assembleAssistantDeepTurnPackaging(input: AssistantDeepTurnPackagingInput): AssistantDeepTurnPackagingOutput {
|
||||
const normalizedPayload = (input.normalized.normalized ?? null) as Record<string, unknown> | null;
|
||||
const normalizedFragments = Array.isArray(normalizedPayload?.["fragments"]) ? (normalizedPayload?.["fragments"] as unknown[]) : [];
|
||||
const evidenceBundleAssembly = assembleAssistantEvidenceBundle({
|
||||
retrievalCalls: input.retrievalCalls,
|
||||
retrievalResults: input.retrievalResults
|
||||
});
|
||||
const contractsBundleV1 = assembleAssistantContractsBundleV1({
|
||||
userMessage: input.userMessage,
|
||||
normalizedQuestion: input.normalizedQuestion,
|
||||
normalized: input.normalized.normalized,
|
||||
routeSummary: input.routeSummary,
|
||||
droppedIntentSegments: input.droppedIntentSegments,
|
||||
analysisContext: input.analysisContextForContract,
|
||||
executionPlan: input.executionPlan,
|
||||
requirements: input.requirementExtractionRequirements,
|
||||
evidenceBundleContractV1: evidenceBundleAssembly.evidenceBundleContractV1,
|
||||
replyType: input.composition.reply_type,
|
||||
coverageReport: input.coverageReport,
|
||||
grounding: input.groundingCheck,
|
||||
retrievalResults: input.retrievalResults
|
||||
});
|
||||
const deepAnswerArtifacts = buildDeepAnswerArtifacts({
|
||||
safeAssistantReplyBase: input.safeAssistantReplyBase,
|
||||
featureContractsV11: input.featureContractsV11,
|
||||
featureAnswerPolicyV11: input.featureAnswerPolicyV11,
|
||||
compositionAnswerStructureV11: input.composition.answer_structure_v11 ?? null,
|
||||
coverageReport: input.coverageReport,
|
||||
groundingCheck: input.groundingCheck,
|
||||
retrievalResults: input.retrievalResults
|
||||
});
|
||||
const debug = buildDeepAnalysisDebugPayload({
|
||||
traceId: input.normalized.trace_id,
|
||||
promptVersion: input.normalized.prompt_version,
|
||||
schemaVersion: input.normalized.schema_version,
|
||||
fallbackType: input.composition.fallback_type,
|
||||
routeSummary: input.routeSummary,
|
||||
fragments: normalizedFragments,
|
||||
requirementsExtracted: input.coverageEvaluationRequirements,
|
||||
coverageReport: input.coverageReport,
|
||||
routes: input.routesForDebug,
|
||||
retrievalStatus: evidenceBundleAssembly.retrievalStatus,
|
||||
retrievalResults: input.retrievalResults,
|
||||
groundingCheck: input.groundingCheck,
|
||||
droppedIntentSegments: input.droppedIntentSegments,
|
||||
questionTypeClass: input.questionTypeClass,
|
||||
companyAnchors: input.companyAnchors,
|
||||
runtimeAnalysisContext: input.runtimeAnalysisContext,
|
||||
businessScopeResolution: input.businessScopeResolution,
|
||||
temporalGuard: input.temporalGuard,
|
||||
polarityAudit: input.polarityAudit,
|
||||
claimAnchorAudit: input.claimAnchorAudit,
|
||||
targetedEvidenceAudit: input.targetedEvidenceAudit,
|
||||
evidenceAdmissibilityGateAudit: input.evidenceAdmissibilityGateAudit,
|
||||
rbpLiveRouteAudit: input.rbpLiveRouteAudit,
|
||||
faLiveRouteAudit: input.faLiveRouteAudit,
|
||||
groundedAnswerEligibilityGuard: input.groundedAnswerEligibilityGuard,
|
||||
followupStateUsage: input.followupStateUsage,
|
||||
compositionDebug: {
|
||||
problem_centric_answer_applied: input.composition.problem_centric_answer_applied ?? false,
|
||||
problem_units_used_count: input.composition.problem_units_used_count ?? 0,
|
||||
problem_answer_mode: input.composition.problem_answer_mode ?? "stage1_policy_v11",
|
||||
problem_unit_ids_used: Array.isArray(input.composition.problem_unit_ids_used) ? input.composition.problem_unit_ids_used : []
|
||||
},
|
||||
addressRuntimeMetaForDeep: input.addressRuntimeMetaForDeep,
|
||||
outcomeClassV1: contractsBundleV1.outcomeClassV1,
|
||||
assistantOrchestrationContractsV1: contractsBundleV1.assistantOrchestrationContractsV1,
|
||||
answerStructureV11: deepAnswerArtifacts.answerStructureV11,
|
||||
investigationStateSnapshot: input.investigationStateSnapshot,
|
||||
normalizedPayload: normalizedPayload
|
||||
});
|
||||
const assistantItem = buildAssistantConversationItem({
|
||||
messageId: input.messageId,
|
||||
sessionId: input.sessionId,
|
||||
text: deepAnswerArtifacts.safeAssistantReply,
|
||||
replyType: input.composition.reply_type,
|
||||
traceId: input.normalized.trace_id,
|
||||
debug: debug as any
|
||||
});
|
||||
const deepAnalysisLogDetails = buildDeepAnalysisProcessedLogDetails({
|
||||
sessionId: input.sessionId,
|
||||
messageId: input.messageId,
|
||||
userMessage: input.userMessage,
|
||||
normalizerOutput: input.normalized.normalized,
|
||||
executionPlan: input.executionPlan,
|
||||
resolvedExecutionState: input.resolvedExecutionState,
|
||||
routes: input.routesForDebug,
|
||||
retrievalCalls: input.retrievalCalls,
|
||||
retrievalResultsRaw: input.retrievalResultsRaw,
|
||||
retrievalResultsNormalized: input.retrievalResults,
|
||||
requirementsExtracted: input.coverageEvaluationRequirements,
|
||||
coverageReport: input.coverageReport,
|
||||
groundingCheck: input.groundingCheck,
|
||||
replyType: input.composition.reply_type,
|
||||
droppedIntentSegments: input.droppedIntentSegments,
|
||||
questionTypeClass: input.questionTypeClass,
|
||||
companyAnchors: input.companyAnchors,
|
||||
runtimeAnalysisContext: input.runtimeAnalysisContext,
|
||||
businessScopeResolution: input.businessScopeResolution,
|
||||
temporalGuard: input.temporalGuard,
|
||||
polarityAudit: input.polarityAudit,
|
||||
claimAnchorAudit: input.claimAnchorAudit,
|
||||
targetedEvidenceAudit: input.targetedEvidenceAudit,
|
||||
evidenceAdmissibilityGateAudit: input.evidenceAdmissibilityGateAudit,
|
||||
rbpLiveRouteAudit: input.rbpLiveRouteAudit,
|
||||
faLiveRouteAudit: input.faLiveRouteAudit,
|
||||
groundedAnswerEligibilityGuard: input.groundedAnswerEligibilityGuard,
|
||||
followupStateUsage: input.followupStateUsage,
|
||||
compositionDebug: {
|
||||
problem_centric_answer_applied: input.composition.problem_centric_answer_applied ?? false,
|
||||
problem_units_used_count: input.composition.problem_units_used_count ?? 0,
|
||||
problem_answer_mode: input.composition.problem_answer_mode ?? "stage1_policy_v11",
|
||||
problem_unit_ids_used: Array.isArray(input.composition.problem_unit_ids_used) ? input.composition.problem_unit_ids_used : [],
|
||||
fallback_type: input.composition.fallback_type as string
|
||||
},
|
||||
outcomeClassV1: contractsBundleV1.outcomeClassV1,
|
||||
assistantOrchestrationContractsV1: contractsBundleV1.assistantOrchestrationContractsV1,
|
||||
answerStructureV11: deepAnswerArtifacts.answerStructureV11,
|
||||
investigationStateSnapshot: input.investigationStateSnapshot,
|
||||
assistantReply: deepAnswerArtifacts.safeAssistantReply,
|
||||
traceId: input.normalized.trace_id
|
||||
});
|
||||
return {
|
||||
evidenceBundleAssembly,
|
||||
contractsBundleV1,
|
||||
deepAnswerArtifacts,
|
||||
debug,
|
||||
assistantItem,
|
||||
deepAnalysisLogDetails
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user