|
@@ -56,106 +56,108 @@
|
|
|
|
|
|
let version;
|
|
|
|
|
|
- onMount(async () => {
|
|
|
- if ($user === undefined || $user === null) {
|
|
|
- await goto('/auth');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!['user', 'admin'].includes($user?.role)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
+ const clearChatInputStorage = () => {
|
|
|
const chatInputKeys = Object.keys(localStorage).filter((key) => key.startsWith('chat-input'));
|
|
|
if (chatInputKeys.length > 0) {
|
|
|
chatInputKeys.forEach((key) => {
|
|
|
localStorage.removeItem(key);
|
|
|
});
|
|
|
}
|
|
|
+ };
|
|
|
|
|
|
- const loadChatsFromDB = async () => {
|
|
|
- try {
|
|
|
- // Check if IndexedDB exists
|
|
|
- DB = await openDB('Chats', 1);
|
|
|
+ const checkLocalDBChats = async () => {
|
|
|
+ try {
|
|
|
+ // Check if IndexedDB exists
|
|
|
+ DB = await openDB('Chats', 1);
|
|
|
|
|
|
- if (!DB) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (!DB) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- const chats = await DB.getAllFromIndex('chats', 'timestamp');
|
|
|
- localDBChats = chats.map((item, idx) => chats[chats.length - 1 - idx]);
|
|
|
+ const chats = await DB.getAllFromIndex('chats', 'timestamp');
|
|
|
+ localDBChats = chats.map((item, idx) => chats[chats.length - 1 - idx]);
|
|
|
|
|
|
- if (localDBChats.length === 0) {
|
|
|
- await deleteDB('Chats');
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- // IndexedDB Not Found
|
|
|
+ if (localDBChats.length === 0) {
|
|
|
+ await deleteDB('Chats');
|
|
|
}
|
|
|
- };
|
|
|
+ } catch (error) {
|
|
|
+ // IndexedDB Not Found
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- const loadUserSettings = async (): Promise<Parameters<(typeof settings)['set']>[0]> => {
|
|
|
- const userSettings = await getUserSettings(localStorage.token).catch((error) => {
|
|
|
- console.error(error);
|
|
|
- return null;
|
|
|
- });
|
|
|
+ const setUserSettings = async (cb) => {
|
|
|
+ const userSettings = await getUserSettings(localStorage.token).catch((error) => {
|
|
|
+ console.error(error);
|
|
|
+ return null;
|
|
|
+ });
|
|
|
|
|
|
- if (userSettings) {
|
|
|
- return userSettings.ui;
|
|
|
- }
|
|
|
+ if (userSettings) {
|
|
|
+ await settings.set(userSettings.ui);
|
|
|
|
|
|
- try {
|
|
|
- return JSON.parse(localStorage.getItem('settings') ?? '{}');
|
|
|
- } catch (e: unknown) {
|
|
|
- console.error('Failed to parse settings from localStorage', e);
|
|
|
- return {};
|
|
|
+ if (cb) {
|
|
|
+ await cb();
|
|
|
}
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
- const loadModels = async () => {
|
|
|
- models.set(
|
|
|
- await getModels(
|
|
|
- localStorage.token,
|
|
|
- $config?.features?.enable_direct_connections
|
|
|
- ? ($settings?.directConnections ?? null)
|
|
|
- : null
|
|
|
- )
|
|
|
- );
|
|
|
- };
|
|
|
+ try {
|
|
|
+ return JSON.parse(localStorage.getItem('settings') ?? '{}');
|
|
|
+ } catch (e: unknown) {
|
|
|
+ console.error('Failed to parse settings from localStorage', e);
|
|
|
+ return {};
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- const loadToolServers = async () => {
|
|
|
- let toolServersData = await getToolServersData($settings?.toolServers ?? []);
|
|
|
- toolServersData = toolServersData.filter((data) => {
|
|
|
- if (!data || data.error) {
|
|
|
- toast.error(
|
|
|
- $i18n.t(`Failed to connect to {{URL}} OpenAPI tool server`, {
|
|
|
- URL: data?.url
|
|
|
- })
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
- });
|
|
|
- toolServers.set(toolServersData);
|
|
|
- };
|
|
|
+ const setModels = async () => {
|
|
|
+ models.set(
|
|
|
+ await getModels(
|
|
|
+ localStorage.token,
|
|
|
+ $config?.features?.enable_direct_connections ? ($settings?.directConnections ?? null) : null
|
|
|
+ )
|
|
|
+ );
|
|
|
+ };
|
|
|
|
|
|
- const loadBanners = async () => {
|
|
|
- const bannersData = await getBanners(localStorage.token);
|
|
|
- banners.set(bannersData);
|
|
|
- };
|
|
|
+ const setToolServers = async () => {
|
|
|
+ let toolServersData = await getToolServersData($settings?.toolServers ?? []);
|
|
|
+ toolServersData = toolServersData.filter((data) => {
|
|
|
+ if (!data || data.error) {
|
|
|
+ toast.error(
|
|
|
+ $i18n.t(`Failed to connect to {{URL}} OpenAPI tool server`, {
|
|
|
+ URL: data?.url
|
|
|
+ })
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ });
|
|
|
+ toolServers.set(toolServersData);
|
|
|
+ };
|
|
|
|
|
|
- const loadTools = async () => {
|
|
|
- const toolsData = await getTools(localStorage.token);
|
|
|
- tools.set(toolsData);
|
|
|
- };
|
|
|
+ const setBanners = async () => {
|
|
|
+ const bannersData = await getBanners(localStorage.token);
|
|
|
+ banners.set(bannersData);
|
|
|
+ };
|
|
|
+
|
|
|
+ const setTools = async () => {
|
|
|
+ const toolsData = await getTools(localStorage.token);
|
|
|
+ tools.set(toolsData);
|
|
|
+ };
|
|
|
+
|
|
|
+ onMount(async () => {
|
|
|
+ if ($user === undefined || $user === null) {
|
|
|
+ await goto('/auth');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!['user', 'admin'].includes($user?.role)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- // Parallel loading
|
|
|
+ clearChatInputStorage();
|
|
|
await Promise.all([
|
|
|
- loadChatsFromDB(),
|
|
|
- loadBanners(),
|
|
|
- loadTools(),
|
|
|
- loadUserSettings().then((loadedSettings) => {
|
|
|
- settings.set(loadedSettings);
|
|
|
- // The following functions are dependent on the settings
|
|
|
- return Promise.all([loadModels(), loadToolServers()]);
|
|
|
+ checkLocalDBChats(),
|
|
|
+ setBanners(),
|
|
|
+ setTools(),
|
|
|
+ setUserSettings(async () => {
|
|
|
+ await Promise.all([setModels(), setToolServers()]);
|
|
|
})
|
|
|
]);
|
|
|
|