[GH-ISSUE #19005] issue: Can no longer edit models in admin panel or create/edit workspace models when using LiteLLM as a proxy for Gemini. #57409

Closed
opened 2026-05-05 20:55:17 -05:00 by GiteaMirror · 1 comment
Owner

Originally created by @DeusMaximus on GitHub (Nov 7, 2025).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/19005

Check Existing Issues

  • I have searched for any existing and/or related issues.
  • I have searched for any existing and/or related discussions.
  • I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!).
  • I am using the latest version of Open WebUI.

Installation Method

Docker

Open WebUI Version

v0.6.36

Ollama Version (if applicable)

N/A

Operating System

Debian 13

Browser (if applicable)

Microsoft Edge, Google Chrome, tested in Incognito mode. Seems to be backend related.

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using the latest version of both Open WebUI and Ollama.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have provided every relevant configuration, setting, and environment variable used in my setup.
  • I have clearly listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc).
  • I have documented step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation. My steps:
  • Start with the initial platform/version/OS and dependencies used,
  • Specify exact install/launch/configure commands,
  • List URLs visited, user input (incl. example values/emails/passwords if needed),
  • Describe all options and toggles enabled or changed,
  • Include any files or environmental changes,
  • Identify the expected and actual result at each stage,
  • Ensure any reasonably skilled user can follow and hit the same issue.

Expected Behavior

Expected to be able to edit existing model settings.

Actual Behavior

Blank area of the site where the model configuration was previously.

Steps to Reproduce

  1. Navigate to Workspace > Models
  2. Attempt to create or modify pre-existing model in Workspace
  3. Blank screen in area where model existed previously.
  4. Navigate to Admin panel > Settings > Models
  5. Attempt to modify existing model configuration
  6. Same blank screen in area where model configuration existed previously

Logs & Screenshots

From docker compose -f logs openwebui
(This occurs when attempting to edit a model in the admin panel)

