diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz
index 9cff8a0126..6dcd04cbf3 100644
Binary files a/tools/server/public/index.html.gz and b/tools/server/public/index.html.gz differ
diff --git a/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte b/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte
index c676e224a7..1d2dd3c1d9 100644
--- a/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte
+++ b/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte
@@ -11,7 +11,7 @@
iconSize?: string;
class?: string;
disabled?: boolean;
- onclick: () => void;
+ onclick: (e?: MouseEvent) => void;
'aria-label'?: string;
}
diff --git a/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte b/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte
index eac83f234d..3a1db5c77d 100644
--- a/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte
+++ b/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte
@@ -5,21 +5,38 @@
import { serverStore } from '$lib/stores/server.svelte';
import { modelsStore, modelOptions, modelsLoading } from '$lib/stores/models.svelte';
import { formatFileSize, formatParameters, formatNumber } from '$lib/utils';
+ import type { ApiLlamaCppServerProps } from '$lib/types';
interface Props {
open?: boolean;
onOpenChange?: (open: boolean) => void;
+ // when set, fetch props from the child process (router mode)
+ modelId?: string | null;
}
- let { open = $bindable(), onOpenChange }: Props = $props();
+ let { open = $bindable(), onOpenChange, modelId = null }: Props = $props();
- let serverProps = $derived(serverStore.props);
- let modelName = $derived(modelsStore.singleModelName);
+ let isRouter = $derived(serverStore.isRouterMode);
+
+ // per-model props fetched from the child process
+ let routerModelProps = $state(null);
+ let isLoadingRouterProps = $state(false);
+
+ // in router mode use per-model props, otherwise use global props
+ let serverProps = $derived(isRouter && modelId ? routerModelProps : serverStore.props);
+
+ let modelName = $derived(isRouter && modelId ? modelId : modelsStore.singleModelName);
let models = $derived(modelOptions());
let isLoadingModels = $derived(modelsLoading());
- // Get the first model for single-model mode display
- let firstModel = $derived(models[0] ?? null);
+ // in router mode, find the model option matching modelId
+ // in single mode, use the first model as before
+ let firstModel = $derived.by(() => {
+ if (isRouter && modelId) {
+ return models.find((m) => m.model === modelId) ?? null;
+ }
+ return models[0] ?? null;
+ });
// Get modalities from modelStore using the model ID from the first model
let modalities = $derived.by(() => {
@@ -33,10 +50,31 @@
modelsStore.fetch();
}
});
+
+ // fetch per-model props from child process when dialog opens in router mode
+ $effect(() => {
+ if (open && isRouter && modelId) {
+ isLoadingRouterProps = true;
+ modelsStore
+ .fetchModelProps(modelId)
+ .then((props) => {
+ routerModelProps = props;
+ })
+ .catch(() => {
+ routerModelProps = null;
+ })
+ .finally(() => {
+ isLoadingRouterProps = false;
+ });
+ }
+ if (!open) {
+ routerModelProps = null;
+ }
+ });
-
+