forked from open-webui/open-webui
		
	fix: model list update
This commit is contained in:
		
							parent
							
								
									2342c5036b
								
							
						
					
					
						commit
						e366d1137f
					
				
					 3 changed files with 44 additions and 48 deletions
				
			
		|  | @ -4,7 +4,7 @@ | ||||||
| 	import { WEB_UI_VERSION, OLLAMA_API_BASE_URL as BUILD_TIME_API_BASE_URL } from '$lib/constants'; | 	import { WEB_UI_VERSION, OLLAMA_API_BASE_URL as BUILD_TIME_API_BASE_URL } 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, 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'; | ||||||
| 
 | 
 | ||||||
| 	export let show = false; | 	export let show = false; | ||||||
|  | @ -50,7 +50,7 @@ | ||||||
| 		if (API_BASE_URL === '') { | 		if (API_BASE_URL === '') { | ||||||
| 			API_BASE_URL = BUILD_TIME_API_BASE_URL; | 			API_BASE_URL = BUILD_TIME_API_BASE_URL; | ||||||
| 		} | 		} | ||||||
| 		const res = await getModelTags(API_BASE_URL, 'ollama'); | 		const res = await getModels(API_BASE_URL, 'ollama'); | ||||||
| 
 | 
 | ||||||
| 		if (res) { | 		if (res) { | ||||||
| 			toast.success('Server connection verified'); | 			toast.success('Server connection verified'); | ||||||
|  | @ -97,6 +97,7 @@ | ||||||
| 			method: 'POST', | 			method: 'POST', | ||||||
| 			headers: { | 			headers: { | ||||||
| 				'Content-Type': 'text/event-stream', | 				'Content-Type': 'text/event-stream', | ||||||
|  | 				...($settings.authHeader && { Authorization: $settings.authHeader }), | ||||||
| 				...($user && { Authorization: `Bearer ${localStorage.token}` }) | 				...($user && { Authorization: `Bearer ${localStorage.token}` }) | ||||||
| 			}, | 			}, | ||||||
| 			body: JSON.stringify({ | 			body: JSON.stringify({ | ||||||
|  | @ -150,7 +151,7 @@ | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		modelTag = ''; | 		modelTag = ''; | ||||||
| 		await getModelTags(); | 		models.set(await getModels()); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	const deleteModelHandler = async () => { | 	const deleteModelHandler = async () => { | ||||||
|  | @ -158,6 +159,7 @@ | ||||||
| 			method: 'DELETE', | 			method: 'DELETE', | ||||||
| 			headers: { | 			headers: { | ||||||
| 				'Content-Type': 'text/event-stream', | 				'Content-Type': 'text/event-stream', | ||||||
|  | 				...($settings.authHeader && { Authorization: $settings.authHeader }), | ||||||
| 				...($user && { Authorization: `Bearer ${localStorage.token}` }) | 				...($user && { Authorization: `Bearer ${localStorage.token}` }) | ||||||
| 			}, | 			}, | ||||||
| 			body: JSON.stringify({ | 			body: JSON.stringify({ | ||||||
|  | @ -203,7 +205,7 @@ | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		deleteModelTag = ''; | 		deleteModelTag = ''; | ||||||
| 		await getModelTags(); | 		models.set(await getModels()); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	$: if (show) { | 	$: if (show) { | ||||||
|  | @ -226,14 +228,14 @@ | ||||||
| 		OPENAI_API_KEY = settings.OPENAI_API_KEY ?? ''; | 		OPENAI_API_KEY = settings.OPENAI_API_KEY ?? ''; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	const getModelTags = async (url = null, type = 'all') => { | 	const getModels = async (url = '', type = 'all') => { | ||||||
| 		let models = []; | 		let models = []; | ||||||
| 		const res = await fetch(`${url === null ? API_BASE_URL : url}/tags`, { | 		const res = await fetch(`${url ? url : $settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/tags`, { | ||||||
| 			method: 'GET', | 			method: 'GET', | ||||||
| 			headers: { | 			headers: { | ||||||
| 				Accept: 'application/json', | 				Accept: 'application/json', | ||||||
| 				'Content-Type': 'application/json', | 				'Content-Type': 'application/json', | ||||||
| 				...(settings.authHeader && { Authorization: settings.authHeader }), | 				...($settings.authHeader && { Authorization: $settings.authHeader }), | ||||||
| 				...($user && { Authorization: `Bearer ${localStorage.token}` }) | 				...($user && { Authorization: `Bearer ${localStorage.token}` }) | ||||||
| 			} | 			} | ||||||
| 		}) | 		}) | ||||||
|  | @ -250,50 +252,44 @@ | ||||||
| 				} | 				} | ||||||
| 				return null; | 				return null; | ||||||
| 			}); | 			}); | ||||||
| 
 |  | ||||||
| 		console.log(res); | 		console.log(res); | ||||||
|  | 		models.push(...(res?.models ?? [])); | ||||||
| 
 | 
 | ||||||
| 		if (type === 'all') { | 		// If OpenAI API Key exists | ||||||
| 			if (settings.OPENAI_API_KEY) { | 		if (type === 'all' && $settings.OPENAI_API_KEY) { | ||||||
| 				// Validate OPENAI_API_KEY | 			// Validate OPENAI_API_KEY | ||||||
| 				const openaiModelRes = await fetch(`https://api.openai.com/v1/models`, { | 			const openaiModelRes = await fetch(`https://api.openai.com/v1/models`, { | ||||||
| 					method: 'GET', | 				method: 'GET', | ||||||
| 					headers: { | 				headers: { | ||||||
| 						'Content-Type': 'application/json', | 					'Content-Type': 'application/json', | ||||||
| 						Authorization: `Bearer ${settings.OPENAI_API_KEY}` | 					Authorization: `Bearer ${$settings.OPENAI_API_KEY}` | ||||||
| 					} |  | ||||||
| 				}) |  | ||||||
| 					.then(async (res) => { |  | ||||||
| 						if (!res.ok) throw await res.json(); |  | ||||||
| 						return res.json(); |  | ||||||
| 					}) |  | ||||||
| 					.catch((error) => { |  | ||||||
| 						console.log(error); |  | ||||||
| 						toast.error(`OpenAI: ${error?.error?.message ?? 'Network Problem'}`); |  | ||||||
| 						return null; |  | ||||||
| 					}); |  | ||||||
| 				const openaiModels = openaiModelRes?.data ?? null; |  | ||||||
| 
 |  | ||||||
| 				if (openaiModels) { |  | ||||||
| 					models = [ |  | ||||||
| 						...(res?.models ?? []), |  | ||||||
| 						{ name: 'hr' }, |  | ||||||
| 
 |  | ||||||
| 						...openaiModels |  | ||||||
| 							.map((model) => ({ name: model.id, label: 'OpenAI' })) |  | ||||||
| 							.filter((model) => model.name.includes('gpt')) |  | ||||||
| 					]; |  | ||||||
| 				} else { |  | ||||||
| 					models = res?.models ?? []; |  | ||||||
| 				} | 				} | ||||||
| 			} else { | 			}) | ||||||
| 				models = res?.models ?? []; | 				.then(async (res) => { | ||||||
| 			} | 					if (!res.ok) throw await res.json(); | ||||||
|  | 					return res.json(); | ||||||
|  | 				}) | ||||||
|  | 				.catch((error) => { | ||||||
|  | 					console.log(error); | ||||||
|  | 					toast.error(`OpenAI: ${error?.error?.message ?? 'Network Problem'}`); | ||||||
|  | 					return null; | ||||||
|  | 				}); | ||||||
| 
 | 
 | ||||||
| 			return models; | 			const openAIModels = openaiModelRes?.data ?? null; | ||||||
| 		} else { | 
 | ||||||
| 			return res?.models ?? null; | 			models.push( | ||||||
|  | 				...(openAIModels | ||||||
|  | 					? [ | ||||||
|  | 							{ name: 'hr' }, | ||||||
|  | 							...openAIModels | ||||||
|  | 								.map((model) => ({ name: model.id, label: 'OpenAI' })) | ||||||
|  | 								.filter((model) => model.name.includes('gpt')) | ||||||
|  | 					  ] | ||||||
|  | 					: []) | ||||||
|  | 			); | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		return models; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	onMount(() => { | 	onMount(() => { | ||||||
|  |  | ||||||
|  | @ -93,6 +93,8 @@ | ||||||
| 			await goto('/auth'); | 			await goto('/auth'); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		await settings.set(JSON.parse(localStorage.getItem('settings') ?? JSON.stringify($settings))); | ||||||
|  | 
 | ||||||
| 		let _models = await getModels(); | 		let _models = await getModels(); | ||||||
| 		await models.set(_models); | 		await models.set(_models); | ||||||
| 		let _db = await getDB(); | 		let _db = await getDB(); | ||||||
|  |  | ||||||
|  | @ -62,8 +62,6 @@ | ||||||
| 			messages: {}, | 			messages: {}, | ||||||
| 			currentId: null | 			currentId: null | ||||||
| 		}; | 		}; | ||||||
| 
 |  | ||||||
| 		await settings.set(JSON.parse(localStorage.getItem('settings') ?? JSON.stringify($settings))); |  | ||||||
| 		selectedModels = $settings.models ?? ['']; | 		selectedModels = $settings.models ?? ['']; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy J. Baek
						Timothy J. Baek