252 lines
16 KiB
TypeScript
252 lines
16 KiB
TypeScript
import type { RunAssistantAddressAttemptRuntimeInput } from "./assistantAddressAttemptRuntimeAdapter";
|
|
import type { RunAssistantDeepTurnAttemptRuntimeInput } from "./assistantDeepTurnAttemptRuntimeAdapter";
|
|
import type {
|
|
RunAssistantTurnAttemptRuntimeAddressInput,
|
|
RunAssistantTurnAttemptRuntimeDeepInput
|
|
} from "./assistantTurnAttemptRuntimeAdapter";
|
|
import type {
|
|
AssistantUserTurnBootstrapPayloadLike,
|
|
RunAssistantUserTurnBootstrapRuntimeInput
|
|
} from "./assistantUserTurnBootstrapRuntimeAdapter";
|
|
|
|
type AddressAttemptRuntimeInput<ResponseType = unknown> = RunAssistantAddressAttemptRuntimeInput<ResponseType>;
|
|
type DeepTurnAttemptRuntimeInput<ResponseType = unknown> = RunAssistantDeepTurnAttemptRuntimeInput<ResponseType>;
|
|
|
|
export interface AssistantTurnRuntimeBuilderDeps<ResponseType = unknown> {
|
|
ensureSession: RunAssistantUserTurnBootstrapRuntimeInput["ensureSession"];
|
|
appendItem: RunAssistantUserTurnBootstrapRuntimeInput["appendItem"];
|
|
getSession: RunAssistantUserTurnBootstrapRuntimeInput["getSession"];
|
|
persistSession: RunAssistantUserTurnBootstrapRuntimeInput["persistSession"];
|
|
compactWhitespace: RunAssistantUserTurnBootstrapRuntimeInput["compactWhitespace"];
|
|
repairAddressMojibake: RunAssistantUserTurnBootstrapRuntimeInput["repairAddressMojibake"];
|
|
resolveRuntimeAnalysisContext: RunAssistantUserTurnBootstrapRuntimeInput["resolveRuntimeAnalysisContext"];
|
|
runAddressLlmPreDecompose: (
|
|
payload: AddressAttemptRuntimeInput<ResponseType>["payload"],
|
|
userMessage: string
|
|
) => Promise<Record<string, unknown>>;
|
|
tryAddressQueryHandle: AddressAttemptRuntimeInput<ResponseType>["runAddressQueryTryHandle"];
|
|
setInvestigationState: DeepTurnAttemptRuntimeInput<ResponseType>["persistInvestigationState"];
|
|
normalize: DeepTurnAttemptRuntimeInput<ResponseType>["normalize"];
|
|
executeRouteRuntime: DeepTurnAttemptRuntimeInput<ResponseType>["executeRouteRuntime"];
|
|
chatClient: AddressAttemptRuntimeInput<ResponseType>["chatClient"];
|
|
messageIdFactory: AddressAttemptRuntimeInput<ResponseType>["messageIdFactory"];
|
|
nowIso: AddressAttemptRuntimeInput<ResponseType>["nowIso"];
|
|
defaultApiKey: NonNullable<AddressAttemptRuntimeInput<ResponseType>["defaultApiKey"]>;
|
|
logEvent: AddressAttemptRuntimeInput<ResponseType>["logEvent"];
|
|
featureAssistantAddressQueryV1: AddressAttemptRuntimeInput<ResponseType>["featureAssistantAddressQueryV1"];
|
|
featureAddressLlmPredecomposeV1: AddressAttemptRuntimeInput<ResponseType>["featureAddressLlmPredecomposeV1"];
|
|
featureInvestigationStateV1: DeepTurnAttemptRuntimeInput<ResponseType>["featureInvestigationStateV1"];
|
|
featureStateFollowupBindingV1: DeepTurnAttemptRuntimeInput<ResponseType>["featureStateFollowupBindingV1"];
|
|
featureContractsV11: DeepTurnAttemptRuntimeInput<ResponseType>["featureContractsV11"];
|
|
featureAnswerPolicyV11: DeepTurnAttemptRuntimeInput<ResponseType>["featureAnswerPolicyV11"];
|
|
featureProblemCentricAnswerV1: DeepTurnAttemptRuntimeInput<ResponseType>["featureProblemCentricAnswerV1"];
|
|
featureLifecycleAnswerV1: DeepTurnAttemptRuntimeInput<ResponseType>["featureLifecycleAnswerV1"];
|
|
defaultModel: AddressAttemptRuntimeInput<ResponseType>["defaultModel"];
|
|
defaultBaseUrl: AddressAttemptRuntimeInput<ResponseType>["defaultBaseUrl"];
|
|
buildAddressLlmPredecomposeContractV1:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAddressLlmPredecomposeContractV1"];
|
|
sanitizeAddressMessageForFallback: AddressAttemptRuntimeInput<ResponseType>["sanitizeAddressMessageForFallback"];
|
|
toNonEmptyString: AddressAttemptRuntimeInput<ResponseType>["toNonEmptyString"];
|
|
resolveAddressFollowupCarryoverContext:
|
|
AddressAttemptRuntimeInput<ResponseType>["resolveAddressFollowupCarryoverContext"];
|
|
resolveAssistantOrchestrationDecision:
|
|
AddressAttemptRuntimeInput<ResponseType>["resolveAssistantOrchestrationDecision"];
|
|
buildAddressDialogContinuationContractV2:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAddressDialogContinuationContractV2"];
|
|
mergeFollowupContextWithOrganizationScope:
|
|
AddressAttemptRuntimeInput<ResponseType>["mergeFollowupContextWithOrganizationScope"];
|
|
isRetryableAddressLimitedResult: AddressAttemptRuntimeInput<ResponseType>["isRetryableAddressLimitedResult"];
|
|
mergeKnownOrganizations: AddressAttemptRuntimeInput<ResponseType>["mergeKnownOrganizations"];
|
|
hasAssistantDataScopeMetaQuestionSignal:
|
|
AddressAttemptRuntimeInput<ResponseType>["hasAssistantDataScopeMetaQuestionSignal"];
|
|
shouldHandleAsAssistantCapabilityMetaQuery:
|
|
AddressAttemptRuntimeInput<ResponseType>["shouldHandleAsAssistantCapabilityMetaQuery"];
|
|
hasDestructiveDataActionSignal: AddressAttemptRuntimeInput<ResponseType>["hasDestructiveDataActionSignal"];
|
|
hasDangerOrCoercionSignal: AddressAttemptRuntimeInput<ResponseType>["hasDangerOrCoercionSignal"];
|
|
hasOperationalAdminActionRequestSignal:
|
|
AddressAttemptRuntimeInput<ResponseType>["hasOperationalAdminActionRequestSignal"];
|
|
hasOrganizationFactLookupSignal: AddressAttemptRuntimeInput<ResponseType>["hasOrganizationFactLookupSignal"];
|
|
hasOrganizationFactFollowupSignal: AddressAttemptRuntimeInput<ResponseType>["hasOrganizationFactFollowupSignal"];
|
|
hasLivingChatSignal: AddressAttemptRuntimeInput<ResponseType>["hasLivingChatSignal"];
|
|
shouldEmitOrganizationSelectionReply:
|
|
AddressAttemptRuntimeInput<ResponseType>["shouldEmitOrganizationSelectionReply"];
|
|
hasAssistantCapabilityQuestionSignal:
|
|
AddressAttemptRuntimeInput<ResponseType>["hasAssistantCapabilityQuestionSignal"];
|
|
resolveDataScopeProbe: AddressAttemptRuntimeInput<ResponseType>["resolveDataScopeProbe"];
|
|
applyScriptGuard: AddressAttemptRuntimeInput<ResponseType>["applyScriptGuard"];
|
|
applyGroundingGuard: AddressAttemptRuntimeInput<ResponseType>["applyGroundingGuard"];
|
|
buildAssistantSafetyRefusalReply: AddressAttemptRuntimeInput<ResponseType>["buildAssistantSafetyRefusalReply"];
|
|
buildAssistantDataScopeContractReply:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAssistantDataScopeContractReply"];
|
|
buildAssistantProactiveOrganizationOfferReply:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAssistantProactiveOrganizationOfferReply"];
|
|
buildAssistantOrganizationFactBoundaryReply:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAssistantOrganizationFactBoundaryReply"];
|
|
buildAssistantDataScopeSelectionReply:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAssistantDataScopeSelectionReply"];
|
|
buildAssistantOperationalBoundaryReply:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAssistantOperationalBoundaryReply"];
|
|
buildAssistantCapabilityContractReply:
|
|
AddressAttemptRuntimeInput<ResponseType>["buildAssistantCapabilityContractReply"];
|
|
loadAssistantCanonExcerpt: AddressAttemptRuntimeInput<ResponseType>["loadAssistantCanonExcerpt"];
|
|
sanitizeOutgoingAssistantText: AddressAttemptRuntimeInput<ResponseType>["sanitizeOutgoingAssistantText"];
|
|
buildAddressDebugPayload: AddressAttemptRuntimeInput<ResponseType>["buildAddressDebugPayload"];
|
|
buildAddressFollowupOffer: AddressAttemptRuntimeInput<ResponseType>["buildAddressFollowupOffer"];
|
|
buildFollowupStateBinding: DeepTurnAttemptRuntimeInput<ResponseType>["buildFollowupStateBinding"];
|
|
resolveBusinessScopeAlignment: DeepTurnAttemptRuntimeInput<ResponseType>["resolveBusinessScopeAlignment"];
|
|
inferP0DomainFromMessage: DeepTurnAttemptRuntimeInput<ResponseType>["inferP0DomainFromMessage"];
|
|
resolveBusinessScopeFromLiveContext: DeepTurnAttemptRuntimeInput<ResponseType>["resolveBusinessScopeFromLiveContext"];
|
|
extractRequirements: DeepTurnAttemptRuntimeInput<ResponseType>["extractRequirements"];
|
|
toExecutionPlan: DeepTurnAttemptRuntimeInput<ResponseType>["toExecutionPlan"];
|
|
enforceRbpLiveRoutePlan: DeepTurnAttemptRuntimeInput<ResponseType>["enforceRbpLiveRoutePlan"];
|
|
enforceFaLiveRoutePlan: DeepTurnAttemptRuntimeInput<ResponseType>["enforceFaLiveRoutePlan"];
|
|
mapNoRouteReason: DeepTurnAttemptRuntimeInput<ResponseType>["mapNoRouteReason"];
|
|
buildSkippedResult: DeepTurnAttemptRuntimeInput<ResponseType>["buildSkippedResult"];
|
|
evaluateCoverage: DeepTurnAttemptRuntimeInput<ResponseType>["evaluateCoverage"];
|
|
checkGrounding: DeepTurnAttemptRuntimeInput<ResponseType>["checkGrounding"];
|
|
collectRbpLiveRouteAudit: DeepTurnAttemptRuntimeInput<ResponseType>["collectRbpLiveRouteAudit"];
|
|
collectFaLiveRouteAudit: DeepTurnAttemptRuntimeInput<ResponseType>["collectFaLiveRouteAudit"];
|
|
hasExplicitPeriodAnchorFromNormalized: DeepTurnAttemptRuntimeInput<ResponseType>["hasExplicitPeriodAnchor"];
|
|
extractDroppedIntentSegments: DeepTurnAttemptRuntimeInput<ResponseType>["extractDroppedIntentSegments"];
|
|
toDebugRoutes: DeepTurnAttemptRuntimeInput<ResponseType>["buildDebugRoutes"];
|
|
extractExecutionState: DeepTurnAttemptRuntimeInput<ResponseType>["extractExecutionState"];
|
|
}
|
|
|
|
export function buildAssistantUserTurnBootstrapRuntimeInput(
|
|
payload: AssistantUserTurnBootstrapPayloadLike,
|
|
deps: AssistantTurnRuntimeBuilderDeps
|
|
): RunAssistantUserTurnBootstrapRuntimeInput {
|
|
return {
|
|
payload,
|
|
ensureSession: deps.ensureSession,
|
|
appendItem: deps.appendItem,
|
|
getSession: deps.getSession,
|
|
persistSession: deps.persistSession,
|
|
compactWhitespace: deps.compactWhitespace,
|
|
repairAddressMojibake: deps.repairAddressMojibake,
|
|
resolveRuntimeAnalysisContext: deps.resolveRuntimeAnalysisContext,
|
|
messageIdFactory: deps.messageIdFactory,
|
|
nowIso: deps.nowIso
|
|
};
|
|
}
|
|
|
|
export function buildAssistantAddressAttemptRuntimeInput<ResponseType = unknown>(
|
|
runtimeInput: RunAssistantTurnAttemptRuntimeAddressInput<AddressAttemptRuntimeInput<ResponseType>["payload"]>,
|
|
deps: AssistantTurnRuntimeBuilderDeps<ResponseType>
|
|
): RunAssistantAddressAttemptRuntimeInput<ResponseType> {
|
|
return {
|
|
featureAssistantAddressQueryV1: deps.featureAssistantAddressQueryV1,
|
|
sessionId: runtimeInput.sessionId,
|
|
userMessage: runtimeInput.userMessage,
|
|
sessionItems: runtimeInput.sessionItems,
|
|
sessionAddressNavigationState: runtimeInput.sessionAddressNavigationState,
|
|
payload: runtimeInput.payload,
|
|
sessionScope: {
|
|
knownOrganizations: runtimeInput.sessionOrganizationScope.knownOrganizations,
|
|
selectedOrganization: runtimeInput.sessionOrganizationScope.selectedOrganization,
|
|
activeOrganization: runtimeInput.sessionOrganizationScope.activeOrganization
|
|
},
|
|
featureAddressLlmPredecomposeV1: deps.featureAddressLlmPredecomposeV1,
|
|
runAddressLlmPreDecompose: async () => deps.runAddressLlmPreDecompose(runtimeInput.payload, runtimeInput.userMessage),
|
|
buildAddressLlmPredecomposeContractV1: deps.buildAddressLlmPredecomposeContractV1,
|
|
sanitizeAddressMessageForFallback: deps.sanitizeAddressMessageForFallback,
|
|
toNonEmptyString: deps.toNonEmptyString,
|
|
resolveAddressFollowupCarryoverContext: deps.resolveAddressFollowupCarryoverContext,
|
|
resolveAssistantOrchestrationDecision: deps.resolveAssistantOrchestrationDecision,
|
|
buildAddressDialogContinuationContractV2: deps.buildAddressDialogContinuationContractV2,
|
|
runtimeAnalysisContextAsOfDate: runtimeInput.runtimeAnalysisContext.as_of_date,
|
|
compactWhitespace: deps.compactWhitespace,
|
|
mergeFollowupContextWithOrganizationScope: deps.mergeFollowupContextWithOrganizationScope,
|
|
runAddressQueryTryHandle: deps.tryAddressQueryHandle,
|
|
isRetryableAddressLimitedResult: deps.isRetryableAddressLimitedResult,
|
|
mergeKnownOrganizations: deps.mergeKnownOrganizations,
|
|
hasAssistantDataScopeMetaQuestionSignal: deps.hasAssistantDataScopeMetaQuestionSignal,
|
|
shouldHandleAsAssistantCapabilityMetaQuery: deps.shouldHandleAsAssistantCapabilityMetaQuery,
|
|
hasDestructiveDataActionSignal: deps.hasDestructiveDataActionSignal,
|
|
hasDangerOrCoercionSignal: deps.hasDangerOrCoercionSignal,
|
|
hasOperationalAdminActionRequestSignal: deps.hasOperationalAdminActionRequestSignal,
|
|
hasOrganizationFactLookupSignal: deps.hasOrganizationFactLookupSignal,
|
|
hasOrganizationFactFollowupSignal: deps.hasOrganizationFactFollowupSignal,
|
|
hasLivingChatSignal: deps.hasLivingChatSignal,
|
|
shouldEmitOrganizationSelectionReply: deps.shouldEmitOrganizationSelectionReply,
|
|
hasAssistantCapabilityQuestionSignal: deps.hasAssistantCapabilityQuestionSignal,
|
|
resolveDataScopeProbe: deps.resolveDataScopeProbe,
|
|
applyScriptGuard: deps.applyScriptGuard,
|
|
applyGroundingGuard: deps.applyGroundingGuard,
|
|
buildAssistantSafetyRefusalReply: deps.buildAssistantSafetyRefusalReply,
|
|
buildAssistantDataScopeContractReply: deps.buildAssistantDataScopeContractReply,
|
|
buildAssistantProactiveOrganizationOfferReply: deps.buildAssistantProactiveOrganizationOfferReply,
|
|
buildAssistantOrganizationFactBoundaryReply: deps.buildAssistantOrganizationFactBoundaryReply,
|
|
buildAssistantDataScopeSelectionReply: deps.buildAssistantDataScopeSelectionReply,
|
|
buildAssistantOperationalBoundaryReply: deps.buildAssistantOperationalBoundaryReply,
|
|
buildAssistantCapabilityContractReply: deps.buildAssistantCapabilityContractReply,
|
|
chatClient: deps.chatClient,
|
|
loadAssistantCanonExcerpt: deps.loadAssistantCanonExcerpt,
|
|
sanitizeOutgoingAssistantText: deps.sanitizeOutgoingAssistantText,
|
|
defaultModel: deps.defaultModel,
|
|
defaultBaseUrl: deps.defaultBaseUrl,
|
|
defaultApiKey: deps.defaultApiKey,
|
|
buildAddressDebugPayload: deps.buildAddressDebugPayload,
|
|
buildAddressFollowupOffer: deps.buildAddressFollowupOffer,
|
|
appendItem: deps.appendItem,
|
|
getSession: deps.getSession,
|
|
persistSession: deps.persistSession,
|
|
cloneConversation: (items) => items.map((item) => ({ ...item })),
|
|
logEvent: deps.logEvent,
|
|
messageIdFactory: deps.messageIdFactory,
|
|
nowIso: deps.nowIso
|
|
};
|
|
}
|
|
|
|
export function buildAssistantDeepTurnAttemptRuntimeInput<ResponseType = unknown>(
|
|
runtimeInput: RunAssistantTurnAttemptRuntimeDeepInput<DeepTurnAttemptRuntimeInput<ResponseType>["payload"]> & {
|
|
runtimeAnalysisContext: DeepTurnAttemptRuntimeInput<ResponseType>["runtimeAnalysisContext"];
|
|
sessionInvestigationState: DeepTurnAttemptRuntimeInput<ResponseType>["sessionInvestigationState"];
|
|
},
|
|
deps: AssistantTurnRuntimeBuilderDeps<ResponseType>
|
|
): RunAssistantDeepTurnAttemptRuntimeInput<ResponseType> {
|
|
return {
|
|
sessionId: runtimeInput.sessionId,
|
|
questionId: runtimeInput.questionId,
|
|
userMessage: runtimeInput.userMessage,
|
|
payload: runtimeInput.payload,
|
|
runtimeAnalysisContext: runtimeInput.runtimeAnalysisContext,
|
|
sessionInvestigationState: runtimeInput.sessionInvestigationState,
|
|
addressRuntimeMetaForDeep: runtimeInput.addressRuntimeMetaForDeep,
|
|
featureInvestigationStateV1: deps.featureInvestigationStateV1,
|
|
featureStateFollowupBindingV1: deps.featureStateFollowupBindingV1,
|
|
featureContractsV11: deps.featureContractsV11,
|
|
featureAnswerPolicyV11: deps.featureAnswerPolicyV11,
|
|
featureProblemCentricAnswerV1: deps.featureProblemCentricAnswerV1,
|
|
featureLifecycleAnswerV1: deps.featureLifecycleAnswerV1,
|
|
buildFollowupStateBinding: deps.buildFollowupStateBinding,
|
|
normalize: deps.normalize,
|
|
resolveBusinessScopeAlignment: deps.resolveBusinessScopeAlignment,
|
|
inferP0DomainFromMessage: deps.inferP0DomainFromMessage,
|
|
resolveBusinessScopeFromLiveContext: deps.resolveBusinessScopeFromLiveContext,
|
|
extractRequirements: deps.extractRequirements,
|
|
toExecutionPlan: deps.toExecutionPlan,
|
|
enforceRbpLiveRoutePlan: deps.enforceRbpLiveRoutePlan,
|
|
enforceFaLiveRoutePlan: deps.enforceFaLiveRoutePlan,
|
|
executeRouteRuntime: deps.executeRouteRuntime,
|
|
mapNoRouteReason: deps.mapNoRouteReason,
|
|
buildSkippedResult: deps.buildSkippedResult,
|
|
evaluateCoverage: deps.evaluateCoverage,
|
|
checkGrounding: deps.checkGrounding,
|
|
collectRbpLiveRouteAudit: deps.collectRbpLiveRouteAudit,
|
|
collectFaLiveRouteAudit: deps.collectFaLiveRouteAudit,
|
|
hasExplicitPeriodAnchor: deps.hasExplicitPeriodAnchorFromNormalized,
|
|
extractDroppedIntentSegments: deps.extractDroppedIntentSegments,
|
|
buildDebugRoutes: deps.toDebugRoutes,
|
|
extractExecutionState: deps.extractExecutionState,
|
|
sanitizeReply: deps.sanitizeOutgoingAssistantText,
|
|
persistInvestigationState: deps.setInvestigationState,
|
|
messageIdFactory: deps.messageIdFactory,
|
|
appendItem: deps.appendItem,
|
|
getSession: deps.getSession,
|
|
persistSession: deps.persistSession,
|
|
cloneConversation: (items) => items.map((item) => ({ ...item })),
|
|
logEvent: deps.logEvent
|
|
};
|
|
}
|