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'][];