diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index 01e127074..1c2bea683 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -219,6 +219,8 @@ async def get_ollama_tags( return models else: url = app.state.config.OLLAMA_BASE_URLS[url_idx] + + r = None try: r = requests.request(method="GET", url=f"{url}/api/tags") r.raise_for_status() @@ -270,6 +272,8 @@ async def get_ollama_versions(url_idx: Optional[int] = None): ) else: url = app.state.config.OLLAMA_BASE_URLS[url_idx] + + r = None try: r = requests.request(method="GET", url=f"{url}/api/version") r.raise_for_status() diff --git a/backend/apps/openai/main.py b/backend/apps/openai/main.py index e19e0bbcf..74e516714 100644 --- a/backend/apps/openai/main.py +++ b/backend/apps/openai/main.py @@ -407,9 +407,6 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)): target_url = f"{url}/{path}" - if key == "": - raise HTTPException(status_code=401, detail=ERROR_MESSAGES.API_KEY_NOT_FOUND) - headers = {} headers["Authorization"] = f"Bearer {key}" headers["Content-Type"] = "application/json" diff --git a/src/lib/apis/ollama/index.ts b/src/lib/apis/ollama/index.ts index efc3f0d0f..7bd0ed20a 100644 --- a/src/lib/apis/ollama/index.ts +++ b/src/lib/apis/ollama/index.ts @@ -135,10 +135,10 @@ export const updateOllamaUrls = async (token: string = '', urls: string[]) => { return res.OLLAMA_BASE_URLS; }; -export const getOllamaVersion = async (token: string = '') => { +export const getOllamaVersion = async (token: string, urlIdx?: number) => { let error = null; - const res = await fetch(`${OLLAMA_API_BASE_URL}/api/version`, { + const res = await fetch(`${OLLAMA_API_BASE_URL}/api/version${urlIdx ? `/${urlIdx}` : ''}`, { method: 'GET', headers: { Accept: 'application/json', diff --git a/src/lib/apis/openai/index.ts b/src/lib/apis/openai/index.ts index 22c458d30..04d3c4d62 100644 --- a/src/lib/apis/openai/index.ts +++ b/src/lib/apis/openai/index.ts @@ -203,10 +203,10 @@ export const updateOpenAIKeys = async (token: string = '', keys: string[]) => { return res.OPENAI_API_KEYS; }; -export const getOpenAIModels = async (token: string = '') => { +export const getOpenAIModels = async (token: string, urlIdx?: number) => { let error = null; - const res = await fetch(`${OPENAI_API_BASE_URL}/models`, { + const res = await fetch(`${OPENAI_API_BASE_URL}/models${urlIdx ? `/${urlIdx}` : ''}`, { method: 'GET', headers: { Accept: 'application/json', @@ -227,20 +227,7 @@ export const getOpenAIModels = async (token: string = '') => { throw error; } - const models = Array.isArray(res) ? res : res?.data ?? null; - - return models - ? models - .map((model) => ({ - id: model.id, - name: model.name ?? model.id, - external: true, - custom_info: model.custom_info - })) - .sort((a, b) => { - return a.name.localeCompare(b.name); - }) - : models; + return res; }; export const getOpenAIModelsDirect = async ( diff --git a/src/lib/components/chat/Settings/Connections.svelte b/src/lib/components/chat/Settings/Connections.svelte index e9a482ca9..85237c7a8 100644 --- a/src/lib/components/chat/Settings/Connections.svelte +++ b/src/lib/components/chat/Settings/Connections.svelte @@ -13,6 +13,7 @@ import { getOpenAIConfig, getOpenAIKeys, + getOpenAIModels, getOpenAIUrls, updateOpenAIConfig, updateOpenAIKeys, @@ -21,6 +22,7 @@ import { toast } from 'svelte-sonner'; import Switch from '$lib/components/common/Switch.svelte'; import Spinner from '$lib/components/common/Spinner.svelte'; + import Tooltip from '$lib/components/common/Tooltip.svelte'; const i18n = getContext('i18n'); @@ -35,6 +37,34 @@ let ENABLE_OPENAI_API = null; let ENABLE_OLLAMA_API = null; + const verifyOpenAIHandler = async (idx) => { + OPENAI_API_BASE_URLS = await updateOpenAIUrls(localStorage.token, OPENAI_API_BASE_URLS); + OPENAI_API_KEYS = await updateOpenAIKeys(localStorage.token, OPENAI_API_KEYS); + + const res = await getOpenAIModels(localStorage.token, idx).catch((error) => { + toast.error(error); + return null; + }); + + if (res) { + toast.success($i18n.t('Server connection verified')); + console.log(res); + } + }; + + const verifyOllamaHandler = async (idx) => { + OLLAMA_BASE_URLS = await updateOllamaUrls(localStorage.token, OLLAMA_BASE_URLS); + + const res = await getOllamaVersion(localStorage.token, idx).catch((error) => { + toast.error(error); + return null; + }); + + if (res) { + toast.success($i18n.t('Server connection verified')); + } + }; + const updateOpenAIHandler = async () => { OPENAI_API_BASE_URLS = await updateOpenAIUrls(localStorage.token, OPENAI_API_BASE_URLS); OPENAI_API_KEYS = await updateOpenAIKeys(localStorage.token, OPENAI_API_KEYS); @@ -83,6 +113,8 @@ class="flex flex-col h-full justify-between text-sm" on:submit|preventDefault={() => { updateOpenAIHandler(); + updateOllamaUrlsHandler(); + dispatch('save'); }} > @@ -167,6 +199,31 @@ {/if} + +
+ + + +
{$i18n.t('WebUI will make requests to')} @@ -245,32 +302,34 @@ {/if}
+ +
+ + + +
{/each} - -
- -