dtamind-components
Version:
DTAmindai Components
168 lines • 7.44 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
class DocStore_VectorStores {
constructor() {
//@ts-ignore
this.loadMethods = {
async listStores(_, options) {
const returnData = [];
const appDataSource = options.appDataSource;
const databaseEntities = options.databaseEntities;
if (appDataSource === undefined || !appDataSource) {
return returnData;
}
const searchOptions = options.searchOptions || {};
const stores = await appDataSource.getRepository(databaseEntities['DocumentStore']).findBy(searchOptions);
for (const store of stores) {
if (store.status === 'UPSERTED') {
const obj = {
name: store.id,
label: store.name,
description: store.description
};
returnData.push(obj);
}
}
return returnData;
}
};
this.label = 'Document Store (Vector)';
this.name = 'documentStoreVS';
this.version = 1.0;
this.type = 'DocumentStoreVS';
this.icon = 'dstore.svg';
this.category = 'Vector Stores';
this.description = `Search and retrieve documents from Document Store`;
this.baseClasses = [this.type];
this.inputs = [
{
label: 'Select Store',
name: 'selectedStore',
type: 'asyncOptions',
loadMethod: 'listStores'
}
];
this.outputs = [
{
label: 'Retriever',
name: 'retriever',
baseClasses: ['BaseRetriever']
},
{
label: 'Vector Store',
name: 'vectorStore',
baseClasses: ['VectorStore']
}
];
}
async init(nodeData, _, options) {
const selectedStore = nodeData.inputs?.selectedStore;
const appDataSource = options.appDataSource;
const databaseEntities = options.databaseEntities;
const output = nodeData.outputs?.output;
const entity = await appDataSource.getRepository(databaseEntities['DocumentStore']).findOneBy({ id: selectedStore });
if (!entity) {
return { error: 'Store not found' };
}
const data = {};
data.output = output;
// Prepare Embeddings Instance
const embeddingConfig = JSON.parse(entity.embeddingConfig);
data.embeddingName = embeddingConfig.name;
data.embeddingConfig = embeddingConfig.config;
let embeddingObj = await _createEmbeddingsObject(options.componentNodes, data, options);
if (!embeddingObj) {
return { error: 'Failed to create EmbeddingObj' };
}
// Prepare Vector Store Instance
const vsConfig = JSON.parse(entity.vectorStoreConfig);
data.vectorStoreName = vsConfig.name;
data.vectorStoreConfig = vsConfig.config;
if (data.inputs) {
data.vectorStoreConfig = { ...vsConfig.config, ...data.inputs };
}
// Prepare Vector Store Node Data
const vStoreNodeData = _createVectorStoreNodeData(options.componentNodes, data, embeddingObj);
// Finally create the Vector Store or Retriever object (data.output)
const vectorStoreObj = await _createVectorStoreObject(options.componentNodes, data);
const retrieverOrVectorStore = await vectorStoreObj.init(vStoreNodeData, '', options);
if (!retrieverOrVectorStore) {
return { error: 'Failed to create vectorStore' };
}
return retrieverOrVectorStore;
}
}
const _createEmbeddingsObject = async (componentNodes, data, options) => {
// prepare embedding node data
const embeddingComponent = componentNodes[data.embeddingName];
const embeddingNodeData = {
inputs: { ...data.embeddingConfig },
outputs: { output: 'document' },
id: `${embeddingComponent.name}_0`,
label: embeddingComponent.label,
name: embeddingComponent.name,
category: embeddingComponent.category,
inputParams: embeddingComponent.inputs || []
};
if (data.embeddingConfig.credential) {
embeddingNodeData.credential = data.embeddingConfig.credential;
}
// init embedding object
const embeddingNodeInstanceFilePath = embeddingComponent.filePath;
const embeddingNodeModule = await Promise.resolve(`${embeddingNodeInstanceFilePath}`).then(s => __importStar(require(s)));
const embeddingNodeInstance = new embeddingNodeModule.nodeClass();
return await embeddingNodeInstance.init(embeddingNodeData, '', options);
};
const _createVectorStoreNodeData = (componentNodes, data, embeddingObj) => {
const vectorStoreComponent = componentNodes[data.vectorStoreName];
const vStoreNodeData = {
id: `${vectorStoreComponent.name}_0`,
inputs: { ...data.vectorStoreConfig },
outputs: { output: data.output },
label: vectorStoreComponent.label,
name: vectorStoreComponent.name,
category: vectorStoreComponent.category
};
if (data.vectorStoreConfig.credential) {
vStoreNodeData.credential = data.vectorStoreConfig.credential;
}
if (embeddingObj) {
vStoreNodeData.inputs.embeddings = embeddingObj;
}
// Get all input params except the ones that are anchor points to avoid JSON stringify circular error
const filterInputParams = ['document', 'embeddings', 'recordManager'];
const inputParams = vectorStoreComponent.inputs?.filter((input) => !filterInputParams.includes(input.name));
vStoreNodeData.inputParams = inputParams;
return vStoreNodeData;
};
const _createVectorStoreObject = async (componentNodes, data) => {
const vStoreNodeInstanceFilePath = componentNodes[data.vectorStoreName].filePath;
const vStoreNodeModule = await Promise.resolve(`${vStoreNodeInstanceFilePath}`).then(s => __importStar(require(s)));
const vStoreNodeInstance = new vStoreNodeModule.nodeClass();
return vStoreNodeInstance;
};
module.exports = { nodeClass: DocStore_VectorStores };
//# sourceMappingURL=DocStoreVector.js.map