mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2025-03-19 16:42:22 +00:00
* v2 Login screen (#254) * adding gradients for modal and sidebar * adding font setup * redesigned login screen for MultiUserAuth * completed multi user mode login screen * linting * login screen for single user auth redesign complete * created reusable gradient for login screen --------- Co-authored-by: timothycarambat <rambat1010@gmail.com> * v2 sidebar (#262) * adding gradients for modal and sidebar * adding font setup * redesigned login screen for MultiUserAuth * completed multi user mode login screen * linting * login screen for single user auth redesign complete * WIP sidebar redesign * created reusable gradient for login screen * remove dark mode items * update new workspace button * completed sidebar for desktop view * add interactivity states --------- Co-authored-by: timothycarambat <rambat1010@gmail.com> * remove duplicated pkg * v2 settings (#264) * adding gradients for modal and sidebar * adding font setup * redesigned login screen for MultiUserAuth * completed multi user mode login screen * linting * login screen for single user auth redesign complete * WIP sidebar redesign * created reusable gradient for login screen * remove dark mode items * update new workspace button * completed sidebar for desktop view * WIP added colors/gradients to admin settings * WIP fix discord logo import * WIP settings redesign - added routes for general settings and restyled components * WIP settings for LLM Preference, VectorDB, ExportImport * settings menu UI complete WIP functionality * settings fully functional/removed dark mode logo * linting * removing unneeded dependency * Fix admin sidebar visibility Fix API Keys location and work with single/mum Fix Appearance location - WIP on funcitonality * update api key page * fix permissions for appearance * Single user mode fixes * fix multi user mode enabled * fix import export * Rename AdminSidebar to SettingsSidebar * Fix mobile sidebar links --------- Co-authored-by: timothycarambat <rambat1010@gmail.com> * V2 user logout (#265) * Add user logout button * hide other 3 dot button * wrap admin routes * V2 workspace modal (#267) Update new workspace modal remove duplicate tailwind colors * v2 Settings modal styles (#266) * EditUserModal styles complete * workspaces modals styles complete * create invite link modal styles complete * create new api key modal styles complete --------- Co-authored-by: timothycarambat <rambat1010@gmail.com> * v2 Chats Redesign (#270) * fix default message for new workspace * prompt input box ui redesign complete * ui tweak to prompt input * WIP chat msg redesign * chat container and historical chat messages redesign * manage workspace modal appears when clicking upload a document on empty workspace * fixed loading skeleton styles * citations redesign complete * restyle pending chat and prompt reply components * default chat messages styles updated * linting * update how chats are returned --------- Co-authored-by: timothycarambat <rambat1010@gmail.com> * Onboarding modal flow for first time setup (#274) * WIP onboarding modal flow * onboarding flow complete and private route redirection for onboarding setep * redirect to home on onboarding complete * add onboarding redirect using paths.onboarding() * Apply changes to auth flow, onboarding determination, and flows * remove formref --------- Co-authored-by: timothycarambat <rambat1010@gmail.com> * v2 document picker (#275) * remove unneeded comments * WIP document picker UI * WIP basic UI complete for document picker tab and settings tab * linting * settings menu complete, document row WIP * WIP document picker loading from localFiles * WIP file picker logic * refactoring document picker to work with backend * WIP refactoring document picker * WIP refactor document picker to work with backend * file uploading with dropzone working * WIP deleting file when not embedded * WIP embeddings * WIP embedding with temp button and hardcoded paths * WIP placeholder for WorkspaceDirectory component * WIP WorkspaceDirectory * WIP * sort workspaceDocs and availibleDocs complete * added directories util * add and remove document from ws working * v2 document picker complete * reference modal ui bug fixes * truncate function bug fix * ManageWorkspace modal bug fixes * blocking mobile users modal for workspace settings * mobile ui fixes * linting * ui padding fixes * citation bug fixes * code review changes * debounce handlers * change tempFile object to array * selection count fix * Convert workspace modal to div Memo workspace settings update conditional rendering of workspace settings * Show no documents --------- Co-authored-by: timothycarambat <rambat1010@gmail.com> * mobile sidebar styles * padding on Mobile view mobile sidebar items * UI touchup * suggestion implementations * CSS fixes and animation perfomance change to GPU accelerated and 60fps * change will-change * remove transitions from onboarding modals, simplify on-change handlers * Swap onboarding to memoized components and debounce onchange handlers * remove console log * remove Avenir font --------- Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
163 lines
3.9 KiB
JavaScript
163 lines
3.9 KiB
JavaScript
const prisma = require("../utils/prisma");
|
|
|
|
const WorkspaceChats = {
|
|
new: async function ({ workspaceId, prompt, response = {}, user = null }) {
|
|
try {
|
|
const chat = await prisma.workspace_chats.create({
|
|
data: {
|
|
workspaceId,
|
|
prompt,
|
|
response: JSON.stringify(response),
|
|
user_id: user?.id || null,
|
|
},
|
|
});
|
|
return { chat, message: null };
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return { chat: null, message: error.message };
|
|
}
|
|
},
|
|
|
|
forWorkspaceByUser: async function (
|
|
workspaceId = null,
|
|
userId = null,
|
|
limit = null
|
|
) {
|
|
if (!workspaceId || !userId) return [];
|
|
try {
|
|
const chats = await prisma.workspace_chats.findMany({
|
|
where: {
|
|
workspaceId,
|
|
user_id: userId,
|
|
include: true,
|
|
},
|
|
...(limit !== null ? { take: limit } : {}),
|
|
orderBy: {
|
|
id: "asc",
|
|
},
|
|
});
|
|
return chats;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return [];
|
|
}
|
|
},
|
|
|
|
forWorkspace: async function (workspaceId = null, limit = null) {
|
|
if (!workspaceId) return [];
|
|
try {
|
|
const chats = await prisma.workspace_chats.findMany({
|
|
where: {
|
|
workspaceId,
|
|
include: true,
|
|
},
|
|
...(limit !== null ? { take: limit } : {}),
|
|
orderBy: {
|
|
id: "asc",
|
|
},
|
|
});
|
|
return chats;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return [];
|
|
}
|
|
},
|
|
|
|
markHistoryInvalid: async function (workspaceId = null, user = null) {
|
|
if (!workspaceId) return;
|
|
try {
|
|
await prisma.workspace_chats.updateMany({
|
|
where: {
|
|
workspaceId,
|
|
user_id: user?.id,
|
|
},
|
|
data: {
|
|
include: false,
|
|
},
|
|
});
|
|
return;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
}
|
|
},
|
|
|
|
get: async function (clause = {}, limit = null, orderBy = null) {
|
|
try {
|
|
const chat = await prisma.workspace_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.workspace_chats.deleteMany({
|
|
where: clause,
|
|
});
|
|
return true;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return false;
|
|
}
|
|
},
|
|
|
|
where: async function (clause = {}, limit = null, orderBy = null) {
|
|
try {
|
|
const chats = await prisma.workspace_chats.findMany({
|
|
where: clause,
|
|
...(limit !== null ? { take: limit } : {}),
|
|
...(orderBy !== null ? { orderBy } : {}),
|
|
});
|
|
return chats;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return [];
|
|
}
|
|
},
|
|
|
|
count: async function (clause = {}) {
|
|
try {
|
|
const count = await prisma.workspace_chats.count({
|
|
where: clause,
|
|
});
|
|
return count;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return 0;
|
|
}
|
|
},
|
|
|
|
whereWithData: async function (clause = {}, limit = null, orderBy = null) {
|
|
const { Workspace } = require("./workspace");
|
|
const { User } = require("./user");
|
|
|
|
try {
|
|
const results = await this.where(clause, limit, orderBy);
|
|
|
|
for (const res of results) {
|
|
const workspace = await Workspace.get({ id: res.workspaceId });
|
|
res.workspace = workspace
|
|
? { name: workspace.name, slug: workspace.slug }
|
|
: { name: "deleted workspace", slug: null };
|
|
|
|
const user = await User.get({ id: res.user_id });
|
|
res.user = user
|
|
? { username: user.username }
|
|
: { username: "deleted user" };
|
|
}
|
|
|
|
return results;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return [];
|
|
}
|
|
},
|
|
};
|
|
|
|
module.exports = { WorkspaceChats };
|