UNPKG

@botonic/plugin-flow-builder

Version:

Use Flow Builder to show your contents

89 lines 4.45 kB
import { __awaiter, __rest } from "tslib"; import { EventAction, KnowledgebaseFailReason, } from '@botonic/core'; import { DISABLED_MEMORY_LENGTH, FlowKnowledgeBase, } from '../content-fields'; import { getCommonFlowContentEventArgsForContentId, trackEvent, } from '../tracking'; import { inputHasTextData, isKnowledgeBasesAllowed } from '../utils'; export function getContentsByKnowledgeBase({ cmsApi, flowBuilderPlugin, request, }) { return __awaiter(this, void 0, void 0, function* () { if (isKnowledgeBasesAllowed(request)) { const startNodeKnowledgeBaseFlow = cmsApi.getStartNodeKnowledgeBaseFlow(); const isKnowledgeBaseEnabled = cmsApi.isKnowledgeBaseEnabled(); if (!startNodeKnowledgeBaseFlow || !isKnowledgeBaseEnabled) { return []; } const contents = yield flowBuilderPlugin.getContentsByNode(startNodeKnowledgeBaseFlow); const knowledgeBaseContent = contents.find(content => content instanceof FlowKnowledgeBase); if (!knowledgeBaseContent) { return contents; } const sourceIds = knowledgeBaseContent.sourcesData.map(source => source.id); if (flowBuilderPlugin.getKnowledgeBaseResponse && inputHasTextData(request.input) && sourceIds.length > 0) { const contentsWithKnowledgeResponse = yield getContentsWithKnowledgeResponse(flowBuilderPlugin.getKnowledgeBaseResponse, request, contents, knowledgeBaseContent); if (contentsWithKnowledgeResponse) { return contentsWithKnowledgeResponse; } } } return []; }); } function getContentsWithKnowledgeResponse(getKnowledgeBaseResponse, request, contents, knowledgeBaseContent) { return __awaiter(this, void 0, void 0, function* () { const sourceIds = knowledgeBaseContent.sourcesData.map(source => source.id); const instructions = knowledgeBaseContent.instructions; const messageId = request.input.message_id; const memoryLength = knowledgeBaseContent.hasMemory ? knowledgeBaseContent.memoryLength : DISABLED_MEMORY_LENGTH; const knowledgeBaseResponse = yield getKnowledgeBaseResponse(request, sourceIds, instructions, messageId, memoryLength); yield trackKnowledgeBase(knowledgeBaseResponse, request, knowledgeBaseContent); if (!knowledgeBaseResponse.hasKnowledge || !knowledgeBaseResponse.isFaithful) { return undefined; } return updateContentsWithResponse(contents, knowledgeBaseResponse); }); } function updateContentsWithResponse(contents, response) { return contents.map(content => { if (content instanceof FlowKnowledgeBase) { content.text = response.answer; content.inferenceId = response.inferenceId; } return content; }); } function trackKnowledgeBase(response, request, knowledgeBaseContent) { return __awaiter(this, void 0, void 0, function* () { const getKnowledgeFailReason = () => { let knowledgebaseFailReason; if (!response.isFaithful) { knowledgebaseFailReason = KnowledgebaseFailReason.Hallucination; } if (!response.hasKnowledge) { knowledgebaseFailReason = KnowledgebaseFailReason.NoKnowledge; } return knowledgebaseFailReason; }; const { flowId, flowName, flowNodeId, flowNodeContentId } = getCommonFlowContentEventArgsForContentId(request, knowledgeBaseContent.id); const event = { action: EventAction.Knowledgebase, knowledgebaseInferenceId: response.inferenceId, knowledgebaseFailReason: getKnowledgeFailReason(), knowledgebaseSourcesIds: knowledgeBaseContent.sourcesData.map(source => source.id), knowledgebaseChunksIds: response.chunkIds, knowledgebaseMessageId: request.input.message_id, userInput: request.input.data, flowThreadId: request.session.flow_thread_id, flowId, flowName, flowNodeId, flowNodeContentId, }; const { action } = event, eventArgs = __rest(event, ["action"]); yield trackEvent(request, action, eventArgs); }); } //# sourceMappingURL=knowledge-bases.js.map