enh: model url search param
This commit is contained in:
		
							parent
							
								
									81f62d5bff
								
							
						
					
					
						commit
						ce917eba81
					
				|  | @ -85,6 +85,8 @@ | ||||||
| 	let processing = ''; | 	let processing = ''; | ||||||
| 	let messagesContainerElement: HTMLDivElement; | 	let messagesContainerElement: HTMLDivElement; | ||||||
| 
 | 
 | ||||||
|  | 	let navbarElement; | ||||||
|  | 
 | ||||||
| 	let showEventConfirmation = false; | 	let showEventConfirmation = false; | ||||||
| 	let eventConfirmationTitle = ''; | 	let eventConfirmationTitle = ''; | ||||||
| 	let eventConfirmationMessage = ''; | 	let eventConfirmationMessage = ''; | ||||||
|  | @ -437,7 +439,29 @@ | ||||||
| 		if ($page.url.searchParams.get('models')) { | 		if ($page.url.searchParams.get('models')) { | ||||||
| 			selectedModels = $page.url.searchParams.get('models')?.split(','); | 			selectedModels = $page.url.searchParams.get('models')?.split(','); | ||||||
| 		} else if ($page.url.searchParams.get('model')) { | 		} else if ($page.url.searchParams.get('model')) { | ||||||
| 			selectedModels = $page.url.searchParams.get('model')?.split(','); | 			const urlModels = $page.url.searchParams.get('model')?.split(','); | ||||||
|  | 
 | ||||||
|  | 			if (urlModels.length === 1) { | ||||||
|  | 				const m = $models.find((m) => m.id === urlModels[0]); | ||||||
|  | 				if (!m) { | ||||||
|  | 					const modelSelectorButton = document.getElementById('model-selector-0-button'); | ||||||
|  | 					if (modelSelectorButton) { | ||||||
|  | 						modelSelectorButton.click(); | ||||||
|  | 						await tick(); | ||||||
|  | 
 | ||||||
|  | 						const modelSelectorInput = document.getElementById('model-search-input'); | ||||||
|  | 						if (modelSelectorInput) { | ||||||
|  | 							modelSelectorInput.focus(); | ||||||
|  | 							modelSelectorInput.value = urlModels[0]; | ||||||
|  | 							modelSelectorInput.dispatchEvent(new Event('input')); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					selectedModels = urlModels; | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				selectedModels = urlModels; | ||||||
|  | 			} | ||||||
| 		} else if ($settings?.models) { | 		} else if ($settings?.models) { | ||||||
| 			selectedModels = $settings?.models; | 			selectedModels = $settings?.models; | ||||||
| 		} else if ($config?.default_models) { | 		} else if ($config?.default_models) { | ||||||
|  | @ -2051,6 +2075,7 @@ | ||||||
| 		{/if} | 		{/if} | ||||||
| 
 | 
 | ||||||
| 		<Navbar | 		<Navbar | ||||||
|  | 			bind:this={navbarElement} | ||||||
| 			chat={{ | 			chat={{ | ||||||
| 				id: $chatId, | 				id: $chatId, | ||||||
| 				chat: { | 				chat: { | ||||||
|  |  | ||||||
|  | @ -40,6 +40,7 @@ | ||||||
| 			<div class="overflow-hidden w-full"> | 			<div class="overflow-hidden w-full"> | ||||||
| 				<div class="mr-1 max-w-full"> | 				<div class="mr-1 max-w-full"> | ||||||
| 					<Selector | 					<Selector | ||||||
|  | 						id={`${selectedModelIdx}`} | ||||||
| 						placeholder={$i18n.t('Select a model')} | 						placeholder={$i18n.t('Select a model')} | ||||||
| 						items={$models.map((model) => ({ | 						items={$models.map((model) => ({ | ||||||
| 							value: model.id, | 							value: model.id, | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ | ||||||
| 	const i18n = getContext('i18n'); | 	const i18n = getContext('i18n'); | ||||||
| 	const dispatch = createEventDispatcher(); | 	const dispatch = createEventDispatcher(); | ||||||
| 
 | 
 | ||||||
|  | 	export let id = ''; | ||||||
| 	export let value = ''; | 	export let value = ''; | ||||||
| 	export let placeholder = 'Select a model'; | 	export let placeholder = 'Select a model'; | ||||||
| 	export let searchEnabled = true; | 	export let searchEnabled = true; | ||||||
|  | @ -229,7 +230,11 @@ | ||||||
| 	}} | 	}} | ||||||
| 	closeFocus={false} | 	closeFocus={false} | ||||||
| > | > | ||||||
| 	<DropdownMenu.Trigger class="relative w-full font-primary" aria-label={placeholder}> | 	<DropdownMenu.Trigger | ||||||
|  | 		class="relative w-full font-primary" | ||||||
|  | 		aria-label={placeholder} | ||||||
|  | 		id="model-selector-{id}-button" | ||||||
|  | 	> | ||||||
| 		<div | 		<div | ||||||
| 			class="flex w-full text-left px-0.5 outline-none bg-transparent truncate text-lg font-medium placeholder-gray-400 focus:outline-none" | 			class="flex w-full text-left px-0.5 outline-none bg-transparent truncate text-lg font-medium placeholder-gray-400 focus:outline-none" | ||||||
| 		> | 		> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue