anything-llm/server/models/vectors.js
Sean Hatfield ae510619f0
Purge cached docs and remove docs from all workspaces on vectorDB/embedder changes ()
* wip remove all docs clear vector db on embedder/vector db change

* purge all cached docs and remove docs from workspaces on vectordb/embedder change

* lint

* remove unneeded console log

* remove reset vector stores endpoint and move to server side updateENV with postUpdate check

* reset embed module

* remove unused import

* simplify deletion process
rescoped document deletion to be more general for speed, everything needs to be reset anyway
fixed issue where unembedded docs not in any workspaces, but cached, were not removed

* add back missing readme file
update warning text modals

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>
2024-12-16 12:16:20 -08:00

79 lines
2 KiB
JavaScript

const prisma = require("../utils/prisma");
const { Document } = require("./documents");
const DocumentVectors = {
bulkInsert: async function (vectorRecords = []) {
if (vectorRecords.length === 0) return;
try {
const inserts = [];
vectorRecords.forEach((record) => {
inserts.push(
prisma.document_vectors.create({
data: {
docId: record.docId,
vectorId: record.vectorId,
},
})
);
});
await prisma.$transaction(inserts);
return { documentsInserted: inserts.length };
} catch (error) {
console.error("Bulk insert failed", error);
return { documentsInserted: 0 };
}
},
where: async function (clause = {}, limit) {
try {
const results = await prisma.document_vectors.findMany({
where: clause,
take: limit || undefined,
});
return results;
} catch (error) {
console.error("Where query failed", error);
return [];
}
},
deleteForWorkspace: async function (workspaceId) {
const documents = await Document.forWorkspace(workspaceId);
const docIds = [...new Set(documents.map((doc) => doc.docId))];
try {
await prisma.document_vectors.deleteMany({
where: { docId: { in: docIds } },
});
return true;
} catch (error) {
console.error("Delete for workspace failed", error);
return false;
}
},
deleteIds: async function (ids = []) {
try {
await prisma.document_vectors.deleteMany({
where: { id: { in: ids } },
});
return true;
} catch (error) {
console.error("Delete IDs failed", error);
return false;
}
},
delete: async function (clause = {}) {
try {
await prisma.document_vectors.deleteMany({ where: clause });
return true;
} catch (error) {
console.error("Delete failed", error);
return false;
}
},
};
module.exports = { DocumentVectors };