ソースを参照

enh: model url search param

Timothy J. Baek 6 ヶ月 前
コミット
ce917eba81

+ 26 - 1
src/lib/components/chat/Chat.svelte

@@ -85,6 +85,8 @@
 	let processing = '';
 	let messagesContainerElement: HTMLDivElement;
 
+	let navbarElement;
+
 	let showEventConfirmation = false;
 	let eventConfirmationTitle = '';
 	let eventConfirmationMessage = '';
@@ -437,7 +439,29 @@
 		if ($page.url.searchParams.get('models')) {
 			selectedModels = $page.url.searchParams.get('models')?.split(',');
 		} 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) {
 			selectedModels = $settings?.models;
 		} else if ($config?.default_models) {
@@ -2051,6 +2075,7 @@
 		{/if}
 
 		<Navbar
+			bind:this={navbarElement}
 			chat={{
 				id: $chatId,
 				chat: {

+ 1 - 0
src/lib/components/chat/ModelSelector.svelte

@@ -40,6 +40,7 @@
 			<div class="overflow-hidden w-full">
 				<div class="mr-1 max-w-full">
 					<Selector
+						id={`${selectedModelIdx}`}
 						placeholder={$i18n.t('Select a model')}
 						items={$models.map((model) => ({
 							value: model.id,

+ 6 - 1
src/lib/components/chat/ModelSelector/Selector.svelte

@@ -25,6 +25,7 @@
 	const i18n = getContext('i18n');
 	const dispatch = createEventDispatcher();
 
+	export let id = '';
 	export let value = '';
 	export let placeholder = 'Select a model';
 	export let searchEnabled = true;
@@ -229,7 +230,11 @@
 	}}
 	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
 			class="flex w-full text-left px-0.5 outline-none bg-transparent truncate text-lg font-medium placeholder-gray-400 focus:outline-none"
 		>