mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2025-03-28 16:44:43 +00:00
75 lines
2.7 KiB
JavaScript
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 }
|