import { tryHandleAssistantLivingChatRuntime, type TryHandleAssistantLivingChatRuntimeInput } from "./assistantLivingChatHandlerRuntimeAdapter"; import { runAssistantLivingChatLlmRuntime, type RunAssistantLivingChatLlmRuntimeInput } from "./assistantLivingChatLlmRuntimeAdapter"; import { buildAssistantLivingChatHandlerRuntimeInput, buildAssistantLivingChatLlmRuntimeInput } from "./assistantLivingChatAttemptRuntimeInputBuilder"; type AssistantLivingChatHandlerInput = TryHandleAssistantLivingChatRuntimeInput; type AssistantLivingChatLlmInput = RunAssistantLivingChatLlmRuntimeInput; export interface RunAssistantLivingChatAttemptRuntimeInput extends Omit, "executeLlmChat"> { payload: AssistantLivingChatLlmInput["payload"]; chatClient: AssistantLivingChatLlmInput["chatClient"]; loadAssistantCanonExcerpt: AssistantLivingChatLlmInput["loadAssistantCanonExcerpt"]; sanitizeOutgoingAssistantText: AssistantLivingChatLlmInput["sanitizeOutgoingAssistantText"]; defaultModel: AssistantLivingChatLlmInput["defaultModel"]; defaultBaseUrl: AssistantLivingChatLlmInput["defaultBaseUrl"]; defaultApiKey?: AssistantLivingChatLlmInput["defaultApiKey"]; runLivingChatHandler?: ( input: AssistantLivingChatHandlerInput ) => Promise; runLivingChatLlm?: ( input: AssistantLivingChatLlmInput ) => Promise; } function buildExecuteLlmChat( input: RunAssistantLivingChatAttemptRuntimeInput, runLivingChatLlmSafe: (input: AssistantLivingChatLlmInput) => Promise ): AssistantLivingChatHandlerInput["executeLlmChat"] { return async () => runLivingChatLlmSafe( buildAssistantLivingChatLlmRuntimeInput({ userMessage: input.userMessage, sessionItems: input.sessionItems, payload: input.payload, chatClient: input.chatClient, loadAssistantCanonExcerpt: input.loadAssistantCanonExcerpt, sanitizeOutgoingAssistantText: input.sanitizeOutgoingAssistantText, defaultModel: input.defaultModel, defaultBaseUrl: input.defaultBaseUrl, defaultApiKey: input.defaultApiKey }) ); } export async function runAssistantLivingChatAttemptRuntime( input: RunAssistantLivingChatAttemptRuntimeInput ): Promise { const runLivingChatHandlerSafe = input.runLivingChatHandler ?? tryHandleAssistantLivingChatRuntime; const runLivingChatLlmSafe = input.runLivingChatLlm ?? runAssistantLivingChatLlmRuntime; const executeLlmChat = buildExecuteLlmChat(input, runLivingChatLlmSafe); return runLivingChatHandlerSafe( buildAssistantLivingChatHandlerRuntimeInput({ sessionId: input.sessionId, userMessage: input.userMessage, sessionItems: input.sessionItems, modeDecision: input.modeDecision, sessionScope: input.sessionScope, addressRuntimeMeta: input.addressRuntimeMeta, traceIdFactory: input.traceIdFactory, toNonEmptyString: input.toNonEmptyString, mergeKnownOrganizations: input.mergeKnownOrganizations, hasAssistantDataScopeMetaQuestionSignal: input.hasAssistantDataScopeMetaQuestionSignal, shouldHandleAsAssistantCapabilityMetaQuery: input.shouldHandleAsAssistantCapabilityMetaQuery, hasDestructiveDataActionSignal: input.hasDestructiveDataActionSignal, hasDangerOrCoercionSignal: input.hasDangerOrCoercionSignal, hasOperationalAdminActionRequestSignal: input.hasOperationalAdminActionRequestSignal, hasOrganizationFactLookupSignal: input.hasOrganizationFactLookupSignal, hasOrganizationFactFollowupSignal: input.hasOrganizationFactFollowupSignal, shouldEmitOrganizationSelectionReply: input.shouldEmitOrganizationSelectionReply, hasAssistantCapabilityQuestionSignal: input.hasAssistantCapabilityQuestionSignal, resolveDataScopeProbe: input.resolveDataScopeProbe, executeLlmChat, applyScriptGuard: input.applyScriptGuard, applyGroundingGuard: input.applyGroundingGuard, buildAssistantSafetyRefusalReply: input.buildAssistantSafetyRefusalReply, buildAssistantDataScopeContractReply: input.buildAssistantDataScopeContractReply, buildAssistantOrganizationFactBoundaryReply: input.buildAssistantOrganizationFactBoundaryReply, buildAssistantDataScopeSelectionReply: input.buildAssistantDataScopeSelectionReply, buildAssistantOperationalBoundaryReply: input.buildAssistantOperationalBoundaryReply, buildAssistantCapabilityContractReply: input.buildAssistantCapabilityContractReply, appendItem: input.appendItem, getSession: input.getSession, persistSession: input.persistSession, cloneConversation: input.cloneConversation, logEvent: input.logEvent, messageIdFactory: input.messageIdFactory, nowIso: input.nowIso, runLivingChatRuntime: input.runLivingChatRuntime, finalizeLivingChatTurn: input.finalizeLivingChatTurn }) ); }