From 0996f3c2161886ef385425f67deabe8e3c7a6c63 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 26 Dec 2023 11:32:22 -0800 Subject: [PATCH] chore: layout refac --- src/lib/apis/auths/index.ts | 39 +++++++++++++++++++++++----- src/lib/apis/index.ts | 30 +++++++-------------- src/lib/apis/ollama/index.ts | 16 ++++++------ src/lib/apis/openai/index.ts | 35 +++++++++++++++++++++++++ src/lib/apis/users/index.ts | 6 ++--- src/routes/(app)/+layout.svelte | 2 +- src/routes/+layout.svelte | 46 +++++++++------------------------ 7 files changed, 101 insertions(+), 73 deletions(-) create mode 100644 src/lib/apis/openai/index.ts diff --git a/src/lib/apis/auths/index.ts b/src/lib/apis/auths/index.ts index 5da98e620..41c397f9b 100644 --- a/src/lib/apis/auths/index.ts +++ b/src/lib/apis/auths/index.ts @@ -1,5 +1,32 @@ import { WEBUI_API_BASE_URL } from '$lib/constants'; +export const getSessionUser = async (token: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/auths`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .catch((err) => { + console.log(err); + error = err.detail; + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + export const userSignIn = async (email: string, password: string) => { let error = null; @@ -17,10 +44,10 @@ export const userSignIn = async (email: string, password: string) => { if (!res.ok) throw await res.json(); return res.json(); }) - .catch((error) => { - console.log(error); + .catch((err) => { + console.log(err); - error = error.detail; + error = err.detail; return null; }); @@ -49,9 +76,9 @@ export const userSignUp = async (name: string, email: string, password: string) if (!res.ok) throw await res.json(); return res.json(); }) - .catch((error) => { - console.log(error); - error = error.detail; + .catch((err) => { + console.log(err); + error = err.detail; return null; }); diff --git a/src/lib/apis/index.ts b/src/lib/apis/index.ts index 6b6f96316..915121661 100644 --- a/src/lib/apis/index.ts +++ b/src/lib/apis/index.ts @@ -1,35 +1,23 @@ -export const getOpenAIModels = async ( - base_url: string = 'https://api.openai.com/v1', - api_key: string = '' -) => { +import { WEBUI_API_BASE_URL } from '$lib/constants'; + +export const getBackendConfig = async () => { let error = null; - const res = await fetch(`${base_url}/models`, { + const res = await fetch(`${WEBUI_API_BASE_URL}/`, { method: 'GET', headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${api_key}` + 'Content-Type': 'application/json' } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) - .catch((error) => { - console.log(error); - error = `OpenAI: ${error?.error?.message ?? 'Network Problem'}`; + .catch((err) => { + console.log(err); + error = err; return null; }); - if (error) { - throw error; - } - - let models = Array.isArray(res) ? res : res?.data ?? null; - - console.log(models); - - return models - .map((model) => ({ name: model.id, external: true })) - .filter((model) => (base_url.includes('openai') ? model.name.includes('gpt') : true)); + return res; }; diff --git a/src/lib/apis/ollama/index.ts b/src/lib/apis/ollama/index.ts index 67adcdf6c..268806fdb 100644 --- a/src/lib/apis/ollama/index.ts +++ b/src/lib/apis/ollama/index.ts @@ -18,10 +18,10 @@ export const getOllamaVersion = async ( if (!res.ok) throw await res.json(); return res.json(); }) - .catch((error) => { - console.log(error); - if ('detail' in error) { - error = error.detail; + .catch((err) => { + console.log(err); + if ('detail' in err) { + error = err.detail; } else { error = 'Server connection failed'; } @@ -53,10 +53,10 @@ export const getOllamaModels = async ( if (!res.ok) throw await res.json(); return res.json(); }) - .catch((error) => { - console.log(error); - if ('detail' in error) { - error = error.detail; + .catch((err) => { + console.log(err); + if ('detail' in err) { + error = err.detail; } else { error = 'Server connection failed'; } diff --git a/src/lib/apis/openai/index.ts b/src/lib/apis/openai/index.ts new file mode 100644 index 000000000..8a2e97677 --- /dev/null +++ b/src/lib/apis/openai/index.ts @@ -0,0 +1,35 @@ +export const getOpenAIModels = async ( + base_url: string = 'https://api.openai.com/v1', + api_key: string = '' +) => { + let error = null; + + const res = await fetch(`${base_url}/models`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${api_key}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .catch((err) => { + console.log(err); + error = `OpenAI: ${err?.error?.message ?? 'Network Problem'}`; + return null; + }); + + if (error) { + throw error; + } + + let models = Array.isArray(res) ? res : res?.data ?? null; + + console.log(models); + + return models + .map((model) => ({ name: model.id, external: true })) + .filter((model) => (base_url.includes('openai') ? model.name.includes('gpt') : true)); +}; diff --git a/src/lib/apis/users/index.ts b/src/lib/apis/users/index.ts index 201880ca6..5939d39df 100644 --- a/src/lib/apis/users/index.ts +++ b/src/lib/apis/users/index.ts @@ -18,9 +18,9 @@ export const updateUserRole = async (token: string, id: string, role: string) => if (!res.ok) throw await res.json(); return res.json(); }) - .catch((error) => { - console.log(error); - error = error.detail; + .catch((err) => { + console.log(err); + error = err.detail; return null; }); diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 991fd810b..a3c0095e5 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -22,7 +22,7 @@ import toast from 'svelte-french-toast'; import { OLLAMA_API_BASE_URL, WEBUI_API_BASE_URL } from '$lib/constants'; import { getOllamaModels, getOllamaVersion } from '$lib/apis/ollama'; - import { getOpenAIModels } from '$lib/apis'; + import { getOpenAIModels } from '$lib/apis/openai'; import { createNewChat, deleteChatById, diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index e19d5f373..f77527120 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,54 +2,32 @@ import { onMount, tick } from 'svelte'; import { config, user } from '$lib/stores'; import { goto } from '$app/navigation'; - import { WEBUI_API_BASE_URL } from '$lib/constants'; import toast, { Toaster } from 'svelte-french-toast'; + import { getBackendConfig } from '$lib/apis'; + import { getSessionUser } from '$lib/apis/auths'; + import '../app.css'; import '../tailwind.css'; import 'tippy.js/dist/tippy.css'; + let loaded = false; onMount(async () => { // Check Backend Status - const res = await fetch(`${WEBUI_API_BASE_URL}/`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json' - } - }) - .then(async (res) => { - if (!res.ok) throw await res.json(); - return res.json(); - }) - .catch((error) => { - console.log(error); - return null; - }); + const backendConfig = await getBackendConfig(); - if (res) { - await config.set(res); - console.log(res); + if (backendConfig) { + await config.set(backendConfig); + console.log(backendConfig); if ($config) { if (localStorage.token) { // Get Session User Info - const sessionUser = await fetch(`${WEBUI_API_BASE_URL}/auths`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${localStorage.token}` - } - }) - .then(async (res) => { - if (!res.ok) throw await res.json(); - return res.json(); - }) - .catch((error) => { - console.log(error); - toast.error(error.detail); - return null; - }); + const sessionUser = await getSessionUser(localStorage.token).catch((error) => { + toast.error(error); + return null; + }); if (sessionUser) { await user.set(sessionUser);