@@ -23,6 +19,12 @@ export default function ToolsList({ organization }: { organization: any }) {
+
{
+ var result = {};
+ const { organization, jobId } = event.data;
+ const connector = await OrganizationConnection.get({
+ organization_id: Number(organization.id),
+ });
+ const vectorDb = selectConnector(connector);
+
+ if (vectorDb.name === 'pinecone') {
+ try {
+ const namespaces = await vectorDb.namespaces();
+ const { pineconeIndex } = await vectorDb.connect();
+ for (const collection of namespaces) {
+ await pineconeIndex.delete1({
+ namespace: collection.name,
+ deleteAll: true,
+ });
+ }
+
+ await removeWorkspaces(organization);
+ result = {
+ message: `All namespaces deleted from Pinecone.`,
+ };
+ await Queue.updateJob(jobId, Queue.status.complete, result);
+ return { result };
+ } catch (e) {
+ const result = {
+ message: `Job failed with error`,
+ error: e.message,
+ details: e,
+ };
+ await Queue.updateJob(jobId, Queue.status.failed, result);
+ return { result };
+ }
+ }
+
+ if (vectorDb.name === 'chroma') {
+ try {
+ // cannot use .reset as it may not be enabled.
+ const namespaces = await vectorDb.namespaces();
+ const { client } = await vectorDb.connect();
+ for (const collectionInfo of namespaces) {
+ await client.deleteCollection({ name: collectionInfo.name });
+ }
+
+ await removeWorkspaces(organization);
+ result = {
+ message: `All namespaces deleted from Chroma.`,
+ };
+ await Queue.updateJob(jobId, Queue.status.complete, result);
+ return { result };
+ } catch (e) {
+ const result = {
+ message: `Job failed with error`,
+ error: e.message,
+ details: e,
+ };
+ await Queue.updateJob(jobId, Queue.status.failed, result);
+ return { result };
+ }
+ }
+
+ if (vectorDb.name === 'qdrant') {
+ try {
+ const namespaces = await vectorDb.namespaces();
+ const { client } = await vectorDb.connect();
+ for (const collectionInfo of namespaces) {
+ await client.deleteCollection(collectionInfo.name);
+ }
+
+ await removeWorkspaces(organization);
+ result = {
+ message: `All namespaces deleted from Chroma.`,
+ };
+ await Queue.updateJob(jobId, Queue.status.complete, result);
+ return { result };
+ } catch (e) {
+ const result = {
+ message: `Job failed with error`,
+ error: e.message,
+ details: e,
+ };
+ await Queue.updateJob(jobId, Queue.status.failed, result);
+ return { result };
+ }
+ }
+
+ if (vectorDb.name === 'weaviate') {
+ try {
+ const { client } = await weaviateClient.connect();
+ const collections = await vectorDb.collections();
+ for (const collectionInfo of collections) {
+ await client.schema
+ .classDeleter()
+ .withClassName(collectionInfo.name)
+ .do();
+ }
+
+ await removeWorkspaces(organization);
+ result = {
+ message: `All namespaces deleted from Chroma.`,
+ };
+ await Queue.updateJob(jobId, Queue.status.complete, result);
+ return { result };
+ } catch (e) {
+ const result = {
+ message: `Job failed with error`,
+ error: e.message,
+ details: e,
+ };
+ await Queue.updateJob(jobId, Queue.status.failed, result);
+ return { result };
+ }
+ }
+
+ result = { message: `Nothing to do.` };
+ await Queue.updateJob(jobId, Queue.status.complete, result);
+ return { result };
+ }
+);
+
+async function removeWorkspaces(organization) {
+ const workspaces = await OrganizationWorkspace.where({
+ organization_id: Number(organization.id),
+ });
+ OrganizationWorkspace.delete({
+ id: { in: workspaces.map((ws) => ws.id) },
+ });
+}
+
+module.exports = {
+ resetOrganization,
+};
diff --git a/workers/index.js b/workers/index.js
index 7a34827..fc22c01 100644
--- a/workers/index.js
+++ b/workers/index.js
@@ -34,6 +34,7 @@ const { cloneWeaviateWorkspace } = require("./functions/cloneWeaviateWorkspace")
const { cloneWeaviateDocument } = require("./functions/cloneWeaviateDocument");
const { addWeaviateDocuments } = require("./functions/addWeaviateDocuments");
const { migrateOrganization } = require("./functions/migrateOrganization");
+const { resetOrganization } = require("./functions/resetOrganization");
const app = express();
app.use(cors({ origin: true }));
@@ -98,6 +99,7 @@ app.use(
newWorkspaceCreated,
workspaceDeleted,
migrateOrganization,
+ resetOrganization,
], { landingPage: true })
);