UNPKG

@websolutespa/payload-plugin-bowl-llm

Version:

LLM plugin for Bowl PayloadCms plugin

90 lines (89 loc) 3.02 kB
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