[GH-ISSUE #2924] feat: user group/teams #51735

Closed
opened 2026-05-05 12:54:27 -05:00 by GiteaMirror · 30 comments
Owner

Originally created by @tjbck on GitHub (Jun 8, 2024).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/2924

Originally assigned to: @tjbck on GitHub.

user group

https://github.com/open-webui/open-webui/issues/1096

  • Admin members can create user groups and assign user group specific settings (e.g. which models they have access to, user permissions)
  • Ability to create private models/knowledge/prompts + granular access control to optionally allow user/group access.
  • Granular workspace permissions for group admins, ability create new models, new prompts, and new projects as group admin
Originally created by @tjbck on GitHub (Jun 8, 2024). Original GitHub issue: https://github.com/open-webui/open-webui/issues/2924 Originally assigned to: @tjbck on GitHub. user group https://github.com/open-webui/open-webui/issues/1096 - [x] Admin members can create user groups and assign user group specific settings (e.g. which models they have access to, user permissions) - [x] Ability to create private models/knowledge/prompts + granular access control to optionally allow user/group access. - [x] Granular workspace permissions for group admins, ability create new models, new prompts, and new projects as group admin
Author
Owner

@mindspawn commented on GitHub (Jun 9, 2024):

So glad to see a 0.4.0 target release :) can't wait.

<!-- gh-comment-id:2156278743 --> @mindspawn commented on GitHub (Jun 9, 2024): So glad to see a 0.4.0 target release :) can't wait.
Author
Owner

@mindspawn commented on GitHub (Jun 9, 2024):

Hopefully the notion of teams propagates to chromadb queries as well so that each team can have its own set of documents. Also having a way to have some documents shared among all teams would also be great.

<!-- gh-comment-id:2156279584 --> @mindspawn commented on GitHub (Jun 9, 2024): Hopefully the notion of teams propagates to chromadb queries as well so that each team can have its own set of documents. Also having a way to have some documents shared among all teams would also be great.
Author
Owner

@tjbck commented on GitHub (Jun 9, 2024):

might get delayed to v0.5.0 depending on my availability 😅

<!-- gh-comment-id:2156311771 --> @tjbck commented on GitHub (Jun 9, 2024): might get delayed to v0.5.0 depending on my availability 😅
Author
Owner

@mindspawn commented on GitHub (Jun 9, 2024):

haha. No worries. Completely understandable :)

<!-- gh-comment-id:2156324016 --> @mindspawn commented on GitHub (Jun 9, 2024): haha. No worries. Completely understandable :)
Author
Owner

@jannikstdl commented on GitHub (Jun 10, 2024):

Related #715

<!-- gh-comment-id:2159278644 --> @jannikstdl commented on GitHub (Jun 10, 2024): Related #715
Author
Owner

@Moisebala commented on GitHub (Jul 15, 2024):

Implements a new access control system that allows for granular permissions on specific models without granting full admin rights to users. The main features should include:

  1. Creation of user groups with customizable access levels
  2. Ability to assign specific models to user groups
  3. Implementation of a permission checking mechanism for model access
  4. Updates to the user interface to reflect these new permissions

This feature must enhances security and flexibility by allowing administrators to grant limited access to certain models or functionalities without compromising overall system integrity. It addresses the need for more nuanced user roles beyond the binary admin/non-admin distinction.

<!-- gh-comment-id:2228534776 --> @Moisebala commented on GitHub (Jul 15, 2024): Implements a new access control system that allows for granular permissions on specific models without granting full admin rights to users. The main features should include: 1. Creation of user groups with customizable access levels 2. Ability to assign specific models to user groups 3. Implementation of a permission checking mechanism for model access 4. Updates to the user interface to reflect these new permissions This feature must enhances security and flexibility by allowing administrators to grant limited access to certain models or functionalities without compromising overall system integrity. It addresses the need for more nuanced user roles beyond the binary admin/non-admin distinction.
Author
Owner

@kelvinq commented on GitHub (Aug 8, 2024):

