Skip to content

Commit cdc2b3b

Browse files
committed
refac
1 parent 90ca2e9 commit cdc2b3b

3 files changed

Lines changed: 48 additions & 2 deletions

File tree

backend/open_webui/routers/configs.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,13 @@ class ModelsConfigForm(BaseModel):
489489
DEFAULT_MODEL_PARAMS: Optional[dict] = None
490490

491491

492+
@router.get('/models/defaults')
493+
async def get_models_defaults(request: Request, user=Depends(get_verified_user)):
494+
return {
495+
'DEFAULT_MODEL_METADATA': request.app.state.config.DEFAULT_MODEL_METADATA,
496+
}
497+
498+
492499
@router.get('/models', response_model=ModelsConfigForm)
493500
async def get_models_config(request: Request, user=Depends(get_admin_user)):
494501
return {

src/lib/apis/configs/index.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,33 @@ export const setCodeExecutionConfig = async (token: string, config: object) => {
442442
return res;
443443
};
444444

445+
export const getModelsDefaults = async (token: string) => {
446+
let error = null;
447+
448+
const res = await fetch(`${WEBUI_API_BASE_URL}/configs/models/defaults`, {
449+
method: 'GET',
450+
headers: {
451+
'Content-Type': 'application/json',
452+
Authorization: `Bearer ${token}`
453+
}
454+
})
455+
.then(async (res) => {
456+
if (!res.ok) throw await res.json();
457+
return res.json();
458+
})
459+
.catch((err) => {
460+
console.error(err);
461+
error = err.detail;
462+
return null;
463+
});
464+
465+
if (error) {
466+
throw error;
467+
}
468+
469+
return res;
470+
};
471+
445472
export const getModelsConfig = async (token: string) => {
446473
let error = null;
447474

src/lib/components/workspace/Models/ModelEditor.svelte

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
88
import { getTools } from '$lib/apis/tools';
99
import { getFunctions } from '$lib/apis/functions';
10+
import { getModelsDefaults } from '$lib/apis/configs';
1011
1112
import AdvancedParams from '$lib/components/chat/Settings/Advanced/AdvancedParams.svelte';
1213
import Tags from '$lib/components/common/Tags.svelte';
@@ -239,6 +240,16 @@
239240
await tools.set(await getTools(localStorage.token));
240241
await functions.set(await getFunctions(localStorage.token));
241242
243+
// Fetch admin-configured default model metadata so the editor
244+
// reflects the actual defaults rather than hardcoded values
245+
const modelsConfig = await getModelsDefaults(localStorage.token).catch(() => null);
246+
const defaultMeta = modelsConfig?.DEFAULT_MODEL_METADATA ?? {};
247+
248+
// Use admin defaults as base, falling back to hardcoded defaults
249+
capabilities = { ...DEFAULT_CAPABILITIES, ...(defaultMeta.capabilities ?? {}) };
250+
defaultFeatureIds = defaultMeta.defaultFeatureIds ?? [];
251+
builtinTools = defaultMeta.builtinTools ?? {};
252+
242253
// Scroll to top 'workspace-container' element
243254
const workspaceContainer = document.getElementById('workspace-container');
244255
if (workspaceContainer) {
@@ -301,9 +312,10 @@
301312
defaultFilterIds = model?.meta?.defaultFilterIds ?? [];
302313
actionIds = model?.meta?.actionIds ?? [];
303314
315+
// Per-model overrides take precedence over admin defaults
304316
capabilities = { ...capabilities, ...(model?.meta?.capabilities ?? {}) };
305-
defaultFeatureIds = model?.meta?.defaultFeatureIds ?? [];
306-
builtinTools = model?.meta?.builtinTools ?? {};
317+
defaultFeatureIds = model?.meta?.defaultFeatureIds ?? defaultFeatureIds;
318+
builtinTools = model?.meta?.builtinTools ?? builtinTools;
307319
tts = { voice: model?.meta?.tts?.voice ?? '' };
308320
309321
accessGrants = model?.access_grants ?? [];

0 commit comments

Comments
 (0)