ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.30: вынос ветки tool_gate_skip + chat fallback из assistantService в отдельный runtime-адаптер, чтобы в сервисе остался только orchestration flow.
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
export interface AssistantAddressToolGateRuntimeInput<ResponseType = unknown> {
|
||||
sessionId: string;
|
||||
userMessage: string;
|
||||
addressInputMessage: string;
|
||||
orchestrationDecision: {
|
||||
runAddressLane?: boolean;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
livingModeDecision: {
|
||||
mode?: unknown;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
addressRuntimeMeta: {
|
||||
attempted?: unknown;
|
||||
applied?: unknown;
|
||||
reason?: unknown;
|
||||
fallbackRuleHit?: unknown;
|
||||
sanitizedUserMessage?: unknown;
|
||||
orchestrationContract?: unknown;
|
||||
toolGateDecision?: unknown;
|
||||
toolGateReason?: unknown;
|
||||
predecomposeContract?: {
|
||||
intent?: unknown;
|
||||
aggregation_profile?: unknown;
|
||||
period?: {
|
||||
scope?: unknown;
|
||||
} | null;
|
||||
} | null;
|
||||
[key: string]: unknown;
|
||||
} | null;
|
||||
logEvent: (payload: Record<string, unknown>) => void;
|
||||
tryHandleLivingChat: (
|
||||
modeDecision: { mode?: unknown; reason?: unknown },
|
||||
addressRuntimeMeta: Record<string, unknown> | null
|
||||
) => Promise<ResponseType | null>;
|
||||
nowIso: () => string;
|
||||
}
|
||||
|
||||
export interface AssistantAddressToolGateRuntimeOutput<ResponseType = unknown> {
|
||||
handled: boolean;
|
||||
response: ResponseType | null;
|
||||
}
|
||||
|
||||
export async function runAssistantAddressToolGateRuntime<ResponseType = unknown>(
|
||||
input: AssistantAddressToolGateRuntimeInput<ResponseType>
|
||||
): Promise<AssistantAddressToolGateRuntimeOutput<ResponseType>> {
|
||||
if (Boolean(input.orchestrationDecision?.runAddressLane)) {
|
||||
return {
|
||||
handled: false,
|
||||
response: null
|
||||
};
|
||||
}
|
||||
|
||||
const runtimeMeta =
|
||||
input.addressRuntimeMeta && typeof input.addressRuntimeMeta === "object"
|
||||
? input.addressRuntimeMeta
|
||||
: ({} as Record<string, unknown>);
|
||||
const predecomposeContract =
|
||||
runtimeMeta.predecomposeContract && typeof runtimeMeta.predecomposeContract === "object"
|
||||
? (runtimeMeta.predecomposeContract as {
|
||||
intent?: unknown;
|
||||
aggregation_profile?: unknown;
|
||||
period?: { scope?: unknown } | null;
|
||||
})
|
||||
: null;
|
||||
const predecomposePeriod =
|
||||
predecomposeContract?.period && typeof predecomposeContract.period === "object"
|
||||
? predecomposeContract.period
|
||||
: null;
|
||||
|
||||
input.logEvent({
|
||||
timestamp: input.nowIso(),
|
||||
level: "info",
|
||||
service: "assistant_loop",
|
||||
message: "assistant_address_tool_gate_skip",
|
||||
sessionId: input.sessionId,
|
||||
details: {
|
||||
session_id: input.sessionId,
|
||||
user_message: input.userMessage,
|
||||
effective_address_user_message: input.addressInputMessage,
|
||||
address_llm_predecompose_attempted: Boolean(runtimeMeta.attempted),
|
||||
address_llm_predecompose_applied: Boolean(runtimeMeta.applied),
|
||||
address_llm_predecompose_reason: runtimeMeta.reason ?? null,
|
||||
address_fallback_rule_hit: runtimeMeta.fallbackRuleHit ?? null,
|
||||
address_sanitized_user_message: runtimeMeta.sanitizedUserMessage ?? null,
|
||||
assistant_orchestration_contract_v1: runtimeMeta.orchestrationContract ?? null,
|
||||
address_tool_gate_decision: runtimeMeta.toolGateDecision ?? null,
|
||||
address_tool_gate_reason: runtimeMeta.toolGateReason ?? null,
|
||||
address_llm_predecompose_contract_intent: predecomposeContract?.intent ?? null,
|
||||
address_llm_predecompose_contract_aggregation_profile: predecomposeContract?.aggregation_profile ?? null,
|
||||
address_llm_predecompose_contract_period_scope: predecomposePeriod?.scope ?? null
|
||||
}
|
||||
});
|
||||
|
||||
if (input.livingModeDecision?.mode === "chat") {
|
||||
const chatHandled = await input.tryHandleLivingChat(input.livingModeDecision, runtimeMeta);
|
||||
if (chatHandled) {
|
||||
return {
|
||||
handled: true,
|
||||
response: chatHandled
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
handled: false,
|
||||
response: null
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
import type { AnswerGroundingCheck, AssistantRequirement, RequirementCoverageReport, UnifiedRetrievalResult } from "../types/assistant";
|
||||
import type { RouteHintSummary } from "../types/normalizer";
|
||||
import type {
|
||||
AssistantPlanEnforcementAuditLike,
|
||||
AssistantRequirementExtractionLike
|
||||
} from "./assistantDeepTurnPlanRuntimeAdapter";
|
||||
import type {
|
||||
AssistantDeepTurnRetrievalExecutionOutput,
|
||||
AssistantLiveTemporalHint
|
||||
} from "./assistantDeepTurnRetrievalRuntimeAdapter";
|
||||
import type { AssistantDeepTurnRetrievalGuardPipelineOutput } from "./assistantDeepTurnGuardRuntimeAdapter";
|
||||
import type { AssistantDeepTurnGroundingRuntimeOutput } from "./assistantDeepTurnGroundingRuntimeAdapter";
|
||||
import type { AssistantDeepTurnCompositionOutput } from "./assistantDeepTurnCompositionRuntimeAdapter";
|
||||
|
||||
export interface AssistantDeepTurnRuntimeContextLike {
|
||||
companyAnchors: unknown;
|
||||
focusDomainForGuards: string | null;
|
||||
temporalGuard: unknown;
|
||||
domainPolarityGuardInitial: unknown;
|
||||
claimAnchorAudit: {
|
||||
claim_type: string;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
businessScopeResolution: {
|
||||
business_scope_resolved?: string[] | null;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
liveTemporalHint: AssistantLiveTemporalHint | null;
|
||||
}
|
||||
|
||||
export interface RunAssistantDeepTurnAnalysisRuntimeInput {
|
||||
userMessage: string;
|
||||
runContextRuntime: () => AssistantDeepTurnRuntimeContextLike;
|
||||
runExecutionPlanRuntime: (input: {
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
temporalGuard: unknown;
|
||||
domainPolarityGuardInitial: unknown;
|
||||
}) => {
|
||||
requirementExtraction: AssistantRequirementExtractionLike;
|
||||
executionPlan: unknown[];
|
||||
rbpRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
|
||||
faRoutePlanEnforcement: AssistantPlanEnforcementAuditLike;
|
||||
};
|
||||
runRetrievalRuntime: (input: {
|
||||
executionPlan: unknown[];
|
||||
liveTemporalHint: AssistantLiveTemporalHint | null;
|
||||
}) => Promise<AssistantDeepTurnRetrievalExecutionOutput>;
|
||||
runGuardRuntime: (input: {
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
domainPolarityGuardInitial: unknown;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
temporalGuard: unknown;
|
||||
focusDomainForGuards: string | null;
|
||||
companyAnchors: unknown;
|
||||
userMessage: string;
|
||||
}) => AssistantDeepTurnRetrievalGuardPipelineOutput;
|
||||
runGroundingRuntime: (input: {
|
||||
claimType: string;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
rbpPlanAudit: unknown;
|
||||
faPlanAudit: unknown;
|
||||
routeSummary: RouteHintSummary | null;
|
||||
requirementExtraction: AssistantRequirementExtractionLike;
|
||||
temporalGuard: unknown;
|
||||
polarityAudit: unknown;
|
||||
evidenceAudit: unknown;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
targetedEvidenceHitRate?: number | null;
|
||||
businessScopeResolved?: string[] | null;
|
||||
}) => AssistantDeepTurnGroundingRuntimeOutput;
|
||||
runCompositionRuntime: (input: {
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
requirements: AssistantRequirement[];
|
||||
coverageReport: RequirementCoverageReport;
|
||||
groundingCheck: AnswerGroundingCheck;
|
||||
companyAnchors: unknown;
|
||||
}) => AssistantDeepTurnCompositionOutput;
|
||||
}
|
||||
|
||||
export interface RunAssistantDeepTurnAnalysisRuntimeOutput {
|
||||
companyAnchors: unknown;
|
||||
temporalGuard: unknown;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
businessScopeResolution: AssistantDeepTurnRuntimeContextLike["businessScopeResolution"];
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
requirementExtraction: AssistantRequirementExtractionLike;
|
||||
executionPlan: unknown[];
|
||||
retrievalCalls: AssistantDeepTurnRetrievalExecutionOutput["retrievalCalls"];
|
||||
retrievalResultsRaw: AssistantDeepTurnRetrievalExecutionOutput["retrievalResultsRaw"];
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
polarityGuardResult: AssistantDeepTurnRetrievalGuardPipelineOutput["polarityGuardResult"];
|
||||
targetedEvidenceResult: AssistantDeepTurnRetrievalGuardPipelineOutput["targetedEvidenceResult"];
|
||||
evidenceGateResult: AssistantDeepTurnRetrievalGuardPipelineOutput["evidenceGateResult"];
|
||||
rbpLiveRouteAudit: AssistantDeepTurnGroundingRuntimeOutput["rbpLiveRouteAudit"];
|
||||
faLiveRouteAudit: AssistantDeepTurnGroundingRuntimeOutput["faLiveRouteAudit"];
|
||||
coverageEvaluation: AssistantDeepTurnGroundingRuntimeOutput["coverageEvaluation"];
|
||||
groundedAnswerEligibilityGuard: AssistantDeepTurnGroundingRuntimeOutput["groundedAnswerEligibilityGuard"];
|
||||
groundingCheck: AssistantDeepTurnGroundingRuntimeOutput["groundingCheck"];
|
||||
questionTypeClass: AssistantDeepTurnCompositionOutput["questionTypeClass"];
|
||||
composition: AssistantDeepTurnCompositionOutput["composition"];
|
||||
}
|
||||
|
||||
export async function runAssistantDeepTurnAnalysisRuntime(
|
||||
input: RunAssistantDeepTurnAnalysisRuntimeInput
|
||||
): Promise<RunAssistantDeepTurnAnalysisRuntimeOutput> {
|
||||
const contextRuntime = input.runContextRuntime();
|
||||
const executionPlanRuntime = input.runExecutionPlanRuntime({
|
||||
resolvedRouteSummary: contextRuntime.resolvedRouteSummary,
|
||||
claimAnchorAudit: contextRuntime.claimAnchorAudit,
|
||||
temporalGuard: contextRuntime.temporalGuard,
|
||||
domainPolarityGuardInitial: contextRuntime.domainPolarityGuardInitial
|
||||
});
|
||||
const retrievalRuntime = await input.runRetrievalRuntime({
|
||||
executionPlan: executionPlanRuntime.executionPlan,
|
||||
liveTemporalHint: contextRuntime.liveTemporalHint
|
||||
});
|
||||
const guardRuntime = input.runGuardRuntime({
|
||||
retrievalResults: retrievalRuntime.retrievalResults,
|
||||
domainPolarityGuardInitial: contextRuntime.domainPolarityGuardInitial,
|
||||
claimAnchorAudit: contextRuntime.claimAnchorAudit,
|
||||
temporalGuard: contextRuntime.temporalGuard,
|
||||
focusDomainForGuards: contextRuntime.focusDomainForGuards,
|
||||
companyAnchors: contextRuntime.companyAnchors,
|
||||
userMessage: input.userMessage
|
||||
});
|
||||
const groundingRuntime = input.runGroundingRuntime({
|
||||
claimType: contextRuntime.claimAnchorAudit.claim_type,
|
||||
retrievalResults: guardRuntime.retrievalResults,
|
||||
rbpPlanAudit: executionPlanRuntime.rbpRoutePlanEnforcement.audit,
|
||||
faPlanAudit: executionPlanRuntime.faRoutePlanEnforcement.audit,
|
||||
routeSummary: contextRuntime.resolvedRouteSummary,
|
||||
requirementExtraction: executionPlanRuntime.requirementExtraction,
|
||||
temporalGuard: contextRuntime.temporalGuard,
|
||||
polarityAudit: guardRuntime.polarityGuardResult.audit,
|
||||
evidenceAudit: guardRuntime.evidenceGateResult.audit,
|
||||
claimAnchorAudit: contextRuntime.claimAnchorAudit,
|
||||
targetedEvidenceHitRate: guardRuntime.targetedEvidenceResult.audit.targeted_evidence_hit_rate,
|
||||
businessScopeResolved: contextRuntime.businessScopeResolution.business_scope_resolved ?? null
|
||||
});
|
||||
const compositionRuntime = input.runCompositionRuntime({
|
||||
resolvedRouteSummary: contextRuntime.resolvedRouteSummary,
|
||||
retrievalResults: guardRuntime.retrievalResults,
|
||||
requirements: groundingRuntime.coverageEvaluation.requirements,
|
||||
coverageReport: groundingRuntime.coverageEvaluation.coverage,
|
||||
groundingCheck: groundingRuntime.groundingCheck,
|
||||
companyAnchors: contextRuntime.companyAnchors
|
||||
});
|
||||
|
||||
return {
|
||||
companyAnchors: contextRuntime.companyAnchors,
|
||||
temporalGuard: contextRuntime.temporalGuard,
|
||||
claimAnchorAudit: contextRuntime.claimAnchorAudit,
|
||||
businessScopeResolution: contextRuntime.businessScopeResolution,
|
||||
resolvedRouteSummary: contextRuntime.resolvedRouteSummary,
|
||||
requirementExtraction: executionPlanRuntime.requirementExtraction,
|
||||
executionPlan: executionPlanRuntime.executionPlan,
|
||||
retrievalCalls: retrievalRuntime.retrievalCalls,
|
||||
retrievalResultsRaw: retrievalRuntime.retrievalResultsRaw,
|
||||
retrievalResults: guardRuntime.retrievalResults,
|
||||
polarityGuardResult: guardRuntime.polarityGuardResult,
|
||||
targetedEvidenceResult: guardRuntime.targetedEvidenceResult,
|
||||
evidenceGateResult: guardRuntime.evidenceGateResult,
|
||||
rbpLiveRouteAudit: groundingRuntime.rbpLiveRouteAudit,
|
||||
faLiveRouteAudit: groundingRuntime.faLiveRouteAudit,
|
||||
coverageEvaluation: groundingRuntime.coverageEvaluation,
|
||||
groundedAnswerEligibilityGuard: groundingRuntime.groundedAnswerEligibilityGuard,
|
||||
groundingCheck: groundingRuntime.groundingCheck,
|
||||
questionTypeClass: compositionRuntime.questionTypeClass,
|
||||
composition: compositionRuntime.composition
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
import type { AssistantMessageRequestPayload } from "../types/assistant";
|
||||
import type { NormalizeRequestPayload, NormalizeResponsePayload } from "../types/normalizer";
|
||||
|
||||
export interface AssistantDeepTurnFollowupBinding {
|
||||
normalizedQuestion: string;
|
||||
mergedContext: NormalizeRequestPayload["context"] | undefined;
|
||||
usage: unknown | null;
|
||||
}
|
||||
|
||||
export interface BuildAssistantDeepTurnNormalizationRuntimeInput {
|
||||
userMessage: string;
|
||||
payload: AssistantMessageRequestPayload;
|
||||
featureInvestigationStateV1: boolean;
|
||||
featureStateFollowupBindingV1: boolean;
|
||||
sessionInvestigationState: unknown | null | undefined;
|
||||
buildFollowupStateBinding: (input: {
|
||||
userMessage: string;
|
||||
payloadContext: NormalizeRequestPayload["context"] | undefined;
|
||||
investigationState: unknown;
|
||||
}) => AssistantDeepTurnFollowupBinding;
|
||||
normalize: (payload: NormalizeRequestPayload) => Promise<NormalizeResponsePayload>;
|
||||
}
|
||||
|
||||
export interface BuildAssistantDeepTurnNormalizationRuntimeOutput {
|
||||
followupBinding: AssistantDeepTurnFollowupBinding;
|
||||
normalizePayload: NormalizeRequestPayload;
|
||||
normalized: NormalizeResponsePayload;
|
||||
}
|
||||
|
||||
export async function buildAssistantDeepTurnNormalizationRuntime(
|
||||
input: BuildAssistantDeepTurnNormalizationRuntimeInput
|
||||
): Promise<BuildAssistantDeepTurnNormalizationRuntimeOutput> {
|
||||
const followupBinding =
|
||||
input.featureInvestigationStateV1 &&
|
||||
input.featureStateFollowupBindingV1 &&
|
||||
Boolean(input.sessionInvestigationState)
|
||||
? input.buildFollowupStateBinding({
|
||||
userMessage: input.userMessage,
|
||||
payloadContext: input.payload.context,
|
||||
investigationState: input.sessionInvestigationState as unknown
|
||||
})
|
||||
: {
|
||||
normalizedQuestion: input.userMessage,
|
||||
mergedContext: input.payload.context,
|
||||
usage: null
|
||||
};
|
||||
|
||||
const normalizePayload: NormalizeRequestPayload = {
|
||||
llmProvider: input.payload.llmProvider,
|
||||
apiKey: input.payload.apiKey,
|
||||
model: input.payload.model,
|
||||
baseUrl: input.payload.baseUrl,
|
||||
temperature: input.payload.temperature,
|
||||
maxOutputTokens: input.payload.maxOutputTokens,
|
||||
promptVersion: input.payload.promptVersion ?? "address_query_runtime_v1",
|
||||
systemPrompt: input.payload.systemPrompt,
|
||||
developerPrompt: input.payload.developerPrompt,
|
||||
domainPrompt: input.payload.domainPrompt,
|
||||
fewShotExamples: input.payload.fewShotExamples,
|
||||
userQuestion: followupBinding.normalizedQuestion,
|
||||
context: followupBinding.mergedContext,
|
||||
useMock: Boolean(input.payload.useMock)
|
||||
};
|
||||
|
||||
const normalized = await input.normalize(normalizePayload);
|
||||
|
||||
return {
|
||||
followupBinding,
|
||||
normalizePayload,
|
||||
normalized
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
import type { AssistantMessageResponsePayload, AssistantReplyType } from "../types/assistant";
|
||||
import type { NormalizeResponsePayload, RouteHintSummary } from "../types/normalizer";
|
||||
import type { InvestigationStateWithProblemUnits } from "../types/stage2ProblemUnits";
|
||||
import {
|
||||
runAssistantDeepTurnPackagingRuntime,
|
||||
type AssistantDeepTurnPackagingRuntimeInput,
|
||||
type AssistantDeepTurnPackagingRuntimeOutput
|
||||
} from "./assistantDeepTurnPackagingRuntimeAdapter";
|
||||
import {
|
||||
finalizeAssistantDeepTurn,
|
||||
type FinalizeAssistantDeepTurnInput
|
||||
} from "./assistantDeepTurnFinalizeRuntimeAdapter";
|
||||
|
||||
type CompositionLike = {
|
||||
reply_type: AssistantReplyType;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
|
||||
export interface RunAssistantDeepTurnResponseRuntimeInput {
|
||||
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;
|
||||
routeSummary: RouteHintSummary | null;
|
||||
executionPlan: unknown[];
|
||||
requirementExtractionRequirements: unknown[];
|
||||
coverageEvaluationRequirements: unknown[];
|
||||
coverageReport: unknown;
|
||||
groundingCheck: unknown;
|
||||
retrievalCalls: unknown[];
|
||||
retrievalResultsRaw: unknown[];
|
||||
retrievalResults: unknown[];
|
||||
questionTypeClass: string;
|
||||
companyAnchors: unknown;
|
||||
runtimeAnalysisContext: unknown;
|
||||
businessScopeResolution: unknown;
|
||||
temporalGuard: unknown;
|
||||
polarityAudit: unknown;
|
||||
claimAnchorAudit: unknown;
|
||||
targetedEvidenceAudit: unknown;
|
||||
evidenceAdmissibilityGateAudit: unknown;
|
||||
rbpLiveRouteAudit: unknown;
|
||||
faLiveRouteAudit: unknown;
|
||||
groundedAnswerEligibilityGuard: unknown;
|
||||
followupStateUsage: unknown;
|
||||
followupApplied: boolean;
|
||||
composition: CompositionLike;
|
||||
previousInvestigationState: InvestigationStateWithProblemUnits | null | undefined;
|
||||
addressRuntimeMetaForDeep: unknown;
|
||||
extractDroppedIntentSegments: (normalizedPayload: NormalizeResponsePayload["normalized"]) => string[];
|
||||
buildDebugRoutes: (routeSummary: RouteHintSummary | null) => Array<Record<string, unknown>>;
|
||||
extractExecutionState: (normalizedPayload: NormalizeResponsePayload["normalized"]) => unknown[];
|
||||
sanitizeReply: (value: string, fallback?: string) => string;
|
||||
persistInvestigationState: (sessionId: string, snapshot: InvestigationStateWithProblemUnits) => void;
|
||||
messageIdFactory: () => string;
|
||||
appendItem: FinalizeAssistantDeepTurnInput["appendItem"];
|
||||
getSession: FinalizeAssistantDeepTurnInput["getSession"];
|
||||
persistSession: FinalizeAssistantDeepTurnInput["persistSession"];
|
||||
cloneConversation: FinalizeAssistantDeepTurnInput["cloneConversation"];
|
||||
logEvent: FinalizeAssistantDeepTurnInput["logEvent"];
|
||||
runPackagingRuntime?: (
|
||||
input: AssistantDeepTurnPackagingRuntimeInput
|
||||
) => AssistantDeepTurnPackagingRuntimeOutput;
|
||||
runFinalizeDeepTurn?: (input: FinalizeAssistantDeepTurnInput) => { response: AssistantMessageResponsePayload };
|
||||
}
|
||||
|
||||
export interface RunAssistantDeepTurnResponseRuntimeOutput {
|
||||
response: AssistantMessageResponsePayload;
|
||||
debug: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export function runAssistantDeepTurnResponseRuntime(
|
||||
input: RunAssistantDeepTurnResponseRuntimeInput
|
||||
): RunAssistantDeepTurnResponseRuntimeOutput {
|
||||
const runPackagingRuntimeSafe = input.runPackagingRuntime ?? runAssistantDeepTurnPackagingRuntime;
|
||||
const runFinalizeDeepTurnSafe = input.runFinalizeDeepTurn ?? finalizeAssistantDeepTurn;
|
||||
|
||||
const packagingRuntime = runPackagingRuntimeSafe({
|
||||
featureInvestigationStateV1: input.featureInvestigationStateV1,
|
||||
sessionId: input.sessionId,
|
||||
questionId: input.questionId,
|
||||
userMessage: input.userMessage,
|
||||
normalized: input.normalized,
|
||||
normalizedQuestion: input.normalizedQuestion,
|
||||
routeSummary: input.routeSummary,
|
||||
executionPlan: input.executionPlan as any,
|
||||
requirementExtractionRequirements: input.requirementExtractionRequirements as any,
|
||||
coverageEvaluationRequirements: input.coverageEvaluationRequirements as any,
|
||||
coverageReport: input.coverageReport as any,
|
||||
groundingCheck: input.groundingCheck as any,
|
||||
retrievalCalls: input.retrievalCalls as any,
|
||||
retrievalResultsRaw: input.retrievalResultsRaw as any,
|
||||
retrievalResults: input.retrievalResults as any,
|
||||
questionTypeClass: input.questionTypeClass,
|
||||
companyAnchors: input.companyAnchors,
|
||||
runtimeAnalysisContext: input.runtimeAnalysisContext as any,
|
||||
businessScopeResolution: input.businessScopeResolution as any,
|
||||
temporalGuard: input.temporalGuard as any,
|
||||
polarityAudit: input.polarityAudit as any,
|
||||
claimAnchorAudit: input.claimAnchorAudit as any,
|
||||
targetedEvidenceAudit: input.targetedEvidenceAudit as any,
|
||||
evidenceAdmissibilityGateAudit: input.evidenceAdmissibilityGateAudit as any,
|
||||
rbpLiveRouteAudit: input.rbpLiveRouteAudit as any,
|
||||
faLiveRouteAudit: input.faLiveRouteAudit as any,
|
||||
groundedAnswerEligibilityGuard: input.groundedAnswerEligibilityGuard as any,
|
||||
followupStateUsage: input.followupStateUsage as any,
|
||||
followupApplied: input.followupApplied,
|
||||
composition: input.composition as any,
|
||||
featureContractsV11: input.featureContractsV11,
|
||||
featureAnswerPolicyV11: input.featureAnswerPolicyV11,
|
||||
previousInvestigationState: input.previousInvestigationState ?? null,
|
||||
addressRuntimeMetaForDeep: input.addressRuntimeMetaForDeep as any,
|
||||
extractDroppedIntentSegments: input.extractDroppedIntentSegments,
|
||||
buildDebugRoutes: input.buildDebugRoutes,
|
||||
extractExecutionState: input.extractExecutionState,
|
||||
sanitizeReply: input.sanitizeReply,
|
||||
persistInvestigationState: input.persistInvestigationState,
|
||||
messageIdFactory: input.messageIdFactory
|
||||
});
|
||||
|
||||
const finalization = runFinalizeDeepTurnSafe({
|
||||
sessionId: input.sessionId,
|
||||
assistantReply: packagingRuntime.safeAssistantReply,
|
||||
replyType: input.composition.reply_type,
|
||||
assistantItem: packagingRuntime.assistantItem,
|
||||
debug: packagingRuntime.debug,
|
||||
deepAnalysisLogDetails: packagingRuntime.deepAnalysisLogDetails,
|
||||
appendItem: input.appendItem,
|
||||
getSession: input.getSession,
|
||||
persistSession: input.persistSession,
|
||||
cloneConversation: input.cloneConversation,
|
||||
logEvent: input.logEvent
|
||||
});
|
||||
|
||||
return {
|
||||
response: finalization.response,
|
||||
debug: packagingRuntime.debug
|
||||
};
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import * as capabilitiesRegistry_1 from "./capabilitiesRegistry";
|
||||
import * as assistantCanon_1 from "./assistantCanon";
|
||||
import * as assistantAddressTurnFinalizeRuntimeAdapter_1 from "./assistantAddressTurnFinalizeRuntimeAdapter";
|
||||
import * as assistantCoverageGrounding_1 from "./assistantCoverageGrounding";
|
||||
import * as assistantDeepTurnAnalysisRuntimeAdapter_1 from "./assistantDeepTurnAnalysisRuntimeAdapter";
|
||||
import * as assistantDeepTurnCompositionRuntimeAdapter_1 from "./assistantDeepTurnCompositionRuntimeAdapter";
|
||||
import * as assistantDeepTurnContextRuntimeAdapter_1 from "./assistantDeepTurnContextRuntimeAdapter";
|
||||
import * as assistantDeepTurnFinalizeRuntimeAdapter_1 from "./assistantDeepTurnFinalizeRuntimeAdapter";
|
||||
@@ -28,9 +29,12 @@ import * as assistantDeepTurnGuardRuntimeAdapter_1 from "./assistantDeepTurnGuar
|
||||
import * as assistantDeepTurnGroundingRuntimeAdapter_1 from "./assistantDeepTurnGroundingRuntimeAdapter";
|
||||
import * as assistantDeepTurnPackagingRuntimeAdapter_1 from "./assistantDeepTurnPackagingRuntimeAdapter";
|
||||
import * as assistantDeepTurnPlanRuntimeAdapter_1 from "./assistantDeepTurnPlanRuntimeAdapter";
|
||||
import * as assistantDeepTurnNormalizationRuntimeAdapter_1 from "./assistantDeepTurnNormalizationRuntimeAdapter";
|
||||
import * as assistantDeepTurnResponseRuntimeAdapter_1 from "./assistantDeepTurnResponseRuntimeAdapter";
|
||||
import * as assistantDeepTurnRetrievalRuntimeAdapter_1 from "./assistantDeepTurnRetrievalRuntimeAdapter";
|
||||
import * as assistantAddressLaneRuntimeAdapter_1 from "./assistantAddressLaneRuntimeAdapter";
|
||||
import * as assistantAddressOrchestrationRuntimeAdapter_1 from "./assistantAddressOrchestrationRuntimeAdapter";
|
||||
import * as assistantAddressToolGateRuntimeAdapter_1 from "./assistantAddressToolGateRuntimeAdapter";
|
||||
import * as assistantLivingChatTurnFinalizeRuntimeAdapter_1 from "./assistantLivingChatTurnFinalizeRuntimeAdapter";
|
||||
import * as assistantLivingChatRuntimeAdapter_1 from "./assistantLivingChatRuntimeAdapter";
|
||||
import * as assistantQueryPlanning_1 from "./assistantQueryPlanning";
|
||||
@@ -4538,36 +4542,19 @@ export class AssistantService {
|
||||
const addressRuntimeMeta = addressOrchestrationRuntime.addressRuntimeMeta;
|
||||
addressRuntimeMetaForDeep = addressRuntimeMeta;
|
||||
const livingModeDecision = addressOrchestrationRuntime.livingModeDecision;
|
||||
if (!orchestrationDecision.runAddressLane) {
|
||||
(0, log_1.logJson)({
|
||||
timestamp: new Date().toISOString(),
|
||||
level: "info",
|
||||
service: "assistant_loop",
|
||||
message: "assistant_address_tool_gate_skip",
|
||||
sessionId,
|
||||
details: {
|
||||
session_id: sessionId,
|
||||
user_message: userMessage,
|
||||
effective_address_user_message: addressInputMessage,
|
||||
address_llm_predecompose_attempted: Boolean(addressRuntimeMeta?.attempted),
|
||||
address_llm_predecompose_applied: Boolean(addressRuntimeMeta?.applied),
|
||||
address_llm_predecompose_reason: addressRuntimeMeta?.reason ?? null,
|
||||
address_fallback_rule_hit: addressRuntimeMeta?.fallbackRuleHit ?? null,
|
||||
address_sanitized_user_message: addressRuntimeMeta?.sanitizedUserMessage ?? null,
|
||||
assistant_orchestration_contract_v1: addressRuntimeMeta?.orchestrationContract ?? null,
|
||||
address_tool_gate_decision: addressRuntimeMeta?.toolGateDecision ?? null,
|
||||
address_tool_gate_reason: addressRuntimeMeta?.toolGateReason ?? null,
|
||||
address_llm_predecompose_contract_intent: addressRuntimeMeta?.predecomposeContract?.intent ?? null,
|
||||
address_llm_predecompose_contract_aggregation_profile: addressRuntimeMeta?.predecomposeContract?.aggregation_profile ?? null,
|
||||
address_llm_predecompose_contract_period_scope: addressRuntimeMeta?.predecomposeContract?.period?.scope ?? null
|
||||
}
|
||||
});
|
||||
if (livingModeDecision.mode === "chat") {
|
||||
const chatHandled = await tryHandleLivingChat(livingModeDecision, addressRuntimeMeta);
|
||||
if (chatHandled) {
|
||||
return chatHandled;
|
||||
}
|
||||
}
|
||||
const toolGateRuntime = await (0, assistantAddressToolGateRuntimeAdapter_1.runAssistantAddressToolGateRuntime)({
|
||||
sessionId,
|
||||
userMessage,
|
||||
addressInputMessage,
|
||||
orchestrationDecision,
|
||||
livingModeDecision,
|
||||
addressRuntimeMeta,
|
||||
logEvent: (payload) => (0, log_1.logJson)(payload),
|
||||
tryHandleLivingChat: (modeDecision, runtimeMeta) => tryHandleLivingChat(modeDecision, runtimeMeta),
|
||||
nowIso: () => new Date().toISOString()
|
||||
});
|
||||
if (toolGateRuntime.handled && toolGateRuntime.response) {
|
||||
return toolGateRuntime.response;
|
||||
}
|
||||
if (orchestrationDecision.runAddressLane) {
|
||||
const shouldPreferContextualLane = Boolean(carryover?.followupContext);
|
||||
@@ -4603,145 +4590,125 @@ export class AssistantService {
|
||||
}
|
||||
}
|
||||
}
|
||||
const followupBinding = config_1.FEATURE_ASSISTANT_INVESTIGATION_STATE_V1 &&
|
||||
config_1.FEATURE_ASSISTANT_STATE_FOLLOWUP_BINDING_V1 &&
|
||||
session.investigation_state
|
||||
? buildFollowupStateBinding({
|
||||
userMessage,
|
||||
payloadContext: payload.context,
|
||||
investigationState: session.investigation_state
|
||||
})
|
||||
: {
|
||||
normalizedQuestion: userMessage,
|
||||
mergedContext: payload.context,
|
||||
usage: null
|
||||
};
|
||||
const normalizePayload = {
|
||||
llmProvider: payload.llmProvider,
|
||||
apiKey: payload.apiKey,
|
||||
model: payload.model,
|
||||
baseUrl: payload.baseUrl,
|
||||
temperature: payload.temperature,
|
||||
maxOutputTokens: payload.maxOutputTokens,
|
||||
promptVersion: payload.promptVersion ?? "address_query_runtime_v1",
|
||||
systemPrompt: payload.systemPrompt,
|
||||
developerPrompt: payload.developerPrompt,
|
||||
domainPrompt: payload.domainPrompt,
|
||||
fewShotExamples: payload.fewShotExamples,
|
||||
userQuestion: followupBinding.normalizedQuestion,
|
||||
context: followupBinding.mergedContext,
|
||||
useMock: Boolean(payload.useMock)
|
||||
};
|
||||
const normalized = await this.normalizerService.normalize(normalizePayload);
|
||||
const contextRuntime = (0, assistantDeepTurnContextRuntimeAdapter_1.buildAssistantDeepTurnRuntimeContext)({
|
||||
const normalizationRuntime = await (0, assistantDeepTurnNormalizationRuntimeAdapter_1.buildAssistantDeepTurnNormalizationRuntime)({
|
||||
userMessage,
|
||||
normalizedPayload: normalized.normalized,
|
||||
routeSummary: normalized.route_hint_summary,
|
||||
runtimeAnalysisContext,
|
||||
followupUsage: followupBinding.usage,
|
||||
resolveCompanyAnchors: companyAnchorResolver_1.resolveCompanyAnchors,
|
||||
resolveBusinessScopeAlignment,
|
||||
inferP0DomainFromMessage,
|
||||
resolveTemporalGuard: assistantRuntimeGuards_1.resolveTemporalGuard,
|
||||
resolveDomainPolarityGuard: assistantRuntimeGuards_1.resolveDomainPolarityGuard,
|
||||
resolveClaimBoundAnchors: assistantClaimBoundEvidence_1.resolveClaimBoundAnchors,
|
||||
resolveBusinessScopeFromLiveContext
|
||||
});
|
||||
const companyAnchors = contextRuntime.companyAnchors;
|
||||
const focusDomainForGuards = contextRuntime.focusDomainForGuards;
|
||||
const temporalGuard = contextRuntime.temporalGuard;
|
||||
const domainPolarityGuardInitial = contextRuntime.domainPolarityGuardInitial;
|
||||
const claimAnchorAudit = contextRuntime.claimAnchorAudit;
|
||||
const businessScopeResolution = contextRuntime.businessScopeResolution;
|
||||
const resolvedRouteSummary = contextRuntime.resolvedRouteSummary;
|
||||
const liveTemporalHint = contextRuntime.liveTemporalHint;
|
||||
const executionPlanRuntime = (0, assistantDeepTurnPlanRuntimeAdapter_1.buildAssistantDeepTurnExecutionPlan)({
|
||||
routeSummary: resolvedRouteSummary,
|
||||
normalizedPayload: normalized.normalized,
|
||||
userMessage,
|
||||
claimType: claimAnchorAudit.claim_type,
|
||||
temporalGuard,
|
||||
domainPolarityGuardInitial,
|
||||
extractRequirements,
|
||||
toExecutionPlan,
|
||||
enforceRbpLiveRoutePlan,
|
||||
enforceFaLiveRoutePlan,
|
||||
applyTemporalHintToExecutionPlan: assistantRuntimeGuards_1.applyTemporalHintToExecutionPlan,
|
||||
applyPolarityHintToExecutionPlan: assistantRuntimeGuards_1.applyPolarityHintToExecutionPlan
|
||||
});
|
||||
const requirementExtraction = executionPlanRuntime.requirementExtraction;
|
||||
const rbpRoutePlanEnforcement = executionPlanRuntime.rbpRoutePlanEnforcement;
|
||||
const faRoutePlanEnforcement = executionPlanRuntime.faRoutePlanEnforcement;
|
||||
const executionPlan = executionPlanRuntime.executionPlan;
|
||||
const retrievalRuntime = await (0, assistantDeepTurnRetrievalRuntimeAdapter_1.executeAssistantDeepTurnRetrievalPlan)({
|
||||
executionPlan,
|
||||
liveTemporalHint,
|
||||
executeRouteRuntime: (route, fragmentText, options) => this.dataLayer.executeRouteRuntime(route, fragmentText, options),
|
||||
mapNoRouteReason,
|
||||
buildSkippedResult
|
||||
});
|
||||
const retrievalCalls = retrievalRuntime.retrievalCalls;
|
||||
const retrievalResultsRaw = retrievalRuntime.retrievalResultsRaw;
|
||||
let retrievalResults = retrievalRuntime.retrievalResults;
|
||||
const guardRuntime = (0, assistantDeepTurnGuardRuntimeAdapter_1.applyAssistantDeepTurnRetrievalGuards)({
|
||||
retrievalResults,
|
||||
domainPolarityGuardInitial,
|
||||
claimAnchorAudit,
|
||||
temporalGuard,
|
||||
focusDomainForGuards,
|
||||
companyAnchors,
|
||||
userMessage
|
||||
});
|
||||
retrievalResults = guardRuntime.retrievalResults;
|
||||
const polarityGuardResult = guardRuntime.polarityGuardResult;
|
||||
const targetedEvidenceResult = guardRuntime.targetedEvidenceResult;
|
||||
const evidenceGateResult = guardRuntime.evidenceGateResult;
|
||||
const groundingRuntime = (0, assistantDeepTurnGroundingRuntimeAdapter_1.runAssistantDeepTurnGroundingRuntime)({
|
||||
claimType: claimAnchorAudit.claim_type,
|
||||
retrievalResults,
|
||||
rbpPlanAudit: rbpRoutePlanEnforcement.audit,
|
||||
faPlanAudit: faRoutePlanEnforcement.audit,
|
||||
routeSummary: resolvedRouteSummary,
|
||||
normalizedPayload: normalized.normalized,
|
||||
userMessage,
|
||||
requirementExtraction,
|
||||
extractRequirements,
|
||||
evaluateCoverage,
|
||||
checkGrounding,
|
||||
temporalGuard,
|
||||
polarityAudit: polarityGuardResult.audit,
|
||||
evidenceAudit: evidenceGateResult.audit,
|
||||
claimAnchorAudit,
|
||||
targetedEvidenceHitRate: targetedEvidenceResult.audit.targeted_evidence_hit_rate,
|
||||
businessScopeResolved: businessScopeResolution.business_scope_resolved,
|
||||
collectRbpLiveRouteAudit,
|
||||
collectFaLiveRouteAudit
|
||||
});
|
||||
const rbpLiveRouteAudit = groundingRuntime.rbpLiveRouteAudit;
|
||||
const faLiveRouteAudit = groundingRuntime.faLiveRouteAudit;
|
||||
const coverageEvaluation = groundingRuntime.coverageEvaluation;
|
||||
const groundedAnswerEligibilityGuard = groundingRuntime.groundedAnswerEligibilityGuard;
|
||||
const groundingCheck = groundingRuntime.groundingCheck;
|
||||
const deepTurnComposition = (0, assistantDeepTurnCompositionRuntimeAdapter_1.buildAssistantDeepTurnComposition)({
|
||||
userMessage,
|
||||
routeSummary: resolvedRouteSummary,
|
||||
retrievalResults,
|
||||
requirements: coverageEvaluation.requirements,
|
||||
coverageReport: coverageEvaluation.coverage,
|
||||
groundingCheck,
|
||||
followupUsage: followupBinding.usage,
|
||||
investigationState: session.investigation_state,
|
||||
companyAnchors,
|
||||
normalizedPayload: normalized.normalized,
|
||||
featureAnswerPolicyV11: config_1.FEATURE_ASSISTANT_ANSWER_POLICY_V11,
|
||||
featureProblemCentricAnswerV1: config_1.FEATURE_ASSISTANT_PROBLEM_CENTRIC_ANSWER_V1,
|
||||
featureLifecycleAnswerV1: config_1.FEATURE_ASSISTANT_LIFECYCLE_ANSWER_V1,
|
||||
hasExplicitPeriodAnchor: (normalizedPayload) => hasExplicitPeriodAnchorFromNormalized(normalizedPayload)
|
||||
});
|
||||
const questionTypeClass = deepTurnComposition.questionTypeClass;
|
||||
const composition = deepTurnComposition.composition;
|
||||
const packagingRuntime = (0, assistantDeepTurnPackagingRuntimeAdapter_1.runAssistantDeepTurnPackagingRuntime)({
|
||||
payload,
|
||||
featureInvestigationStateV1: config_1.FEATURE_ASSISTANT_INVESTIGATION_STATE_V1,
|
||||
featureStateFollowupBindingV1: config_1.FEATURE_ASSISTANT_STATE_FOLLOWUP_BINDING_V1,
|
||||
sessionInvestigationState: session.investigation_state,
|
||||
buildFollowupStateBinding,
|
||||
normalize: (normalizePayload) => this.normalizerService.normalize(normalizePayload)
|
||||
});
|
||||
const followupBinding = normalizationRuntime.followupBinding;
|
||||
const normalized = normalizationRuntime.normalized;
|
||||
const deepTurnAnalysisRuntime = await (0, assistantDeepTurnAnalysisRuntimeAdapter_1.runAssistantDeepTurnAnalysisRuntime)({
|
||||
userMessage,
|
||||
runContextRuntime: () => (0, assistantDeepTurnContextRuntimeAdapter_1.buildAssistantDeepTurnRuntimeContext)({
|
||||
userMessage,
|
||||
normalizedPayload: normalized.normalized,
|
||||
routeSummary: normalized.route_hint_summary,
|
||||
runtimeAnalysisContext,
|
||||
followupUsage: followupBinding.usage,
|
||||
resolveCompanyAnchors: companyAnchorResolver_1.resolveCompanyAnchors,
|
||||
resolveBusinessScopeAlignment,
|
||||
inferP0DomainFromMessage,
|
||||
resolveTemporalGuard: assistantRuntimeGuards_1.resolveTemporalGuard,
|
||||
resolveDomainPolarityGuard: assistantRuntimeGuards_1.resolveDomainPolarityGuard,
|
||||
resolveClaimBoundAnchors: assistantClaimBoundEvidence_1.resolveClaimBoundAnchors,
|
||||
resolveBusinessScopeFromLiveContext
|
||||
}),
|
||||
runExecutionPlanRuntime: ({ resolvedRouteSummary, claimAnchorAudit, temporalGuard, domainPolarityGuardInitial }) => (0, assistantDeepTurnPlanRuntimeAdapter_1.buildAssistantDeepTurnExecutionPlan)({
|
||||
routeSummary: resolvedRouteSummary,
|
||||
normalizedPayload: normalized.normalized,
|
||||
userMessage,
|
||||
claimType: claimAnchorAudit.claim_type,
|
||||
temporalGuard,
|
||||
domainPolarityGuardInitial,
|
||||
extractRequirements,
|
||||
toExecutionPlan,
|
||||
enforceRbpLiveRoutePlan,
|
||||
enforceFaLiveRoutePlan,
|
||||
applyTemporalHintToExecutionPlan: assistantRuntimeGuards_1.applyTemporalHintToExecutionPlan,
|
||||
applyPolarityHintToExecutionPlan: assistantRuntimeGuards_1.applyPolarityHintToExecutionPlan
|
||||
}),
|
||||
runRetrievalRuntime: ({ executionPlan, liveTemporalHint }) => (0, assistantDeepTurnRetrievalRuntimeAdapter_1.executeAssistantDeepTurnRetrievalPlan)({
|
||||
executionPlan: executionPlan,
|
||||
liveTemporalHint,
|
||||
executeRouteRuntime: (route, fragmentText, options) => this.dataLayer.executeRouteRuntime(route, fragmentText, options),
|
||||
mapNoRouteReason,
|
||||
buildSkippedResult
|
||||
}),
|
||||
runGuardRuntime: ({ retrievalResults, domainPolarityGuardInitial, claimAnchorAudit, temporalGuard, focusDomainForGuards, companyAnchors, userMessage: runtimeUserMessage }) => (0, assistantDeepTurnGuardRuntimeAdapter_1.applyAssistantDeepTurnRetrievalGuards)({
|
||||
retrievalResults,
|
||||
domainPolarityGuardInitial,
|
||||
claimAnchorAudit,
|
||||
temporalGuard,
|
||||
focusDomainForGuards,
|
||||
companyAnchors,
|
||||
userMessage: runtimeUserMessage
|
||||
}),
|
||||
runGroundingRuntime: ({ claimType, retrievalResults, rbpPlanAudit, faPlanAudit, routeSummary, requirementExtraction, temporalGuard, polarityAudit, evidenceAudit, claimAnchorAudit, targetedEvidenceHitRate, businessScopeResolved }) => (0, assistantDeepTurnGroundingRuntimeAdapter_1.runAssistantDeepTurnGroundingRuntime)({
|
||||
claimType,
|
||||
retrievalResults,
|
||||
rbpPlanAudit,
|
||||
faPlanAudit,
|
||||
routeSummary,
|
||||
normalizedPayload: normalized.normalized,
|
||||
userMessage,
|
||||
requirementExtraction,
|
||||
extractRequirements,
|
||||
evaluateCoverage,
|
||||
checkGrounding,
|
||||
temporalGuard,
|
||||
polarityAudit,
|
||||
evidenceAudit,
|
||||
claimAnchorAudit,
|
||||
targetedEvidenceHitRate,
|
||||
businessScopeResolved,
|
||||
collectRbpLiveRouteAudit,
|
||||
collectFaLiveRouteAudit
|
||||
}),
|
||||
runCompositionRuntime: ({ resolvedRouteSummary, retrievalResults, requirements, coverageReport, groundingCheck, companyAnchors }) => (0, assistantDeepTurnCompositionRuntimeAdapter_1.buildAssistantDeepTurnComposition)({
|
||||
userMessage,
|
||||
routeSummary: resolvedRouteSummary,
|
||||
retrievalResults,
|
||||
requirements,
|
||||
coverageReport,
|
||||
groundingCheck,
|
||||
followupUsage: followupBinding.usage,
|
||||
investigationState: session.investigation_state,
|
||||
companyAnchors,
|
||||
normalizedPayload: normalized.normalized,
|
||||
featureAnswerPolicyV11: config_1.FEATURE_ASSISTANT_ANSWER_POLICY_V11,
|
||||
featureProblemCentricAnswerV1: config_1.FEATURE_ASSISTANT_PROBLEM_CENTRIC_ANSWER_V1,
|
||||
featureLifecycleAnswerV1: config_1.FEATURE_ASSISTANT_LIFECYCLE_ANSWER_V1,
|
||||
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)({
|
||||
featureInvestigationStateV1: config_1.FEATURE_ASSISTANT_INVESTIGATION_STATE_V1,
|
||||
featureContractsV11: config_1.FEATURE_ASSISTANT_CONTRACTS_V11,
|
||||
featureAnswerPolicyV11: config_1.FEATURE_ASSISTANT_ANSWER_POLICY_V11,
|
||||
sessionId,
|
||||
questionId: userItem.message_id,
|
||||
userMessage,
|
||||
@@ -4776,8 +4743,6 @@ export class AssistantService {
|
||||
followupStateUsage: followupBinding.usage,
|
||||
followupApplied: Boolean(followupBinding.usage?.applied),
|
||||
composition,
|
||||
featureContractsV11: config_1.FEATURE_ASSISTANT_CONTRACTS_V11,
|
||||
featureAnswerPolicyV11: config_1.FEATURE_ASSISTANT_ANSWER_POLICY_V11,
|
||||
previousInvestigationState: session.investigation_state,
|
||||
addressRuntimeMetaForDeep,
|
||||
extractDroppedIntentSegments: (normalizedPayload) => extractDiscardedIntentSegments(normalizedPayload),
|
||||
@@ -4785,26 +4750,16 @@ export class AssistantService {
|
||||
extractExecutionState: (normalizedPayload) => extractExecutionState(normalizedPayload),
|
||||
sanitizeReply: (value, fallback) => sanitizeOutgoingAssistantText(value, fallback),
|
||||
persistInvestigationState: (targetSessionId, snapshot) => this.sessions.setInvestigationState(targetSessionId, snapshot),
|
||||
messageIdFactory: () => `msg-${(0, nanoid_1.nanoid)(10)}`
|
||||
});
|
||||
const safeAssistantReply = packagingRuntime.safeAssistantReply;
|
||||
const debug = packagingRuntime.debug;
|
||||
const assistantItem = packagingRuntime.assistantItem;
|
||||
const deepAnalysisLogDetails = packagingRuntime.deepAnalysisLogDetails;
|
||||
const finalization = (0, assistantDeepTurnFinalizeRuntimeAdapter_1.finalizeAssistantDeepTurn)({
|
||||
sessionId,
|
||||
assistantReply: safeAssistantReply,
|
||||
replyType: composition.reply_type,
|
||||
assistantItem,
|
||||
debug,
|
||||
deepAnalysisLogDetails,
|
||||
messageIdFactory: () => `msg-${(0, nanoid_1.nanoid)(10)}`,
|
||||
appendItem: (targetSessionId, item) => this.sessions.appendItem(targetSessionId, item),
|
||||
getSession: (targetSessionId) => this.sessions.getSession(targetSessionId),
|
||||
persistSession: (sessionState) => this.sessionLogger.persistSession(sessionState),
|
||||
cloneConversation: (items) => cloneItems(items),
|
||||
logEvent: (payload) => (0, log_1.logJson)(payload)
|
||||
logEvent: (payload) => (0, log_1.logJson)(payload),
|
||||
runPackagingRuntime: (input) => (0, assistantDeepTurnPackagingRuntimeAdapter_1.runAssistantDeepTurnPackagingRuntime)(input),
|
||||
runFinalizeDeepTurn: (input) => (0, assistantDeepTurnFinalizeRuntimeAdapter_1.finalizeAssistantDeepTurn)(input)
|
||||
});
|
||||
return finalization.response;
|
||||
return deepTurnResponseRuntime.response;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user