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