@botonic/plugin-flow-builder
Version:
Use Flow Builder to show your contents
93 lines • 4.65 kB
JavaScript
;
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