diff --git a/tools/server/webui/src/Config.ts b/tools/server/webui/src/Config.ts
index c03ac287f3484..549ed424cec0b 100644
--- a/tools/server/webui/src/Config.ts
+++ b/tools/server/webui/src/Config.ts
@@ -14,6 +14,7 @@ export const CONFIG_DEFAULT = {
apiKey: '',
systemMessage: '',
showTokensPerSecond: false,
+ showServerInformation: false,
showThoughtInProgress: false,
excludeThoughtOnReq: true,
pasteLongTextToFileLen: 2500,
diff --git a/tools/server/webui/src/components/ChatMessage.tsx b/tools/server/webui/src/components/ChatMessage.tsx
index ee59de450d1ff..26a8bbad67278 100644
--- a/tools/server/webui/src/components/ChatMessage.tsx
+++ b/tools/server/webui/src/components/ChatMessage.tsx
@@ -1,7 +1,7 @@
import { useMemo, useState } from 'react';
import { useAppContext } from '../utils/app.context';
import { Message, PendingMessage } from '../utils/types';
-import { classNames } from '../utils/misc';
+import { classNames, modelNameFromPath } from '../utils/misc';
import MarkdownDisplay, { CopyButton } from './MarkdownDisplay';
import {
ArrowPathIcon,
@@ -189,6 +189,29 @@ export default function ChatMessage({
)}
+
+ {/* render model information if enabled and available */}
+ {config.showServerInformation && msg.serverProps && (
+ <>
+
+
+
+ Model:{' '}
+ {msg.serverProps.model_path && modelNameFromPath(msg.serverProps.model_path)}
+
+
+ Server Information
+
- Path: {msg.serverProps.model_path}
+
- Build: {msg.serverProps.build_info}
+
- Context: {msg.serverProps.n_ctx}
+
+
+ >
+ )}
>
)}
diff --git a/tools/server/webui/src/components/SettingDialog.tsx b/tools/server/webui/src/components/SettingDialog.tsx
index 45a8d73b00592..0a679227204b5 100644
--- a/tools/server/webui/src/components/SettingDialog.tsx
+++ b/tools/server/webui/src/components/SettingDialog.tsx
@@ -202,6 +202,11 @@ const SETTING_SECTIONS: SettingSection[] = [
label: 'Show tokens per second',
key: 'showTokensPerSecond',
},
+ {
+ type: SettingInputType.CHECKBOX,
+ label: 'Show server information',
+ key: 'showServerInformation',
+ },
{
type: SettingInputType.LONG_INPUT,
label: (
diff --git a/tools/server/webui/src/utils/app.context.tsx b/tools/server/webui/src/utils/app.context.tsx
index 96cffd95aba7c..3d83d000d4f2e 100644
--- a/tools/server/webui/src/utils/app.context.tsx
+++ b/tools/server/webui/src/utils/app.context.tsx
@@ -188,6 +188,13 @@ export const AppContextProvider = ({
content: null,
parent: leafNodeId,
children: [],
+ serverProps: serverProps
+ ? {
+ model_path: serverProps.model_path,
+ build_info: serverProps.build_info,
+ n_ctx: serverProps.n_ctx,
+ }
+ : null,
};
setPending(convId, pendingMsg);
diff --git a/tools/server/webui/src/utils/misc.ts b/tools/server/webui/src/utils/misc.ts
index d60a68cd2431b..ccd106eaf9f7c 100644
--- a/tools/server/webui/src/utils/misc.ts
+++ b/tools/server/webui/src/utils/misc.ts
@@ -195,3 +195,10 @@ export const getServerProps = async (
throw error;
}
};
+
+export const modelNameFromPath = (path: string): string => {
+ // get the last non-empty part
+ const trimmed = path.replace(/[\\\/]+$/, '');
+ const parts = trimmed.split(/[\\\/]/);
+ return parts[parts.length - 1] || path;
+};
diff --git a/tools/server/webui/src/utils/types.ts b/tools/server/webui/src/utils/types.ts
index ea7d641dc748b..90c4404d1806d 100644
--- a/tools/server/webui/src/utils/types.ts
+++ b/tools/server/webui/src/utils/types.ts
@@ -43,6 +43,7 @@ export interface Message {
content: string;
timings?: TimingReport;
extra?: MessageExtra[];
+ serverProps?: LlamaCppServerProps | null;
// node based system for branching
parent: Message['id'];
children: Message['id'][];