[GH-ISSUE #19915] issue: JWT auth causes 500 with stack trace #89779

Closed
opened 2026-05-15 14:46:33 -05:00 by GiteaMirror · 6 comments
Owner

Originally created by @pvutov on GitHub (Dec 12, 2025).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/19915

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

Pip Install

Open WebUI Version

open-webui@0.6.41

Ollama Version (if applicable)

No response

Operating System

debian 13

Browser (if applicable)

curl

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

I want to use the API with a token. When I click "Create new secret key" in the browser on my admin account's options, I get a 403 (any idea why?). Fortunately there is already a prefilled JWT token that I can use anyway.

I copy the JWT token and do the following:

TOKEN="eyJhbGciOiJIUzIblablfgbs-gbdfgbldfghphtrskhkmnbfgdfgdfgo_dfgnortymdhxhxnbvnWys2hU" curl -H "Authorization: Bearer ${TOKEN}" https://example.org/v1/chat/completions -H "Content-Type: application/json" -d  '{

  "messages": [
    {"role": "user", "content": "Give me a short introduction to large language models."}
  ],
  "temperature": 0.6,
  "top_p": 0.95,
  "top_k": 20,
  "max_tokens": 32768
}'

I expect my request to be forwarded to some LLM, to correctly authenticate or at least to get an auth refusal.

Actual Behavior

open-webui responds with an internal server error.

Steps to Reproduce

Go to the open-webui interface, settings -> account -> API keys. Copy the pregenerated JWT value.

Take an arbitrary linux machine and call:

TOKEN="eyJhbGciOiJIUzIblablfgbs-gbdfgbldfghphtrskhkmnbfgdfgdfgo_dfgnortymdhxhxnbvnWys2hU" curl -H "Authorization: Bearer ${TOKEN}" https://example.org/v1/chat/completions -H "Content-Type: application/json" -d  '{

  "messages": [
    {"role": "user", "content": "Give me a short introduction to large language models."}
  ],
  "temperature": 0.6,
  "top_p": 0.95,
  "top_k": 20,
  "max_tokens": 32768
}'

Where TOKEN is the JWT and example.org is the hostname of your open-webui instance.

I start open-webui like this, on a fresh debian 13 install using uv 0.9.17 (manually extracted to /usr/local/bin):

/usr/local/bin/uv tool uvx --python 3.11 open-webui@0.6.41 serve

Logs & Screenshots

The response is

Internal Server Error

At the same time openwebui prints the following stack trace:

