mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2024-08-20 04:10:11 +02:00
68 lines
2.4 KiB
JavaScript
68 lines
2.4 KiB
JavaScript
|
|
||
|
const WorkspaceChats = {
|
||
|
tablename: 'workspace_chats',
|
||
|
colsInit: `
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
workspaceId INTEGER NOT NULL,
|
||
|
prompt TEXT NOT NULL,
|
||
|
response TEXT NOT NULL,
|
||
|
include BOOL DEFAULT true,
|
||
|
createdAt TEXT DEFAULT CURRENT_TIMESTAMP,
|
||
|
lastUpdatedAt TEXT DEFAULT CURRENT_TIMESTAMP
|
||
|
`,
|
||
|
db: async function () {
|
||
|
const sqlite3 = require('sqlite3').verbose();
|
||
|
const { open } = require('sqlite');
|
||
|
|
||
|
const db = await open({
|
||
|
filename: 'anythingllm.db',
|
||
|
driver: sqlite3.Database
|
||
|
})
|
||
|
|
||
|
await db.exec(`CREATE TABLE IF NOT EXISTS ${this.tablename} (${this.colsInit})`);
|
||
|
db.on('trace', (sql) => console.log(sql))
|
||
|
return db
|
||
|
},
|
||
|
new: async function ({ workspaceId, prompt, response = {} }) {
|
||
|
const db = await this.db()
|
||
|
const { id, success, message } = await db.run(`INSERT INTO ${this.tablename} (workspaceId, prompt, response) VALUES (?, ?, ?)`, [workspaceId, prompt, JSON.stringify(response)])
|
||
|
.then((res) => {
|
||
|
return { id: res.lastID, success: true, message: null }
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
return { id: null, success: false, message: error.message }
|
||
|
})
|
||
|
if (!success) return { chat: null, message }
|
||
|
|
||
|
const chat = await db.get(`SELECT * FROM ${this.tablename} WHERE id = ${id}`)
|
||
|
return { chat, message: null }
|
||
|
},
|
||
|
forWorkspace: async function (workspaceId = null) {
|
||
|
if (!workspaceId) return [];
|
||
|
return await this.where(`workspaceId = ${workspaceId} AND include = true`, null, 'ORDER BY id ASC')
|
||
|
},
|
||
|
markHistoryInvalid: async function (workspaceId = null) {
|
||
|
if (!workspaceId) return;
|
||
|
const db = await this.db()
|
||
|
await db.run(`UPDATE ${this.tablename} SET include = false WHERE workspaceId = ?`, [workspaceId]);
|
||
|
return;
|
||
|
},
|
||
|
get: async function (clause = '') {
|
||
|
const db = await this.db()
|
||
|
const result = await db.get(`SELECT * FROM ${this.tablename} WHERE ${clause}`).then((res) => res || null)
|
||
|
if (!result) return null;
|
||
|
return result
|
||
|
},
|
||
|
delete: async function (clause = '') {
|
||
|
const db = await this.db()
|
||
|
await db.get(`DELETE FROM ${this.tablename} WHERE ${clause}`)
|
||
|
return true
|
||
|
},
|
||
|
where: async function (clause = '', limit = null, order = null) {
|
||
|
const db = await this.db()
|
||
|
const results = await db.all(`SELECT * FROM ${this.tablename} ${clause ? `WHERE ${clause}` : ''} ${!!limit ? `LIMIT ${limit}` : ''} ${!!order ? order : ''}`)
|
||
|
return results
|
||
|
},
|
||
|
}
|
||
|
|
||
|
module.exports = { WorkspaceChats }
|