mirror of
https://github.com/Mintplex-Labs/vector-admin.git
synced 2026-08-27 10:31:23 -04:00
144 lines
4.5 KiB
JavaScript
144 lines
4.5 KiB
JavaScript
const { Queue } = require('../../../backend/models/queue');
|
|
const {
|
|
Chroma,
|
|
} = require('../../../backend/utils/vectordatabases/providers/chroma');
|
|
const {
|
|
QDrant,
|
|
} = require('../../../backend/utils/vectordatabases/providers/qdrant');
|
|
const {
|
|
Weaviate,
|
|
} = require('../../../backend/utils/vectordatabases/providers/weaviate');
|
|
const { InngestClient } = require('../../utils/inngest');
|
|
|
|
const newWorkspaceCreated = InngestClient.createFunction(
|
|
{ name: 'New Namespace or Collection' },
|
|
{ event: 'workspace/new' },
|
|
async ({ event, step: _step, logger }) => {
|
|
var result = {};
|
|
const { workspace, connector, jobId } = event.data;
|
|
if (!['chroma', 'qdrant', 'weaviate'].includes(connector.type)) {
|
|
result = {
|
|
message: `Connector type does not support empty collection creation - nothing to do.`,
|
|
};
|
|
await Queue.updateJob(jobId, Queue.status.complete, result);
|
|
return { result };
|
|
}
|
|
|
|
if (connector.type === 'chroma') {
|
|
try {
|
|
const chromaClient = new Chroma(connector);
|
|
const { client } = await chromaClient.connect();
|
|
const collection = await client.createCollection({
|
|
name: workspace.fname,
|
|
});
|
|
|
|
if (!collection) {
|
|
result = {
|
|
message: `No collection could be created with name ${workspace.fname} - nothing to do.`,
|
|
};
|
|
await Queue.updateJob(jobId, Queue.status.failed, result);
|
|
return { result };
|
|
}
|
|
|
|
result = {
|
|
message: `Collection ${workspace.fname} created in 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 (connector.type === 'qdrant') {
|
|
try {
|
|
const qdrantClient = new QDrant(connector);
|
|
const { client } = await qdrantClient.connect();
|
|
const collectionCreated = await client.createCollection(
|
|
workspace.fname,
|
|
{
|
|
vectors: {
|
|
size: 1536, // TODO: Fixed to OpenAI models - when other embeddings exist make variable.
|
|
distance: 'Cosine',
|
|
},
|
|
}
|
|
);
|
|
|
|
if (!collectionCreated) {
|
|
result = {
|
|
message: `No collection could be created with name ${workspace.fname} - nothing to do.`,
|
|
};
|
|
await Queue.updateJob(jobId, Queue.status.failed, result);
|
|
return { result };
|
|
}
|
|
|
|
result = {
|
|
message: `Collection ${workspace.fname} created in QDrant.`,
|
|
};
|
|
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 (connector.type === 'weaviate') {
|
|
try {
|
|
const weaviateClient = new Weaviate(connector);
|
|
const className = weaviateClient.camelCase(workspace.fname);
|
|
const { client } = await weaviateClient.connect();
|
|
const collectionCreated = await client.schema
|
|
.classCreator()
|
|
.withClass({
|
|
class: className,
|
|
description: `Class created by VectorAdmin named ${className}`,
|
|
vectorizer: 'none',
|
|
})
|
|
.do();
|
|
|
|
if (!collectionCreated?.class) {
|
|
result = {
|
|
message: `No collection could be created with name ${workspace.fname} - nothing to do.`,
|
|
};
|
|
await Queue.updateJob(jobId, Queue.status.failed, result);
|
|
return { result };
|
|
}
|
|
|
|
result = {
|
|
message: `Collection ${workspace.fname} (class ${className}) created in Weaviate.`,
|
|
};
|
|
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 };
|
|
}
|
|
);
|
|
|
|
module.exports = {
|
|
newWorkspaceCreated,
|
|
};
|