|
|
const { safeJsonParse } = require("../utils/http"); |
|
|
const prisma = require("../utils/prisma"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const EmbedChats = { |
|
|
new: async function ({ |
|
|
embedId, |
|
|
prompt, |
|
|
response = {}, |
|
|
connection_information = {}, |
|
|
sessionId, |
|
|
}) { |
|
|
try { |
|
|
const chat = await prisma.embed_chats.create({ |
|
|
data: { |
|
|
prompt, |
|
|
embed_id: Number(embedId), |
|
|
response: JSON.stringify(response), |
|
|
connection_information: JSON.stringify(connection_information), |
|
|
session_id: String(sessionId), |
|
|
}, |
|
|
}); |
|
|
return { chat, message: null }; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
return { chat: null, message: error.message }; |
|
|
} |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filterSources: function (chats) { |
|
|
return chats.map((chat) => { |
|
|
const { response, ...rest } = chat; |
|
|
const { sources, ...responseRest } = safeJsonParse(response); |
|
|
return { ...rest, response: JSON.stringify(responseRest) }; |
|
|
}); |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
forEmbedByUser: async function ( |
|
|
embedId = null, |
|
|
sessionId = null, |
|
|
limit = null, |
|
|
orderBy = null, |
|
|
filterSources = false |
|
|
) { |
|
|
if (!embedId || !sessionId) return []; |
|
|
|
|
|
try { |
|
|
const chats = await prisma.embed_chats.findMany({ |
|
|
where: { |
|
|
embed_id: Number(embedId), |
|
|
session_id: String(sessionId), |
|
|
include: true, |
|
|
}, |
|
|
...(limit !== null ? { take: limit } : {}), |
|
|
...(orderBy !== null ? { orderBy } : { orderBy: { id: "asc" } }), |
|
|
}); |
|
|
return filterSources ? this.filterSources(chats) : chats; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
return []; |
|
|
} |
|
|
}, |
|
|
|
|
|
markHistoryInvalid: async function (embedId = null, sessionId = null) { |
|
|
if (!embedId || !sessionId) return []; |
|
|
|
|
|
try { |
|
|
await prisma.embed_chats.updateMany({ |
|
|
where: { |
|
|
embed_id: Number(embedId), |
|
|
session_id: String(sessionId), |
|
|
}, |
|
|
data: { |
|
|
include: false, |
|
|
}, |
|
|
}); |
|
|
return; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
} |
|
|
}, |
|
|
|
|
|
get: async function (clause = {}, limit = null, orderBy = null) { |
|
|
try { |
|
|
const chat = await prisma.embed_chats.findFirst({ |
|
|
where: clause, |
|
|
...(limit !== null ? { take: limit } : {}), |
|
|
...(orderBy !== null ? { orderBy } : {}), |
|
|
}); |
|
|
return chat || null; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
return null; |
|
|
} |
|
|
}, |
|
|
|
|
|
delete: async function (clause = {}) { |
|
|
try { |
|
|
await prisma.embed_chats.deleteMany({ |
|
|
where: clause, |
|
|
}); |
|
|
return true; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
return false; |
|
|
} |
|
|
}, |
|
|
|
|
|
where: async function ( |
|
|
clause = {}, |
|
|
limit = null, |
|
|
orderBy = null, |
|
|
offset = null |
|
|
) { |
|
|
try { |
|
|
const chats = await prisma.embed_chats.findMany({ |
|
|
where: clause, |
|
|
...(limit !== null ? { take: limit } : {}), |
|
|
...(offset !== null ? { skip: offset } : {}), |
|
|
...(orderBy !== null ? { orderBy } : {}), |
|
|
}); |
|
|
return chats; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
return []; |
|
|
} |
|
|
}, |
|
|
|
|
|
whereWithEmbedAndWorkspace: async function ( |
|
|
clause = {}, |
|
|
limit = null, |
|
|
orderBy = null, |
|
|
offset = null |
|
|
) { |
|
|
try { |
|
|
const chats = await prisma.embed_chats.findMany({ |
|
|
where: clause, |
|
|
include: { |
|
|
embed_config: { |
|
|
select: { |
|
|
workspace: { |
|
|
select: { |
|
|
name: true, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
...(limit !== null ? { take: limit } : {}), |
|
|
...(offset !== null ? { skip: offset } : {}), |
|
|
...(orderBy !== null ? { orderBy } : {}), |
|
|
}); |
|
|
return chats; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
return []; |
|
|
} |
|
|
}, |
|
|
|
|
|
count: async function (clause = {}) { |
|
|
try { |
|
|
const count = await prisma.embed_chats.count({ |
|
|
where: clause, |
|
|
}); |
|
|
return count; |
|
|
} catch (error) { |
|
|
console.error(error.message); |
|
|
return 0; |
|
|
} |
|
|
}, |
|
|
}; |
|
|
|
|
|
module.exports = { EmbedChats }; |
|
|
|