openwebui  | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
openwebui  | 
openwebui  | [notice] A new release of pip is available: 24.0 -> 25.3
openwebui  | [notice] To update, run: pip install --upgrade pip
openwebui  | 2025-11-07 06:39:47.710 | ERROR    | open_webui.utils.plugin:load_tool_module_by_id:111 - Error loading module: gemini_flash_image: cannot import name 'load_b64_image_data' from 'open_webui.routers.images' (/app/backend/open_webui/routers/images.py)
openwebui  | 2025-11-07 06:39:47.712 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 10.86.64.93:0 - "GET /api/v1/tools/ HTTP/1.1" 500
openwebui  | Exception in ASGI application
openwebui  |   + Exception Group Traceback (most recent call last):
openwebui  |   |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 79, in collapse_excgroups
openwebui  |   |     yield
openwebui  |   |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 183, in __call__
openwebui  |   |     async with anyio.create_task_group() as task_group:
openwebui  |   |   File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 781, in __aexit__
openwebui  |   |     raise BaseExceptionGroup(
openwebui  |   | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
openwebui  |   +-+---------------- 1 ----------------
openwebui  |     | Traceback (most recent call last):
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
openwebui  |     |     result = await app(  # type: ignore[func-returns-value]
openwebui  |     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
openwebui  |     |     return await self.app(scope, receive, send)
openwebui  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1133, in __call__
openwebui  |     |     await super().__call__(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__
openwebui  |     |     await self.middleware_stack(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
openwebui  |     |     await self.app(scope, receive, _send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__
openwebui  |     |     await self.app(scope, receive, send_wrapper)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__
openwebui  |     |     await self.app(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     |     self.gen.throw(typ, value, traceback)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     |     response = await self.dispatch_func(request, call_next)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/main.py", line 1305, in inspect_websocket
openwebui  |     |     return await call_next(request)
openwebui  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     |     raise app_exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     |     self.gen.throw(typ, value, traceback)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     |     response = await self.dispatch_func(request, call_next)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/main.py", line 1284, in check_url
openwebui  |     |     response = await call_next(request)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     |     raise app_exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     |     self.gen.throw(typ, value, traceback)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     |     response = await self.dispatch_func(request, call_next)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/main.py", line 1270, in commit_session_after_request
openwebui  |     |     response = await call_next(request)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     |     raise app_exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     |     self.gen.throw(typ, value, traceback)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     |     response = await self.dispatch_func(request, call_next)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch
openwebui  |     |     response = await call_next(request)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     |     raise app_exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     |     self.gen.throw(typ, value, traceback)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     |     response = await self.dispatch_func(request, call_next)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/main.py", line 1256, in dispatch
openwebui  |     |     response = await call_next(request)
openwebui  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     |     raise app_exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init__.py", line 92, in __call__
openwebui  |     |     return await self._zstd(scope, receive, send)
openwebui  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in __call__
openwebui  |     |     await self.app(scope, receive, wrapper)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
openwebui  |     |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
openwebui  |     |     await app(scope, receive, sender)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
openwebui  |     |     await self.app(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 716, in __call__
openwebui  |     |     await self.middleware_stack(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 736, in app
openwebui  |     |     await route.handle(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 290, in handle
openwebui  |     |     await self.app(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 123, in app
openwebui  |     |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
openwebui  |     |     raise exc
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
openwebui  |     |     await app(scope, receive, sender)
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 109, in app
openwebui  |     |     response = await f(request)
openwebui  |     |                ^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 387, in app
openwebui  |     |     raw_response = await run_endpoint_function(
openwebui  |     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 288, in run_endpoint_function
openwebui  |     |     return await dependant.call(**values)
openwebui  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/routers/tools.py", line 61, in get_tools
openwebui  |     |     tool_module = get_tool_module(request, tool.id)
openwebui  |     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/routers/tools.py", line 46, in get_tool_module
openwebui  |     |     tool_module, _ = get_tool_module_from_cache(request, tool_id, load_from_db)
openwebui  |     |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/utils/plugin.py", line 192, in get_tool_module_from_cache
openwebui  |     |     tool_module, frontmatter = load_tool_module_by_id(tool_id, content)
openwebui  |     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |     |   File "/app/backend/open_webui/utils/plugin.py", line 113, in load_tool_module_by_id
openwebui  |     |     raise e
openwebui  |     |   File "/app/backend/open_webui/utils/plugin.py", line 101, in load_tool_module_by_id
openwebui  |     |     exec(content, module.__dict__)
openwebui  |     |   File "<string>", line 13, in <module>
openwebui  |     | ImportError: cannot import name 'load_b64_image_data' from 'open_webui.routers.images' (/app/backend/open_webui/routers/images.py)
openwebui  |     +------------------------------------
openwebui  | 
openwebui  | During handling of the above exception, another exception occurred:
openwebui  | 
openwebui  | Traceback (most recent call last):
openwebui  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
openwebui  |     result = await app(  # type: ignore[func-returns-value]
openwebui  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
openwebui  |     return await self.app(scope, receive, send)
openwebui  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1133, in __call__
openwebui  |     await super().__call__(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__
openwebui  |     await self.middleware_stack(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
openwebui  |     await self.app(scope, receive, _send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__
openwebui  |     await self.app(scope, receive, send_wrapper)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__
openwebui  |     await self.app(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     self.gen.throw(typ, value, traceback)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     response = await self.dispatch_func(request, call_next)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/main.py", line 1305, in inspect_websocket
openwebui  |     return await call_next(request)
openwebui  |            ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     raise app_exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     self.gen.throw(typ, value, traceback)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     response = await self.dispatch_func(request, call_next)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/main.py", line 1284, in check_url
openwebui  |     response = await call_next(request)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     raise app_exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     self.gen.throw(typ, value, traceback)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     response = await self.dispatch_func(request, call_next)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/main.py", line 1270, in commit_session_after_request
openwebui  |     response = await call_next(request)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     raise app_exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     self.gen.throw(typ, value, traceback)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     response = await self.dispatch_func(request, call_next)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch
openwebui  |     response = await call_next(request)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     raise app_exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__
openwebui  |     with recv_stream, send_stream, collapse_excgroups():
openwebui  |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
openwebui  |     self.gen.throw(typ, value, traceback)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__
openwebui  |     response = await self.dispatch_func(request, call_next)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/main.py", line 1256, in dispatch
openwebui  |     response = await call_next(request)
openwebui  |                ^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next
openwebui  |     raise app_exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
openwebui  |     await self.app(scope, receive_or_disconnect, send_no_error)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init__.py", line 92, in __call__
openwebui  |     return await self._zstd(scope, receive, send)
openwebui  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in __call__
openwebui  |     await self.app(scope, receive, wrapper)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
openwebui  |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
openwebui  |     await app(scope, receive, sender)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
openwebui  |     await self.app(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 716, in __call__
openwebui  |     await self.middleware_stack(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 736, in app
openwebui  |     await route.handle(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 290, in handle
openwebui  |     await self.app(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 123, in app
openwebui  |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
openwebui  |     raise exc
openwebui  |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
openwebui  |     await app(scope, receive, sender)
openwebui  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 109, in app
openwebui  |     response = await f(request)
openwebui  |                ^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 387, in app
openwebui  |     raw_response = await run_endpoint_function(
openwebui  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 288, in run_endpoint_function
openwebui  |     return await dependant.call(**values)
openwebui  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/routers/tools.py", line 61, in get_tools
openwebui  |     tool_module = get_tool_module(request, tool.id)
openwebui  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/routers/tools.py", line 46, in get_tool_module
openwebui  |     tool_module, _ = get_tool_module_from_cache(request, tool_id, load_from_db)
openwebui  |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/utils/plugin.py", line 192, in get_tool_module_from_cache
openwebui  |     tool_module, frontmatter = load_tool_module_by_id(tool_id, content)
openwebui  |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
openwebui  |   File "/app/backend/open_webui/utils/plugin.py", line 113, in load_tool_module_by_id
openwebui  |     raise e
openwebui  |   File "/app/backend/open_webui/utils/plugin.py", line 101, in load_tool_module_by_id
openwebui  |     exec(content, module.__dict__)
openwebui  |   File "<string>", line 13, in <module>
openwebui  | ImportError: cannot import name 'load_b64_image_data' from 'open_webui.routers.images' (/app/backend/open_webui/routers/images.py)

Additional Information

Setup is as follows:

Open WebUI running on one machine with Caddy providing the SSL certificate for the internally resolved address via a DNS challenge. Setup was working until docker image for Open WebUI was updated (caddy stayed at the same version prior)

Another machine is running LiteLLM as a proxy, in order to track and enforce costs.

docker-compose.yml for Open WebUI and Caddy

version: "3.8"

services:
  caddy:
    # Build the custom image from the local Dockerfile
    build:
      context: .
      dockerfile: Dockerfile
    container_name: caddy
    restart: unless-stopped
    ports:
      # HTTP
      - "80:80"
      # HTTPS
      - "443:443"
    environment:
      # Pass the secrets from the .env file
      - DOMAIN=${DOMAIN}
      - CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL}
      - CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
    volumes:
      # Mount the Caddyfile
      - ./Caddyfile:/etc/caddy/Caddyfile
      # Persist Caddy's data (including SSL certificates)
      - caddy_data:/data
    networks:
      - web

  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    restart: unless-stopped
    # Use the 'main' image which does not include Ollama
    # No ports needed, Caddy will access it on the internal network
    environment:
      # OpenWebUI is served on 8080 internally
      - PORT=8080 
      # Disable local Ollama (highly recommended for API-only use)
      - ENABLE_OLLAMA_API=False
    volumes:
      # Persist OpenWebUI's data (chat history, settings, RAG files)
      - openwebui_data:/app/backend/data
    networks:
      - web

# Define named volumes for persistence
volumes:
  caddy_data:
  openwebui_data:

# Define a custom bridge network for the services
networks:
  web:
    driver: bridge
Originally created by @DeusMaximus on GitHub (Nov 7, 2025). Original GitHub issue: https://github.com/open-webui/open-webui/issues/19005 ### Check Existing Issues - [x] I have searched for any existing and/or related issues. - [x] I have searched for any existing and/or related discussions. - [x] I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!). - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.6.36 ### Ollama Version (if applicable) N/A ### Operating System Debian 13 ### Browser (if applicable) Microsoft Edge, Google Chrome, tested in Incognito mode. Seems to be backend related. ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** Open WebUI and Ollama. - [x] I have included the browser console logs. - [x] I have included the Docker container logs. - [x] I have **provided every relevant configuration, setting, and environment variable used in my setup.** - [x] I have clearly **listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup** (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc). - [x] I have documented **step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation**. My steps: - Start with the initial platform/version/OS and dependencies used, - Specify exact install/launch/configure commands, - List URLs visited, user input (incl. example values/emails/passwords if needed), - Describe all options and toggles enabled or changed, - Include any files or environmental changes, - Identify the expected and actual result at each stage, - Ensure any reasonably skilled user can follow and hit the same issue. ### Expected Behavior Expected to be able to edit existing model settings. ### Actual Behavior Blank area of the site where the model configuration was previously. ### Steps to Reproduce 1. Navigate to Workspace > Models 2. Attempt to create or modify pre-existing model in Workspace 3. Blank screen in area where model existed previously. 4. Navigate to Admin panel > Settings > Models 5. Attempt to modify existing model configuration 6. Same blank screen in area where model configuration existed previously ### Logs & Screenshots From docker compose -f logs openwebui (This occurs when attempting to edit a model in the admin panel) -- ``` openwebui | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv openwebui | openwebui | [notice] A new release of pip is available: 24.0 -> 25.3 openwebui | [notice] To update, run: pip install --upgrade pip openwebui | 2025-11-07 06:39:47.710 | ERROR | open_webui.utils.plugin:load_tool_module_by_id:111 - Error loading module: gemini_flash_image: cannot import name 'load_b64_image_data' from 'open_webui.routers.images' (/app/backend/open_webui/routers/images.py) openwebui | 2025-11-07 06:39:47.712 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 10.86.64.93:0 - "GET /api/v1/tools/ HTTP/1.1" 500 openwebui | Exception in ASGI application openwebui | + Exception Group Traceback (most recent call last): openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 79, in collapse_excgroups openwebui | | yield openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 183, in __call__ openwebui | | async with anyio.create_task_group() as task_group: openwebui | | File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 781, in __aexit__ openwebui | | raise BaseExceptionGroup( openwebui | | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) openwebui | +-+---------------- 1 ---------------- openwebui | | Traceback (most recent call last): openwebui | | File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi openwebui | | result = await app( # type: ignore[func-returns-value] openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ openwebui | | return await self.app(scope, receive, send) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1133, in __call__ openwebui | | await super().__call__(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__ openwebui | | await self.middleware_stack(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__ openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__ openwebui | | await self.app(scope, receive, _send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__ openwebui | | await self.app(scope, receive, send_wrapper) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__ openwebui | | await self.app(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | | with recv_stream, send_stream, collapse_excgroups(): openwebui | | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | | self.gen.throw(typ, value, traceback) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | | response = await self.dispatch_func(request, call_next) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/main.py", line 1305, in inspect_websocket openwebui | | return await call_next(request) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | | raise app_exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | | with recv_stream, send_stream, collapse_excgroups(): openwebui | | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | | self.gen.throw(typ, value, traceback) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | | response = await self.dispatch_func(request, call_next) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/main.py", line 1284, in check_url openwebui | | response = await call_next(request) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | | raise app_exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | | with recv_stream, send_stream, collapse_excgroups(): openwebui | | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | | self.gen.throw(typ, value, traceback) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | | response = await self.dispatch_func(request, call_next) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/main.py", line 1270, in commit_session_after_request openwebui | | response = await call_next(request) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | | raise app_exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | | with recv_stream, send_stream, collapse_excgroups(): openwebui | | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | | self.gen.throw(typ, value, traceback) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | | response = await self.dispatch_func(request, call_next) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch openwebui | | response = await call_next(request) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | | raise app_exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | | with recv_stream, send_stream, collapse_excgroups(): openwebui | | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | | self.gen.throw(typ, value, traceback) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | | response = await self.dispatch_func(request, call_next) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/main.py", line 1256, in dispatch openwebui | | response = await call_next(request) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | | raise app_exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init__.py", line 92, in __call__ openwebui | | return await self._zstd(scope, receive, send) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in __call__ openwebui | | await self.app(scope, receive, wrapper) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ openwebui | | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app openwebui | | await app(scope, receive, sender) openwebui | | File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ openwebui | | await self.app(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 716, in __call__ openwebui | | await self.middleware_stack(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 736, in app openwebui | | await route.handle(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 290, in handle openwebui | | await self.app(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 123, in app openwebui | | await wrap_app_handling_exceptions(app, request)(scope, receive, send) openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app openwebui | | raise exc openwebui | | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app openwebui | | await app(scope, receive, sender) openwebui | | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 109, in app openwebui | | response = await f(request) openwebui | | ^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 387, in app openwebui | | raw_response = await run_endpoint_function( openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 288, in run_endpoint_function openwebui | | return await dependant.call(**values) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/routers/tools.py", line 61, in get_tools openwebui | | tool_module = get_tool_module(request, tool.id) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/routers/tools.py", line 46, in get_tool_module openwebui | | tool_module, _ = get_tool_module_from_cache(request, tool_id, load_from_db) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/utils/plugin.py", line 192, in get_tool_module_from_cache openwebui | | tool_module, frontmatter = load_tool_module_by_id(tool_id, content) openwebui | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | | File "/app/backend/open_webui/utils/plugin.py", line 113, in load_tool_module_by_id openwebui | | raise e openwebui | | File "/app/backend/open_webui/utils/plugin.py", line 101, in load_tool_module_by_id openwebui | | exec(content, module.__dict__) openwebui | | File "<string>", line 13, in <module> openwebui | | ImportError: cannot import name 'load_b64_image_data' from 'open_webui.routers.images' (/app/backend/open_webui/routers/images.py) openwebui | +------------------------------------ openwebui | openwebui | During handling of the above exception, another exception occurred: openwebui | openwebui | Traceback (most recent call last): openwebui | File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi openwebui | result = await app( # type: ignore[func-returns-value] openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ openwebui | return await self.app(scope, receive, send) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1133, in __call__ openwebui | await super().__call__(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__ openwebui | await self.middleware_stack(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__ openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__ openwebui | await self.app(scope, receive, _send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__ openwebui | await self.app(scope, receive, send_wrapper) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__ openwebui | await self.app(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | with recv_stream, send_stream, collapse_excgroups(): openwebui | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | self.gen.throw(typ, value, traceback) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | response = await self.dispatch_func(request, call_next) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/main.py", line 1305, in inspect_websocket openwebui | return await call_next(request) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | raise app_exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | with recv_stream, send_stream, collapse_excgroups(): openwebui | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | self.gen.throw(typ, value, traceback) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | response = await self.dispatch_func(request, call_next) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/main.py", line 1284, in check_url openwebui | response = await call_next(request) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | raise app_exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | with recv_stream, send_stream, collapse_excgroups(): openwebui | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | self.gen.throw(typ, value, traceback) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | response = await self.dispatch_func(request, call_next) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/main.py", line 1270, in commit_session_after_request openwebui | response = await call_next(request) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | raise app_exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | with recv_stream, send_stream, collapse_excgroups(): openwebui | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | self.gen.throw(typ, value, traceback) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | response = await self.dispatch_func(request, call_next) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/utils/security_headers.py", line 11, in dispatch openwebui | response = await call_next(request) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | raise app_exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 182, in __call__ openwebui | with recv_stream, send_stream, collapse_excgroups(): openwebui | File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__ openwebui | self.gen.throw(typ, value, traceback) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 184, in __call__ openwebui | response = await self.dispatch_func(request, call_next) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/main.py", line 1256, in dispatch openwebui | response = await call_next(request) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 159, in call_next openwebui | raise app_exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro openwebui | await self.app(scope, receive_or_disconnect, send_no_error) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init__.py", line 92, in __call__ openwebui | return await self._zstd(scope, receive, send) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in __call__ openwebui | await self.app(scope, receive, wrapper) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ openwebui | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app openwebui | await app(scope, receive, sender) openwebui | File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ openwebui | await self.app(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 716, in __call__ openwebui | await self.middleware_stack(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 736, in app openwebui | await route.handle(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 290, in handle openwebui | await self.app(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 123, in app openwebui | await wrap_app_handling_exceptions(app, request)(scope, receive, send) openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app openwebui | raise exc openwebui | File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app openwebui | await app(scope, receive, sender) openwebui | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 109, in app openwebui | response = await f(request) openwebui | ^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 387, in app openwebui | raw_response = await run_endpoint_function( openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 288, in run_endpoint_function openwebui | return await dependant.call(**values) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/routers/tools.py", line 61, in get_tools openwebui | tool_module = get_tool_module(request, tool.id) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/routers/tools.py", line 46, in get_tool_module openwebui | tool_module, _ = get_tool_module_from_cache(request, tool_id, load_from_db) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/utils/plugin.py", line 192, in get_tool_module_from_cache openwebui | tool_module, frontmatter = load_tool_module_by_id(tool_id, content) openwebui | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ openwebui | File "/app/backend/open_webui/utils/plugin.py", line 113, in load_tool_module_by_id openwebui | raise e openwebui | File "/app/backend/open_webui/utils/plugin.py", line 101, in load_tool_module_by_id openwebui | exec(content, module.__dict__) openwebui | File "<string>", line 13, in <module> openwebui | ImportError: cannot import name 'load_b64_image_data' from 'open_webui.routers.images' (/app/backend/open_webui/routers/images.py) ``` ### Additional Information Setup is as follows: Open WebUI running on one machine with Caddy providing the SSL certificate for the internally resolved address via a DNS challenge. Setup was working until docker image for Open WebUI was updated (caddy stayed at the same version prior) Another machine is running LiteLLM as a proxy, in order to track and enforce costs. docker-compose.yml for Open WebUI and Caddy ``` version: "3.8" services: caddy: # Build the custom image from the local Dockerfile build: context: . dockerfile: Dockerfile container_name: caddy restart: unless-stopped ports: # HTTP - "80:80" # HTTPS - "443:443" environment: # Pass the secrets from the .env file - DOMAIN=${DOMAIN} - CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL} - CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} volumes: # Mount the Caddyfile - ./Caddyfile:/etc/caddy/Caddyfile # Persist Caddy's data (including SSL certificates) - caddy_data:/data networks: - web openwebui: image: ghcr.io/open-webui/open-webui:main container_name: openwebui restart: unless-stopped # Use the 'main' image which does not include Ollama # No ports needed, Caddy will access it on the internal network environment: # OpenWebUI is served on 8080 internally - PORT=8080 # Disable local Ollama (highly recommended for API-only use) - ENABLE_OLLAMA_API=False volumes: # Persist OpenWebUI's data (chat history, settings, RAG files) - openwebui_data:/app/backend/data networks: - web # Define named volumes for persistence volumes: caddy_data: openwebui_data: # Define a custom bridge network for the services networks: web: driver: bridge ```
GiteaMirror added the bug label 2026-05-05 20:55:17 -05:00
Author
Owner

@DeusMaximus commented on GitHub (Nov 7, 2025):

Managed to find the culprit.

When attempting to trial different methods for adding gemini/gemini-2.5-flash-image, I tested this tool out:
https://openwebui.com/t/david888/Nano_Banana

This tool worked under my previous version (v0.6.3.4), but with the latest version it seems to break the ability to edit models. Removing this tool now allows me to edit models under Admin Panel, in addition to Workspace models.

<!-- gh-comment-id:3501047712 --> @DeusMaximus commented on GitHub (Nov 7, 2025): Managed to find the culprit. When attempting to trial different methods for adding gemini/gemini-2.5-flash-image, I tested this tool out: https://openwebui.com/t/david888/Nano_Banana This tool worked under my previous version (v0.6.3.4), but with the latest version it seems to break the ability to edit models. Removing this tool now allows me to edit models under Admin Panel, in addition to Workspace models.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#57409