We may consider how AnythingLLM (https://github.com/Mintplex-Labs/anything-llm) implements it:

  1. User role. By default, users can only access workspaces that they are explicitly added to: https://docs.anythingllm.com/features/security-and-access#user-roles
  2. Each workspace have their own specific settings: https://docs.anythingllm.com/features/chat-widgets#workspace

These enables the implementation to be used by multiple teams ("departments", "user roles", "user groups") according to their unique usecases and respecting the differing data policies.

For your consideration @tjbck and thank you for adding details @Moisebala

<!-- gh-comment-id:2274968019 --> @kelvinq commented on GitHub (Aug 8, 2024): We may consider how AnythingLLM (https://github.com/Mintplex-Labs/anything-llm) implements it: 1. User role. By default, users can only access workspaces that they are explicitly added to: https://docs.anythingllm.com/features/security-and-access#user-roles 2. Each workspace have their own specific settings: https://docs.anythingllm.com/features/chat-widgets#workspace These enables the implementation to be used by multiple teams ("departments", "user roles", "user groups") according to their unique usecases and respecting the differing data policies. For your consideration @tjbck and thank you for adding details @Moisebala
Author
Owner

@flefevre commented on GitHub (Aug 8, 2024):

Thanks for these elements.
If I may add something about anythingllm, there is a small default since
there is a missing role.

Admin user of the platform: ok
Basic user : ok
ManagerS of a workspace: missing

This role should enable to manage some internal parameters: inference and
embedding model, vectorisation and document set etc...

It will be great to be able to add in the workspace 'non human user' such
as assistant.

What is key, it is to have a secure design where each data workspace is
separated, no share vector database.

François , from Paris 2024

Le jeu. 8 août 2024, 07:15, Kelvin Quee @.***> a écrit :

We may consider how AnythingLLM (
https://github.com/Mintplex-Labs/anything-llm) implements it:

  1. User role. By default, users can only access workspaces that they
    are explicitly added to:
    https://docs.anythingllm.com/features/security-and-access#user-roles
  2. Each workspace have their own specific settings:
    https://docs.anythingllm.com/features/chat-widgets#workspace

These enables the implementation to be used by multiple teams
("departments", "user roles", "user groups") according to their unique
usecases and respecting the differing data policies.

For your consideration @tjbck https://github.com/tjbck and thank you
for adding details @Moisebala https://github.com/Moisebala


Reply to this email directly, view it on GitHub
https://github.com/open-webui/open-webui/issues/2924#issuecomment-2274968019,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABKZRFCWPKU7YSVTCXHMTV3ZQL5FPAVCNFSM6AAAAABI7WA2RCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZUHE3DQMBRHE
.
You are receiving this because you commented.Message ID:
@.***>

<!-- gh-comment-id:2275013956 --> @flefevre commented on GitHub (Aug 8, 2024): Thanks for these elements. If I may add something about anythingllm, there is a small default since there is a missing role. Admin user of the platform: ok Basic user : ok ManagerS of a workspace: missing This role should enable to manage some internal parameters: inference and embedding model, vectorisation and document set etc... It will be great to be able to add in the workspace 'non human user' such as assistant. What is key, it is to have a secure design where each data workspace is separated, no share vector database. François , from Paris 2024 Le jeu. 8 août 2024, 07:15, Kelvin Quee ***@***.***> a écrit : > We may consider how AnythingLLM ( > https://github.com/Mintplex-Labs/anything-llm) implements it: > > 1. User role. By default, users can only access workspaces that they > are explicitly added to: > https://docs.anythingllm.com/features/security-and-access#user-roles > 2. Each workspace have their own specific settings: > https://docs.anythingllm.com/features/chat-widgets#workspace > > These enables the implementation to be used by multiple teams > ("departments", "user roles", "user groups") according to their unique > usecases and respecting the differing data policies. > > For your consideration @tjbck <https://github.com/tjbck> and thank you > for adding details @Moisebala <https://github.com/Moisebala> > > — > Reply to this email directly, view it on GitHub > <https://github.com/open-webui/open-webui/issues/2924#issuecomment-2274968019>, > or unsubscribe > <https://github.com/notifications/unsubscribe-auth/ABKZRFCWPKU7YSVTCXHMTV3ZQL5FPAVCNFSM6AAAAABI7WA2RCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZUHE3DQMBRHE> > . > You are receiving this because you commented.Message ID: > ***@***.***> >
Author
Owner

@thiswillbeyourgithub commented on GitHub (Aug 27, 2024):

I don't know if you've settled on a UI for teams and permissions but I just wanted to illustrate for example what paperless-ngx is doing:

image

<!-- gh-comment-id:2313247570 --> @thiswillbeyourgithub commented on GitHub (Aug 27, 2024): I don't know if you've settled on a UI for teams and permissions but I just wanted to illustrate for example what [paperless-ngx](https://docs.paperless-ngx.com/) is doing: ![image](https://github.com/user-attachments/assets/51f42446-3a27-4b3f-9c1b-d557e0f45e8a)
Author
Owner

@RobinBially commented on GitHub (Sep 17, 2024):

I have now implemented a workspace feature myself. This allows any user to have completely separate OpenWebUI instances with their own team members who can be imported from the main workspace.

https://github.com/user-attachments/assets/0eed0a15-2512-438d-821d-f12c73b685bf

<!-- gh-comment-id:2355348427 --> @RobinBially commented on GitHub (Sep 17, 2024): I have now implemented a workspace feature myself. This allows any user to have completely separate OpenWebUI instances with their own team members who can be imported from the main workspace. https://github.com/user-attachments/assets/0eed0a15-2512-438d-821d-f12c73b685bf
Author
Owner

@tjbck commented on GitHub (Nov 17, 2024):

This feature has been implemented on dev branch, a lot of testing wanted here!

<!-- gh-comment-id:2481038293 --> @tjbck commented on GitHub (Nov 17, 2024): This feature has been implemented on dev branch, a lot of testing wanted here!
Author
Owner

@meetzuber commented on GitHub (Nov 17, 2024):

Hi @tjbck

While testing I found issue related to workspace permission.

  1. create a group and only allowed knowledge.
  2. added user to the group.
  3. login with the group user and click on workspace
  4. It directly shows models page. it should only show allowed pages in workspace. I can also create a custom model without any issue.

but when I try to open models page directly from url it redirects to home page. The permission issue only come when we click on workspace link.

image

image

Also if normal user create a private model and do not add any group to the model. user can not use that model. user should have by default access to the model. also there should be an option to give access to individual users apart from group.

image

<!-- gh-comment-id:2481086591 --> @meetzuber commented on GitHub (Nov 17, 2024): Hi @tjbck While testing I found issue related to workspace permission. 1. create a group and only allowed knowledge. 2. added user to the group. 3. login with the group user and click on workspace 4. It directly shows models page. it should only show allowed pages in workspace. I can also create a custom model without any issue. but when I try to open models page directly from url it redirects to home page. The permission issue only come when we click on workspace link. ![image](https://github.com/user-attachments/assets/1c8fb34e-0ed0-454f-b922-6218a108679b) ![image](https://github.com/user-attachments/assets/55ccfb1b-bbd6-498b-a90a-945822979c6a) Also if normal user create a private model and do not add any group to the model. user can not use that model. user should have by default access to the model. also there should be an option to give access to individual users apart from group. ![image](https://github.com/user-attachments/assets/60b3417d-e7a7-4d55-b577-1231d18de04c)
Author
Owner

@meetzuber commented on GitHub (Nov 17, 2024):

Hi I also found issue while uploading docs in collection. not sure if it is related to this or some issue. Please check the logs below.

image

<!-- gh-comment-id:2481150216 --> @meetzuber commented on GitHub (Nov 17, 2024): Hi I also found issue while uploading docs in collection. not sure if it is related to this or some issue. Please check the logs below. ![image](https://github.com/user-attachments/assets/01cb2917-1819-4187-ac45-e87406c6d9d6)
Author
Owner

@tjbck commented on GitHub (Nov 17, 2024):

@meetzuber both should be fixed, let me know if the issue persists!

As for the individual user access control option, I plan on adding support for it soon after 0.4 is out, stay tuned!

<!-- gh-comment-id:2481161962 --> @tjbck commented on GitHub (Nov 17, 2024): @meetzuber both should be fixed, let me know if the issue persists! As for the individual user access control option, I plan on adding support for it soon after 0.4 is out, stay tuned!
Author
Owner

@meetzuber commented on GitHub (Nov 17, 2024):

@tjbck Above reported issues are fixed. Please check below issues.

  1. Redirecting to wrong URL after adding function. 404 error. redirect URL needs to be fixed.

image

  1. ownership scenario needs better handling in terms of data privacy and to fix the access security gap.

example situation:

User X created a knowledge base and uploaded multiple docs. now user X is sifted to other team or department and he should not have access to that knowledge base. As admin removed User X from the the group but still user X is able to access all knowledge base and Admin can not verify if user X is having the access or not. As per Admin dashboard user do not have access to KB, but user still have access to the KB.

This situation can be handled KB owner where admin can change owner and remove all access from the user. and can also see who is the owner on KB and verify the access. This is applicable to other objects like Model, Tools and Prompt.
I current implementation no can tell who created KB/Model and have by default access to that component (KB, Model, Tool or prompt).

<!-- gh-comment-id:2481222533 --> @meetzuber commented on GitHub (Nov 17, 2024): @tjbck Above reported issues are fixed. Please check below issues. 1. Redirecting to wrong URL after adding function. 404 error. redirect URL needs to be fixed. ![image](https://github.com/user-attachments/assets/d846ee2f-f8dd-4b4e-89d7-8c0ca417db4e) 2. ownership scenario needs better handling in terms of data privacy and to fix the access security gap. example situation: User X created a knowledge base and uploaded multiple docs. now user X is sifted to other team or department and he should not have access to that knowledge base. As admin removed User X from the the group but still user X is able to access all knowledge base and Admin can not verify if user X is having the access or not. As per Admin dashboard user do not have access to KB, but user still have access to the KB. This situation can be handled KB owner where admin can change owner and remove all access from the user. and can also see who is the owner on KB and verify the access. This is applicable to other objects like Model, Tools and Prompt. I current implementation no can tell who created KB/Model and have by default access to that component (KB, Model, Tool or prompt).
Author
Owner

@linuxrrze commented on GitHub (Nov 17, 2024):

I've been using openwebui with WEBUI_AUTH_TRUSTED* authentication and postgres database for some time now.
And I was amazed to see first version with group support, so I upgraded to the dev branch.

However since doing so I can no longer login:

I suppose the relevant error message is:

psycopg2.errors.UndefinedFunction: operator does not exist: json ~~ text
LINE 3: WHERE ("group".user_ids LIKE '%' || '["abae27ac-159b-41f5-a6...

I also tried the dev branch with an empty postgres database, the error stayed the same.
Starting with an empty sqlite database worked however.

Maybe some kind of special SQL handling from postgres (json <-> text type) ?

<!-- gh-comment-id:2481305595 --> @linuxrrze commented on GitHub (Nov 17, 2024): I've been using openwebui with WEBUI_AUTH_TRUSTED* authentication and postgres database for some time now. And I was amazed to see first version with group support, so I upgraded to the dev branch. However since doing so I can no longer login: I suppose the relevant error message is: psycopg2.errors.UndefinedFunction: operator does not exist: json ~~ text LINE 3: WHERE ("group".user_ids LIKE '%' || '["abae27ac-159b-41f5-a6... I also tried the dev branch with an empty postgres database, the error stayed the same. Starting with an empty sqlite database worked however. Maybe some kind of special SQL handling from postgres (json <-> text type) ?
Author
Owner

@meetzuber commented on GitHub (Nov 17, 2024):

@tjbck another issue while using base model with non admin user. I non admin user trying to chat using public base model gets below error. while working for for admin user.

image

Logs:

INFO:     146.196.32.189:14222 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 OK
INFO  [open_webui.apps.openai.main] get_all_models()
INFO:     146.196.32.189:13631 - "POST /api/chat/completions HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
  + Exception Group Traceback (most recent call last):
  |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
  |     yield
  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 190, in __call__
  |     async with anyio.create_task_group() as task_group:
  |   File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 763, in __aexit__
  |     raise BaseExceptionGroup(
  | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 401, in run_asgi
    |     result = await app(  # type: ignore[func-returns-value]
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__
    |     return await self.app(scope, receive, send)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
    |     await super().__call__(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
    |     await self.app(scope, receive, _send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 925, in inspect_websocket
    |     return await call_next(request)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 904, in update_embedding_function
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 896, in check_url
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 887, in commit_session_after_request
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in __call__
    |     await self.simple_response(scope, receive, send, request_headers=headers)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 148, in simple_response
    |     await self.app(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 866, in dispatch
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 838, in dispatch
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 678, in dispatch
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 65, in __call__
    |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 756, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 776, in app
    |     await route.handle(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle
    |     await self.app(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 77, in app
    |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 72, in app
    |     response = await func(request)
    |                ^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app
    |     raw_response = await run_endpoint_function(
    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
    |     return await dependant.call(**values)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/app/backend/open_webui/main.py", line 1151, in generate_chat_completions
    |     user.id == model_info.user_id
    |                ^^^^^^^^^^^^^^^^^^
    | AttributeError: 'NoneType' object has no attribute 'user_id'
    +------------------------------------

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 401, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
    await super().__call__(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
    await self.app(scope, receive, _send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 925, in inspect_websocket
    return await call_next(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 904, in update_embedding_function
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 896, in check_url
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 887, in commit_session_after_request
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 148, in simple_response
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 866, in dispatch
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 838, in dispatch
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 678, in dispatch
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 65, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 756, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 776, in app
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 77, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 72, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/open_webui/main.py", line 1151, in generate_chat_completions
    user.id == model_info.user_id
               ^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'user_id'
<!-- gh-comment-id:2481352580 --> @meetzuber commented on GitHub (Nov 17, 2024): @tjbck another issue while using base model with non admin user. I non admin user trying to chat using public base model gets below error. while working for for admin user. ![image](https://github.com/user-attachments/assets/21facda8-2350-4b62-96b8-949f7e014510) Logs: ```bash INFO: 146.196.32.189:14222 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 OK INFO [open_webui.apps.openai.main] get_all_models() INFO: 146.196.32.189:13631 - "POST /api/chat/completions HTTP/1.1" 500 Internal Server Error ERROR: Exception in ASGI application + Exception Group Traceback (most recent call last): | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 87, in collapse_excgroups | yield | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 190, in __call__ | async with anyio.create_task_group() as task_group: | File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 763, in __aexit__ | raise BaseExceptionGroup( | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) +-+---------------- 1 ---------------- | Traceback (most recent call last): | File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 401, in run_asgi | result = await app( # type: ignore[func-returns-value] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__ | return await self.app(scope, receive, send) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__ | await super().__call__(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__ | await self.middleware_stack(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__ | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__ | await self.app(scope, receive, _send) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 925, in inspect_websocket | return await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 904, in update_embedding_function | response = await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 896, in check_url | response = await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 887, in commit_session_after_request | response = await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch | response = await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in __call__ | await self.simple_response(scope, receive, send, request_headers=headers) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 148, in simple_response | await self.app(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 866, in dispatch | response = await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 838, in dispatch | response = await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ | with collapse_excgroups(): | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ | self.gen.throw(typ, value, traceback) | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ | response = await self.dispatch_func(request, call_next) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 678, in dispatch | response = await call_next(request) | ^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next | raise app_exc | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro | await self.app(scope, receive_or_disconnect, send_no_error) | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 65, in __call__ | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app | await app(scope, receive, sender) | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 756, in __call__ | await self.middleware_stack(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 776, in app | await route.handle(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle | await self.app(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 77, in app | await wrap_app_handling_exceptions(app, request)(scope, receive, send) | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app | raise exc | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app | await app(scope, receive, sender) | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 72, in app | response = await func(request) | ^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app | raw_response = await run_endpoint_function( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function | return await dependant.call(**values) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/app/backend/open_webui/main.py", line 1151, in generate_chat_completions | user.id == model_info.user_id | ^^^^^^^^^^^^^^^^^^ | AttributeError: 'NoneType' object has no attribute 'user_id' +------------------------------------ During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 401, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__ return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__ await super().__call__(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__ await self.middleware_stack(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__ raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__ await self.app(scope, receive, _send) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 925, in inspect_websocket return await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 904, in update_embedding_function response = await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 896, in check_url response = await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 887, in commit_session_after_request response = await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch response = await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in __call__ await self.simple_response(scope, receive, send, request_headers=headers) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 148, in simple_response await self.app(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 866, in dispatch response = await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 838, in dispatch response = await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__ with collapse_excgroups(): File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 678, in dispatch response = await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 65, in __call__ await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app raise exc File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 756, in __call__ await self.middleware_stack(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 776, in app await route.handle(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle await self.app(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 77, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app raise exc File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 72, in app response = await func(request) ^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function return await dependant.call(**values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/backend/open_webui/main.py", line 1151, in generate_chat_completions user.id == model_info.user_id ^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'user_id' ```
Author
Owner

@meetzuber commented on GitHub (Nov 17, 2024):

@tjbck There is no playground access to non-admin users. Can we have option to enable playground in group permissions. Giving admin rights just for playground access is not a good idea.

<!-- gh-comment-id:2481415057 --> @meetzuber commented on GitHub (Nov 17, 2024): @tjbck There is no playground access to non-admin users. Can we have option to enable playground in group permissions. Giving admin rights just for playground access is not a good idea.
Author
Owner

@tjbck commented on GitHub (Nov 17, 2024):

@meetzuber Both issues should be fixed, let me know issue persists.

After careful consideration, I've decided that the playground feature will not be made available to general users at this time. We may consider adding more granular permissions for it when the feature is more refined, but as of now, it's far from being ready for wider access.

Also, please be mindful of how you communicate with everyone. We're here to collaborate, not to serve demands. Additionally, avoid spamming the thread—make use of the edit feature instead of posting repeatedly.

<!-- gh-comment-id:2481610515 --> @tjbck commented on GitHub (Nov 17, 2024): @meetzuber Both issues should be fixed, let me know issue persists. After careful consideration, I've decided that the playground feature will not be made available to general users at this time. We may consider adding more granular permissions for it when the feature is more refined, but as of now, it's far from being ready for wider access. Also, please be mindful of how you communicate with everyone. We're here to collaborate, not to serve demands. Additionally, avoid spamming the thread—make use of the edit feature instead of posting repeatedly.
Author
Owner

@tjbck commented on GitHub (Nov 17, 2024):

@linuxrrze should be addressed with #6996, let me know if the issue persists!

<!-- gh-comment-id:2481613947 --> @tjbck commented on GitHub (Nov 17, 2024): @linuxrrze should be addressed with #6996, let me know if the issue persists!
Author
Owner

@linuxrrze commented on GitHub (Nov 18, 2024):

@linuxrrze should be addressed with #6996, let me know if the issue persists!

@tjbck login works again - thank you for the super-fast solution!

<!-- gh-comment-id:2482134487 --> @linuxrrze commented on GitHub (Nov 18, 2024): > @linuxrrze should be addressed with #6996, let me know if the issue persists! @tjbck login works again - thank you for the super-fast solution!
Author
Owner

@haseebsultankhan commented on GitHub (Nov 18, 2024):

Apologies for a such a basic question.
@tjbck , Should i just clone the dev branch and run with docker. That will have a teams/users feature?

Ollama is already installed in my system and models are also downloaded

<!-- gh-comment-id:2482445203 --> @haseebsultankhan commented on GitHub (Nov 18, 2024): Apologies for a such a basic question. @tjbck , Should i just clone the dev branch and run with docker. That will have a teams/users feature? Ollama is already installed in my system and models are also downloaded
Author
Owner

@sebdanielsson commented on GitHub (Nov 18, 2024):

Apologies for a such a basic question.

@tjbck , Should i just clone the dev branch and run with docker. That will have a teams/users feature?

Ollama is already installed in my system and models are also downloaded

If you're using Docker you only need to make sure that you use the dev tag, and make sure to pull the latest dev image from time to time.

<!-- gh-comment-id:2483076680 --> @sebdanielsson commented on GitHub (Nov 18, 2024): > Apologies for a such a basic question. > > @tjbck , Should i just clone the dev branch and run with docker. That will have a teams/users feature? > > > > Ollama is already installed in my system and models are also downloaded If you're using Docker you only need to make sure that you use the dev tag, and make sure to pull the latest dev image from time to time.
Author
Owner

@Bleckert72 commented on GitHub (Dec 12, 2024):

Hello fantastic team!

I'm new here but we use Open WebUI with greate sucess. The update with groups are good. But I miss the feature of cloning a public model.

The usecase is:
I as admin have created a model. I have created a group thar are allowed to create models, but when they login they do not see my models, i.e., they can not clode it and add there features.

Perhaps I would like to have two levels, one for contributers and one for contributers and access to modify my models, I do not want to make them Admin to get all thoses settings.

Can I already do this? Or can this be a feature in the backlog?

<!-- gh-comment-id:2539349283 --> @Bleckert72 commented on GitHub (Dec 12, 2024): Hello fantastic team! I'm new here but we use Open WebUI with greate sucess. The update with groups are good. But I miss the feature of cloning a public model. The usecase is: I as admin have created a model. I have created a group thar are allowed to create models, but when they login they do not see my models, i.e., they can not clode it and add there features. Perhaps I would like to have two levels, one for contributers and one for contributers and access to modify my models, I do not want to make them Admin to get all thoses settings. Can I already do this? Or can this be a feature in the backlog?
Author
Owner

@Wadera commented on GitHub (Dec 12, 2024):

I've got it working this way:

image
image

And then in Admin settings -> Models
I've set base models as private with access only for Models Creators group:

image

This way - ordinary users can only see models I've created and assigned to them in my Workspace, example:
image

But Few smart people can see base models as well and they are able to create new ones and share them with other people (or keep them private) in their work spaces as well.

Is that what you are looking for?

<!-- gh-comment-id:2539856232 --> @Wadera commented on GitHub (Dec 12, 2024): I've got it working this way: ![image](https://github.com/user-attachments/assets/2c0ca90f-5865-4678-9f13-3ed78127f537) ![image](https://github.com/user-attachments/assets/bc4f2e85-e449-4176-affa-916bcf103bcc) And then in Admin settings -> Models I've set base models as private with access only for Models Creators group: ![image](https://github.com/user-attachments/assets/27e3f291-a676-478f-827b-edae4043ec83) This way - ordinary users can only see models I've created and assigned to them in my Workspace, example: ![image](https://github.com/user-attachments/assets/0b8b3f4b-951f-4c79-9c2f-ed00ac8c4c64) But Few smart people can see base models as well and they are able to create new ones and share them with other people (or keep them private) in their work spaces as well. Is that what you are looking for?
Author
Owner

@Wadera commented on GitHub (Dec 12, 2024):

Other groups I've got (minus a few more private which I've hidden) maybe it would inspire you for more granular management:

image

This way - people can create models and knowledge bases and share them only within only people they intent to share (it's a shame that we can share it only with groups, but not with individual users).

<!-- gh-comment-id:2539866836 --> @Wadera commented on GitHub (Dec 12, 2024): Other groups I've got (minus a few more private which I've hidden) maybe it would inspire you for more granular management: ![image](https://github.com/user-attachments/assets/8bcf13f1-4578-4ccb-b40a-f9a675e0e5a6) This way - people can create models and knowledge bases and share them only within only people they intent to share (it's a shame that we can share it only with groups, but not with individual users).
Author
Owner

@Bleckert72 commented on GitHub (Dec 19, 2024):

I've got it working this way:

@Wadera Many thanks, Yes, this is the way.

<!-- gh-comment-id:2552967905 --> @Bleckert72 commented on GitHub (Dec 19, 2024): > I've got it working this way: > @Wadera Many thanks, Yes, this is the way.
Author
Owner

@flefevre commented on GitHub (Dec 19, 2024):

I have created a discussion on how to improve group management for the version 2 here https://github.com/open-webui/open-webui/discussions/7928
perhaps somes ideas are good others bad.

<!-- gh-comment-id:2552971258 --> @flefevre commented on GitHub (Dec 19, 2024): I have created a discussion on how to improve group management for the version 2 here https://github.com/open-webui/open-webui/discussions/7928 perhaps somes ideas are good others bad.
Author
Owner

@mason-chase commented on GitHub (Dec 21, 2024):

@tjbck

@meetzuber Both issues should be fixed, let me know issue persists.

After careful consideration, I've decided that the playground feature will not be made available to general users at this time. We may consider adding more granular permissions for it when the feature is more refined, but as of now, it's far from being ready for wider access.

Hi Tim,

Great work on open-webui
May I ask what is the reason for excluding the playground? if it's technical,
will you accept a PR if the feature is added to granular permission?

Cheers
Mason

<!-- gh-comment-id:2558148110 --> @mason-chase commented on GitHub (Dec 21, 2024): @tjbck > @meetzuber Both issues should be fixed, let me know issue persists. > > After careful consideration, I've decided that the playground feature will not be made available to general users at this time. We may consider adding more granular permissions for it when the feature is more refined, but as of now, it's far from being ready for wider access. Hi Tim, Great work on open-webui May I ask what is the reason for excluding the playground? if it's technical, will you accept a PR if the feature is added to granular permission? Cheers Mason
Author
Owner

@bobkumar-online commented on GitHub (Apr 8, 2025):

First off, Great Work. Love this platform.

Has there been any progress of getting multiple workspaces added as an added feature into the main branch? Would love to see this effort continue to move forward.

<!-- gh-comment-id:2786709790 --> @bobkumar-online commented on GitHub (Apr 8, 2025): First off, Great Work. Love this platform. Has there been any progress of getting multiple workspaces added as an added feature into the main branch? Would love to see this effort continue to move forward.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#51735