diff --git a/tools/ui/src/lib/components/app/models/ModelsSelectorDropdown.svelte b/tools/ui/src/lib/components/app/models/ModelsSelectorDropdown.svelte
index ccd46b2f3d..1fd7292161 100644
--- a/tools/ui/src/lib/components/app/models/ModelsSelectorDropdown.svelte
+++ b/tools/ui/src/lib/components/app/models/ModelsSelectorDropdown.svelte
@@ -8,11 +8,17 @@
DropdownMenuSearchable,
ModelId,
ModelsSelectorList,
- ModelsSelectorOption
+ ModelsSelectorOption,
+ ModelsSelectorSettingsSubmenu
} from '$lib/components/app';
import * as DropdownMenu from '$lib/components/ui/dropdown-menu';
import * as Tooltip from '$lib/components/ui/tooltip';
- import { MODEL_SELECTOR_ICON, SETTINGS_KEYS } from '$lib/constants';
+ import {
+ MODEL_SELECTOR_ICON,
+ SETTINGS_CHAT_SECTIONS,
+ SETTINGS_KEYS,
+ SETTINGS_SECTION_SLUGS
+ } from '$lib/constants';
import { KeyboardKey, ServerModelStatus } from '$lib/enums';
import { useModelsSelector } from '$lib/hooks/use-models-selector.svelte';
import { useReasoningMenu } from '$lib/hooks/use-reasoning-menu.svelte';
@@ -66,6 +72,17 @@
const reasoning = useReasoningMenu();
+ const samplingSection = $derived(
+ SETTINGS_CHAT_SECTIONS.find((s) => s.slug === SETTINGS_SECTION_SLUGS.SAMPLING)
+ );
+ const penaltiesSection = $derived(
+ SETTINGS_CHAT_SECTIONS.find((s) => s.slug === SETTINGS_SECTION_SLUGS.PENALTIES)
+ );
+
+ // Sampling/penalties need a loaded model to show server defaults, so
+ // disable the submenus until one is loaded.
+ const hasModelLoaded = $derived(modelsStore.loadedModelIds.length > 0);
+
const showOrgNameInTrigger = $derived(
settingsStore.config[SETTINGS_KEYS.SHOW_MODEL_ORG_NAME_IN_TRIGGER] ?? false
);
@@ -352,6 +369,14 @@
+
+ {#if samplingSection}
+
+ {/if}
+
+ {#if penaltiesSection}
+
+ {/if}
{:else}
diff --git a/tools/ui/src/lib/components/app/models/ModelsSelectorSettingsSubmenu.svelte b/tools/ui/src/lib/components/app/models/ModelsSelectorSettingsSubmenu.svelte
new file mode 100644
index 0000000000..d1d58efa63
--- /dev/null
+++ b/tools/ui/src/lib/components/app/models/ModelsSelectorSettingsSubmenu.svelte
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+ {section.title}
+
+
+
+ {#each section.fields ?? [] as field (field.key)}
+ {#if field.type === SettingsFieldType.INPUT}
+
+ {:else if field.type === SettingsFieldType.CHECKBOX}
+
+ {/if}
+ {/each}
+
+
diff --git a/tools/ui/src/lib/components/app/models/index.ts b/tools/ui/src/lib/components/app/models/index.ts
index 3ac6ecb678..abd05adc26 100644
--- a/tools/ui/src/lib/components/app/models/index.ts
+++ b/tools/ui/src/lib/components/app/models/index.ts
@@ -65,6 +65,8 @@ export { default as ModelsSelectorList } from './ModelsSelectorList.svelte';
*/
export { default as ModelsSelectorOption } from './ModelsSelectorOption.svelte';
+export { default as ModelsSelectorSettingsSubmenu } from './ModelsSelectorSettingsSubmenu.svelte';
+
/**
* **ModelsSelectorSheet** - Mobile model selection sheet
*