chore: version check refac

This commit is contained in:
Timothy J. Baek 2023-12-26 13:10:50 -08:00
parent cc49e0d10f
commit b777b6d2aa
5 changed files with 56 additions and 35 deletions

View file

@ -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 (

View file

@ -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>

View file

@ -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);

View file

@ -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
);
};

View file

@ -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 settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
await models.set(await getModels()); await models.set(await getModels());
await modelfiles.set(JSON.parse(localStorage.getItem('modelfiles') ?? '[]'));
await modelfiles.set(JSON.parse(localStorage.getItem('modelfiles') ?? '[]'));
modelfiles.subscribe(async () => { modelfiles.subscribe(async () => {
// should fetch models // should fetch models
}); });
await setOllamaVersion(); await setOllamaVersion();
await tick(); 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"