anything-llm/server/endpoints/workspaces.js
timothycarambat 27c58541bd inital commit
2023-06-03 19:28:07 -07:00

75 lines
2.7 KiB
JavaScript

const { Pinecone } = require('../utils/pinecone');
const { reqBody } = require('../utils/http');
const { Workspace } = require('../models/workspace');
const { Document } = require('../models/documents');
const { DocumentVectors } = require('../models/vectors');
const { WorkspaceChats } = require('../models/workspaceChats');
const { convertToChatHistory } = require('../utils/chats');
function workspaceEndpoints(app) {
if (!app) return;
app.post('/workspace/new', async (request, response) => {
const { name = null } = reqBody(request);
const { workspace, message } = await Workspace.new(name);
response.status(200).json({ workspace, message })
})
app.post('/workspace/:slug/update-embeddings', async (request, response) => {
const { slug = null } = request.params;
const { adds = [], deletes = [] } = reqBody(request);
const currWorkspace = await Workspace.get(`slug = '${slug}'`);
if (!currWorkspace) {
response.sendStatus(400).end();
return;
}
await Document.removeDocuments(currWorkspace, deletes);
await Document.addDocuments(currWorkspace, adds);
const updatedWorkspace = await Workspace.get(`slug = '${slug}'`);
response.status(200).json({ workspace: updatedWorkspace })
})
app.delete('/workspace/:slug', async (request, response) => {
const { slug = '' } = request.params
const workspace = await Workspace.get(`slug = '${slug}'`);
if (!workspace) {
response.sendStatus(400).end();
return;
}
await Workspace.delete(`slug = '${slug.toLowerCase()}'`);
await DocumentVectors.deleteForWorkspace(workspace.id);
await Document.delete(`workspaceId = ${Number(workspace.id)}`)
await WorkspaceChats.delete(`workspaceId = ${Number(workspace.id)}`)
try { await Pinecone['delete-namespace']({ namespace: slug }) } catch (e) { console.error(e.message) }
response.sendStatus(200).end()
})
app.get('/workspaces', async (_, response) => {
const workspaces = await Workspace.where();
response.status(200).json({ workspaces })
})
app.get('/workspace/:slug', async (request, response) => {
const { slug } = request.params
const workspace = await Workspace.get(`slug = '${slug}'`);
response.status(200).json({ workspace })
})
app.get('/workspace/:slug/chats', async (request, response) => {
const { slug } = request.params
const workspace = await Workspace.get(`slug = '${slug}'`);
if (!workspace) {
response.sendStatus(400).end()
return;
}
const history = await WorkspaceChats.forWorkspace(workspace.id)
response.status(200).json({ history: convertToChatHistory(history) })
})
}
module.exports = { workspaceEndpoints }