UNPKG

@botonic/plugin-flow-builder

Version:

Use Flow Builder to show your contents

93 lines 4.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getContentsByKnowledgeBase = void 0; const tslib_1 = require("tslib"); const core_1 = require("@botonic/core"); const content_fields_1 = require("../content-fields"); const tracking_1 = require("../tracking"); const utils_1 = require("../utils"); function getContentsByKnowledgeBase({ cmsApi, flowBuilderPlugin, request, }) { return tslib_1.__awaiter(this, void 0, void 0, function* () { if ((0, utils_1.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 content_fields_1.FlowKnowledgeBase); if (!knowledgeBaseContent) { return contents; } const sourceIds = knowledgeBaseContent.sourcesData.map(source => source.id); if (flowBuilderPlugin.getKnowledgeBaseResponse && (0, utils_1.inputHasTextData)(request.input) && sourceIds.length > 0) { const contentsWithKnowledgeResponse = yield getContentsWithKnowledgeResponse(flowBuilderPlugin.getKnowledgeBaseResponse, request, contents, knowledgeBaseContent); if (contentsWithKnowledgeResponse) { return contentsWithKnowledgeResponse; } } } return []; }); } exports.getContentsByKnowledgeBase = getContentsByKnowledgeBase; function getContentsWithKnowledgeResponse(getKnowledgeBaseResponse, request, contents, knowledgeBaseContent) { return tslib_1.__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 : content_fields_1.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 content_fields_1.FlowKnowledgeBase) { content.text = response.answer; content.inferenceId = response.inferenceId; } return content; }); } function trackKnowledgeBase(response, request, knowledgeBaseContent) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const getKnowledgeFailReason = () => { let knowledgebaseFailReason; if (!response.isFaithful) { knowledgebaseFailReason = core_1.KnowledgebaseFailReason.Hallucination; } if (!response.hasKnowledge) { knowledgebaseFailReason = core_1.KnowledgebaseFailReason.NoKnowledge; } return knowledgebaseFailReason; }; const { flowId, flowName, flowNodeId, flowNodeContentId } = (0, tracking_1.getCommonFlowContentEventArgsForContentId)(request, knowledgeBaseContent.id); const event = { action: core_1.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 = tslib_1.__rest(event, ["action"]); yield (0, tracking_1.trackEvent)(request, action, eventArgs); }); } //# sourceMappingURL=knowledge-bases.js.map