@websolutespa/payload-plugin-bowl-llm
Version:
LLM plugin for Bowl PayloadCms plugin
90 lines (89 loc) • 3.02 kB
JavaScript
import { InMemoryCache } from '@websolutespa/payload-plugin-bowl';
import { ResponseSuccess } from '@websolutespa/payload-utils/server';
import { addDataAndFileToRequest } from 'payload';
import { options } from '../options';
import { fetchRobot } from '../utils/robot';
import { errorHandler } from './error.handler';
import { getApp } from './llmModels.handler';
export async function llmVectorDbsCleaningHandler(payload) {
// get all vector dbs that are older than 30 days
const filterDate = new Date();
filterDate.setDate(filterDate.getDate() - 30);
const vectorDbs = await payload.find({
collection: options.slug.llmVectorDb,
where: {
createdAt: {
less_than: filterDate
}
},
overrideAccess: true,
depth: 0,
pagination: false
});
// get an object with each vectorDbId and count of usage
const result = await Promise.all(vectorDbs.docs.map(async (vectorDb)=>{
// get the number of apps that use this vectorDb
const result = await payload.count({
collection: options.slug.llmApp,
overrideAccess: true,
where: {
or: [
{
'settings.knowledgeBase.vectorDbFile.id': {
equals: vectorDb.id
}
},
{
'settings.rules.vectorDbFile.id': {
equals: vectorDb.id
}
},
{
'settings.appTools.knowledgeBase.vectorDbFile': {
equals: vectorDb.id
}
}
]
}
});
return {
vectorDbId: vectorDb,
count: result.totalDocs
};
}));
// filter out the vector dbs that are not used
const idsToDelete = result.filter((x)=>x.count === 0).map((x)=>x.vectorDbId.id);
// delete the vector dbs that are not used
await payload.delete({
collection: options.slug.llmVectorDb,
overrideAccess: true,
where: {
id: {
in: idsToDelete.join(',')
}
}
});
return idsToDelete;
}
const CACHE_ = new InMemoryCache();
const getVectorDbTypes = async ()=>{
const cacheKey = 'vector_db_types';
if (CACHE_.has(cacheKey)) {
return CACHE_.get(cacheKey);
}
const types = await fetchRobot('api/llm/extension/dbs', 'GET');
CACHE_.set(cacheKey, types);
return types;
};
export const vectorDbTypesHandler = async (req)=>{
try {
await addDataAndFileToRequest(req);
const { payload } = req;
await getApp(payload, req);
const types = await getVectorDbTypes();
return ResponseSuccess(types);
} catch (error) {
return errorHandler(error);
}
};
//# sourceMappingURL=vectorDb.handler.js.map