forked from open-webui/open-webui
		
	feat: enable api_base_url edit from ui
This commit is contained in:
		
							parent
							
								
									00b5b38ac9
								
							
						
					
					
						commit
						b6a780e7c7
					
				
					 5 changed files with 167 additions and 28 deletions
				
			
		
							
								
								
									
										77
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										77
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -21,6 +21,7 @@ | ||||||
| 				"@sveltejs/adapter-auto": "^2.0.0", | 				"@sveltejs/adapter-auto": "^2.0.0", | ||||||
| 				"@sveltejs/adapter-static": "^2.0.3", | 				"@sveltejs/adapter-static": "^2.0.3", | ||||||
| 				"@sveltejs/kit": "^1.20.4", | 				"@sveltejs/kit": "^1.20.4", | ||||||
|  | 				"@tailwindcss/typography": "^0.5.10", | ||||||
| 				"@typescript-eslint/eslint-plugin": "^6.0.0", | 				"@typescript-eslint/eslint-plugin": "^6.0.0", | ||||||
| 				"@typescript-eslint/parser": "^6.0.0", | 				"@typescript-eslint/parser": "^6.0.0", | ||||||
| 				"autoprefixer": "^10.4.16", | 				"autoprefixer": "^10.4.16", | ||||||
|  | @ -838,6 +839,34 @@ | ||||||
| 				"vite": "^4.0.0" | 				"vite": "^4.0.0" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/@tailwindcss/typography": { | ||||||
|  | 			"version": "0.5.10", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", | ||||||
|  | 			"integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", | ||||||
|  | 			"dev": true, | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"lodash.castarray": "^4.4.0", | ||||||
|  | 				"lodash.isplainobject": "^4.0.6", | ||||||
|  | 				"lodash.merge": "^4.6.2", | ||||||
|  | 				"postcss-selector-parser": "6.0.10" | ||||||
|  | 			}, | ||||||
|  | 			"peerDependencies": { | ||||||
|  | 				"tailwindcss": ">=3.0.0 || insiders" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { | ||||||
|  | 			"version": "6.0.10", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", | ||||||
|  | 			"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", | ||||||
|  | 			"dev": true, | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"cssesc": "^3.0.0", | ||||||
|  | 				"util-deprecate": "^1.0.2" | ||||||
|  | 			}, | ||||||
|  | 			"engines": { | ||||||
|  | 				"node": ">=4" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/@types/cookie": { | 		"node_modules/@types/cookie": { | ||||||
| 			"version": "0.5.2", | 			"version": "0.5.2", | ||||||
| 			"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.2.tgz", | 			"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.2.tgz", | ||||||
|  | @ -2603,6 +2632,18 @@ | ||||||
| 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | ||||||
| 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/lodash.castarray": { | ||||||
|  | 			"version": "4.4.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", | ||||||
|  | 			"integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", | ||||||
|  | 			"dev": true | ||||||
|  | 		}, | ||||||
|  | 		"node_modules/lodash.isplainobject": { | ||||||
|  | 			"version": "4.0.6", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", | ||||||
|  | 			"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", | ||||||
|  | 			"dev": true | ||||||
|  | 		}, | ||||||
| 		"node_modules/lodash.merge": { | 		"node_modules/lodash.merge": { | ||||||
| 			"version": "4.6.2", | 			"version": "4.6.2", | ||||||
| 			"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", | 			"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", | ||||||
|  | @ -4670,6 +4711,30 @@ | ||||||
| 				"debug": "^4.3.4" | 				"debug": "^4.3.4" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"@tailwindcss/typography": { | ||||||
|  | 			"version": "0.5.10", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", | ||||||
|  | 			"integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", | ||||||
|  | 			"dev": true, | ||||||
|  | 			"requires": { | ||||||
|  | 				"lodash.castarray": "^4.4.0", | ||||||
|  | 				"lodash.isplainobject": "^4.0.6", | ||||||
|  | 				"lodash.merge": "^4.6.2", | ||||||
|  | 				"postcss-selector-parser": "6.0.10" | ||||||
|  | 			}, | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"postcss-selector-parser": { | ||||||
|  | 					"version": "6.0.10", | ||||||
|  | 					"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", | ||||||
|  | 					"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", | ||||||
|  | 					"dev": true, | ||||||
|  | 					"requires": { | ||||||
|  | 						"cssesc": "^3.0.0", | ||||||
|  | 						"util-deprecate": "^1.0.2" | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"@types/cookie": { | 		"@types/cookie": { | ||||||
| 			"version": "0.5.2", | 			"version": "0.5.2", | ||||||
| 			"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.2.tgz", | 			"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.2.tgz", | ||||||
|  | @ -5909,6 +5974,18 @@ | ||||||
| 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | ||||||
| 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | ||||||
| 		}, | 		}, | ||||||
|  | 		"lodash.castarray": { | ||||||
|  | 			"version": "4.4.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", | ||||||
|  | 			"integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", | ||||||
|  | 			"dev": true | ||||||
|  | 		}, | ||||||
|  | 		"lodash.isplainobject": { | ||||||
|  | 			"version": "4.0.6", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", | ||||||
|  | 			"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", | ||||||
|  | 			"dev": true | ||||||
|  | 		}, | ||||||
| 		"lodash.merge": { | 		"lodash.merge": { | ||||||
| 			"version": "4.6.2", | 			"version": "4.6.2", | ||||||
| 			"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", | 			"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", | ||||||
|  |  | ||||||
|  | @ -20,6 +20,7 @@ | ||||||
| 		"@sveltejs/adapter-auto": "^2.0.0", | 		"@sveltejs/adapter-auto": "^2.0.0", | ||||||
| 		"@sveltejs/adapter-static": "^2.0.3", | 		"@sveltejs/adapter-static": "^2.0.3", | ||||||
| 		"@sveltejs/kit": "^1.20.4", | 		"@sveltejs/kit": "^1.20.4", | ||||||
|  | 		"@tailwindcss/typography": "^0.5.10", | ||||||
| 		"@typescript-eslint/eslint-plugin": "^6.0.0", | 		"@typescript-eslint/eslint-plugin": "^6.0.0", | ||||||
| 		"@typescript-eslint/parser": "^6.0.0", | 		"@typescript-eslint/parser": "^6.0.0", | ||||||
| 		"autoprefixer": "^10.4.16", | 		"autoprefixer": "^10.4.16", | ||||||
|  |  | ||||||
|  | @ -1,13 +1,14 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| 	import Modal from '../common/Modal.svelte'; | 	import Modal from '../common/Modal.svelte'; | ||||||
| 
 | 
 | ||||||
| 	import { API_BASE_URL } from '$lib/constants'; | 	import { API_BASE_URL as BUILD_TIME_API_BASE_URL } from '$lib/constants'; | ||||||
| 	import toast from 'svelte-french-toast'; | 	import toast from 'svelte-french-toast'; | ||||||
| 
 | 
 | ||||||
| 	export let show = false; | 	export let show = false; | ||||||
| 	export let saveSettings: Function; | 	export let saveSettings: Function; | ||||||
| 	export let getModelTags: Function; | 	export let getModelTags: Function; | ||||||
| 
 | 
 | ||||||
|  | 	let API_BASE_URL = BUILD_TIME_API_BASE_URL; | ||||||
| 	let system = ''; | 	let system = ''; | ||||||
| 	let temperature = 0.8; | 	let temperature = 0.8; | ||||||
| 
 | 
 | ||||||
|  | @ -33,6 +34,14 @@ | ||||||
| 		}); | 		}); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | 	const checkOllamaConnection = async () => { | ||||||
|  | 		const res = await getModelTags(API_BASE_URL); | ||||||
|  | 
 | ||||||
|  | 		if (res) { | ||||||
|  | 			toast.success('Server connection verified'); | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| 	const pullModelHandler = async () => { | 	const pullModelHandler = async () => { | ||||||
| 		const res = await fetch(`${API_BASE_URL}/pull`, { | 		const res = await fetch(`${API_BASE_URL}/pull`, { | ||||||
| 			method: 'POST', | 			method: 'POST', | ||||||
|  | @ -139,6 +148,7 @@ | ||||||
| 
 | 
 | ||||||
| 	$: if (show) { | 	$: if (show) { | ||||||
| 		let settings = JSON.parse(localStorage.getItem('settings') ?? '{}'); | 		let settings = JSON.parse(localStorage.getItem('settings') ?? '{}'); | ||||||
|  | 		API_BASE_URL = settings.API_BASE_URL ?? BUILD_TIME_API_BASE_URL; | ||||||
| 		system = settings.system ?? ''; | 		system = settings.system ?? ''; | ||||||
| 		temperature = settings.temperature ?? 0.8; | 		temperature = settings.temperature ?? 0.8; | ||||||
| 	} | 	} | ||||||
|  | @ -227,6 +237,50 @@ | ||||||
| 			<div class="flex-1 md:min-h-[300px]"> | 			<div class="flex-1 md:min-h-[300px]"> | ||||||
| 				{#if selectedMenu === 'general'} | 				{#if selectedMenu === 'general'} | ||||||
| 					<div class="flex flex-col space-y-3"> | 					<div class="flex flex-col space-y-3"> | ||||||
|  | 						<div> | ||||||
|  | 							<div class=" mb-2.5 text-sm font-medium">Ollama Server URL</div> | ||||||
|  | 							<div class="flex w-full"> | ||||||
|  | 								<div class="flex-1 mr-2"> | ||||||
|  | 									<input | ||||||
|  | 										class="w-full rounded py-2 px-4 text-sm text-gray-300 bg-gray-800 outline-none" | ||||||
|  | 										placeholder="Enter URL (e.g. http://localhost:11434/api)" | ||||||
|  | 										bind:value={API_BASE_URL} | ||||||
|  | 									/> | ||||||
|  | 								</div> | ||||||
|  | 								<button | ||||||
|  | 									class="px-3 bg-gray-600 hover:bg-gray-700 rounded transition" | ||||||
|  | 									on:click={() => { | ||||||
|  | 										checkOllamaConnection(); | ||||||
|  | 									}} | ||||||
|  | 								> | ||||||
|  | 									<svg | ||||||
|  | 										xmlns="http://www.w3.org/2000/svg" | ||||||
|  | 										viewBox="0 0 20 20" | ||||||
|  | 										fill="currentColor" | ||||||
|  | 										class="w-4 h-4" | ||||||
|  | 									> | ||||||
|  | 										<path | ||||||
|  | 											fill-rule="evenodd" | ||||||
|  | 											d="M15.312 11.424a5.5 5.5 0 01-9.201 2.466l-.312-.311h2.433a.75.75 0 000-1.5H3.989a.75.75 0 00-.75.75v4.242a.75.75 0 001.5 0v-2.43l.31.31a7 7 0 0011.712-3.138.75.75 0 00-1.449-.39zm1.23-3.723a.75.75 0 00.219-.53V2.929a.75.75 0 00-1.5 0V5.36l-.31-.31A7 7 0 003.239 8.188a.75.75 0 101.448.389A5.5 5.5 0 0113.89 6.11l.311.31h-2.432a.75.75 0 000 1.5h4.243a.75.75 0 00.53-.219z" | ||||||
|  | 											clip-rule="evenodd" | ||||||
|  | 										/> | ||||||
|  | 									</svg> | ||||||
|  | 								</button> | ||||||
|  | 							</div> | ||||||
|  | 
 | ||||||
|  | 							<div class="mt-2 text-xs text-gray-500"> | ||||||
|  | 								Trouble accessing Ollama? <a | ||||||
|  | 									class=" text-gray-300 font-medium" | ||||||
|  | 									href="https://github.com/ollama-webui/ollama-webui#troubleshooting" | ||||||
|  | 									target="_blank" | ||||||
|  | 								> | ||||||
|  | 									Click here for help. | ||||||
|  | 								</a> | ||||||
|  | 							</div> | ||||||
|  | 						</div> | ||||||
|  | 
 | ||||||
|  | 						<hr class=" border-gray-700" /> | ||||||
|  | 
 | ||||||
| 						<div> | 						<div> | ||||||
| 							<div class=" mb-2.5 text-sm font-medium">System Prompt</div> | 							<div class=" mb-2.5 text-sm font-medium">System Prompt</div> | ||||||
| 							<textarea | 							<textarea | ||||||
|  | @ -260,6 +314,7 @@ | ||||||
| 								class=" px-4 py-2 bg-emerald-600 hover:bg-emerald-700 transition rounded" | 								class=" px-4 py-2 bg-emerald-600 hover:bg-emerald-700 transition rounded" | ||||||
| 								on:click={() => { | 								on:click={() => { | ||||||
| 									saveSettings( | 									saveSettings( | ||||||
|  | 										API_BASE_URL === '' ? BUILD_TIME_API_BASE_URL : API_BASE_URL, | ||||||
| 										system != '' ? system : null, | 										system != '' ? system : null, | ||||||
| 										temperature != 0.8 ? temperature : null | 										temperature != 0.8 ? temperature : null | ||||||
| 									); | 									); | ||||||
|  | @ -305,11 +360,11 @@ | ||||||
| 							</div> | 							</div> | ||||||
| 
 | 
 | ||||||
| 							<div class="mt-2 text-xs text-gray-500"> | 							<div class="mt-2 text-xs text-gray-500"> | ||||||
| 								To access the available model names for downloading, click <a | 								To access the available model names for downloading, <a | ||||||
| 									class=" text-gray-300 font-medium" | 									class=" text-gray-300 font-medium" | ||||||
| 									href="https://ollama.ai/library" | 									href="https://ollama.ai/library" | ||||||
| 									target="_blank">here</a | 									target="_blank">click here.</a | ||||||
| 								>. | 								> | ||||||
| 							</div> | 							</div> | ||||||
| 
 | 
 | ||||||
| 							{#if pullProgress !== ''} | 							{#if pullProgress !== ''} | ||||||
|  |  | ||||||
|  | @ -6,13 +6,14 @@ | ||||||
| 	import fileSaver from 'file-saver'; | 	import fileSaver from 'file-saver'; | ||||||
| 	const { saveAs } = fileSaver; | 	const { saveAs } = fileSaver; | ||||||
| 	import hljs from 'highlight.js'; | 	import hljs from 'highlight.js'; | ||||||
| 	import 'highlight.js/styles/dark.min.css'; | 	import 'highlight.js/styles/github-dark.min.css'; | ||||||
| 	import { API_BASE_URL } from '$lib/constants'; | 	import { API_BASE_URL as BUILD_TIME_API_BASE_URL } from '$lib/constants'; | ||||||
| 	import { onMount, tick } from 'svelte'; | 	import { onMount, tick } from 'svelte'; | ||||||
| 
 | 
 | ||||||
| 	import Navbar from '$lib/components/layout/Navbar.svelte'; | 	import Navbar from '$lib/components/layout/Navbar.svelte'; | ||||||
| 	import SettingsModal from '$lib/components/chat/SettingsModal.svelte'; | 	import SettingsModal from '$lib/components/chat/SettingsModal.svelte'; | ||||||
| 
 | 
 | ||||||
|  | 	let API_BASE_URL = BUILD_TIME_API_BASE_URL; | ||||||
| 	let suggestions = ''; // $page.url.searchParams.get('suggestions'); | 	let suggestions = ''; // $page.url.searchParams.get('suggestions'); | ||||||
| 
 | 
 | ||||||
| 	let models = []; | 	let models = []; | ||||||
|  | @ -31,21 +32,19 @@ | ||||||
| 	let messages = []; | 	let messages = []; | ||||||
| 
 | 
 | ||||||
| 	onMount(async () => { | 	onMount(async () => { | ||||||
|  | 		let settings = JSON.parse(localStorage.getItem('settings') ?? '{}'); | ||||||
|  | 
 | ||||||
|  | 		API_BASE_URL = settings.API_BASE_URL ?? BUILD_TIME_API_BASE_URL; | ||||||
| 		console.log(API_BASE_URL); | 		console.log(API_BASE_URL); | ||||||
|  | 		system = settings.system ?? null; | ||||||
|  | 		temperature = settings.temperature ?? null; | ||||||
|  | 
 | ||||||
| 		await getModelTags(); | 		await getModelTags(); | ||||||
| 
 | 
 | ||||||
| 		let settings = localStorage.getItem('settings'); | 		selectedModel = | ||||||
| 		if (settings) { | 			settings.model && models.map((model) => model.name).includes(settings.model) | ||||||
| 			settings = JSON.parse(settings); | 				? settings.model | ||||||
| 			console.log(settings); | 				: ''; | ||||||
| 
 |  | ||||||
| 			selectedModel = |  | ||||||
| 				settings.model && models.map((model) => model.name).includes(settings.model) |  | ||||||
| 					? settings.model |  | ||||||
| 					: ''; |  | ||||||
| 			system = settings.system ?? null; |  | ||||||
| 			temperature = settings.temperature ?? null; |  | ||||||
| 		} |  | ||||||
| 
 | 
 | ||||||
| 		db = await openDB('Chats', 1, { | 		db = await openDB('Chats', 1, { | ||||||
| 			upgrade(db) { | 			upgrade(db) { | ||||||
|  | @ -133,21 +132,23 @@ | ||||||
| 		toast.success('Default model updated'); | 		toast.success('Default model updated'); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	const saveSettings = (_system, _temperature) => { | 	const saveSettings = async (_api_base_url, _system, _temperature) => { | ||||||
|  | 		API_BASE_URL = _api_base_url; | ||||||
| 		system = _system; | 		system = _system; | ||||||
| 		temperature = _temperature; | 		temperature = _temperature; | ||||||
| 
 | 
 | ||||||
| 		let settings = localStorage.getItem('settings') ?? '{}'; | 		let settings = localStorage.getItem('settings') ?? '{}'; | ||||||
| 		if (settings) { | 		if (settings) { | ||||||
| 			settings = JSON.parse(settings); | 			settings = JSON.parse(settings); | ||||||
|  | 
 | ||||||
|  | 			settings.API_BASE_URL = API_BASE_URL; | ||||||
| 			settings.system = system; | 			settings.system = system; | ||||||
| 			settings.temperature = temperature; | 			settings.temperature = temperature; | ||||||
| 			localStorage.setItem('settings', JSON.stringify(settings)); | 			localStorage.setItem('settings', JSON.stringify(settings)); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		console.log(settings); | 		console.log(settings); | ||||||
| 
 | 		await getModelTags(); | ||||||
| 		console.log('saved'); |  | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	const createNewChat = () => { | 	const createNewChat = () => { | ||||||
|  | @ -163,7 +164,10 @@ | ||||||
| 				settings = JSON.parse(settings); | 				settings = JSON.parse(settings); | ||||||
| 				console.log(settings); | 				console.log(settings); | ||||||
| 
 | 
 | ||||||
| 				selectedModel = settings.model ?? selectedModel; | 				selectedModel = | ||||||
|  | 					settings.model && models.map((model) => model.name).includes(settings.model) | ||||||
|  | 						? settings.model | ||||||
|  | 						: ''; | ||||||
| 				system = settings.system ?? system; | 				system = settings.system ?? system; | ||||||
| 				temperature = settings.temperature ?? temperature; | 				temperature = settings.temperature ?? temperature; | ||||||
| 			} | 			} | ||||||
|  | @ -219,8 +223,8 @@ | ||||||
| 	// Ollama functions | 	// Ollama functions | ||||||
| 	////////////////////////// | 	////////////////////////// | ||||||
| 
 | 
 | ||||||
| 	const getModelTags = async () => { | 	const getModelTags = async (url = null) => { | ||||||
| 		const res = await fetch(`${API_BASE_URL}/tags`, { | 		const res = await fetch(`${url === null ? API_BASE_URL : url}/tags`, { | ||||||
| 			method: 'GET', | 			method: 'GET', | ||||||
| 			headers: { | 			headers: { | ||||||
| 				Accept: 'application/json', | 				Accept: 'application/json', | ||||||
|  | @ -233,11 +237,13 @@ | ||||||
| 			}) | 			}) | ||||||
| 			.catch((error) => { | 			.catch((error) => { | ||||||
| 				console.log(error); | 				console.log(error); | ||||||
| 				return { models: [] }; | 				toast.error('Server connection failed'); | ||||||
|  | 				return null; | ||||||
| 			}); | 			}); | ||||||
| 
 | 
 | ||||||
| 		console.log(res); | 		console.log(res); | ||||||
| 		models = res.models ?? []; | 		models = res?.models ?? []; | ||||||
|  | 		return res; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	const submitPrompt = async (user_prompt) => { | 	const submitPrompt = async (user_prompt) => { | ||||||
|  | @ -609,7 +615,7 @@ | ||||||
| 												</div> | 												</div> | ||||||
| 											</div> | 											</div> | ||||||
| 										{:else} | 										{:else} | ||||||
| 											<div class="markdown-body whitespace-pre-line"> | 											<div class="whitespace-pre-line"> | ||||||
| 												{@html marked.parse(message.content)} | 												{@html marked.parse(message.content)} | ||||||
| 											</div> | 											</div> | ||||||
| 										{/if} | 										{/if} | ||||||
|  |  | ||||||
|  | @ -20,5 +20,5 @@ export default { | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 	plugins: [] | 	plugins: [require('@tailwindcss/typography')] | ||||||
| }; | }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy J. Baek
						Timothy J. Baek