102 lines
5.0 KiB
TypeScript
102 lines
5.0 KiB
TypeScript
import {
|
|
tryHandleAssistantLivingChatRuntime,
|
|
type TryHandleAssistantLivingChatRuntimeInput
|
|
} from "./assistantLivingChatHandlerRuntimeAdapter";
|
|
import {
|
|
runAssistantLivingChatLlmRuntime,
|
|
type RunAssistantLivingChatLlmRuntimeInput
|
|
} from "./assistantLivingChatLlmRuntimeAdapter";
|
|
import {
|
|
buildAssistantLivingChatHandlerRuntimeInput,
|
|
buildAssistantLivingChatLlmRuntimeInput
|
|
} from "./assistantLivingChatAttemptRuntimeInputBuilder";
|
|
|
|
type AssistantLivingChatHandlerInput<ResponseType> = TryHandleAssistantLivingChatRuntimeInput<ResponseType>;
|
|
type AssistantLivingChatLlmInput = RunAssistantLivingChatLlmRuntimeInput;
|
|
|
|
export interface RunAssistantLivingChatAttemptRuntimeInput<ResponseType = unknown>
|
|
extends Omit<AssistantLivingChatHandlerInput<ResponseType>, "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<ResponseType>
|
|
) => Promise<ResponseType | null>;
|
|
runLivingChatLlm?: (
|
|
input: AssistantLivingChatLlmInput
|
|
) => Promise<string>;
|
|
}
|
|
|
|
function buildExecuteLlmChat<ResponseType>(
|
|
input: RunAssistantLivingChatAttemptRuntimeInput<ResponseType>,
|
|
runLivingChatLlmSafe: (input: AssistantLivingChatLlmInput) => Promise<string>
|
|
): AssistantLivingChatHandlerInput<ResponseType>["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<ResponseType = unknown>(
|
|
input: RunAssistantLivingChatAttemptRuntimeInput<ResponseType>
|
|
): Promise<ResponseType | null> {
|
|
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
|
|
})
|
|
);
|
|
}
|