Dec 12 14:58:03 eimfs-llm01 uvx[419]: 2025-12-12 14:58:03.733 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 10.40.8.171:0 - "POST /v1/chat/completions HTTP/1.1" 500
Dec 12 14:58:03 eimfs-llm01 uvx[419]: Exception in ASGI application
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   + Exception Group Traceback (most recent call last):
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 79, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   |     yield
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 192, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   |     async with anyio.create_task_group() as task_group:
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 783, in __aexit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   |     raise BaseExceptionGroup(
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   +-+---------------- 1 ----------------
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     | Traceback (most recent call last):
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     result = await app(  # type: ignore[func-returns-value]
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     return await self.app(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/fastapi/applications.py", line 1134, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await super().__call__(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/applications.py", line 107, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await self.middleware_stack(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await self.app(scope, receive, _send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await self.app(scope, receive, send_wrapper)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await self.app(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1350, in inspect_websocket
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     return await call_next(request)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |            ^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise app_exc from app_exc.__cause__ or app_exc.__context__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await self.app(scope, receive_or_disconnect, send_no_error)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1329, in check_url
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     response = await call_next(request)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |                ^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise app_exc from app_exc.__cause__ or app_exc.__context__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await self.app(scope, receive_or_disconnect, send_no_error)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1315, in commit_session_after_request
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     response = await call_next(request)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |                ^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise app_exc from app_exc.__cause__ or app_exc.__context__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     await self.app(scope, receive_or_disconnect, send_no_error)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1276, in dispatch
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     scheme, token = auth_header.split(" ")
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     |     ^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     | ValueError: not enough values to unpack (expected 2, got 1)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     +------------------------------------
Dec 12 14:58:03 eimfs-llm01 uvx[419]: The above exception was the direct cause of the following exception:
Dec 12 14:58:03 eimfs-llm01 uvx[419]: Traceback (most recent call last):
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     result = await app(  # type: ignore[func-returns-value]
Dec 12 14:58:03 eimfs-llm01 uvx[419]:              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     return await self.app(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/fastapi/applications.py", line 1134, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await super().__call__(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/applications.py", line 107, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await self.middleware_stack(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await self.app(scope, receive, _send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await self.app(scope, receive, send_wrapper)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await self.app(scope, receive, send)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1350, in inspect_websocket
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     return await call_next(request)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:            ^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise app_exc from app_exc.__cause__ or app_exc.__context__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await self.app(scope, receive_or_disconnect, send_no_error)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1329, in check_url
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     response = await call_next(request)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:                ^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise app_exc from app_exc.__cause__ or app_exc.__context__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await self.app(scope, receive_or_disconnect, send_no_error)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1315, in commit_session_after_request
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     response = await call_next(request)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:                ^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise app_exc from app_exc.__cause__ or app_exc.__context__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     await self.app(scope, receive_or_disconnect, send_no_error)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     with recv_stream, send_stream, collapse_excgroups():
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     self.gen.throw(typ, value, traceback)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     raise exc
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     response = await self.dispatch_func(request, call_next)
Dec 12 14:58:03 eimfs-llm01 uvx[419]:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]:   File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1276, in dispatch
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     scheme, token = auth_header.split(" ")
Dec 12 14:58:03 eimfs-llm01 uvx[419]:     ^^^^^^^^^^^^^
Dec 12 14:58:03 eimfs-llm01 uvx[419]: ValueError: not enough values to unpack (expected 2, got 1)
Dec 12 14:58:30 eimfs-llm01 uvx[419]: 2025-12-12 14:58:30.422 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 10.40.8.171:0 - "GET /_app/version.json HTTP/1.1" 200

Additional Information

No response

Originally created by @pvutov on GitHub (Dec 12, 2025). Original GitHub issue: https://github.com/open-webui/open-webui/issues/19915 ### 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 Pip Install ### Open WebUI Version open-webui@0.6.41 ### Ollama Version (if applicable) _No response_ ### Operating System debian 13 ### Browser (if applicable) curl ### 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 I want to use the API with a token. When I click "Create new secret key" in the browser on my admin account's options, I get a 403 (any idea why?). Fortunately there is already a prefilled JWT token that I can use anyway. I copy the JWT token and do the following: ``` TOKEN="eyJhbGciOiJIUzIblablfgbs-gbdfgbldfghphtrskhkmnbfgdfgdfgo_dfgnortymdhxhxnbvnWys2hU" curl -H "Authorization: Bearer ${TOKEN}" https://example.org/v1/chat/completions -H "Content-Type: application/json" -d '{ "messages": [ {"role": "user", "content": "Give me a short introduction to large language models."} ], "temperature": 0.6, "top_p": 0.95, "top_k": 20, "max_tokens": 32768 }' ``` I expect my request to be forwarded to some LLM, to correctly authenticate or at least to get an auth refusal. ### Actual Behavior open-webui responds with an internal server error. ### Steps to Reproduce Go to the open-webui interface, settings -> account -> API keys. Copy the pregenerated JWT value. Take an arbitrary linux machine and call: ``` TOKEN="eyJhbGciOiJIUzIblablfgbs-gbdfgbldfghphtrskhkmnbfgdfgdfgo_dfgnortymdhxhxnbvnWys2hU" curl -H "Authorization: Bearer ${TOKEN}" https://example.org/v1/chat/completions -H "Content-Type: application/json" -d '{ "messages": [ {"role": "user", "content": "Give me a short introduction to large language models."} ], "temperature": 0.6, "top_p": 0.95, "top_k": 20, "max_tokens": 32768 }' ``` Where TOKEN is the JWT and example.org is the hostname of your open-webui instance. I start open-webui like this, on a fresh debian 13 install using `uv 0.9.17` (manually extracted to /usr/local/bin): ``` /usr/local/bin/uv tool uvx --python 3.11 open-webui@0.6.41 serve ``` ### Logs & Screenshots The response is ``` Internal Server Error ``` At the same time openwebui prints the following stack trace: ``` Dec 12 14:58:03 eimfs-llm01 uvx[419]: 2025-12-12 14:58:03.733 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 10.40.8.171:0 - "POST /v1/chat/completions HTTP/1.1" 500 Dec 12 14:58:03 eimfs-llm01 uvx[419]: Exception in ASGI application Dec 12 14:58:03 eimfs-llm01 uvx[419]: + Exception Group Traceback (most recent call last): Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 79, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: | yield Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 192, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | async with anyio.create_task_group() as task_group: Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 783, in __aexit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise BaseExceptionGroup( Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) Dec 12 14:58:03 eimfs-llm01 uvx[419]: +-+---------------- 1 ---------------- Dec 12 14:58:03 eimfs-llm01 uvx[419]: | Traceback (most recent call last): Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi Dec 12 14:58:03 eimfs-llm01 uvx[419]: | result = await app( # type: ignore[func-returns-value] Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | return await self.app(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/fastapi/applications.py", line 1134, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await super().__call__(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/applications.py", line 107, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await self.middleware_stack(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await self.app(scope, receive, _send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await self.app(scope, receive, send_wrapper) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await self.app(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1350, in inspect_websocket Dec 12 14:58:03 eimfs-llm01 uvx[419]: | return await call_next(request) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise app_exc from app_exc.__cause__ or app_exc.__context__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await self.app(scope, receive_or_disconnect, send_no_error) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1329, in check_url Dec 12 14:58:03 eimfs-llm01 uvx[419]: | response = await call_next(request) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise app_exc from app_exc.__cause__ or app_exc.__context__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await self.app(scope, receive_or_disconnect, send_no_error) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1315, in commit_session_after_request Dec 12 14:58:03 eimfs-llm01 uvx[419]: | response = await call_next(request) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise app_exc from app_exc.__cause__ or app_exc.__context__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro Dec 12 14:58:03 eimfs-llm01 uvx[419]: | await self.app(scope, receive_or_disconnect, send_no_error) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: | raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1276, in dispatch Dec 12 14:58:03 eimfs-llm01 uvx[419]: | scheme, token = auth_header.split(" ") Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: | ValueError: not enough values to unpack (expected 2, got 1) Dec 12 14:58:03 eimfs-llm01 uvx[419]: +------------------------------------ Dec 12 14:58:03 eimfs-llm01 uvx[419]: The above exception was the direct cause of the following exception: Dec 12 14:58:03 eimfs-llm01 uvx[419]: Traceback (most recent call last): Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi Dec 12 14:58:03 eimfs-llm01 uvx[419]: result = await app( # type: ignore[func-returns-value] Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: return await self.app(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/fastapi/applications.py", line 1134, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: await super().__call__(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/applications.py", line 107, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: await self.middleware_stack(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: await self.app(scope, receive, _send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 85, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: await self.app(scope, receive, send_wrapper) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/cors.py", line 85, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: await self.app(scope, receive, send) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1350, in inspect_websocket Dec 12 14:58:03 eimfs-llm01 uvx[419]: return await call_next(request) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise app_exc from app_exc.__cause__ or app_exc.__context__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro Dec 12 14:58:03 eimfs-llm01 uvx[419]: await self.app(scope, receive_or_disconnect, send_no_error) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1329, in check_url Dec 12 14:58:03 eimfs-llm01 uvx[419]: response = await call_next(request) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise app_exc from app_exc.__cause__ or app_exc.__context__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro Dec 12 14:58:03 eimfs-llm01 uvx[419]: await self.app(scope, receive_or_disconnect, send_no_error) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1315, in commit_session_after_request Dec 12 14:58:03 eimfs-llm01 uvx[419]: response = await call_next(request) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise app_exc from app_exc.__cause__ or app_exc.__context__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro Dec 12 14:58:03 eimfs-llm01 uvx[419]: await self.app(scope, receive_or_disconnect, send_no_error) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: with recv_stream, send_stream, collapse_excgroups(): Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/usr/lib/python3.11/contextlib.py", line 155, in __exit__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: self.gen.throw(typ, value, traceback) Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups Dec 12 14:58:03 eimfs-llm01 uvx[419]: raise exc Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/starlette/middleware/base.py", line 193, in __call__ Dec 12 14:58:03 eimfs-llm01 uvx[419]: response = await self.dispatch_func(request, call_next) Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: File "/home/openwebui/.cache/uv/archive-v0/GbZIU-Jaw_QDJ-GpLSFmU/lib/python3.11/site-packages/open_webui/main.py", line 1276, in dispatch Dec 12 14:58:03 eimfs-llm01 uvx[419]: scheme, token = auth_header.split(" ") Dec 12 14:58:03 eimfs-llm01 uvx[419]: ^^^^^^^^^^^^^ Dec 12 14:58:03 eimfs-llm01 uvx[419]: ValueError: not enough values to unpack (expected 2, got 1) Dec 12 14:58:30 eimfs-llm01 uvx[419]: 2025-12-12 14:58:30.422 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 10.40.8.171:0 - "GET /_app/version.json HTTP/1.1" 200 ``` ### Additional Information _No response_
GiteaMirror added the bug label 2026-05-15 14:46:33 -05:00
Author
Owner

@owui-terminator[bot] commented on GitHub (Dec 12, 2025):

🔍 Similar Issues Found

I found some existing issues that might be related to this one. Please check if any of these are duplicates or contain helpful solutions:

  1. #19823 Issue: Auth 2.1 Authorization/Token retrival is broken in v0.6.41
    by mllab-nl • Dec 08, 2025 • bug

  2. #19777 issue:
    by Yaute7 • Dec 05, 2025 • bug

  3. #19877 issue:
    by dotmobo • Dec 11, 2025 • bug

  4. #18975 issue: 500: Internal Error
    by nurb2kea • Nov 06, 2025 • bug

  5. #19496 issue: 500 internal server error appears in v0.6.40
    by cloudtuotuo • Nov 26, 2025 • bug

Show 5 more related issues
  1. #15970 issue: Internal 500 error
    by YifengChenGeotab • Jul 23, 2025 • bug

  2. #19417 issue: v0.6.37 SQL Error
    by AKHYP • Nov 24, 2025 • bug

  3. #16722 issue: Random 500 and 502 even when open-webui is not used.
    by nitanmarcel • Aug 19, 2025 • bug

  4. #14176 issue: Front-End fails silently once JWT Token expires
    by cmbaatz • May 22, 2025 • bug

  5. #19563 issue:
    by naruto7g • Nov 28, 2025 • bug


💡 Tips:

  • If this is a duplicate, please consider closing this issue and adding any additional details to the existing one
  • If you found a solution in any of these issues, please share it here to help others

This comment was generated automatically by a bot. Please react with a 👍 if this comment was helpful, or a 👎 if it was not.

<!-- gh-comment-id:3646891498 --> @owui-terminator[bot] commented on GitHub (Dec 12, 2025): 🔍 **Similar Issues Found** I found some existing issues that might be related to this one. Please check if any of these are duplicates or contain helpful solutions: 1. [#19823](https://github.com/open-webui/open-webui/issues/19823) **Issue: Auth 2.1 Authorization/Token retrival is broken in v0.6.41** *by mllab-nl • Dec 08, 2025 • `bug`* 2. [#19777](https://github.com/open-webui/open-webui/issues/19777) **issue:** *by Yaute7 • Dec 05, 2025 • `bug`* 3. [#19877](https://github.com/open-webui/open-webui/issues/19877) **issue:** *by dotmobo • Dec 11, 2025 • `bug`* 4. [#18975](https://github.com/open-webui/open-webui/issues/18975) **issue: 500: Internal Error** *by nurb2kea • Nov 06, 2025 • `bug`* 5. [#19496](https://github.com/open-webui/open-webui/issues/19496) **issue: 500 internal server error appears in v0.6.40** *by cloudtuotuo • Nov 26, 2025 • `bug`* <details> <summary>Show 5 more related issues</summary> 6. [#15970](https://github.com/open-webui/open-webui/issues/15970) **issue: Internal 500 error** *by YifengChenGeotab • Jul 23, 2025 • `bug`* 7. [#19417](https://github.com/open-webui/open-webui/issues/19417) **issue: v0.6.37 SQL Error** *by AKHYP • Nov 24, 2025 • `bug`* 8. [#16722](https://github.com/open-webui/open-webui/issues/16722) **issue: Random 500 and 502 even when open-webui is not used.** *by nitanmarcel • Aug 19, 2025 • `bug`* 9. [#14176](https://github.com/open-webui/open-webui/issues/14176) **issue: Front-End fails silently once JWT Token expires** *by cmbaatz • May 22, 2025 • `bug`* 10. [#19563](https://github.com/open-webui/open-webui/issues/19563) **issue:** *by naruto7g • Nov 28, 2025 • `bug`* </details> --- 💡 **Tips:** - If this is a duplicate, please consider closing this issue and adding any additional details to the existing one - If you found a solution in any of these issues, please share it here to help others *This comment was generated automatically by a bot.* Please react with a 👍 if this comment was helpful, or a 👎 if it was not.
Author
Owner

@pvutov commented on GitHub (Dec 12, 2025):

Probably irrelevant, but my instance also runs behind an nginx reverse proxy with the following config:

cat /etc/nginx/sites-enabled/open-webui
# Define rate limit of max 100 requests per minute per client (IP based)
limit_req_zone $binary_remote_addr zone=client_based_limit:10m rate=100r/m;

server {
    listen 80;
    server_name example.org;
    rewrite ^(.*) https://$host$1 permanent;
}

server {
    listen 443 ssl;
    server_name example.org;
    ssl_certificate /etc/ssl/certs/wild-example-fullchain.pem;
    ssl_certificate_key /etc/ssl/private/wild-example.key;
    proxy_redirect off;
    location / {
	proxy_pass http://127.0.0.1:8080;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;

	# WebSocket support
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection "upgrade";
    }
}
<!-- gh-comment-id:3646928145 --> @pvutov commented on GitHub (Dec 12, 2025): Probably irrelevant, but my instance also runs behind an nginx reverse proxy with the following config: ``` cat /etc/nginx/sites-enabled/open-webui # Define rate limit of max 100 requests per minute per client (IP based) limit_req_zone $binary_remote_addr zone=client_based_limit:10m rate=100r/m; server { listen 80; server_name example.org; rewrite ^(.*) https://$host$1 permanent; } server { listen 443 ssl; server_name example.org; ssl_certificate /etc/ssl/certs/wild-example-fullchain.pem; ssl_certificate_key /etc/ssl/private/wild-example.key; proxy_redirect off; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ```
Author
Owner

@Classic298 commented on GitHub (Dec 12, 2025):

You mixed a few words here

Do you mean the api key or the jwt?

Did you enable api keys?

<!-- gh-comment-id:3647892672 --> @Classic298 commented on GitHub (Dec 12, 2025): You mixed a few words here Do you mean the api key or the jwt? Did you enable api keys?
Author
Owner

@pvutov commented on GitHub (Dec 12, 2025):

I used the JWT. I was not able to generate an api key (my browser receives a 403 status code when I click the button). I probably have not correctly enabled api keys (I enabled some option about allowing users to talk to the backend but I guess that was the wrong one).

I assume that I am not supposed to use the JWT by stuffing it into the Authentication header. Still, it seems like a minor bug for OWUI to throw a stack trace as opposed to 403.

<!-- gh-comment-id:3647920593 --> @pvutov commented on GitHub (Dec 12, 2025): I used the JWT. I was not able to generate an api key (my browser receives a 403 status code when I click the button). I probably have not correctly enabled api keys (I enabled some option about allowing users to talk to the backend but I guess that was the wrong one). I assume that I am not supposed to use the JWT by stuffing it into the Authentication header. Still, it seems like a minor bug for OWUI to throw a stack trace as opposed to 403.
Author
Owner

@silentoplayz commented on GitHub (Dec 12, 2025):

I probably have not correctly enabled api keys (I enabled some option about allowing users to talk to the backend but I guess that was the wrong one).

Well, in Open WebUI, there is a Default Permissions toggle for API Keys. If this is toggled off, it is likely the source of your problems here.

Image

To get there in Open WebUI, visit the Admin Panel -> Users tab -> Groups -> Default permissions. Scroll down to Features Permissions and check the toggled state of the API Keys option.

<!-- gh-comment-id:3648123306 --> @silentoplayz commented on GitHub (Dec 12, 2025): > I probably have not correctly enabled api keys (I enabled some option about allowing users to talk to the backend but I guess that was the wrong one). Well, in Open WebUI, there is a `Default Permissions` toggle for `API Keys`. If this is toggled off, it is likely the source of your problems here. <img width="920" height="595" alt="Image" src="https://github.com/user-attachments/assets/735d7249-8516-49f9-9ad3-d77dcb7e454b" /> To get there in Open WebUI, visit the `Admin Panel` -> `Users` tab -> `Groups` -> `Default permissions`. Scroll down to `Features Permissions` and check the toggled state of the `API Keys` option.
Author
Owner

@silentoplayz commented on GitHub (Dec 12, 2025):

My apologies. I gave accurate info above, but only if you want any users that have signed up for your OpenWebUI instance to have access to creating their own API keys from their Account settings in the user settings modal.

Image

If you as an admin wish to enable the API Keys feature for your Open WebUI instance, you must visit the General admin settings tab and toggle on Enable API Keys from there.

Image
<!-- gh-comment-id:3648151593 --> @silentoplayz commented on GitHub (Dec 12, 2025): My apologies. I gave accurate info above, **but only if** you want any users that have signed up for your OpenWebUI instance to have access to creating their own API keys from their `Account` settings in the user settings modal. <img width="1342" height="747" alt="Image" src="https://github.com/user-attachments/assets/a27b2391-8009-4a95-867a-7ba4cf4fe885" /> If you as an admin wish to enable the `API Keys` feature for your Open WebUI instance, you must visit the `General` admin settings tab and toggle on `Enable API Keys` from there. <img width="2294" height="616" alt="Image" src="https://github.com/user-attachments/assets/dc5bcb01-2960-465c-a2ab-d0490f1516d9" />
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#89779