[GH-ISSUE #21732] feat: Admin Settings Models to indicate Public / Private state #19555

Closed
opened 2026-04-20 02:02:11 -05:00 by GiteaMirror · 10 comments
Owner

Originally created by @pljones on GitHub (Feb 22, 2026).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/21732

Check Existing Issues

  • I have searched for all existing open AND closed issues and discussions for similar requests. I have found none that is comparable to my request.

Verify Feature Scope

  • I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions.

Problem Description

At the moment, in Admin Settings Models, I have to open the edit screen for each model and click the Access button to discover whether the model is public or private.

Desired Solution you'd like

It would be useful if the Model screen:

  • could filter based on Public / Private (in the same way as Hidden / Visible, etc)
  • perhaps highlight Public / Private state (e.g. put a lock icon/switch next to models, after the enable switch) ( 🔓 / 🔒 )
  • and if that Public / Private state is shown with a switch, have the state editable directly

Alternatives Considered

  1. Leaving things as they are
    Advantages: it's done already
    Disadvantages: it continues to hide the public/private state behind two layers of UI
  2. Use just some form of styling to indicate public/private state
    Advantages: less overall change to the UI than suggested approach, no need to implement state change code
    Still need to determine state when displaying the page, though

Additional Context

What got me here was trying to get title icon generation working and the frustrating "This model is not publicly available. Please select another model." message. Actually finding where to change the model or what it was talking about without a web search -- which found a bug report as the top hit on Google -- proved beyond me, so it argues the UI is not yet sufficiently intuitive.

I'm hoping, given the UI infrastructure for the filter already exists, at least that part can be done. Similarly, the UI infrastructure for the Hide/Show and Enable/Disable are already present. So long as this attribute is in the same part of the metadata, I'd expect it to be a straightforward change to support editing in the UI.

Originally created by @pljones on GitHub (Feb 22, 2026). Original GitHub issue: https://github.com/open-webui/open-webui/issues/21732 ### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions. ### Problem Description At the moment, in Admin Settings Models, I have to open the edit screen for each model and click the Access button to discover whether the model is public or private. ### Desired Solution you'd like It would be useful if the Model screen: - could filter based on Public / Private (in the same way as Hidden / Visible, etc) - _perhaps_ highlight Public / Private state (e.g. put a lock icon/switch next to models, after the enable switch) ( :unlock: / :lock: ) - and if that Public / Private state is shown with a switch, have the state editable directly ### Alternatives Considered 1. Leaving things as they are Advantages: it's done already Disadvantages: it continues to hide the public/private state behind two layers of UI 2. Use _just_ some form of styling to indicate public/private state Advantages: less overall change to the UI than suggested approach, no need to implement state change code Still need to determine state when displaying the page, though ### Additional Context What got me here was trying to get title icon generation working and the frustrating "This model is not publicly available. Please select another model." message. Actually finding where to change the model or what it was talking about without a web search -- which found a [bug report](https://github.com/open-webui/open-webui/issues/14172) as the top hit on Google -- proved beyond me, so it argues the UI is not yet sufficiently intuitive. I'm hoping, given the UI infrastructure for the filter already exists, at least that part can be done. Similarly, the UI infrastructure for the Hide/Show and Enable/Disable are already present. So long as this attribute is in the same part of the metadata, I'd expect it to be a straightforward change to support editing in the UI.
Author
Owner

@Classic298 commented on GitHub (Feb 22, 2026):

At the moment, I have to open the edit screen for each model and click the Access button to discover whether the model is public or private.

Why? You can already see from the menu

Image
<!-- gh-comment-id:3940825408 --> @Classic298 commented on GitHub (Feb 22, 2026): > At the moment, I have to open the edit screen for each model and click the Access button to discover whether the model is public or private. Why? You can already see from the menu <img width="1141" height="320" alt="Image" src="https://github.com/user-attachments/assets/82dbd8f6-4f00-4134-9c78-e38599b68d2b" />
Author
Owner

@pljones commented on GitHub (Feb 22, 2026):

Image

Image

Image

Image

I've hidden ministral-3:3b and it's dimmer. It's private but the others are public -- but I get no "read only". This is in Admin Settings, right?


Proposed filter code developed with Cursor (untested - I'm trying to find the Local Development Guide):

diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte
index 9270db5c6..53183c838 100644
--- a/src/lib/components/admin/Settings/Models.svelte
+++ b/src/lib/components/admin/Settings/Models.svelte
@@ -68,6 +68,13 @@
        const perPage = 30;
        let currentPage = 1;

+       const hasPublicReadGrant = (grants) =>
+               Array.isArray(grants) &&
+               grants.some(
+                       (g) =>
+                               g?.principal_type === 'user' && g?.principal_id === '*' && g?.permission === 'read'
+               );
+
        $: if (models) {
                filteredModels = models
                        .filter((m) => searchValue === '' || m.name.toLowerCase().includes(searchValue.toLowerCase()))
@@ -76,6 +83,14 @@
                                if (viewOption === 'disabled') return !(m?.is_active ?? true);
                                if (viewOption === 'visible') return !(m?.meta?.hidden ?? false);
                                if (viewOption === 'hidden') return m?.meta?.hidden === true;
+                               if (viewOption === 'public') {
+                                       const grants = m?.access_grants ?? m?.info?.access_grants ?? [];
+                                       return hasPublicReadGrant(grants);
+                               }
+                               if (viewOption === 'private') {
+                                       const grants = m?.access_grants ?? m?.info?.access_grants ?? [];
+                                       return !hasPublicReadGrant(grants);
+                               }
                                return true; // All
                        })
                        .sort((a, b) => {
diff --git a/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte b/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte
index 5778ba21a..b3c800674 100644
--- a/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte
+++ b/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte
@@ -16,7 +16,9 @@
                { value: 'enabled', label: $i18n.t('Enabled') },
                { value: 'disabled', label: $i18n.t('Disabled') },
                { value: 'visible', label: $i18n.t('Visible') },
-               { value: 'hidden', label: $i18n.t('Hidden') }
+               { value: 'hidden', label: $i18n.t('Hidden') },
+               { value: 'public', label: $i18n.t('Public') },
+               { value: 'private', label: $i18n.t('Private') }
        ];
 </script>

<!-- gh-comment-id:3940905332 --> @pljones commented on GitHub (Feb 22, 2026): <img width="101" height="43" alt="Image" src="https://github.com/user-attachments/assets/ecadc46a-3946-46ad-b0bd-1eb4797fa675" /><br/> <img width="515" height="118" alt="Image" src="https://github.com/user-attachments/assets/ab129bf9-385a-400b-949f-23fbe2d5314f" /><br/> <img width="454" height="126" alt="Image" src="https://github.com/user-attachments/assets/ab4c69f2-2b00-474e-9e1a-52488a65bf3f" /><br/> <img width="465" height="118" alt="Image" src="https://github.com/user-attachments/assets/4a1e6fde-0924-4d8a-85d1-fb85315afa34" /><br/> I've hidden ministral-3:3b and it's dimmer. It's private but the others are public -- but I get no "read only". This is in Admin Settings, right? ---- Proposed **filter** code developed with Cursor (untested - I'm trying to find the [Local Development Guide](https://docs.openwebui.com/getting-started/advanced-topics/development)): ```diff diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte index 9270db5c6..53183c838 100644 --- a/src/lib/components/admin/Settings/Models.svelte +++ b/src/lib/components/admin/Settings/Models.svelte @@ -68,6 +68,13 @@ const perPage = 30; let currentPage = 1; + const hasPublicReadGrant = (grants) => + Array.isArray(grants) && + grants.some( + (g) => + g?.principal_type === 'user' && g?.principal_id === '*' && g?.permission === 'read' + ); + $: if (models) { filteredModels = models .filter((m) => searchValue === '' || m.name.toLowerCase().includes(searchValue.toLowerCase())) @@ -76,6 +83,14 @@ if (viewOption === 'disabled') return !(m?.is_active ?? true); if (viewOption === 'visible') return !(m?.meta?.hidden ?? false); if (viewOption === 'hidden') return m?.meta?.hidden === true; + if (viewOption === 'public') { + const grants = m?.access_grants ?? m?.info?.access_grants ?? []; + return hasPublicReadGrant(grants); + } + if (viewOption === 'private') { + const grants = m?.access_grants ?? m?.info?.access_grants ?? []; + return !hasPublicReadGrant(grants); + } return true; // All }) .sort((a, b) => { diff --git a/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte b/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte index 5778ba21a..b3c800674 100644 --- a/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte +++ b/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte @@ -16,7 +16,9 @@ { value: 'enabled', label: $i18n.t('Enabled') }, { value: 'disabled', label: $i18n.t('Disabled') }, { value: 'visible', label: $i18n.t('Visible') }, - { value: 'hidden', label: $i18n.t('Hidden') } + { value: 'hidden', label: $i18n.t('Hidden') }, + { value: 'public', label: $i18n.t('Public') }, + { value: 'private', label: $i18n.t('Private') } ]; </script> ```
Author
Owner

@Classic298 commented on GitHub (Feb 22, 2026):

do not use google to search the docs. the docs have been reorganized and google's index needs to reindex them. which didnt happen yet

https://docs.openwebui.com/getting-started/development

<!-- gh-comment-id:3940997204 --> @Classic298 commented on GitHub (Feb 22, 2026): do not use google to search the docs. the docs have been reorganized and google's index needs to reindex them. which didnt happen yet https://docs.openwebui.com/getting-started/development
Author
Owner

@Classic298 commented on GitHub (Feb 22, 2026):

@pljones thanks for clarifying. you did not specify you meant the admin settings. I thought you were talking about the workspace models, which are shown as I posted above with my screenshot

<!-- gh-comment-id:3941001263 --> @Classic298 commented on GitHub (Feb 22, 2026): @pljones thanks for clarifying. you did not specify you meant the admin settings. I thought you were talking about the workspace models, which are shown as I posted above with my screenshot
Author
Owner

@pljones commented on GitHub (Feb 22, 2026):

do not use google to search the docs. the docs have been reorganized and google's index needs to reindex them. which didnt happen yet

https://docs.openwebui.com/getting-started/development

No, I used Github.

<!-- gh-comment-id:3941004749 --> @pljones commented on GitHub (Feb 22, 2026): > do not use google to search the docs. the docs have been reorganized and google's index needs to reindex them. which didnt happen yet > > https://docs.openwebui.com/getting-started/development No, I used [Github](https://github.com/open-webui/open-webui?tab=readme-ov-file#other-installation-methods).
Author
Owner

@Classic298 commented on GitHub (Feb 22, 2026):

ah the readme. thanks. this will need an update

<!-- gh-comment-id:3941015640 --> @Classic298 commented on GitHub (Feb 22, 2026): ah the readme. thanks. this will need an update
Author
Owner

@Classic298 commented on GitHub (Feb 22, 2026):

feel free to PR - if you do. try to copy existing conventions from the workspace

Public Private badges would make sense i think

<!-- gh-comment-id:3941029459 --> @Classic298 commented on GitHub (Feb 22, 2026): feel free to PR - if you do. try to copy existing conventions from the workspace Public Private badges would make sense i think
Author
Owner

@pljones commented on GitHub (Feb 22, 2026):

Hm. This svelte stuff is harder to pick up than I thought. It could be next week before I get this done now.

<!-- gh-comment-id:3941451344 --> @pljones commented on GitHub (Feb 22, 2026): Hm. This svelte stuff is harder to pick up than I thought. It could be next week before I get this done now.
Author
Owner

@tjbck commented on GitHub (Feb 22, 2026):

Addressed in dev.

<!-- gh-comment-id:3941755855 --> @tjbck commented on GitHub (Feb 22, 2026): Addressed in dev.
Author
Owner

@Classic298 commented on GitHub (Feb 22, 2026):

29217cb430

<!-- gh-comment-id:3941757794 --> @Classic298 commented on GitHub (Feb 22, 2026): https://github.com/open-webui/open-webui/commit/29217cb430bd47827ebb20782b264ae7b0f233bb
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#19555