forked from open-webui/open-webui
chore: version check refac
This commit is contained in:
parent
cc49e0d10f
commit
b777b6d2aa
5 changed files with 56 additions and 35 deletions
|
@ -32,7 +32,7 @@ export const getOllamaVersion = async (
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res?.version ?? '0';
|
return res?.version ?? '';
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getOllamaModels = async (
|
export const getOllamaModels = async (
|
||||||
|
|
|
@ -9,10 +9,11 @@
|
||||||
} from '$lib/constants';
|
} from '$lib/constants';
|
||||||
import toast from 'svelte-french-toast';
|
import toast from 'svelte-french-toast';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { config, info, models, settings, user } from '$lib/stores';
|
import { config, models, settings, user } from '$lib/stores';
|
||||||
import { splitStream, getGravatarURL } from '$lib/utils';
|
import { splitStream, getGravatarURL } from '$lib/utils';
|
||||||
import Advanced from './Settings/Advanced.svelte';
|
import Advanced from './Settings/Advanced.svelte';
|
||||||
import { stringify } from 'postcss';
|
import { stringify } from 'postcss';
|
||||||
|
import { getOllamaVersion } from '$lib/apis/ollama';
|
||||||
|
|
||||||
export let show = false;
|
export let show = false;
|
||||||
|
|
||||||
|
@ -79,6 +80,9 @@
|
||||||
let authType = 'Basic';
|
let authType = 'Basic';
|
||||||
let authContent = '';
|
let authContent = '';
|
||||||
|
|
||||||
|
// About
|
||||||
|
let ollamaVersion = '';
|
||||||
|
|
||||||
const checkOllamaConnection = async () => {
|
const checkOllamaConnection = async () => {
|
||||||
if (API_BASE_URL === '') {
|
if (API_BASE_URL === '') {
|
||||||
API_BASE_URL = OLLAMA_API_BASE_URL;
|
API_BASE_URL = OLLAMA_API_BASE_URL;
|
||||||
|
@ -553,7 +557,7 @@
|
||||||
return models;
|
return models;
|
||||||
};
|
};
|
||||||
|
|
||||||
onMount(() => {
|
onMount(async () => {
|
||||||
let settings = JSON.parse(localStorage.getItem('settings') ?? '{}');
|
let settings = JSON.parse(localStorage.getItem('settings') ?? '{}');
|
||||||
console.log(settings);
|
console.log(settings);
|
||||||
|
|
||||||
|
@ -586,6 +590,13 @@
|
||||||
authType = settings.authHeader.split(' ')[0];
|
authType = settings.authHeader.split(' ')[0];
|
||||||
authContent = settings.authHeader.split(' ')[1];
|
authContent = settings.authHeader.split(' ')[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ollamaVersion = await getOllamaVersion(
|
||||||
|
API_BASE_URL ?? OLLAMA_API_BASE_URL,
|
||||||
|
localStorage.token
|
||||||
|
).catch((error) => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1607,7 +1618,7 @@
|
||||||
<div class=" mb-2.5 text-sm font-medium">Ollama Version</div>
|
<div class=" mb-2.5 text-sm font-medium">Ollama Version</div>
|
||||||
<div class="flex w-full">
|
<div class="flex w-full">
|
||||||
<div class="flex-1 text-xs text-gray-700 dark:text-gray-200">
|
<div class="flex-1 text-xs text-gray-700 dark:text-gray-200">
|
||||||
{$info?.ollama?.version ?? 'N/A'}
|
{ollamaVersion ?? 'N/A'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { writable } from 'svelte/store';
|
import { writable } from 'svelte/store';
|
||||||
|
|
||||||
// Backend
|
// Backend
|
||||||
export const info = writable({});
|
|
||||||
export const config = writable(undefined);
|
export const config = writable(undefined);
|
||||||
export const user = writable(undefined);
|
export const user = writable(undefined);
|
||||||
|
|
||||||
|
|
|
@ -100,3 +100,13 @@ export const copyToClipboard = (text) => {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const checkVersion = (required, current) => {
|
||||||
|
return (
|
||||||
|
current.localeCompare(required, undefined, {
|
||||||
|
numeric: true,
|
||||||
|
sensitivity: 'case',
|
||||||
|
caseFirst: 'upper'
|
||||||
|
}) < 0
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
|
@ -1,24 +1,31 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import toast from 'svelte-french-toast';
|
||||||
import { onMount, tick } from 'svelte';
|
import { onMount, tick } from 'svelte';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
import toast from 'svelte-french-toast';
|
|
||||||
|
|
||||||
import { info, user, showSettings, settings, models, modelfiles } from '$lib/stores';
|
|
||||||
|
|
||||||
import { OLLAMA_API_BASE_URL, REQUIRED_OLLAMA_VERSION, WEBUI_API_BASE_URL } from '$lib/constants';
|
|
||||||
import { getOllamaModels, getOllamaVersion } from '$lib/apis/ollama';
|
import { getOllamaModels, getOllamaVersion } from '$lib/apis/ollama';
|
||||||
import { getOpenAIModels } from '$lib/apis/openai';
|
import { getOpenAIModels } from '$lib/apis/openai';
|
||||||
|
|
||||||
|
import { user, showSettings, settings, models, modelfiles } from '$lib/stores';
|
||||||
|
import { OLLAMA_API_BASE_URL, REQUIRED_OLLAMA_VERSION, WEBUI_API_BASE_URL } from '$lib/constants';
|
||||||
|
|
||||||
import SettingsModal from '$lib/components/chat/SettingsModal.svelte';
|
import SettingsModal from '$lib/components/chat/SettingsModal.svelte';
|
||||||
import Sidebar from '$lib/components/layout/Sidebar.svelte';
|
import Sidebar from '$lib/components/layout/Sidebar.svelte';
|
||||||
|
import { checkVersion } from '$lib/utils';
|
||||||
|
|
||||||
|
let ollamaVersion = '';
|
||||||
let loaded = false;
|
let loaded = false;
|
||||||
|
|
||||||
const getModels = async () => {
|
const getModels = async () => {
|
||||||
let models = [];
|
let models = [];
|
||||||
models.push(
|
models.push(
|
||||||
...(await getOllamaModels($settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL, localStorage.token))
|
...(await getOllamaModels(
|
||||||
|
$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL,
|
||||||
|
localStorage.token
|
||||||
|
).catch((error) => {
|
||||||
|
toast.error(error);
|
||||||
|
return [];
|
||||||
|
}))
|
||||||
);
|
);
|
||||||
// If OpenAI API Key exists
|
// If OpenAI API Key exists
|
||||||
if ($settings.OPENAI_API_KEY) {
|
if ($settings.OPENAI_API_KEY) {
|
||||||
|
@ -42,42 +49,36 @@
|
||||||
$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL,
|
$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL,
|
||||||
localStorage.token
|
localStorage.token
|
||||||
).catch((error) => {
|
).catch((error) => {
|
||||||
return '0';
|
return '';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
await info.set({ ...$info, ollama: { version: version } });
|
|
||||||
|
|
||||||
if (
|
ollamaVersion = version;
|
||||||
version.localeCompare(REQUIRED_OLLAMA_VERSION, undefined, {
|
|
||||||
numeric: true,
|
console.log(ollamaVersion);
|
||||||
sensitivity: 'case',
|
if (checkVersion(REQUIRED_OLLAMA_VERSION, ollamaVersion)) {
|
||||||
caseFirst: 'upper'
|
toast.error(`Ollama Version: ${ollamaVersion !== '' ? ollamaVersion : 'Not Detected'}`);
|
||||||
}) < 0
|
|
||||||
) {
|
|
||||||
toast.error(`Ollama Version: ${version}`);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
if ($user === undefined) {
|
if ($user === undefined) {
|
||||||
await goto('/auth');
|
await goto('/auth');
|
||||||
|
} else if (['user', 'admin'].includes($user.role)) {
|
||||||
|
await settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
|
||||||
|
await models.set(await getModels());
|
||||||
|
|
||||||
|
await modelfiles.set(JSON.parse(localStorage.getItem('modelfiles') ?? '[]'));
|
||||||
|
modelfiles.subscribe(async () => {
|
||||||
|
// should fetch models
|
||||||
|
});
|
||||||
|
|
||||||
|
await setOllamaVersion();
|
||||||
|
await tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
await settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
|
|
||||||
await models.set(await getModels());
|
|
||||||
await modelfiles.set(JSON.parse(localStorage.getItem('modelfiles') ?? '[]'));
|
|
||||||
|
|
||||||
modelfiles.subscribe(async () => {
|
|
||||||
// should fetch models
|
|
||||||
});
|
|
||||||
|
|
||||||
await setOllamaVersion();
|
|
||||||
|
|
||||||
await tick();
|
|
||||||
loaded = true;
|
loaded = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
let child;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if loaded}
|
{#if loaded}
|
||||||
|
@ -121,7 +122,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else if ($info?.ollama?.version ?? '0').localeCompare( REQUIRED_OLLAMA_VERSION, undefined, { numeric: true, sensitivity: 'case', caseFirst: 'upper' } ) < 0}
|
{:else if checkVersion(REQUIRED_OLLAMA_VERSION, ollamaVersion ?? '0')}
|
||||||
<div class="absolute w-full h-full flex z-50">
|
<div class="absolute w-full h-full flex z-50">
|
||||||
<div
|
<div
|
||||||
class="absolute rounded-xl w-full h-full backdrop-blur bg-gray-900/60 flex justify-center"
|
class="absolute rounded-xl w-full h-full backdrop-blur bg-gray-900/60 flex justify-center"
|
||||||
|
|
Loading…
Reference in a new issue