GitHub 需求雷达 Opportunity Radar

S 14 A 20 B 26 C 20 最近运行:2026-06-15T10:35:06.491803+00:00
🛰 监控配置:1 个仓库 · 信号词 Pain 21 / Budget 19 / Urgency 10
Painblockedblockercan'tcannotunabledoesn't workdoes not worknot workingbrokenproductiondata losscrashevery dayevery weekmanuallyworkaroundregressionstuckfailsfailingno longer
Budgetour companyour teamwe needenterprisedeploydeploymentevaluatingevaluationin productionsponsorwilling to payhappy to paybudgetpaidcommercialorganizationcustomersclientsrollout
Urgencyurgenturgentlycriticalasapimmediatelyblockerhigh priorityp0p1deadline
Urgency 标签bugprioritycriticalregression
👤 stevenbaert  ·  💬 29  ·  👍 71  ·  👥 18  |  Pain 2 · Budget 3 · Urgency 1
can'tcannotdeployevaluationcustomershigh priority
Didn't find anything back (yet) on the forum/web, but it's an obvious question: is there a way to use the new open-ai real-time api in open-webui or are you planning to support it? Reference: https://openai.com/index/introducing-the-realtime-api/ 🙏
29 条评论
💬 thiswillbeyourgithub
Hi @tjbck i saw [on hackernews](https://news.ycombinator.com/item?id=41743327) that [agents by livekits used to make](https://github.com/livekit/agents) the openai realtime api as well as [cerebras voice](https://cerebras.vercel.app/) seems to be open source. They have tons of demos and code [on their github](https://github.com/livekit/agents?tab=readme-ov-file). I think there must be a [llama-omni](https://github.com/ictnlp/LLaMA-Omni) implementation somewhere that would be a killer feature for open-webui! Edit: here's a particularly interesting demo that connects stt + llm + tts: https://github.com/livekit/agents/blob/main/examples/voice-pipeline-agent/minimal_assistant.py Edit2: I made [an issue to ask for a demo for Llama-Omni](https://github.com/livekit/agents/issues/845) Edit3:
💬 InventoCasa
+1 for this! Would be very nice if OpenWebUI would support the new gpt-4o-realtime-preview model!
💬 aguilarcarboni
Bump! gpt-4o-realtime would be awesome, don't even get me started on Omni because I'd go crazy. Anybody got any time to implement this?
💬 jbaenaxd
We totally need this, specially for folks in Europe, where ChatGPT didn't make available this service through their app/web for Plus/Team users without a VPN. Fortunately, it's available through the API, so we (europeans) could self-hosted ourselves to access this great tool.
💬 spammenotinoz
> Didn't find anything back (yet) on the forum/web, but it's an obvious question: is there a way to use the new open-ai real-time api in open-webui or are you planning to support it? > > Reference: https://openai.com/index/introducing-the-realtime-api/ > > 🙏 Careful what you wish for this model is quite expensive, you pay for audio input and output. $100.00 / 1M input tokens $200.00 / 1M output tokens
💬 amiranvarov
+1 for this. It sucks that we can't use it in EU
💬 Fusseldieb
Would indeed be very cool! +1
💬 odellus
Price has been lowered. Any interest in this now?
💬 ddwinhzy
+1
💬 thiswillbeyourgithub
I am absolutely convinced that the future is to use fully multimodal models and they are more and more popular and smaller and smaller. The most recent best example I could find was the mini PCM series that exists in various sizes and is already sort of implemented in llama.cpp and ollama projects. [Here's the link](https://github.com/OpenBMB/MiniCPM-o). To me, it is a feature that is more and more needed and quite frankly the future of LLMs at least for the short and medium term. To be honest, I even do think that it should be a high priority along with stability and in contrast to, for example, making a desktop app.
💬 Fusseldieb
> To be honest, I even do think that it should be a high priority I would say so, too > along with stability and in contrast to, for example, making a desktop app. A desktop app is superfluous imo, as all webkit browsers allow to 'install' OI as a shortcut as if it were a native app, which is sufficient in 99% of cases. I even pinned mine on the taskbar and it opens in less than a second. Also, 'installed' it gets rid off the address bar and everything, just like a 'native app' would. Plus, at this point most 'native apps' are just a electron wrapper, which would only eat RAM for absolutely nothing. Same goes for mobile, as you can 'install' it there, too. It's certainly not 'high priority' in any sense imo. I'd even wager to say it isn't even necessary, but that's up to the developer
💬 thiswillbeyourgithub
I agree. Personnaly for all my friends I created an account and openned the url via the browser and used the "add to homescreen" feature and nobody noticed it wasn't a regular app.
💬 thiswillbeyourgithub
FYI there is currently a free demo at https://demo.ultravox.ai/ for ultravox models, it's really interesting and anyone who hasn't yet given a try to real time models should do so, it opens up a lot of interactivity usecase. And their 70B model is not that expensive either, $0.05/minute, so $3 per hour. Although I don't know if that counts if you are not speaking. Also by signing up on their website you get 30 minutes free without even having to enter a credit card. Although it's still lacking [quantization](https://github.com/fixie-ai/ultravox/pull/33) so somewhat out of reach from most customers for now. I can't wait to be able to play with those on customer hardware and deploy it with open-webui!
💬 thiswillbeyourgithub
If anyone wants to see a good implementation of realtime APIs, the devs at gradio made the great lib [fastrtc](https://github.com/gradio-app/fastrtc) which includes great examples. For example [in about 150 lines of code you get the openai realtime api, UI included!](https://huggingface.co/spaces/fastrtc/talk-to-openai/blob/main/app.py) Here is [the code for gemini voice chats](https://huggingface.co/spaces/fastrtc/talk-to-gemini/blob/main/app.py) I'm not sure what would be the best way to include that into open-webui though. I think you'd have to hardcode openai and gemini into it because they are not available anywhere else (no openrouter for example) at least that I'm aware of. But there will be alternatives as time goes on but that's too bad to have to wait go knows how long. There
💬 thiswillbeyourgithub
FYI an enthusiastic OpenAI employee is making itself available to help projects if they have issues implementing support for the realtime API. Look for `sean` in [this hn thread](https://news.ycombinator.com/item?id=43762409)
在 GitHub 查看其余 14 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 MarcoFab  ·  💬 45  ·  👍 8  ·  👥 20  |  Pain 10 · Budget 2 · Urgency 1
cannotnot workingbrokenproductionmanuallyworkaroundregressionfailsfailingno longerin productionclientsbug
### 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 …
展开全文 · 45 条评论
### 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 0.96 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 24.04 ### Browser (if applicable) Chrome ### 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 When web search toggle is active and a question that requires current information is asked (e.g. "What's the weather in Milan today?"), the model should receive the search results as context and use them to formulate a response. This worked correctly in v0.9.5. ### Actual Behavior After upgrading from v0.9.5 to v0.9.6, web search results are fetched successfully from SearXNG (confirmed in logs: "added 9 items to collection web-search-...") but are not passed to the model as context. The model responds as if no search was performed. Toggle is active. SearXNG URL is correct. Worked in v0.9.5. Config: Docker, SearXNG self-hosted, OpenRouter models. ### Steps to Reproduce Prerequisites: - Open WebUI v0.9.6 running in Docker - SearXNG self-hosted running in Docker (accessible at http://host.docker.internal:8888) - Web search enabled in Admin Settings with SearXNG as provider - OpenRouter configured as model provider Steps to reproduce: 1. Open a new chat in Open WebUI v0.9.6 2. Enable the web search toggle in the chat 3. Ask a question that requires current web data (e.g. "What is the weather in Milan today?") 4. The model responds as if no search was performed, without using any search results Additional evidence: - Docker logs confirm that search IS being executed successfully: "added 9 items to collection web-search-e51138a673bc56ff486ee4baa6b0ad510636da0a3e865aaedcaf" - SearXNG returns valid JSON results when tested via curl from inside the Open WebUI container - The same configuration worked correctly in v0.9.5 before the upgrade - The issue occurs with multiple different models via OpenRouter Environment: - Host OS: Ubuntu 24.04 LTS - Docker version: latest - Search provider: SearXNG (self-hosted, Docker) - Model provider: OpenRouter - Browser: Chrome stable, Firefox ### Logs & Screenshots Docker logs showing web search is executed and results are stored: 2026-06-02 00:46:12.237 | INFO | open_webui.routers.retrieval:save_docs_to_vector_db:1412 - Using markdown header text splitter 2026-06-02 00:46:12.249 | INFO | open_webui.routers.retrieval:save_docs_to_vector_db:1490 - generating embeddings for web-search-e51138a673bc56ff486ee4baa6b0ad510636da0a3e865aaedcaf 2026-06-02 00:4
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#25038](https://github.com/open-webui/open-webui/issues/25038) **issue: Web Search with SearXNG retrieves results successfully but fails during source/context injection (“No sources found”, JSONResponse error in chat_web_search_handler)** *This is the closest match: it describes SearXNG results being fetched successfully but failing during source/context injection, leading to the model answering without web context. Your issue reports the same symptom, just on v0.9.6 and with OpenRouter.* *by ge0el · `bug`* 2. 🟣 [#25223](https://github.com/open-webui/open-webui/issues/25223) **iss
💬 Boulshou
Great bug report. I am experiencing the same issue with the exact same setup as you (but Debian instead of ubuntu, but should not make a difference). Reverting to 0.9.5 restored this functionality, so I am sticking to that for now
💬 Classic298
Native Tool calling or default/legacy?
💬 Classic298
tried to reproduce, cannot reproduce. web search works and is passed to the model <img width="973" height="272" alt="Image" src="https://github.com/user-attachments/assets/b8f5d47c-6bcb-40f5-acea-4a241c90295b" />
💬 joernahlers
I’m seeing the same problem – the web search stops working when Embedding and Retrieval are enabled. Could you take a look? Thanks!
💬 Classic298
@joernahlers i also have embedding and retrieval enabled and it still works. Share your full setup please. tool calling and rag and web fetch
💬 joernahlers
Here is a screenshot of the search not working: <img width="1084" height="454" alt="Image" src="https://github.com/user-attachments/assets/286d1e12-0047-4b92-8475-90bc29e3d4ff" /> And here is a screenshot of the search working when Embedding and Retrieval are disabled: <img width="1024" height="1005" alt="Image" src="https://github.com/user-attachments/assets/19f108d4-af50-469d-9003-143452e5ac7c" /> And here is my config: <img width="2094" height="805" alt="Image" src="https://github.com/user-attachments/assets/483896ac-77c1-4f83-b8dd-936c8e75c0ab" />
💬 rastvorovds
I encountered the same problem after upgrading to 0.9.6. The symptoms are the same as user joernahlers.
💬 rastvorovds
This can currently only be treated by disabling Embedding and Retrieval in the web search settings, but in this case we lose the main advantage of using Embedding models.
💬 rastvorovds
If you don't use Embedding models, you most likely won't have this problem.
💬 joernahlers
This is the documents config: <img width="2098" height="1170" alt="Image" src="https://github.com/user-attachments/assets/c7dc6b77-b522-4c12-9a81-a763d43e3bad" />
💬 Classic298
Ok so you are using the default (legacy) tool calling. I asked this a few times above. Now i have the answer. thanks. FYI legacy tool calling which is what you are using here is no longer supported. I will try to replicate this on the legacy path.
💬 rastvorovds
I also checked document vectorization and data extraction—everything is fine. I also saw in the logs that the pages themselves are being successfully converted to vector data. The problem is specifically with data extraction: ``` openwebui | 2026-06-02 08:30:29.474 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.1.1:0 - "GET /_app/version.json HTTP/1.1" 304 openwebui | 2026-06-02 08:30:30.274 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.1.1:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 openwebui | 2026-06-02 08:30:45.325 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.1.1:0 - "POST /api/chat/completions HTTP/1.1" 200 openwebui | 2026-06-02 08:30:45.678 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 192.
💬 Classic298
Can reproduce on the legacy path.
💬 Classic298
for everyone affected here, the (unsafe) temporary workaround is setting this env var: ENABLE_RETRIEVAL_UNSCOPED_COLLECTIONS=true Or, better: do not use the legacy tool calling system anymore. This is not supported anymore the proper fix will be a small PR that will edit ~2 line of code.
在 GitHub 查看其余 30 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 tjbck  ·  💬 56  ·  👍 16  ·  👥 14  |  Pain 2 · Budget 3 · Urgency 3
blockercan'twe needenterpriserollouturgenturgentlyblocker
(无正文)
56 条评论
💬 KevinRossiTC
I would love this also. Perhaps with a dropdown for Both / UI / API.
💬 godlobster6
Great direction. To make this actionable and contributor-friendly, I suggest locking a minimal v1 scope: - Metrics: request count (UI/API split), tokens in/out/total, error rate, p95 latency - Filters: 24h / 7d / 30d + per-model breakdown - Event schema: timestamp, source(ui|api), model, tokens_in, tokens_out, latency_ms, status - UX: Both/UI/API toggle + sortable per-model table Suggested rollout: 1) event schema + ingestion 2) aggregation endpoint 3) dashboard cards/charts 4) docs/migration notes If maintainers agree, I can draft a concrete PR plan (API contract + test cases + docs checklist) so contributors can pick this up with less ambiguity.
💬 zaakiy
> ...minimal v1 scope... Not a maintainer but I'm happy with this. Would like to stress the urgency because we don't know which users are causing the most usage ($$$).
💬 zaakiy
Correction: Would like to stress the urgency because we don't know which ~~users~~ API consumers are causing the most usage ($$$).
💬 Classic298
If you have the urgency, you can add a filter to track their usage for now.
💬 zaakiy
> If you have the urgency, you can add a filter to track their usage for now. I don't see a way to do this @Classic298. Could you please elaborate? <img width="1364" height="714" alt="Image" src="https://github.com/user-attachments/assets/3a49c3db-6ac1-45ed-bd4a-e37efbb85a3a" /> I've already put the API user into a group <img width="1348" height="597" alt="Image" src="https://github.com/user-attachments/assets/ad898dee-ed52-4df2-8873-6e650dcd61d7" /> And I can confirm that the API user is definitely within this group even though no users are showing up in the Analytics view for this group
💬 Classic298
@zaakiy a filter https://docs.openwebui.com/features/extensibility/plugin/functions/filter
💬 zaakiy
That's too complex for me. Is it really that difficult to add API usage in the analytics dashboard? In my opinion, this would have been the obvious thing to do in the first place.
💬 Classic298
@zaakiy If it's too complex for you, ask AI to do it. Give it the docs and tell it you want to track all requests in the inlet() filter. (API-only requests don't reach the outlet(), so can only track the request itself) And yes, it is not trivial.
💬 SFL79
Been following this issue for a while as it's an extremely important enterprise feature. @tjbck Is this something the maintainers are planning to do in your roadmap? Or, perhaps following @godlobster6 's suggestion, is there any agreed upon, pending plan for implementation, or are you looking for the community to go ahead and implement it how they see fit?
💬 zaakiy
@Classic298 I honestly would not know where to begin how to ask AI this
💬 Classic298
https://docs.openwebui.com/features/extensibility/plugin/functions/filter
💬 zaakiy
@Classic298 I don't see how you giving me the same link that you did before is going to be of any benefit. I'm not coming here as a contributor. Just because I'm on github following this issue doesn't mean I have infinite time or infinite AI credits to work on something
💬 smorello87
Per #23323 — one specific use case for analytics enhancements: **per-user and per-group usage limits**. The `chat_message` table already tracks token usage. Adding an enforcement layer (configurable token/message caps per user or group, with block-on-limit) would let institutions manage costs without external proxies.
💬 smorello87
Following up on the per-user/group usage limits idea — we'd be interested in contributing a minimal PR for this if it aligns with your plans. Thinking something scoped to: - Per-group token cap (daily/monthly) using existing `chat_message` usage data - Pre-request middleware check that blocks with a clear message when limit is reached - Admin settings for configuring limits per group Would you be open to a PR along these lines, and are there any design constraints we should follow? Happy to adapt to whatever direction you're taking #21675.
在 GitHub 查看其余 41 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 ShirasawaSama  ·  💬 40  ·  👍 13  ·  👥 11  |  Pain 5 · Budget 3 · Urgency 1
can'tcannotmanuallyworkaroundfailingwe needdeploydeploymentimmediately
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the …
展开全文 · 40 条评论
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions. ### Problem Description Open WebUI reconstructs chat history from stored `output` items and may **reinject reasoning/thinking** (e.g. `<think>...</think>`) back into the next-turn `messages` (via `convert_output_to_messages(..., raw=True)`). For some providers/models, once these tags appear in history, the model starts **imitating/amplifying** them (multiple/nested/variant thinking tags), which can eventually **break frontend reasoning parsing/rendering** (thinking blocks leak into normal text, duplicated blocks, malformed markdown/artifacts, etc.). ### Screenshots The content has been incorporated into the thought block: <img width="832" height="204" alt="Image" src="https://github.com/user-attachments/assets/1e0d71e4-254d-409b-9ed8-d06ed1464688" /> <img width="2010" height="542" alt="Image" src="https://github.com/user-attachments/assets/75e6199b-4834-4ff7-abd8-077123e1923f" /> The reason is: if you pass the thought process to the LLM with a <think> tag as the main text, the LLM will attempt to mimic it and also output a fake <think> tag. <img width="1606" height="168" alt="Image" src="https://github.com/user-attachments/assets/9562362f-8b00-4b21-bc90-293c0a8ac01f" /> ### Desired Solution you'd like - By default, Open WebUI should **NOT** reinject reasoning/thinking into the prompt history. - Users can opt-in per model if they explicitly need reasoning reinjection. ### Alternatives Considered Add a **model-level toggle** (advanced setting), e.g. `reinject_reasoning` / `include_reasoning_in_history`: - **Default: OFF** - When OFF: keep tool call structure, but do not add reasoning/thinking blocks back into `messages`. - When ON: preserve current behavior for users/providers that require it. ### Additional Context **Relevant code (for maintainers)** - `backend/open_webui/utils/middleware.py`: `process_messages_with_output()` uses `convert_output_to_messages(..., raw=True)` - `backend/open_webui/utils/misc.py`: `convert_output_to_messages(..., raw=True)` appends reasoning as `<think>...</think>`
💬 ShirasawaSama
### Why we need feature flags here Open WebUI converts structured `output` back into the next-turn LLM `messages` (often with `raw=true`). That makes “what the UI shows” and “what the model sees” tightly coupled. A small upstream change (or a provider leaking `<think>`) can **pollute prompts**, **increase token cost**, and **re-inject sensitive tool data**. Feature flags let us keep official defaults while giving downstream forks a safe way to harden privacy and stability. ### What to gate (and why) | Output block | Risk if fed back to LLM | Why a flag helps | Suggested default | |---|---|---|---| | **Reasoning / `<think>`-style content** | Prompt pollution, repeated “thinking tags”, unstable behavior across providers | Some deployments want KV-cache benefits; others want clean chat text
💬 visig9
Also, [Gemma 4](https://huggingface.co/google/gemma-4-E2B-it) need it for the official requirement: > 3. Multi-Turn Conversations > > - No Thinking Content in History: In multi-turn conversations, the historical model output should only include the final response. Thoughts from previous model turns must not be added before the next user turn begins. See: https://huggingface.co/google/gemma-4-E2B-it#3-multi-turn-conversations
💬 nekomiya-hinata
I would like to suggest a complementary approach to the toggle: **placing the thinking content into a dedicated, separate field in the message payload** (which could be configurable or fixed, e.g., `reasoning` or `reasoning_content`). Instead of concatenating the reasoning block into the raw `content` string with `<think>...</think>` tags (which directly causes the prompt pollution and imitation issues mentioned), Open WebUI could structure the multi-turn history like this: ```json { "role": "assistant", "reasoning_content": "The user wants to...", "content": "Here is the final answer..." } ``` **Why this helps:** 1. **Aligns with API Standards:** This is exactly how the official DeepSeek API separates thoughts from the final answer. 2. **Prevents Imitation:** The model's standar
💬 ShirasawaSama
> I would like to suggest a complementary approach to the toggle: **placing the thinking content into a dedicated, separate field in the message payload** (which could be configurable or fixed, e.g., or ).`reasoning``reasoning_content` > > Instead of concatenating the reasoning block into the raw string with tags (which directly causes the prompt pollution and imitation issues mentioned), Open WebUI could structure the multi-turn history like this:`content``<think>...</think>` > > { > "role": "assistant", > "reasoning_content": "The user wants to...", > "content": "Here is the final answer..." > } > **Why this helps:** > > 1. **Aligns with API Standards:** This is exactly how the official DeepSeek API separates thoughts from the final answer. > 2. **Prevents Imitation:** The model
💬 Classic298
also wouldnt this be possible with a relatively simple filter if anyone wants this?
💬 Classic298
> Also, [Gemma 4](https://huggingface.co/google/gemma-4-E2B-it) need it for the official requirement: > Multi-Turn Conversations > No Thinking Content in History: In multi-turn conversations, the historical model output should only include the final response. Thoughts from previous model turns must not be added before the next user turn begins. Thats nice and all, but other models DO need it, that's why Open WebUI sends the reasoning content. You can build yourself a simple filter that strips the reasoning content before sending it to the AI
💬 Classic298
@ShirasawaSama > By default, Open WebUI should NOT reinject reasoning/thinking into the prompt history. Why? Some providers and models need it - and if you have a model that strictly doesn't need the thinking sent back to the provider couldn't a filter handle this easily?
💬 ShirasawaSama
> > Also, [Gemma 4](https://huggingface.co/google/gemma-4-E2B-it) need it for the official requirement: > > Multi-Turn Conversations > > No Thinking Content in History: In multi-turn conversations, the historical model output should only include the final response. Thoughts from previous model turns must not be added before the next user turn begins. > > Thats nice and all, but other models DO need it, that's why Open WebUI sends the reasoning content. > > You can build yourself a simple filter that strips the reasoning content before sending it to the AI In fact, for most models, not passing the thinking process does not cause any issues, so there is no need to return it. Only a small number of models, such as those that support "extended thinking" (e.g., Claude), require the thinking
💬 Classic298
why would it break KV cache? If i consistently send the same data and the same fields to the provider it will cache that and reuse the cache. Only modifications to those fields would break KV cache ---- Regardless, why cannot a filter be used here? As you correctly said some models need it. Yes, not all - but this is where perhaps a filter should take place and adjust the payload for special needs of the model provider. OpenAI also (for large companies) needs the safety identifier to be sent otherwise you will quickly not have an account anymore. Can be done by Open WebUI via flag/toggle - but shouldn't. A Filter is the better option here
💬 Classic298
Btw UI-rendered artifacts are never sent to the model to begin with
💬 ShirasawaSama
> why would it break KV cache? > > If i consistently send the same data and the same fields to the provider it will cache that and reuse the cache. > > Only modifications to those fields would break KV cache > > Regardless, why cannot a filter be used here? As you correctly said some models need it. Yes, not all - but this is where perhaps a filter should take place and adjust the payload for special needs of the model provider. > > OpenAI also (for large companies) needs the safety identifier to be sent otherwise you will quickly not have an account anymore. Can be done by Open WebUI via flag/toggle - but shouldn't. A Filter is the better option here Can you give me an example of a model that requires the thinking process to be returned via the `<think>` tag? As far as I know, the Ge
💬 Classic298
Claude definitely requires returning the thinking to the provider across turns, and all providers that I know of require thinking to be sent back to the provider within the same turn at least (because if the model is only thinking and planning and then doing a tool call (end of generation) you need to send the thinking it just generated otherwise the model doesn't know what i planned to do and wants to do next). So DeepSeek, Claude, Qwen, Kimi, all models with transparent thinking content require it to be sent within the same turn so the model knows why it did that tool call for example - and Anthropic in particular requires it across turns also
💬 ShirasawaSama
https://platform.claude.com/docs/en/build-with-claude/extended-thinking <img width="936" height="978" alt="Image" src="https://github.com/user-attachments/assets/c5d045f5-3418-42f1-ad0b-5b84c00cd89a" /> <img width="991" height="757" alt="Image" src="https://github.com/user-attachments/assets/4bb41363-6e8e-4f56-8521-d98d6bd341ba" /> I checked Claude's documentation, and even when the model is called via a tool, the response should follow the original "thinking block" format rather than using the `<think>` tag. I don't have much of an opinion on whether to return the thought process, but I do believe that the model's additional "thought" field should not be converted into a `<think>` tag, embedded within the assistant's content, and then sent back to the model. https://github.com/open-w
💬 ShirasawaSama
In fact, it’s currently nearly impossible to use the Claude model for native tool calls in OwUI, because OwUI inevitably generates messages that contain only the tool call but have empty content, causing Claude to throw an error immediately. I used a filter to process the Claude model’s input, removing these empty blocks, which allowed it to use native tool calls. In other words, send the reasoning to models are actually the rarer ones.
💬 ShirasawaSama
DeepSeek: https://api-docs.deepseek.com/guides/thinking_mode <img width="1001" height="406" alt="Image" src="https://github.com/user-attachments/assets/8f4c8b65-62be-4eb3-bfb1-393ac8e44e62" />
在 GitHub 查看其余 25 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 patrykkozuch  ·  💬 39  ·  👍 1  ·  👥 17  |  Pain 5 · Budget 5 · Urgency 1
can'tcannotmanuallyworkaroundfailingour companywe needdeploydeploymentorganizationurgent
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the …
展开全文 · 39 条评论
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions. ### Problem Description I want to develop a MCP server for a service that does not support OAuth / is not integrated with OAuth yet and supports only Basic Auth. For now, MCP configuration in Open WebUI supports supplying only the global API token to the server (and starting from 0.6.37 other custom headers thanks to #18918 ). I'd like to allow each user to supply their own credentials to work with the service through MCP server. ### Desired Solution you'd like As a user, I'd like to be able to use my own API key (and preferably set custom headers) when enabling the globally configured MCP server as a tool in the conversation - something like the scope configuration that happens when you enable OAuth MCP server as a user. Something like user valves, but for MCP / tools servers. I know that there is a possibility for each user to configure their own tools server but: 1) I want the overall configuration to be managed globally by the admin 2) There is no possibility to add MCP servers that way (they can be configured only globally) ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 tjbck
@patrykkozuch would `Auth` header with `Bearer` prefix be enough for your use case?
💬 patrykkozuch
@tjbck Yes, it would be. Would be nice to be able to add another headers too, but that's not a must
💬 ctolon
This feature can be truly useful. In another product ex. LibreChat, custom headers can be sent dynamically for the MCP (the header keys to be sent are defined in the MCP Server connection section and when the user connects to the MCP Server, values ​​are assigned to the designated placeholders. For example, if the Role placeholder corresponding to the X-Role header is defined as an input in the MCP connection section, each user can enters an input for themselves, and this placeholder value can be sent to the MCP along with the X-Role header). This can be particularly useful if the MCP Server implementation requires deterministic input from the user.
💬 ctolon
Regarding to this issue I created a PR -> [https://github.com/open-webui/open-webui/pull/19379](url) We need this feature organizationally, too. We use it not just for authentication, but especially for MCPs that connect to SQL databases, allowing us to select tables and DBs etc. as input. As far as I have tested the implementation,. If you want, you can clone it and test whether it meets your needs @patrykkozuch
💬 patrykkozuch
@ctolon This is exactly what we need. Thank you very much for your work here, it would be great if this can make it to the next version!
💬 andrescabana86
happy that I see this is in progress! :)
💬 patrykkozuch
@tjbck I know you were busy recently with version 0.7, since it has been released, can we have any progress with this? I'd like to help with getting this into OWUI
💬 cannontrodder
A plus one fom me - https://github.com/open-webui/open-webui/pull/19379 was closed due to no movement but that (or something like it) wou;d be a great feature to have.
💬 Philoso-Fish
I can only back this! This is a feature that is really urgent for several projects in our company.
💬 patrykkozuch
@Classic298 Maybe we could get your attention on this?
💬 Classic298
I should not decide this, and cannot.
💬 paolo-depa
+1!!
💬 flefevre
Hi everyone, We also have a strong need for this feature. Specifically, our users want to use the MCP Legifrance tool to access French laws and jurisprudence. However, the access token for the MCP server is individual, which complicates deployment at scale. Our ideal workflow would be: - **Administrator-side:** The Open WebUI administrator should be able to define the external tool (URL, description, etc.) and associate it with an assistant model. - **User-side:** The end user should be able to input their individual API key to access the Legifrance service. This would allow organizations to centrally manage tool configurations while letting users securely provide their own credentials. Looking forward to your thoughts or updates on this!
💬 DigdashQuentinLandi
Hi ! we have also a strong need for this ! --> https://github.com/open-webui/open-webui/pull/19379 was closed due to no movement but that (or something like it) would be a great feature to have.
💬 fpytloun
Also came to this feature request when implementing my memory system (https://github.com/fpytloun/mnemory) and thinking about how to handle user separation properly. There are 2 approaches where both would be great: 1. ability to use per-user bearer token 2. ability to override headers per-user (like valves). Could be also done by using template, something like `{ "X-User-Id": "${username}"}` (probably easiest option and sufficient for me)
在 GitHub 查看其余 24 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 tjbck  ·  💬 7  ·  👍 51  ·  👥 6  |  Pain 1 · Budget 0 · Urgency 0
workaround
#8262
7 条评论
💬 moodler
A companion issue: improve the web interface on mobile browsers. Perhaps we can work on the UI for both at the same time? This how it looks now (it works but it's very small and pokey to use) ![Image](https://github.com/user-attachments/assets/97b04429-65e1-4d88-8700-817eebcc903b)
💬 Anaphylaxis
> This how it looks now (it works but it's very small and pokey to use) I agree, the send button could be made larger although I haven't really had difficulty pressing the button myself Would like a manual refresh button, on iOS if you lock the phone closing the app and opening it again is basically required for it to update
💬 DrShadow34
Adding to this discussion, I have problems on firefox. UI often "pushes" away top bar and url bar gets in the way of message input window. Native app would be a much better solution, than dealing with this problems due to incorrectly behaving web view.
💬 SadmL
As Android user I'm using [Native Alpha](https://apt.izzysoft.de/fdroid/index/apk/com.cylonid.nativealpha) as workaround for waiting official (any sort of) app.
💬 SadmL
Firefox and it forks has PWA support as noticed here https://github.com/open-webui/open-webui/issues/8262#issuecomment-2915115345
💬 lee-b
https://github.com/cogwheel0/conduit is doing a decent job of this. It's directly talking to Open-WebUI (not just OpenAI APIs, for example), is quite functional so far, with even bluetooth calling to an extent. Does have some voice call bugs that it's still working through, but that's it's young, and progressing rapidly. Maybe worth a look, and maybe worth collaboration. Disclaimer: not affiliated, though I have been a happy user of that app and filed some issues on it.
💬 veliseev93
Open MobileUI — free mobile client for Open WebUI 🎉 We built Open MobileUI, a native iOS & Android app for your self-hosted Open WebUI. It's free and open source (GPL v3) — just install it, enter your server URL, sign in, and start chatting on mobile. 📦 Source: https://github.com/RonasIT/open-webui-react-native 📲 App Store: https://apps.apple.com/us/app/open-mobileui/id6754266176 📲 Google Play: https://play.google.com/store/apps/details?id=com.open.web.ui
💡 高优先级 → 考虑提交 PR 或开发插件
👤 chr0n1x  ·  💬 17  ·  👍 2  ·  👥 10  |  Pain 7 · Budget 2 · Urgency 1
brokenproductioncrashworkaroundregressionfailsfailingdeploydeploymentbug
### 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 …
展开全文 · 17 条评论
### 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 Other ### Open WebUI Version 0.9.6 ### Ollama Version (if applicable) llama.cpp ### Operating System openweb UI docker container (k8s helm chart 14.8), llama.cpp on cachyos 0821c5fcfd729af70037bc1e9e60769d42c081ba ### Browser (if applicable) firefox 151 ### 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 type in a simple query to chat. It searches and fails w/ the given logs. It should "just work". Last working version with my setup was 0.9.4 ### Actual Behavior <img width="1444" height="610" alt="Image" src="https://github.com/user-attachments/assets/9174e89d-757a-4cab-80b9-3bb2b59cf043" /> (see pod logs too) ### Steps to Reproduce 1. cachyos w/ the llama.cpp server version indicated 2. run `unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q6_K` 3. searxng hooked up, container version/tag `2026.2.16-8e824017d` 4. authentik OIDC version `2026.2.2` 5. hook up into openweb-ui 0.9.6 6. send a query to chat ### Logs & Screenshots ``` 2026-06-04 14:30:16.113 | INFO | open_webui.routers.retrieval:save_docs_to_vector_db:1536 - embeddings generated 468 for 468 items 2026-06-04 14:30:16.123 | INFO | open_webui.routers.retrieval:save_docs_to_vector_db:1548 - adding to collection web-search-63d4d8854c3969446c9fc30eca4c719b7dac905c7ebc7c359ae6 2026-06-04 14:30:17.138 | INFO | open_webui.retrieval.vector.dbs.pgvector:insert:331 - Inserted 468 items into collection 'web-search-63d4d8854c3969446c9fc30eca4c719b7dac905c7ebc7c359ae6'. 2026-06-04 14:30:17.142 | INFO | open_webui.routers.retrieval:save_docs_to_vector_db:1554 - added 468 items to collection web-search-63d4d8854c3969446c9fc30eca4c719b7dac905c7ebc7c359ae6 2026-06-04 14:30:18.356 | ERROR | open_webui.main:process_chat:2060 - Error processing chat payload: Invalid url value ``` <img width="1444" height="610" alt="Image" src="https://github.com/user-attachments/assets/e57d2394-a993-4a74-8815-7b69e2840750" /> ### Additional Information my helm charts here: https://github.com/chr0n1x/rpi-talos/tree/main/k8s/argocd-deploy last working helm **CHART** version `14.4.0` https://github.com/chr0n1x/rpi-talos/commit/04dcad5dd2d4aab56bf85f0b42978061126b4b17 llama.cpp server command: ```sh llama-server \ -hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q6_K \ --n-cpu-moe 10 \ --host :: \ --port 8000 \ --n-gpu-layers all --ctx-size 250000 \ --cache-type-v q8_0 --cache-type-k q8_0 \ --mlock \ --flash-attn on \ --threads-batch 8 --th
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#25618](https://github.com/open-webui/open-webui/issues/25618) **issue: 0.9.6 broke web search** *This is the closest match: it reports that v0.9.6 broke web search with SearXNG and that search results are fetched but not used, which aligns with the regression described in #25710 since 0.9.5/0.9.6.* *by garloff · `bug`* 2. 🟢 [#25585](https://github.com/open-webui/open-webui/issues/25585) **issue: Web search results not passed to model after upgrading to v0.9.6** *This open issue also describes a v0.9.6 regression where SearXNG results are retrieved but not passed into the model
💬 chr0n1x
not exactly the same as https://github.com/open-webui/open-webui/issues/25585 -- I have an `invalid URL` error message.
💬 wayubi
I have the same issue
💬 wayubi
I rolled back to 0.9.4 -- search works there
💬 technofox01
> I rolled back to 0.9.4 -- search works there That’s exactly what I did. The developers need to do a better job testing their releases prior to deployment to production, or at least release provide a means to graphically switch between the legacy and newer agentic web search engines, so that people don’t have to spend hours troubleshooting.
💬 Azzhoe
same issue here for me as well
💬 paul-forgeguard
If I get time before someone else does, I intend to fix this, but that's probably unlikely lol - I need to rebuild a dev environment for this project (why exacatly does it not already have a devcontaianer defined in .githyub?). Here's the quick report on the issue after doing a quick copilot investigation: **Short version:** the “extended” SearXNG URL is expected behavior in Open WebUI, and it exists in both `v0.9.6` and current `main`. The likely regression is not that Open WebUI appends `format=json&pageno=1...`; it always builds those params. The meaningful change between working `v0.9.4` and broken `v0.9.6` is that SearXNG search was migrated from synchronous `requests.get(...)` to shared async `aiohttp` session usage. ## Findings ### 1. `main` and `v0.9.6` currently have the same S
💬 Classic298
Hi @paul-forgeguard as written in the docs there are many ways to set up a dev environment - and one of them, which is the one you want, already exists. there is a :dev container already available with the latest dev installed. So feel free to use that - you just won't be able to modify the frontend of course since the container ships with a fully built frontend. and please omit posting AI generated "possible fix" comments, these are not helpful at all and skew the real process of finding the root cause. It'd be best if you could apply those changes to your own environment and test it - and then post if it helped. If it did, feel free to create a PR so this can be fixed thanks!
💬 paul-forgeguard
Understood! If it helps, I did actually read through it, and only posted it so someone might see it and create a fix before I can! I'll adjust for future posts and I apologize! We'll see if I can get around to this tonight.
💬 wayubi
Paul, the bug in 0.95 and 0.96 also applies to DDG search an EXA search.
💬 isoodeen1
I am also experiencing this issue with Ollama Cloud Api key with web search.
💬 FraYoshi
For me, version `0.9.6` , had to enable the Bypass Embedding and Retrieval option to make the searxng work again. <img width="678" height="233" alt="Image" src="https://github.com/user-attachments/assets/419992a6-0a62-4f63-b55f-0f5c2de16f67" />
💬 isoodeen1
@FraYoshi, I tried this as well with DDGS and Ollama Cloud, and it searches, but never gives a reply. If I ask it a question with web search disabled, it does work properly; the web search is broken for me. A simple question about what the tempreature is and it gives no reply. <img width="578" height="341" alt="Image" src="https://github.com/user-attachments/assets/3f4b880d-f569-4993-acfa-e7bf911c69d7" />
💬 isoodeen1
@FraYoshi Only Tavily seems to work for me.
💬 FraYoshi
@isoodeen1 it gives me the reply instead, but I'm using llama.cpp for embedding, reranking *(not used during the search nor generation)*, and models.. might be a factor. also, no context limit in my case.. `--ctx-size 0` <img width="674" height="543" alt="Image" src="https://github.com/user-attachments/assets/a7de6520-f3d4-432c-bf17-71b46983213c" />
在 GitHub 查看其余 2 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 ShirasawaSama  ·  💬 23  ·  👍 3  ·  👥 13  |  Pain 4 · Budget 2 · Urgency 1
brokenproductionworkaroundstuckdeploydeploymentbug
### Check Existing Issues - [x] I have searched the existing issues and discussions. - [x] I am using the latest version of Open WebUI. ### Installation Method Git Clone ### Open WebUI Version v0.6.15 (latest dev) ### Ollama Version (if applicable) _No response_ ### Operating System MacOS 1…
展开全文 · 23 条评论
### Check Existing Issues - [x] I have searched the existing issues and discussions. - [x] I am using the latest version of Open WebUI. ### Installation Method Git Clone ### Open WebUI Version v0.6.15 (latest dev) ### Ollama Version (if applicable) _No response_ ### Operating System MacOS 15.5 ### Browser (if applicable) Edge 133 ### 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 1. OpenWebUI with direct connection mode enabled 2. Multiple backend workers (workers > 1) 3. WebSocket + SSE communication flow ### Actual Behavior When using "direct connection" mode with multiple backend workers, chat requests may timeout due to WebSocket and API request routing to different worker instances. 1. Requests get stuck without responses 2. Eventually timeout with error messages 3. Issue occurs intermittently when multiple workers are deployed ### Steps to Reproduce 1. Configure OpenWebUI with multiple workers (workers > 1) .env ``` ENABLE_WEBSOCKET_SUPPORT=true WEBSOCKET_MANAGER=redis REDIS_URL=redis://default:password@localhost:6379/1 WEBSOCKET_REDIS_URL=redis://default:password@localhost:6379/1 ``` ```bash $ uvicorn open_webui.main:app --host 0.0.0.0 --port 8080 --forwarded-allow-ips '*' --log-config ./uvicorn_config.json --workers 8 ``` 2. Enable direct connection mode 3. Send direct connection chat request 4. Observe that some requests timeout without responses ### Logs & Screenshots ![Image](https://github.com/user-attachments/assets/9fbd0831-914e-4142-80dd-39580004088d) ### Additional Information The current architecture has the following flow: 1. Frontend sends request to `/api/v1/completions` 2. Backend responds via WebSocket, instructing frontend to send SSE request to direct connection address `/completions` 3. Frontend forwards received data back through WebSocket 4. Backend starts listening for WebSocket messages from the initial request **Problem**: When `workers > 1`, the WebSocket connection and the `/api/v1/completions` API request may be routed to different worker instances, causing the system to wait indefinitely for responses that will never arrive.
💬 ShirasawaSama
We can add the following print statement to the `generate_direct_chat_completion function in the `backend/open_webui/utils/chat.py` file: ![Image](https://github.com/user-attachments/assets/4d86ace1-508e-4d05-8c6f-fd411154dc47) and to the `backend/open_webui/socket/main.py` file: ![Image](https://github.com/user-attachments/assets/2307d499-aaaf-44a1-9b74-1eab6a45f59a) and to the `src/routes/+layout.svelte` file: ![Image](https://github.com/user-attachments/assets/7997b1a4-b39b-4ef7-9a05-fa1c4fac9e77) At this point, if the above problem occurs, we can observe that the pid of the two processes is completely different, and at the same time, the process of the http request does not receive websocket data at all! ![Image](https://github.com/user-attachments/assets/ebc4dfca-0aac-436a-98ff
💬 Zyfax
When operating with multiple instances, `WEBUI_SECRET_KEY` has to be identical on all. With docker, it random generates a key on boot and will therefor be a mismatch. ![Image](https://github.com/user-attachments/assets/77958811-6e62-4404-8f1c-5f0b39201652)
💬 ShirasawaSama
> When operating with multiple instances, `WEBUI_SECRET_KEY` has to be identical on all. With docker, it random generates a key on boot and will therefor be a mismatch. > > ![Image](https://github.com/user-attachments/assets/77958811-6e62-4404-8f1c-5f0b39201652) I have added this environment variable and it still behaves the same: ```bash $ WEBUI_SECRET_KEY=ifehiofhsefh uvicorn open_webui.main:app --host 0.0.0.0 --port 8080 --forwarded-allow-ips '*' --log-config ./uvicorn_config.json --workers 8 ``` ![Image](https://github.com/user-attachments/assets/bb802dff-d65b-42ea-b2cc-883847b086c6)
💬 tjbck
Any reason why you have to utilise multiple workers instead of multi-replica setup?
💬 ShirasawaSama
> Any reason why you have to utilise multiple workers instead of multi-replica setup? yes, my .env file: ``` WEBUI_SECRET_KEY=hdjdn84kkwn ENABLE_WEBSOCKET_SUPPORT=true WEBSOCKET_MANAGER=redis REDIS_URL=redis://default:password@localhost:6379/1 WEBSOCKET_REDIS_URL=redis://default:password@localhost:6379/1 ```
💬 ShirasawaSama
> Any reason why you have to utilise multiple workers instead of multi-replica setup? In fact, I've tried multiple k8s pod deployments as well as multiple worker deployments. However either way, as long as the number of instances is greater than 1, there is a probability that it will cause the chat to get stuck on a direct connection. In addition, I read the official introduction of socket.io, and the official redis adapter seems to support only server-side push with multiple workers. As for receiving, client's data is not pushed to all workers. https://socket.io/docs/v4/redis-adapter/ ![](https://socket.io/images/redis-emitter.png)
💬 chemi392
I am not using direct connections, but do have multiple workers running on my instance and am experiencing the same behavior as of v0.6.15
💬 hpavanatti
Same problem here, multiple workers running, and experiencing the same in version v0.6.15(in v0.6.11 it happens to!)
💬 Simon-Stone
This is still a problem in v0.6.28.
💬 Zyfax
> This is still a problem in v0.6.28. Enable direct connection under Admin Panel, Settings, Connections ![Image](https://github.com/user-attachments/assets/cf9390c1-8bb2-48f7-a0d1-2b8d9b3dcc66)
💬 ShirasawaSama
> > This is still a problem in v0.6.28. > > Enable direct connection under Admin Panel, Settings, Connections > > ![Image](https://github.com/user-attachments/assets/cf9390c1-8bb2-48f7-a0d1-2b8d9b3dcc66) Yes, when you enable this option and use multiple workers, this issue arises.
💬 Simon-Stone
It's not that the option to make a Direct Connection does not show up in the user settings. That works fine. The issue is that requests made using a client-side Direct Connection do not succeed. The message just shows the placeholder indefinitely. I believe that I narrowed the issue down a little bit further: This only seems to happen when streaming responses. When Stream Chat Response is set to off, the requests seem to go through just fine. Would be nice if others with the same issue here could confirm that.
💬 ShirasawaSama
> It's not that the option to make a Direct Connection does not show up in the user settings. That works fine. > > The issue is that requests made using a client-side Direct Connection do not succeed. The message just shows the placeholder indefinitely. > > I believe that I narrowed the issue down a little bit further: This only seems to happen when streaming responses. When Stream Chat Response is set to off, the requests seem to go through just fine. > > Would be nice if others with the same issue here could confirm that. Because non streaming requests do not require OpenWebUI for WebSocket broadcasting, there are no issues. The root cause of the problem now is actually very clear, as I mentioned earlier, socket.io does not broadcast the websocket data sent by the client to all serv
💬 Simon-Stone
Still an issue in v0.6.30
💬 jasonpnnl
## Root Cause Analysis The issue is caused by **dynamic event handler registration in `backend/open_webui/utils/chat.py:95`** that only registers handlers in the local worker process, not globally across all workers. ### Current Broken Flow **`backend/open_webui/utils/chat.py:85-98`:** ```python channel = f"{user_id}:{session_id}:{request_id}" if form_data.get("stream"): q = asyncio.Queue() async def message_listener(sid, data): await q.put(data) # BUG: This only registers the handler in the CURRENT worker! sio.on(channel, message_listener) res = await event_caller({...}) # Send RPC to browser ``` ### What Happens with Multiple Workers 1. HTTP request `POST /api/v1/completions` → **Worker A** (random routing) 2. Worker A registers handler `sio.on(chann
在 GitHub 查看其余 8 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 MarijanStajic  ·  💬 8  ·  👍 2  ·  👥 5  |  Pain 7 · Budget 2 · Urgency 2
not workingbrokenproductionmanuallyworkaroundregressionfailsdeploydeploymentimmediatelybug
### 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 …
展开全文 · 8 条评论
### 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.9.5 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 24.04 ### Browser (if applicable) _No response_ ### 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 After editing an Azure OpenAI connection in Admin Panel → Settings → Connections (e.g. adding or removing a model ID), the connection should continue to work normally and models should be listed correctly. ### Actual Behavior After saving any change to an Azure OpenAI connection, all Azure models stop loading with the following error: ``` ERROR | open_webui.routers.openai:get_models:685 - Unexpected error: External Error: {'code': '404', 'message': 'Resource not found'} ``` The issue affects all connections on the instance. The UI shows "Not resource found" on a new chat, and any attempt to recreate the connection also fails immediately. ### Steps to Reproduce 1. Have a working Azure OpenAI connection configured in Open WebUI (with azure: true in api_configs) 2. Go to Admin Panel → Settings → Connections 3. Edit the Azure connection (e.g. add or remove a model ID from the list) 4. Save the connection 5. Open WebUI rewrites the connection config replacing "azure": true with "provider": "azure" and drops the azure flag entirely 6. All Azure models now return 404 Resource not found This was also reproduced simply by upgrading Open WebUI to v0.9.5, which rewrites the connection config on startup. ### Logs & Screenshots In open_webui/routers/openai.py, the get_models function branches based on the azure flag in api_config: ``` if api_config.get('azure', False): # Returns model_ids directly from config — no HTTP call made models = { 'data': api_config.get('model_ids', []) or [], 'object': 'list', } else: # Falls through to a generic HTTP GET to {url}/models # This endpoint does not exist on Azure → 404 async with session.get(f'{url}/models', ...) as r: ... ``` When the UI saves a connection with provider: "azure" but without azure: true, the code falls into the else branch and makes an HTTP GET to {base_url}/models, which is not a valid Azure OpenAI endpoint, resulting in a 404. Before edit: api_configs["0"] contains "azure": true → works correctly After edit: api_configs["0"] contains "provider": "azure" but no "azure": true → broken Logs : ``` 2026-05-26 09:33:21.167 | ERROR | open_webui.routers.openai:get_models:685 - Un
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22322](https://github.com/open-webui/open-webui/issues/22322) **issue: OpenAI API Connection Model-IDs are not saved** *This is the closest historical match: it reports OpenAI connection model IDs not persisting after edits, which aligns with the new issue’s trigger of editing connection settings and the backend rewriting connection data. Although it’s not Azure-specific, it covers the same admin-panel save/persist path that appears to be corrupting configuration.* *by m1g32 · `bug`* 2. 🟣 [#24872](https://github.com/open-webui/open-webui/issues/24872) **issue: Azure OpenAI provid
💬 eddik1970
Happened here too today, and the sqlite-script worked and fixed it.
💬 karlettoh
Also happened today for us - we're using postgres instead. Do we know if this is being picked up?
💬 toraip
> Also happened today for us - we're using postgres instead. Do we know if this is being picked up? Did running something like ``` UPDATE config SET data = jsonb_set( jsonb_set( jsonb_set( data::jsonb, '{openai,api_configs,0,azure}', 'true'::jsonb, true )::json; ``` Work for you?
💬 karlettoh
For admins, yes. For normal users, no. 😢
💬 toraip
For our use case we inserted a liteLLM proxy between Azure AI Foundry endpoints and open webui.
💬 karlettoh
To be honest, that's a good plan. I'm mid rollback, currently replaying a DB.
💬 FuturMix
For anyone still hitting this while waiting for the PRs to land, here are the workaround options depending on your setup. **Quick database fix (immediate relief):** If you just need things working again right now, the SQLite patch from earlier in this thread works. For PostgreSQL users: ```sql UPDATE "connection" SET config = jsonb_set(config, '{azure}', 'true') WHERE config->>'provider' = 'azure'; ``` Note: this may get overwritten if you re-edit the connection in the UI before the fix is merged. **Proxy approach (more resilient if you want to keep your own Azure deployments):** If you want to keep using your existing Azure OpenAI deployments but avoid the config rewrite bug, putting a self-hosted proxy between Open WebUI and Azure handles the translation. LiteLLM is the most common cho
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 fplonka-ft  ·  💬 17  ·  👍 11  ·  👥 4  |  Pain 3 · Budget 1 · Urgency 1
can'tcannotmanuallyenterpriseimmediately
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the …
展开全文 · 17 条评论
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions. ### Problem Description When using the Pyodide code interpreter, files uploaded via the normal chat input automatically appear at `/mnt/uploads/` and the model can immediately access them with code. This works seamlessly. When using Open Terminal instead, files uploaded via the normal chat input go into Open WebUI's internal storage (with RAG extraction), but they never appear on the terminal's filesystem. The model gets terminal tools like `execute_command` and `read_file`, but can't find the uploaded files. Users can work around this by uploading through the Files tab in the sidebar, but there's no indication that the normal upload won't work. This creates a confusing experience — a user connects a terminal, uploads a CSV via the chat input, asks the model to analyze it, and the model can't find the file. With Pyodide it just works; with Open Terminal it silently doesn't. ### Desired Solution you'd like When a terminal is connected, uploaded files could be synced to the terminal's filesystem (via its `/files/upload` API) so the model can access them through terminal tools — similar to how Pyodide automatically loads them into `/mnt/uploads/`. A smaller improvement would be to surface a hint or redirect to the Files tab when a user uploads a file with a terminal connected. As a related UX note: auto-connecting to the terminal when only one is configured (currently requires clicking the cloud icon on every new chat) would also reduce friction. ### Alternatives Considered - Uploading files exclusively through the Files tab in the sidebar — works, but is non-obvious and a separate flow from the standard chat upload. - Using the Pyodide code interpreter instead — handles file uploads well, but lacks a real Linux environment, persistent filesystem, networking, and full package support. - Disabling the `file_context` model capability to skip RAG injection — files still go to Open WebUI storage, not the terminal filesystem. ### Additional Context The Pyodide file sync works because the middleware sends uploaded file references back to the browser via the `execute:python` socket event, the frontend fetches the file content via `getFileContentById()`, and loads it into the Pyodide WASM filesystem. There's no equivalent pipeline for Open Terminal.
💬 dhaern
Add an option to make open terminal permanent on or off in model settings...
💬 Classic298
https://github.com/open-webui/open-webui/pull/22156 <- basically implemented here
💬 sousekd
First of all: Open Terminal is great, thank you for building it! But I’d like to support this request with a few concrete use cases :). Right now, chat attachments and Open Terminal feel disconnected. If I attach an image, a vision model can describe it in chat, but Open Terminal cannot edit that same file unless I upload it again through the terminal file browser. The same happens with documents: RAG can answer questions, but terminal tasks like `grep`, exact word counts, conversion, scripting, or batch processing require a second upload. A good solution would be one of these: 1. Automatically expose chat attachments in a per-chat terminal folder when a terminal is connected 2. Add a simple **“Send to Terminal”** button for attached files 3. Let the model call a built-in function to e
💬 Classic298
made a new PR that also allows the AI to upload files from the knowledge base
💬 Joni1717
+1
💬 Joni1717
Is this feature #23349 still planned? Just asking because it was closed without a comment.
💬 Classic298
@Joni1717 not for now. you can use a simple custom tool in the workspace with more or less 1:1 the same code from my PR and it would also work just fine
💬 Joni1717
@Classic298 thanks for the heads-up! I've tested it, made a few adjustments, and it works. However, I ran into an issue with the "upload_file_to_terminal" approach, and I believe it might not be the ideal solution. Here's the scenario: When I have an Excel file in the Knowledge Base and ask the AI a general question about it, everything works great at first. The AI searches for the relevant Excel file based on my description, uploads it to the Terminal, and creates perfect analyses. The problem is that the uploaded Excel file remains in the Terminal as leftover data. If I don't manually delete it every time, the next time I ask about the same file, the AI might find the older version from the Terminal instead of fetching the latest one from the Knowledge Base. As others have mentioned i
💬 Classic298
The enterprise version of the terminals manager has data retention policies, for open terminal itself, you can make the docker e.g. not mount a volume at all and all the storage inside the new docker layers would be ephemeral in that case
💬 Joni1717
@Classic298 I really appreciate your suggestions. Thank you very much for the input. Personally, however, I see a few issues with this approach. Since I believe many people could benefit from this functionality, and I really enjoy using OpenTerminal as it is a very powerful tool, I would like to add a few more thoughts. Chat/KB files are dynamic, always up-to-date reference data, whereas terminal files are persistent artifacts of the workspace that are available to the model across all chats. Copying between them (upload_file_to_terminal) introduces the risk of version drift (outdated duplicates vs. updated originals). “Ephemeral Volume” helps with cleanup, but it does not resolve the deeper conflict between short-lived analysis workflows and long-lived projects in the Terminal. The over
💬 Classic298
I don't understand what you mean here and I'm gonne be blunt: you're gonna have to explain your case better here. Don't tell me what you want, tell me what you want to do because at this point i think you're going at it from the wrong direction. First and foremost: it's impossible to have the knowledge bases as-is be directly connected to the terminal as the knowledge base is just a database query, enlisting which files got uploaded, content extracted and shoved into the same virtual concept identified by a common knowledge base id. It's not a filesystem. Integrating knowledge bases into open terminal for live sync LIKE THIS is not possible. You'd have to delete knowledge bases and rebuild them as a filesystem. Next: what IS possible is to give the AI tools to copy files from the knowl
💬 Classic298
You've told me the mechanism you want (mount KB → terminal). I want to know the task underneath it, because that mechanism isn't possible in OWUI as-is **and — in my experience — when someone's fixated on a specific mechanism, the thing they actually need usually has a different and cleaner path they haven't considered.** Not necessarily true for you, but has been true for 99% of such requests in the past So: concretely, what's the workflow? A user has files in a KB and wants to do what with them in the terminal — long-lived evolving project files, or one-off analyses? What does a real session look like start to finish? Once I have that, I can point you at the right path, which is probably not "mount the KB" at all.
💬 Joni1717
@Classic298 Thanks for taking the time to explain. I just thought it would be a good idea, because Pyodide also mounts files from chat/knowledgebases in /mnt/uploads. Here is my workflow: I have knowledge bases that are regularly synchronized via OIKB. These knowledge bases contain various types of files, including Excel spreadsheets that are updated over time. (That’s what I meant in terms of files being updated regularly) One of the challenges is that RAG-based retrieval is not well suited for many spreadsheet-related tasks. The model only receives selected chunks, or even if it gets the full context, it may run out of context length. As a result, answers can easily become incomplete or inaccurate when a question requires analysis across the entire file. On top of that, LLMs often str
💬 Classic298
ok so the task is there are excel files in a knowledge base and you want to ... retain them there and edit them using open terminal okay - mind me asking why the Excel files have to be in the knowledge base? As you said yourself, and this is absolutely correct, RAG over excel files is a mixed bag. You'll probably not get what you actually want or need. Is there perhaps another form of storage you would want to use? Where do the Excel files normally live? Where are they from? They have to be from somewhere, be it network storage or cloud storage or something.
💬 Joni1717
The reason the Excel files are in the knowledge base is simply that I have them in the OpenWebUI environment, which potentially allows me to query them via script using the CodeInterpreter or Terminal, and gives me the ability to set up multiple knowledge bases that can be accessed by different users, depending on which user has access to which knowledge base. The Excel files are stored either on network drives or locally on the hard drive.
在 GitHub 查看其余 2 条评论 →
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 jimbo-p  ·  💬 11  ·  👍 1  ·  👥 6  |  Pain 7 · Budget 1 · Urgency 1
blockedcannotbrokenproductionmanuallyworkaroundregressionevaluationbug
### 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 …
展开全文 · 11 条评论
### 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 0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System windows 10 ### Browser (if applicable) _No response_ ### 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 A skill attached to a model via meta.skillIds should: - Appear in the system prompt only as a manifest entry (<available_skills> → id/name/description). - Have its full content loaded on demand by the model calling the view_skill built-in tool. - Full-content injection should be reserved for skills the user explicitly selects in the chat (via $-mention or the integrations menu toggle). ### Actual Behavior - The full skill content is injected into the system prompt on every request, even when the skill is only attached at the model level and was never explicitly selected by the user. - The view_skill tool is never registered/offered, so it cannot be called (with native function calling and builtin_tools enabled.) - For models with larger skills, this makes skills effectively unusable: every request balloons the context with full skill content instead of a small manifest, blowing up token usage (and cost/latency) and risking context-limit errors. ### Steps to Reproduce 1. Open OWUI, add a skill 2. Attach skill to a model (Admin Settings -> Models -> Model Builder), turn on Builtin / native FC. 3. Prompt the model with something that should invoke the skill 4. Notice no tool call is made to read skill, skill is already in context You can also just make a very large skill with junk data, attach it to a model, and notice that skill context is injected into chat with a 'hello' prompt. It will not be possible to invoke 'View Skill' ### Logs & Screenshots No errors ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22634](https://github.com/open-webui/open-webui/issues/22634) **issue: view_skill tool is not being made available in chat** *This is directly about the same missing built-in `view_skill` tool. The new issue says `view_skill` is never registered/offered, and this older bug reports that the model can see skills but cannot see the `view_skill` built-in tool.* *by NWalker4483 · `bug`* 2. 🟣 [#22735](https://github.com/open-webui/open-webui/issues/22735) **issue: Skills on models** *This issue reports that skills attached to a model are ignored unless the user explicitly invokes th
💬 Classic298
confirmed
💬 Classic298
testing wanted https://github.com/open-webui/open-webui/pull/25599
💬 rehan243
Oh interesting, yeah, we hit something similar when upgrading to 0.9.6. The way skills are injected into the system prompt now seems to bypass any dynamic loading through `view_skill`, which messes with workflows that rely on lazy evaluation. For us, it caused some unexpected context bloat since every skill was getting dumped in upfront, even ones we weren’t using. The way we worked around it (temporary hack) was to patch the skill loading logic to manually filter out unused skills before they're appended to the prompt. Not ideal, but it unblocked us. Also, double-check your Docker environment — we noticed some odd side effects related to cached layers not reflecting updates in the skill registry. A clean rebuild (`docker-compose down --volumes && docker-compose up --build`) might help
💬 gaby
This probably breaks prompt/token/prefix caching in the backends. Since the system prompt can be constantly changing.
💬 Classic298
@gaby it doesnt unless you constantly toggle skills on and off. i tested it locally. i still get cached tokens
💬 gaby
> [@gaby](https://github.com/gaby) it doesnt unless you constantly toggle skills on and off. i tested it locally. i still get cached tokens Yeah, correct. It should be fine as long as you dont touch the skills.
💬 jimbo-p
> testing wanted [#25599](https://github.com/open-webui/open-webui/pull/25599) tested and working
💬 Classic298
@jimbo-p gracias
💬 rehan243
Yeah, good catch — that version jump definitely complicates prompt caching since the prompt content is more dynamic now. We’ve been thinking about how to balance cache efficiency with the updated skill handling. Might be worth diving into the new cache invalidation docs or looking at the PR that introduced that change? LMK if that helps or if you’ve found a workaround.
💬 arbv
This is so annoying. I have written specific instructions for models to load skills only to find it broken on upgrade
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 joequant  ·  💬 12  ·  👍 5  ·  👥 8  |  Pain 6 · Budget 0 · Urgency 1
can'tproductioncrashmanuallyregressionfailsbug
### 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 …
展开全文 · 12 条评论
### 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 Git Clone ### Open WebUI Version 0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System linux ### Browser (if applicable) firefox ### 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 Openwebui should boot. ### Actual Behavior Openwebui fails to boot with ValueError: No embedding model is loaded. Set RAG_EMBEDDING_MODEL to a valid SentenceTransformer model name, or configure an external RAG_EMBEDDING_ENGINE (ollama, openai, azure_openai). ### Steps to Reproduce Run 0.9.5 it works Run 0.9.6 it doesn't ### Logs & Screenshots [log.0.9.5.works.txt](https://github.com/user-attachments/files/28532148/log.0.9.5.works.txt) [log.0.9.6.fail.txt](https://github.com/user-attachments/files/28532152/log.0.9.6.fail.txt) ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22671](https://github.com/open-webui/open-webui/issues/22671) **issue: Error 500 on ollama with RAG_EMBEDDING_ENGINE=ollama and RAG_EMBEDDING_MODEL=bge-m3** *This issue also centers on RAG embedding configuration causing failures when the embedding engine/model is set, and it involves an error path in the same RAG embedding startup/usage code. While the symptom is a 500 during file ingestion rather than boot failure, it is closely related to embedding-model handling regressions.* *by bibi21000 · `bug`* 2. 🟣 [#24090](https://github.com/open-webui/open-webui/issues/24090) **issue:
💬 joequant
I've looked at the code in retreval/utils.py and between 0.9.5 and 0.9.6 the following code was added which causes the system to fail on boot. ``` if embedding_engine == '': if embedding_function is None: raise ValueError( 'No embedding model is loaded. Set RAG_EMBEDDING_MODEL to a valid ' 'SentenceTransformer model name, or configure an external ' 'RAG_EMBEDDING_ENGINE (ollama, openai, azure_openai).' ) ```
💬 joequant
Opencode provides the following commentary. It appears that my configuration got into a weird state. But the system should not exit/ ``` The commit that changed line 931 is 55ca719bb (refac). This commit added an explicit null check for embedding_function that wasn't present in v0.9.5. What changed: - In v0.9.5: If embedding_engine == '' and embedding_function was None, the code would proceed and fail later with AttributeError when calling embedding_function.encode() - In v0.9.6: The same condition now raises a clear ValueError with the message you see in your logs Root cause: Your environment has: 1. embedding_engine set to empty string (meaning local SentenceTransformer embeddings) 2. But embedding_function is None (no SentenceTransformer model loaded) This means either: - The Senten
💬 joequant
It appears what happened is that I set Embedding Model in my Documents settings to blank. The problem is that I should not be able to cause the system to fail to boot by settings.
💬 joequant
What appears to have happened is that the embedding model defaults to sentence-transformers/all-MiniLM-L6-v2 , but some where I explicitly set the embedding model to "" in the Document settings. I was able to run 0.9.5 change the settings to sentence-transformers/all-MiniLM-L6-v2 and this works. However, this is still a bug because you should not be able to crash the system through the settings panel since once you set the embedding model you can't reverse the breakage sense open-webui does not boot up. Suggest that the error be converted to a warning.
💬 vvverily
Same problem here
💬 DougBourban
What i had to do to fix the issue going from v0.9.5 -> v0.9.6 `sqlite3 webui.db` `SELECT json_extract(data, '$.rag.embedding_engine') FROM config WHERE id = 1;` mine output `sentence_transformers` you want this to actually show up empty `UPDATE config SET data = json_set(data, '$.rag.embedding_engine', '') WHERE id = 1;` run `SELECT json_extract(data, '$.rag.embedding_engine') FROM config WHERE id = 1;` again and it should be empty
💬 joequant
Any ideas on what the right fix is? I can put in a quick PR that turns the Error into a warning, but is that the right thing to do?
💬 Classic298
https://github.com/open-webui/open-webui/pull/25683
💬 peter-ch
After upgrading the whole thing became unusable, and it was unusable for some time.
💬 opsec-ai
So, `webui.db` exists but is a 0-byte file. * I did `ln -sf ./.venv/lib/python3.11/site-packages/open_webui/data/webui.db .` * queried the database and saw that `embedding_engine` yes, was blank. * edited `.venv/lib64/python3.11/site-packages/open_webui/retrieval/utils.py:931` * `print("Eek. No embedding model is loaded.")` Now it starts up, with errors. But I could probably squelch those via the UI. ERROR [open_webui.main] Error updating models: Could not import module 'PreTrainedModel'. Are this object's requirements defined correctly? Eek. No embedding model is loaded.
💬 berturion
This happened to me. I had to manually fix the model in sqlite database in my docker volume. I think that a bad setting like this should not prevent open-webui to launch.
💡 痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 Hello-World-Traveler  ·  💬 5  ·  👍 5  ·  👥 5  |  Pain 6 · Budget 1 · Urgency 1
cannotdoes not workbrokenproductionregressionstuckenterprisebug
### 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 …
展开全文 · 5 条评论
### 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 0.9.6 ### Ollama Version (if applicable) 0.30.0 and 0.23.0 ### Operating System docker ### Browser (if applicable) _No response_ ### 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 Text in UI, ollama works with its self. Yesterday was working, updated an hour ago and nothing. I don't see much API in the logs never chat complete. ### Actual Behavior Nothing, stuck on loading in UI ### Steps to Reproduce Update, use ollama ### Logs & Screenshots Ollama 0.23.0-rc0 (working yesterday) ``` source=server.go:1432 msg="llama runner started in 2.31 seconds" 172.17.0.1 | POST "/api/chat" 172.17.0.1 | POST "/api/chat" 172.17.0.1 | GET "/api/tags" 172.17.0.1 | GET "/api/ps" 172.17.0.1 | GET "/api/tags" 172.17.0.1 | GET "/api/ps" 172.17.0.1 | POST "/api/chat" ``` OWUI ``` GET /_app/immutable/nodes/3.Rf483QC1.js HTTP/1.1" 304 GET /_app/immutable/nodes/9.BU7GWhNy.js HTTP/1.1" 304 GET /ollama/api/version HTTP/1.1" 200 GET /api/version/updates HTTP/1.1" 200 GET /_app/version.json HTTP/1.1" 304 ``` edit: after 10 minutes uvicorn.protocols.http.httptools_impl:send:483 - IP - "POST /api/chat/completions HTTP/1.1" 200 How ever it still "loading" in UI ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#24711](https://github.com/open-webui/open-webui/issues/24711) **issue: Chat not accessible/loading in interface** *Both reports describe the chat interface getting stuck in a loading state after an update/restart. This issue’s “stuck on loading in UI” symptom is very similar, though 24711 focuses on a specific corrupted conversation rather than Ollama connectivity.* *by HenkieTenkie62 · `bug`* 2. 🟣 [#24553](https://github.com/open-webui/open-webui/issues/24553) **issue: /api/chat/completions runs into error** *This is a concrete backend regression in /api/chat/completions intr
💬 Hello-World-Traveler
Also 0.30.0 has been released with new engine/improve https://github.com/ollama/ollama/releases/tag/v0.30.0
💬 mamontuka
> Also 0.30.0 has been released with new engine/improve https://github.com/ollama/ollama/releases/tag/v0.30.0 here is as usualy "licensed enterprise stability": stable bugs - one fixed, another stop works at all... confirm ollama 0.24.0 not works too at all, and overload workers till they restart, on try add knowledge with rag embedding model
💬 silentoplayz
Semi-related PR - https://github.com/open-webui/open-webui/pull/25715
💬 naisanzaa
also happening on ollama v0.30.6 for windows ``` C:\Users\Eric>ollama --version ollama version is 0.30.6 ```
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 Classic298  ·  💬 8  ·  👍 0  ·  👥 3  |  Pain 1 · Budget 5 · Urgency 1
regressionwe needenterprisedeploydeploymentcustomerscritical
(无正文)
8 条评论
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#25082](https://github.com/open-webui/open-webui/issues/25082) **issue: GET /api/v1/knowledge/search/files: unindexed JSON ILIKE per keystroke (chat '#' + model KB selector)** *Directly related: it reports the same class of performance regression in knowledge-file search caused by an unindexed JSON/text predicate, leading to seq scans and slow queries on large databases. The new issue is another knowledge-files search path with the same root cause pattern: querying extracted content without a left-bound/index-friendly restriction.* *by jimbo-p · `bug`* 2. 🟢 [#25717](https://github
💬 Classic298
https://github.com/open-webui/open-webui/pull/25869
💬 aprudnev
I just loaded 30K documents by OIKB. And while there are many minor issues (for example, OWUI show memory leak, it stopped working couple times, and more critical. tools which are available may easily cause context window to expire even on 256K context - for example our single KB of 2500 documents, if system ask list_knowledge, instantly eat about 150K of context), I did not see slowness, except caused by memory (or other resource) leak. So, I uploaded about 30 directories into 30 KB (actually one per year, between 1K and 2K documents), I observed system slowed down after it upload 2 - 3 KB, so I restarted open-webui before each oikb call, and it resulted in pretty fast upload - 2K documents, 50% PDF with Mistral OCR, uploaded in maybe 1h. And I must say that OWUI is not designed to work w
💬 Classic298
gonna reply here in 30min. Your message is not related to this issue **at all** and all of the things you experience are due to misconfiguration. I'll send you a long comment here soon with a bunch of guides and best practices.
💬 Classic298
> for example, OWUI show memory leak local embedding model or local vector DB. Use external (OpenAI) embedding model and dedicated vector DB like pgvector or milvus or qdrant and not the built in chroma db > ools which are available may easily cause context window to expire even on 256K context - for example our single KB of 2500 documents, if system ask list_knowledge, instantly eat about 150K of context can you give a sample? list_knowledge should not cause 150k context, thats not what this tool does. it just LISTS the files in a knowledge base. > I observed system slowed down after it upload 2 - 3 KB, so I restarted open-webui before each oikb call, and it resulted in pretty fast upload yeah local embedding model and slow vector database and perhaps also slow content extraction >
💬 aprudnev
1) I used default embedding, pgvector databse (so it is not a factor) and external Mistral OCR (so it is not a factor too). It is possible that memory leak was caused by local embedding model (this VM do not have GPU, and I had mixed experience using ollama models for embedding, so I kept it with default model). I plan to try other embedding in staging so I can retest with embedding running on ollama. I do not see it as a big problem, but if you want, I can take staging system and test full import, changing embedding to ollama model (to eliminate issues caused by embedding running on CPU in OWUI itself). 2) list_knowledge. Vice versa. It is VERY DANGEROUS tool which kills model instantly if used on the middle size KB. Let's make simple test - I run this command on the directory used
💬 aprudnev
*** here is no subtasks feature in open webui. *** - but there is subtask feature, models see it and use it. _What exactly is subtask_ is different story. But model can create / run / delete subtask. This is an example from the chat: ``` _Let me start by creating the task list: Explored create_tasks, update_task Now let me search for xxxxxxx in the 2025 knowledge base. I'll start by querying the XXXXX-2025 KB to get a comprehensive view of all xxxxxx._ ```
💬 Classic298
@aprudnev that is no sub tasks feature, this is a checklist. this is literally just a tool call to create a checklist and the model works through the checklist for sub-tasks/sub-agents you need a sub agent tool
💡 有付费/企业信号 → 评估咨询或付费机会;高优先级 → 考虑提交 PR 或开发插件
👤 0-0-1-0-1-0-1-0  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 4 · Budget 3 · Urgency 1
cannotunableworkaroundregressionenterprisedeploydeploymentimmediately
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 2 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description ## Summary Open WebUI does not support PostgreSQL authentication via short-lived tokens (e.g. Azure Managed Identity / Azure AD token-based authentication for Azure Database for PostgreSQL). The `DATABASE_URL` is captured once at process startup and baked into the SQLAlchemy engine. When the token expires (~1 hour for Entra tokens), all new database connections fail with an authentication error and the application cannot recover without a full process restart. ## Background / Use Case When deploying Open WebUI on an Azure VM with a Managed Identity, the recommended (and in many organisations, mandatory) authentication pattern for Azure Database for PostgreSQL is: 1. Fetch a short-lived OAuth2 access token from the Azure IMDS endpoint 2. Use that token as the PostgreSQL password in the connection string 3. Periodically refresh the token before it expires (~60 min lifetime) This is the zero-credential, zero-secret authentication pattern — no passwords stored anywhere, fully auditable, and enforced by Azure security policy in many enterprise environments. The same pattern applies to: - AWS RDS IAM authentication (15-minute tokens) - GCP Cloud SQL IAM authentication - Any PostgreSQL deployment using pg_ident / LDAP / PAM with rotating credentials ## Current Behaviour In `backend/open_webui/env.py`: DATABASE_URL = os.getenv('DATABASE_URL', f'sqlite:///{DATA_DIR}/webui.db') In `backend/open_webui/internal/db.py`, the async engine is created immediately at module import time using the captured `DATABASE_URL` string. The connection URL — including the token embedded as the password — is permanently fixed for the lifetime of the process. SQLAlchemy's `pool_pre_ping=True` detects dead TCP connections and creates new ones, but those new connections use the same expired token, so they fail authentication too. **There is no code path that re-reads `DATABASE_URL` from the environment after startup.** The only workaround today is to restart the uvicorn process every ~45 minutes, which causes a service interruption for all connected users. ### Proposed Solution ### Option A — `DATABASE_PASSWORD_CMD` (simplest) When set, Open WebUI executes this shell command each time a new connection is needed and uses its stdout as the password, similar to how Docker secrets work or how `.pgpass` works: DATABASE_PASSWORD_CMD=curl -sH "Metadata: true" \ "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://ossrdbms-aad.database.windows.net" \ | python -c "import sys,json; print(json.load(sys.stdin)['access_token'])" ### Option B — SQLAlchemy `creator` function (most robust) SQLAlchemy's `create_engine()` / `create_async_engine()` accepts a `creator` callable that is invoked for each new connection. This is the canonical pattern for token-based authentication: # In db.py, for PostgreSQL connections when DATABASE_ROTATING_CREDENTIALS=true: import os, psycopg from urllib.parse import urlparse def _make_pg_creator(base_url: str): def creator(): # Re-read the full URL (or just the password) at connection time. # An external refresh script updates DATABASE_URL in the environment. current_url = os.environ.get('DATABASE_URL', base_url) p = urlparse(current_url) return psycopg.connect( host=p.hostname, port=p.port or 5432, dbname=p.path.lstrip('/'), user=p.username, password=p.password, sslmode='require', ) return creator if _is_postgres_url(DATABASE_URL) and os.getenv('DATABASE_ROTATING
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#20782](https://github.com/open-webui/open-webui/issues/20782) **feat: IAM-based auth for AWS RDS/Aurora** *This is the closest match: it requests IAM-based PostgreSQL auth using short-lived tokens that must be refreshed before expiry. The new issue is the same underlying problem, just with Azure Managed Identity/Entra instead of AWS IAM.* *by kirill-sch* 2. 🟣 [#23854](https://github.com/open-webui/open-webui/issues/23854) **issue: v0.9.0 (:dev): DATABASE_URL SSL regression — asyncpg and peewee/psycopg2 require incompatible query-string keys** *This issue is about PostgreSQL
💬 0-0-1-0-1-0-1-0
#20782 is close to this, but seems to be sepcific to AWS based auth, where this would cover all cloud providers.
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 MoHe99  ·  💬 7  ·  👍 2  ·  👥 6  |  Pain 4 · Budget 0 · Urgency 2
doesn't workproductionworkaroundfailsimmediatelybug
### 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 …
展开全文 · 7 条评论
### 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.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Windows 11 with WSL 2 (Ubuntu 26.04 LTS) ### Browser (if applicable) Edge 149.0.4022.52 ### 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 After [PR #24690](https://github.com/open-webui/open-webui/pull/24690) (merged into v0.9.6), `handle_authorize` should include the `scope` parameter in the OAuth authorize URL when using MCP with OAuth 2.1 (Static) and an IdP that requires scopes (e.g. Azure Entra ID). ### Actual Behavior `handle_authorize` (`open_webui/utils/oauth.py`, ~line 960) generates an authorize URL **without** `scope`, causing the IdP to reject the request (Entra: `AADSTS900144`). Debug logging at `handle_authorize` proves: ``` client_info.scope=None client_kwargs={'follow_redirects': True, 'token_endpoint_auth_method': 'client_secret_post'} kwargs={} ``` The scope is correctly discovered from `/.well-known/oauth-protected-resource` and correctly built in `get_oauth_client_info_with_static_credentials` ([PR #24690](https://github.com/open-webui/open-webui/pull/24690)), but is **not present** in `client_info` when `handle_authorize` runs. Hardcoding `kwargs["scope"]` before `authorize_redirect` immediately resolves the issue (Entra accepts the request). Additionally, `_preflight_authorization_url` calls `create_authorization_url(redirect_uri=redirect_uri)` **without** `scope`, which causes the preflight check against Entra to fail with the same error before `handle_authorize` is even reached. **File**: `open_webui/utils/oauth.py` The scope is lost in the persistence/loading chain: 1. **Build** ✅ — `get_oauth_client_info_with_static_credentials` (~line 529) builds `OAuthClientInformationFull` with `scope` from `get_protected_resource_metadata` (PR #24690) 2. **Persist** ✅ — The `OAuthClientInformationFull` object is encrypted and stored as a blob in the connection config (`info.oauth_client_info`) 3. **Load** ❌ — `ensure_client_from_config` (~line 691) calls `resolve_oauth_client_info` which decrypts the blob into a dict, then constructs `OAuthClientInformationFull(**dict)`. If the blob was created **before** PR #24690, the `scope` field is missing from the dict → `scope=None` 4. **Register** ❌ — `add_client` (~line 633) only sets `client_kwargs.scope` if `oauth_client_info.scope` is truthy: `**({'scope': oauth_client_info.scope} if oauth_client_info.scope else {})`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#24730](https://github.com/open-webui/open-webui/issues/24730) **issue: OAuth scopes are missing within authorize_url when using MCP with OAuth2.1 (Static)** *Directly the same bug report: missing OAuth scope in the MCP OAuth 2.1 (Static) authorize URL. The new issue appears to be a follow-up on the same behavior, with additional diagnosis around persistence/loading and preflight handling.* *by abehsu-mu · `bug`* 2. 🟣 [#23668](https://github.com/open-webui/open-webui/issues/23668) **Bug: admin-configured scopes overridden by discovered scopes_supported in static-credential OAuth f
💬 MoHe99
> 🔍 **Related Issues Found** > > I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: > > 1. 🟣 [#24730](https://github.com/open-webui/open-webui/issues/24730) **issue: OAuth scopes are missing within authorize_url when using MCP with OAuth2.1 (Static)** > _Directly the same bug report: missing OAuth scope in the MCP OAuth 2.1 (Static) authorize URL. The new issue appears to be a follow-up on the same behavior, with additional diagnosis around persistence/loading and preflight handling._ > _by abehsu-mu · `bug`_ > 2. 🟣 [#23668](https://github.com/open-webui/open-webui/issues/23668) **Bug: admin-configured scopes overridden by discovered scopes_supported in static-credential OAuth flow** > _This is closely re
💬 OliverStr1
Same issue here on v0.9.6 with Azure Entra ID as IdP — AADSTS900144 on every authorization attempt due to the missing scope in the authorize URL.
💬 parsalotfy
<img width="1079" height="471" alt="Image" src="https://github.com/user-attachments/assets/b909912c-95aa-44cf-b95b-4045b064928c" /> I'm having the same issue for google gmail and calandar. probably related to this issue.
💬 AlbertodelaCruz
@parsalotfy The Gmail/Calendar case is most likely a different root cause than the one documented here. This issue is about the scope being *discovered but lost* in the persistence/loading chain (Entra answers 401 to the anonymous probe, so PRM discovery works and the scope is built correctly before it gets dropped). Google's hosted MCPs answer **200** to the anonymous `initialize` probe, so RFC 9728 PRM discovery — and therefore scope discovery — never runs at all. That case is tracked in #25977, with a fix proposed in #25980. If your authorize URL has no scope *and* you're connecting to `gmailmcp.googleapis.com` / Google's Calendar MCP, #25977 is the issue to follow.
💬 parsalotfy
@AlbertodelaCruz "Hardcoding kwargs["scope"] before authorize_redirect immediately resolves the issue (Entra accepts the request)." as author mentioned this fixed the issue for me. So user can authorize using their google account. but now it seems getting it to work needs google workspace developer preview account. which I don't have. maybe that's why it doesn't work what did you do? did you find any other workaround which allows multiple users to access their gmail/calandar?
💬 sonmaximum
Getting this same AADSTS900144 behavior on v0.9.5, against Microsoft Agent 365 / Work IQ MCP servers (Microsoft's first-party MCP platform, currently in preview ). So this affects publicly-shipping Microsoft endpoints, not just custom Entra app registrations. Happy to test a patch.
💡 痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 zydo  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 4 · Budget 2 · Urgency 1
productionmanuallyfailsfailingdeploydeploymentbug
### 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 …
展开全文 · 2 条评论
### 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 0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 26.04 ### Browser (if applicable) _No response_ ### 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 When uploading a file whose name is too long to store, the UI should show a clear, actionable error such as: "File name is too long (maximum 218 bytes). Please rename the file and try again." — or the upload should succeed by truncating the on-disk name (the original name is already stored separately in the file record's meta.name). ### Actual Behavior The upload fails with a generic toast in the top-right of the chat page: [ERROR: Error uploading file] The user gets no hint that the filename length is the problem. The real cause (OSError: ENAMETOOLONG) is only visible in the server logs. This is especially confusing for CJK users: because the 255-byte filesystem limit applies to UTF-8 bytes (3 bytes per CJK character), a perfectly normal-looking ~73-character Chinese/Japanese document title triggers the failure. ### Steps to Reproduce Environment: any default Open WebUI install (no special configuration needed). Reproduced on v0.9.6 with the default LocalStorageProvider (STORAGE_PROVIDER unset). S3/GCS/Azure providers are equally affected because they write to local storage first (backend/open_webui/storage/provider.py). 1. Create a small test file with a 250-character name (254 bytes including ".txt"): python3 -c 'open("a"*250 + ".txt", "w").write("test")' (Alternative, CJK variant — 73 chars = 223 bytes: python3 -c 'open("文"*73 + ".txt", "w").write("test")' ) 2. Log in to the Web UI as any user, open a chat with any model. 3. Click the "+" button in the message input → "Upload Files", and select the file created in step 1 (drag-and-drop reproduces it too). 4. Observe the toast "[ERROR: Error uploading file]" appear in the top right; the file chip disappears from the input. API-level reproduction (no UI needed): curl -s -w "\nHTTP %{http_code}\n" -X POST "http://localhost:8080/api/v1/files/" \ -H "Authorization: Bearer $TOKEN" \ -F "file=@test.txt;filename=$(python3 -c 'print("a"*250+".txt")')" Returns: {"detail": "Error uploading file"} with HTTP 400. Note the threshold: failures begin at original filenames > 218 bytes, not 255, because upload_file_handler (backend/open_webui/routers/files.py) prefixes the st
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#19807](https://github.com/open-webui/open-webui/issues/19807) **issue: Filepath too long** *Matches the same underlying class of failure: a too-long filesystem path/name causes upload/storage or model-file creation to fail. Although the concrete subsystem differs, it confirms Open WebUI currently surfaces path-length problems as a backend exception rather than a user-friendly validation error.* *by BubblePlayzTHEREAL · `bug`* 2. 🟣 [#1388](https://github.com/open-webui/open-webui/issues/1388) **If the uploaded file name is in Chinese, the following error message should be displaye
💬 zydo
Thanks for the matches — I checked all five; none are duplicates of this issue: - #19807 is a different bug: it hits the **Windows MAX_PATH (~260 chars) limit on the total path** while the audio pipeline downloads a faster-whisper model into the deeply nested HuggingFace cache directory. This issue is about the **per-filename 255-byte component limit** (any OS) on the user file-upload path. Different subsystem, different limit, different trigger — and since the model download is not part of a request handler, it is also out of scope for the fix proposed here. - #1388, #1407, and #5192 are earlier reports of exactly the *symptom* this issue addresses — long or non-ASCII (CJK) filenames failing upload with a generic, unactionable error. Rather than duplicates, they show this
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 soonlai814  ·  💬 3  ·  👍 0  ·  👥 3  |  Pain 3 · Budget 3 · Urgency 0
brokenworkaroundregressiondeploydeploymentevaluation
### 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. - [x] I am using the latest version of Open W…
展开全文 · 3 条评论
### 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. - [x] I am using the latest version of Open WebUI. ### Installation Method Docker (Kubernetes) ### Open WebUI Version v0.9.6 (v1.13.0 deployment) ### Ollama Version (if applicable) _No response_ ### Operating System Linux (Ubuntu 22.04) ### Browser (if applicable) Chrome ### 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 Docker volume/bind mount used in my setup.** ### Description The admin feedback list endpoint `GET /api/v1/evaluations/feedbacks/list?page=1&limit=5` returns HTTP 502. The root cause is in `backend/open_webui/models/feedbacks.py`, method `get_feedback_items()` at line 254: ```python count_result = await db.execute(select(func.count()).select_from(stmt.subquery())) total = count_result.scalar() ``` The `stmt` at this point is a `select(Feedback, User).join(User, ...)` with potential ORDER BY on JSON fields (e.g., `Feedback.data['model_id'].as_string()`). Wrapping this complex JOIN + JSON-ORDER statement in `.subquery()` and then counting it can produce invalid SQL or cause database errors, especially with PostgreSQL. ### How to reproduce 1. Deploy Open WebUI v0.9.6 with PostgreSQL backend 2. Login as admin 3. Navigate to Admin Panel → 模型评价 → 反馈 (Evaluations → Feedback) 4. The page shows a loading spinner indefinitely 5. Check the API: `GET /api/v1/evaluations/feedbacks/list?page=1&limit=5` returns 502 ### Related context - The user-scoped endpoint `/api/v1/evaluations/feedbacks/user?page=1&limit=5` works fine (returns 200 with `{items:[], total:0}`) - The leaderboard endpoint also works correctly (returns 200 with 88 entries) - The bug was introduced in commit `25898116ea` (async DB migration, April 12, 2026) which converted the sync `query.count()` to the async subquery pattern ### Suggested fix Replace the subquery count with a lightweight count that avoids wrapping the full JOIN + ORDER BY statement: ```python # Build a separate count statement with just the JOIN and filters, no ORDER BY count_stmt = ( select(func.count(Feedback.id)) .join(User, Feedback.user_id == User.id) ) # Re-apply only the WHERE filters (not ORDER BY) from the original stmt if filter: model_id = filter.get('model_id') if model_id: count_stmt = count_stmt.filter(Feedback.data['model_id'].as_string() == model_id) count_result = await db.execute(count_stmt) total = count_result.scalar() ``` This mirrors the pattern used in `backend/open_webui/models/knowledge.py` (lines 360-383) where the count query was correctly separated from the main query during the same async migration. ### Related issues - #22206 (OOM on bulk endpoints) — related but different root cause. That issue is about loading full datasets into memory; this is a SQL generation bug in the count query.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#7012](https://github.com/open-webui/open-webui/issues/7012) **BUG: Postgres database slows down for admin section after adding large amount of users** *This is the closest related report about admin-panel queries becoming slow on PostgreSQL, and it also points to the admin section being impacted by database query behavior. While it focuses on user listing rather than feedbacks, it suggests the same Postgres/admin-query regression class.* *by beastech* 2. 🟣 [#19429](https://github.com/open-webui/open-webui/issues/19429) **issue: user list wrong count and less than 30 items per pag
💬 786-aquib
Hey @soonlai814 Got the issue ! Can I pick it ?
💬 Classic298
I think @silentoplayz already made a pr for it
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 andscape-dev  ·  💬 5  ·  👍 0  ·  👥 4  |  Pain 4 · Budget 1 · Urgency 1
can'tproductionfailsfailingclientsbug
### 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 …
展开全文 · 5 条评论
### 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.9.5 ### Ollama Version (if applicable) _No response_ ### Operating System MacOS Sonoma ### Browser (if applicable) Zen Browser 1.19.12b (Firefox 150.0.2) (aarch64) ### 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 submit a prompt, the response starts generating and completes successfully. ### Actual Behavior The response continues for a variable amount of tokens before interrupting with the following UI error: ```text Response payload is not completed: <TransferEncodingError: 400, message='Not enough data to satisfy transfer length header.'> ``` Re-generating the response incurs in the same error. The logs show a similar error: ```text ERROR | open_webui.main:process_chat:2013 - Error processing chat payload: Response payload is not completed: <TransferEncodingError: 400, message='Not enough data to satisfy transfer length header.'> ``` Just once, no other relevant error log can be found around it. ### Steps to Reproduce Details: - Replicated with v0.9.3, v0.9.4, and v0.9.5. I don't have a backup for pre-v0.9.3 so I can't rollback the breaking release with DB migrations. - Using a custom agent based on GLM-5.1 from Z.ai (`open.bigmodel.cn` OpenAI-compatble endpoint), with streaming and native function calling enabled. - It usually starts happening after the first couple of prompts in a chat, with 20/30k tokens of context including multiple tool calls. Failing responses do start, generate a few lines of output, then drop. ### Logs & Screenshots UI error: <img width="945" height="95" alt="Image" src="https://github.com/user-attachments/assets/998c4e9e-bd2b-41ec-b0b7-7a52dd9ce6f6" /> Logs snippet, redacted: ```text 2026-05-11T02:52:18.708990072+02:00 2026-05-11 02:52:18.708 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 10.42.2.1:0 - "GET /_app/version.json HTTP/1.1" 304 2026-05-11T02:53:19.340890117+02:00 2026-05-11 02:53:19.340 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 10.42.2.1:0 - "GET /_app/version.json HTTP/1.1" 304 2026-05-11T02:53:44.424531037+02:00 2026-05-11 02:53:44.424 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 10.42.2.1:0 - "POST /api/chat/completions HTTP/1.1" 200 2026-05-11T02:53:44.485731402+02:00 2026-05-11 02:53:44.485 | INFO | uvicorn.protocols.http.httptools_impl:send:483 - 10.42.2.1:0 - "POST /api/v1/chats/<UUID> HTTP/1.1" 200 2026-05-11T02:53:44.503369741+02:00 202
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#12021](https://github.com/open-webui/open-webui/issues/12021) **issue: ClientPayloadError: Response payload is not completed: TransferEncodingError** *This issue reports the same aiohttp/TransferEncodingError message: 'Response payload is not completed: <TransferEncodingError... Not enough data to satisfy transfer length header.>' It appears to be the closest direct match to the error in the new report, though on an older version and a different upstream provider.* *by poonesh · `bug`* 2. 🟣 [#13474](https://github.com/open-webui/open-webui/issues/13474) **SSE streaming in Open We
💬 Classic298
This is likely not an error from open webui side. Can you reproduce it on older versions? This looks like an upstream error from the provider. This error message doesn't exist in open webui
💬 andscape-dev
As I said I don't have a backup for pre-v0.9.3, so I can't easily rollback further due to the breaking migrations in v0.9.3. I'm gonna try to set up a test instance with v0.9.2 as soon as I have the time. The error is coming from `aiohttp`: https://github.com/aio-libs/aiohttp/issues/4630. It might be caused by an upstream provider error, but again I'm using the same provider with the same configuration from other clients without issue.
💬 andscape-dev
I'm now convinced that AIOHTTP is not respecting the timeout setting, and dropping the connection mid-response stream after ~30s. I have the same behavior using models from self-hosted Ollama and in the Ollama logs there is no error, just a POST to "/api/chat" with duration of almost exactly 30s, every time. OpenWebUI is terminating the stream prematurely after 30s, and then interpreting the truncated stream as a malformed response. I have explicitly set `AIOHTTP_CLIENT_TIMEOUT` to hundreds of seconds, but the stream still gets terminated after 30. Setting it to `''` for no timeout makes no difference.
💬 bshpire
This seems to be coming from 0.9.6, rolling back to 0.9.5 fixes the problem, tested all the main providers, this doesn't seem to be a provider related issue.
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 ryan-pip  ·  💬 2  ·  👍 1  ·  👥 2  |  Pain 3 · Budget 2 · Urgency 1
does not workproductionregressiondeploydeploymentbug
### 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 …
展开全文 · 2 条评论
### 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. Searched terms include `DEFAULT_MODEL_PARAMS`, `default parameters max_tokens`, `default model params`, `max_tokens not applied`, `default sampling params`, `apply_model_params_to_body`, `model_info_params`, `global default ignored`. Closest existing reports are not duplicates: - #21837 / discussion #21839 — `DEFAULT_MODEL_PARAMS` ignored when set via env var with `ENABLE_PERSISTENT_CONFIG=false` (env-parse path, different code path; in this report the value IS persisted and visible via `/api/v1/configs/export`). - #19214 — chat-control overrides being beaten by per-model admin defaults (precedence inversion, opposite direction; in this report the per-chat overrides do work — only the global default is dropped). - #17131 — per-user "Settings → Advanced Parameters" sending args that break some models (different UI surface, different field on the config). - Discussion #8368 — user-settings context limit not applied to Ollama (v0.5.4, user-level not admin-level, only Ollama). ### Installation Method Docker ### Open WebUI Version `main` (verified against current HEAD `d47c88f`, 2026-05-20). The bug is also present in the latest release v0.9.5. ### Ollama Version (if applicable) Not applicable — bug is server-side and reproducible against any OpenAI-compatible upstream that honours `max_tokens`. The Ollama router has the same shape and is likely affected (see "Logs & Code references" below). ### Operating System Not OS-dependent — bug is in `backend/open_webui` Python code. ### Browser (if applicable) Not applicable — bug is server-side. Outbound chat-completion request payload is wrong regardless of client. ### 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**. Relevant configuration: `DEFAULT_MODEL_PARAMS` set via the admin UI ("Settings → Models → Default Parameters"), persisted to the config table (visible via `/api/v1/configs/export` as `models.default_params.*`). No env-var overrides for `DEFAULT_MODEL_PARAMS`. The active model's stored `info.params` JSON does NOT contain a `max_tokens` key (only e.g. `function_calling`, `custom_params`). Provider is an OpenAI-compatible endpoint (also reproduces against Amazon Bedrock via the bedrock-access-gateway, which simply forwards `max_tokens`). ### Expected Behavior Setting `Default Parameters → max_tokens` in the admin UI should apply that value to outbound chat-completion requests for any model whose own `params` object does not specify `max_tokens`. The intuitive precedence (which the admin UI implies) is: ``` per-chat override > per-model `params` > global `DEFAULT_MODEL_PARAMS` > hardcoded fallback ``` This should hold for all provider sampling parameters: `max_tokens`, `temperature`, `top_p`, `top_k`, `frequency_penalty`, `presence_penalty`, `seed`, `stop`, etc. ### Actual Behavior The global default is persisted correctly and even merged into an in-memory `model_info_params` dict in `main.py`, but the merged d
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#19214](https://github.com/open-webui/open-webui/issues/19214) **issue: default model params take precedence over user-specified model params** *This is closely related because it concerns the same `DEFAULT_MODEL_PARAMS`/admin default parameter path and the same precedence/merge logic around model parameters. The exact symptom differs, but it shows that default model params are involved in request construction and payload precedence bugs.* *by Simon-Stone · `bug`* 2. 🟣 [#18618](https://github.com/open-webui/open-webui/issues/18618) **issue: Root-level max_tokens dropped instead of
💬 BlackFuffey
Can confirm issue persists in 9.6.0
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 Classic298  ·  💬 10  ·  👍 0  ·  👥 6  |  Pain 2 · Budget 2 · Urgency 0
cannotproductiondeploydeployment
# Socket.IO emits grow O(N²) during LLM streaming: full message is re-serialized on every token Thanks to @ShirasawaSama !! ## Simple TLDR: TLDR: Open WebUI re-sends and re-renders the whole chat on every single token, so CPU, RAM, bandwidth, and Redis all explode exponentially in CPU and memory a…
展开全文 · 10 条评论
# Socket.IO emits grow O(N²) during LLM streaming: full message is re-serialized on every token Thanks to @ShirasawaSama !! ## Simple TLDR: TLDR: Open WebUI re-sends and re-renders the whole chat on every single token, so CPU, RAM, bandwidth, and Redis all explode exponentially in CPU and memory and bandwith usage as the conversation grows. Gets even worse with high concurrency and long chats. ## Summary During an LLM streaming response, the backend re-serializes the **entire** accumulated output (all prior text, reasoning blocks, tool calls, images, sources) into one HTML string and emits it via Socket.IO **on every SSE event**. As a response grows, each WebSocket frame grows with it, so total bytes on the wire for an N-token response scale as **O(N²)**. The cost is then amplified by Socket.IO's Redis pub/sub fan-out (× Redis nodes × workers) and again by the frontend Markdown parser, which re-parses the whole content string on each update. This is visible in devtools → Network → WS frames on any long streaming response: `chat:completion` frame sizes climb steadily (e.g. 3014 → 3037 → 3073 → 3092 → … bytes) as the response streams in. ## Reproduction 1. Run the current `dev` branch backend and frontend. 2. Open any chat and send a prompt that produces a long response (e.g. "write a 2000-word essay about X"). 3. Open browser devtools → Network → filter WS → click the Socket.IO frame → watch the "Messages" tab. 4. Observe each `events` frame carrying `type: "chat:completion"` — note that the `content` field grows by the *entire response so far* every single frame, not by the delta. 5. For extra impact: enable a model with reasoning or tool calling. Every text token re-sends the reasoning block and every prior tool call. ## Root cause All primary offenders live in `backend/open_webui/utils/middleware.py` inside `streaming_chat_response_handler` / `stream_body_handler`. #### `serialize_output()` — re-serializes the whole output list on every call `backend/open_webui/utils/middleware.py:404-453` ```python def serialize_output(output: list) -> str: """ Convert OR-aligned output items to HTML for display. For LLM consumption, use convert_output_to_messages() instead. """ content = '' # ... loops EVERY item in the output list (text, function_call, # function_call_output, reasoning, ...) and concatenates them into one # HTML string, every time it's called. for idx, item in enumerate(output): ... ``` #### `full_output()` — always cumulative `backend/open_webui/utils/middleware.py:3603-3604` ```python def full_output(): return prior_output + output if prior_output else output ``` #### Tool-call emit — full re-serialize on each tool-call delta `backend/open_webui/utils/middleware.py:3872-3879` ```python await event_emitter( { 'type': 'chat:completion', 'data': { 'content': serialize_output(full_output() + pending_fc_items), }, } ) ``` #### Main text-delta emit — full re-serialize on each token `backend/open_webui/utils/middleware.py:4080-4106` ```python if ENABLE_REALTIME_CHAT_SAVE: await Chats.upsert_message_to_chat_by_id_and_message_id( metadata['chat_id'], metadata['message_id'], { 'content': serialize_output(full_output()), 'output': full_output(), }, ) else: data = { 'content': serialize_output(full_output()), } if delta: delta_count += 1 last_delta_data = data if delta_count >= delta_chunk_size: await flush_pending_delta_data(delta_chunk_size) ``` #### `delta_chunk_size` only batches frequency, not payload size `backend/open_webui/utils/middleware.py:3645-3663` The existing `delta_chunk_size` / `flush_pending_delta_data` mechanism reduces *how often* emits are sent, but each emit still carries `serialize_output(full_output())` — i.e. the full blob. So increasing `delta_chunk_size` trades latency
💬 Classic298
The PR #23735 MASSIVELY improves the current stance and will make it much better for ALL deployments - but it's not a full fix. it's only 90% of the way there. The PR 23735 only fixes it for the actual message content - reasoning and tool call not yet fixed with that PR - but still a massive improvement already
💬 tjbck
Thanks for the thorough analysis. The O(N²) characterization is correct and this is something I've been aware of. Before jumping to solutions I want to explain why the current implementation works the way it does, because the properties it provides are load-bearing and easy to take for granted until they break. The current architecture is full-state-on-every-emit by design. Every Socket.IO frame carries the complete rendered content of the assistant message. This makes the frontend entirely stateless with respect to streaming: it receives a string, sets `message.content`, and hands it to the Markdown renderer. If a WebSocket frame is dropped, the connection flaps, the user switches tabs and comes back, or the browser GC causes a missed event, the very next frame self-corrects because it c
💬 ShirasawaSama
Yes, so one approach is to use JSON Patch and Redis to log each incremental update. That way, the client can retrieve previous data from Redis using the current version index.
💬 rgaricano
Another solution that can potentially solve this issue is handling the chat as collaborative Yjs doc, Instead of calling serialize_output(full_output()) on every token, the backend could: - Initialize a Yjs document for each chat message when streaming begins. - Apply incremental updates to the document as tokens arrive. - Emit Yjs updates instead of full serialized content. The frontend would need to: - Initialize Yjs document when streaming starts. - Apply Yjs updates as they arrive via Socket.IO - Render from Yjs document instead of replacing content. (This is similar to how the current collaboration provider works in Collaboration.ts) Benefits of Yjs Approach: - O(N) Bandwidth: Yjs uses efficient delta compression. - Stateless Frontend: Documents can be reconstructed from any state.
💬 tkalevra
I utilized ai to write a diff to update the block, I was tempted to follow forward given the trajectory, however 1. I don't code and 2. not trying to step on toes here, I appreciate the dedication and hard work. I wrote this simply because of my personal use-case, The system under 0.9.1 was not useable in the current state. **Limitations / Partial Fix:** - This only addresses the plain text token path (ENABLE_REALTIME_CHAT_SAVE=False hot path) - Tool call argument streaming and reasoning block streaming still use full serialization — CPU will still spike during heavy tool use - Adds a `data is not None` guard to the non-delta flush branch to prevent emitting null payloads on the text path - Will not survive a container recreation / image pull — reapply after upgrading - Tested on v0.9.1
💬 rgaricano
@ShirasawaSama @tkalevra @Classic298 @tjbck PR: https://github.com/open-webui/open-webui/pull/24126 for use Ydoc for message stream updates (reasoning block) as I mentioned before. Draft for test
💬 Classic298
if anyone wants to tackle this it should be done via ydoc
💬 Classic298
some day we can circle back to this hopefully https://github.com/open-webui/open-webui/pull/23736
💬 lhgarciadev
Production data point reinforcing the Redis pub/sub amplification described here, from the catastrophic end of the spectrum: in our deployment (v0.9.6, 8 uvicorn workers, `WEBSOCKET_MANAGER=redis`, Valkey 8 with default limits), a single `chat:completion` emit carrying embedded RAG `sources` from a knowledge-heavy custom model reached **~33MB**, exceeded Valkey's default `client-output-buffer-limit pubsub 32mb`, and Valkey force-closed **every** subscriber of the `socketio` channel (3 kill storms in 10 minutes). One worker's listener never recovered (miguelgrinberg/python-socketio#1581) and stayed silently deaf for ~24h — users on that worker got infinite "waiting" spinners while the backend completed and persisted their responses. Full report with evidence: #25975. So the O(N²) growth do
💬 Classic298
@lhgarciadev just raise the redis limits. 33MB Data is absolutely nothing to redis unless you're running it on a potato
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 ThingWerks  ·  💬 3  ·  👍 7  ·  👥 3  |  Pain 3 · Budget 0 · Urgency 1
doesn't workproductionno longerbug
### 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 …
展开全文 · 3 条评论
### 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.9.6 ### Ollama Version (if applicable) 0.30.5 ### Operating System Debian 13 ### Browser (if applicable) Brave ### 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 have always seen a green dot in the language model selection drop down box indicating which model is loaded into Ollama/VRAM. now as of the latest version of OpenWebUI, it disappeared. Was this feature removed? i dont see any indication of that in the version log ### Actual Behavior A green icon showing which model is loaded in VRAM. This feature is both necessary and very important because. 1. without this you're blind, you dont know which model is hot and ready for use 2. you cant easily see or confirm if Ollama or your settings are correctly leaving the model in VRAM indefinitely(the way i like it) 3. you cant see if another user is constantly switching to a model different than the one your using 4. i detected an open firewall port and prevented unauthorized access solely because that green dot kept jumping around when i knew it should have been. Why would this feature be removed? It's obviously very useful and a fundamental troubleshooting indicator. ### Steps to Reproduce log into OpenWebUI and ask any model a question ### Logs & Screenshots model is loaded in memory via OpenWebUI query: <img width="626" height="62" alt="Image" src="https://github.com/user-attachments/assets/94f12a0e-2952-4617-a14c-6094d94b83c0" /> OpenWebUI shows no indication that this model is loaded despite being used just seconds earlier <img width="765" height="370" alt="Image" src="https://github.com/user-attachments/assets/8f38cf50-bc27-4d77-a760-993df8383f3e" /> ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#8814](https://github.com/open-webui/open-webui/issues/8814) **Show in UI GPU status (models loaded, VRAM available)** *This is the closest match: it explicitly requests a UI indicator for loaded models and VRAM status, which is the same feature the reporter says disappeared. It provides the original context that the green dot was intended to show loaded GPU/VRAM state.* *by JusefPol* 2. 🟣 [#24544](https://github.com/open-webui/open-webui/issues/24544) **issue: llamacpp load/unload indicator doesn't work** *This issue reports the same loaded-model green icon not appearing, but
💬 ThingWerks
> 🔍 **Related Issues Found** > > I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: > > 1. 🟣 [#8814](https://github.com/open-webui/open-webui/issues/8814) **Show in UI GPU status (models loaded, VRAM available)** > _This is the closest match: it explicitly requests a UI indicator for loaded models and VRAM status, which is the same feature the reporter says disappeared. It provides the original context that the green dot was intended to show loaded GPU/VRAM state._ yes issue 8814 is in reference to the same condition but its marked as completed and allegedly incorporated into the next version (which is what im using) but its NOT fixed; therefore creating a new issue.
💬 silentoplayz
https://github.com/open-webui/open-webui/pull/25715 solves the reported issue. Testing is welcome if you want to confirm the fix works for you.
💡 痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 brenmor24  ·  💬 3  ·  👍 0  ·  👥 2  |  Pain 4 · Budget 1 · Urgency 1
blockedproductionstuckfailsclientsbug
### 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 …
展开全文 · 3 条评论
### 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.9.5 ### Ollama Version (if applicable) _No response_ ### Operating System Windows 11 ### Browser (if applicable) Chrome 148.0 ### 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 When using Open WebUI behind a reverse proxy for trusted header authentication, the reverse proxy server redirects the client to an identity provider if a request is made after the user session expires. This is expected behavior, and the browser should follow this redirect. The problem is that background requests are blocked from redirecting clients by default, so the user never reaches the identity provider for reauthentication. The frontend errors and sends the user to the “Open WebUI Backend Required” page. This problem has been brought up in a past issue here: #21072. A commit containing a fix was added here: 24370d5 which closed that issue, but the bug is still present. I had submitted a potential fix for that issue in a PR here: #22942 which contains some additional context. ### Actual Behavior As described above, users get sent to the “Backend Required” page and get stuck there when redirection to the identity provider fails. This only happens with unauthenticated requests to endpoints on the following paths: (/api, /ollama, /openai, /ws) since calls to those are only triggered by fetches and never explicitly navigated to by the user. Here’s an example browser log that shows the CORS violation: <img width="461" height="61" alt="Image" src="https://github.com/user-attachments/assets/dd6054e4-e973-4946-9989-8a7ec7a5e2f4" /> ### Steps to Reproduce You can reproduce the bug locally using the `docker-compose.yml` file and `nginx.conf` file included below. This setup works by using an nginx container to mock the reverse proxy and identity provider as shown in the nginx.conf file. When a background request comes in and the “authenticated” state is false, the reverse proxy redirects the client to the mock identity provider’s login endpoint. The “authenticated” state is then set to true, but only for 15 seconds. This essentially simulates a token with a short 15 second lifespan needed for observing the issue. Mock authentication is also only applied to background requests here in order to isolate the bug. This testing setup is used in the video below which highlights the bug. As shown in the video, you can try navigating to localhost:8080 after spinning up the docker compose and
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#21072](https://github.com/open-webui/open-webui/issues/21072) **issue: PWA 500 Error instead of redirecting to login after session expires with Trusted Header Auth / Forward Auth from Authentik** *Very similar trusted-header / forward-auth flow behind a reverse proxy. It describes the same failure mode where an expired session causes background requests to hit an auth redirect and the UI falls back to an error/backend-required page.* *by wm-ek · `bug`* 2. 🟣 [#7713](https://github.com/open-webui/open-webui/issues/7713) **Handle reauthentication prompts/redirects from authenticatin
💬 slater0013
+1 here ! Access to manifest.json (with crossorigin="use-credentials") with a 302 response is not CORS compatible when the file is present in your cache :( Same for /api route Reverse Proxy and trusted header are not out of the box compatible with openWebUI when using redirections to Identity Provider. GS
💬 slater0013
Upgraded in 0.9.6 but bug is still present.
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 Jaypeg-dev  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 3 · Budget 2 · Urgency 1
cannotworkaroundregressiondeploydeploymentbug
## Bug Report ### Version Open WebUI v0.9.2 ### Description After upgrading from v0.9.1 to v0.9.2, MCP tool call results are being wrapped in a RAG citation template and displayed visibly in the chat as raw `<source>` blocks, instead of being processed silently and used by the model to compose a …
展开全文 · 1 条评论
## Bug Report ### Version Open WebUI v0.9.2 ### Description After upgrading from v0.9.1 to v0.9.2, MCP tool call results are being wrapped in a RAG citation template and displayed visibly in the chat as raw `<source>` blocks, instead of being processed silently and used by the model to compose a natural response. The chat displays a block like: ``` ### Task: Respond to the user query... <source> ... raw MCP tool result JSON ... </source> ``` This appears to be a side effect of the MCP asyncio cancellation fix introduced in v0.9.2. ### Steps to Reproduce 1. Register any MCP server in Admin Panel → Settings → Integrations 2. Assign it to a model via `toolIds` in the model config 3. Start a conversation and trigger a tool call (e.g. ask the model to read a file or fetch data) 4. Observe: tool result is rendered as a visible `### Task: Respond to the user query...` + `<source>` block in the chat ### Expected Behaviour MCP tool results are processed silently in the background. The model uses the tool result data to compose a natural language response, with no raw JSON or citation blocks visible to the user. ### Actual Behaviour The full RAG citation template is rendered visibly in the chat, including raw `<source>` XML blocks containing the tool result JSON. This makes MCP-enabled agents unusable as the chat is flooded with raw tool output. ### Environment - Open WebUI: v0.9.2 - MCP servers: FastMCP 3.x (Python), transport=`streamable-http`, `stateless_http=True` - Deployment: Docker container (colima VM on Mac Mini M4) - Models tested: claude-sonnet-4-6, claude-haiku-4-5, llama3.1:8b (all affected) ### Workaround Attempted Setting `RAG_TEMPLATE` env var to empty string does not persist — `PersistentConfig` reverts to the default template on every container restart, so this cannot be patched via environment variable. ### Additional Context This regression was not present in v0.9.1 (though v0.9.1 had the separate CPU/spinning conversation bug that v0.9.2 fixed). The MCP asyncio cancellation fix in v0.9.2 appears to have changed how tool results are routed through the response pipeline, causing them to pass through the RAG citation renderer instead of the tool result handler. All MCP tool calls fire correctly and return valid data — the issue is purely in how the results are presented in the UI.
💬 gorkemozlu
Actually, we found it very useful for debugging, even though it is a regression, maybe we can keep that behaviour under a debug parameter ?
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 Wahooo  ·  💬 8  ·  👍 0  ·  👥 3  |  Pain 4 · Budget 0 · Urgency 1
can'tproductionstuckfailsbug
### 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 …
展开全文 · 8 条评论
### 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.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 22.04 ### Browser (if applicable) _No response_ ### 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 The pending screen should handle sign-out exactly like the main UI (UserMenu.svelte). It needs to hit the backend to invalidate the JWT, clear all cookies, and handle the OAuth redirect properly. ### Actual Behavior When a user logs in via OAuth but their account is pending (role is neither user nor admin), the AccountPending overlay is triggered https://github.com/open-webui/open-webui/blob/main/src/lib/components/layout/Overlay/AccountPending.svelte. Currently, the Sign Out button in AccountPending.svelte executes the following: ```typescript localStorage.removeItem('token'); location.href = '/auth'; ``` The user is not redirected to the OIDC end_session_endpoint, meaning their Google/Azure AD/etc. session remains active. ### Steps to Reproduce 1. Login via OAuth without user or admin role 2. Press signout button 3. Change user rights with OAuth provider (add user or admin role according to your actual setup) 4. Login again ### Logs & Screenshots **Patch example** <img width="1349" height="842" alt="Image" src="https://github.com/user-attachments/assets/75e2ab6e-2216-4144-a5a2-5152b110bd6f" /> ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#15499](https://github.com/open-webui/open-webui/issues/15499) **issue: No sign out redirect with OAuth** *This is the closest match: it reports OAuth/OIDC sign-out not redirecting properly and discusses the logout flow using the backend `signout` endpoint versus a simple client-side redirect. The new issue is a narrower variant affecting the AccountPending screen.* *by zomnium · `bug`* 2. 🟣 [#15719](https://github.com/open-webui/open-webui/issues/15719) **issue: 0.6.16 - can't sign out when logged in using MS OAuth SSO ** *This issue reports that signing out with Microsoft OAu
💬 Wahooo
Have checked related issues above and didn't find the solution.
💬 Classic298
Okay, why does this need to be patched? JWTs are inherently stateless and revoke based on JWT_EXPIRES_IN in case you meant this to be a security finding, dont report it here but in our responsible disclosure section
💬 Wahooo
I didn't mean this as a security issue, but rather a UX issue. I meant the behavior where a user gets permanently stuck on the AccountPending page. Because the OAuth session isn't terminated on sign out, trying to log in again auto-routes them back to the same pending state, regardless of whether their rights were changed on the OAuth side or not.
💬 Classic298
🤔 but account pending is changed in open webui side how do you change it from the authenticator side
💬 Wahooo
I am using ENABLE_OAUTH_ROLE_MANAGEMENT=true My full setup if it may help -Azure AD as IdP -Authentik to be in the middle of Azure and openwebui to fetch Azure groups with custom attribute mapper (https://graph.microsoft.com/v1.0/me/transitiveMemberOf?$select=id,displayName) -openwebui with Authentik as Idp and enabled ENABLE_OAUTH_ROLE_MANAGEMENT/ENABLE_OAUTH_GROUP_MANAGEMENT After the user logs in and reaches the pending page, I can add them to the appropriate group. However, because Open WebUI doesn't perform an IdP logout on the pending page, their group attributes won't be updated in Authentik. To be honest, I think the logout behavior on the pending page should match the main logout behavior (for consistency).
💬 Classic298
makes sense reopening
💬 Classic298
https://github.com/open-webui/open-webui/pull/25681
💡 痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 mlinares-tecnalia  ·  💬 6  ·  👍 1  ·  👥 3  |  Pain 3 · Budget 0 · Urgency 2
productionfailsno longerimmediatelybug
### 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 …
展开全文 · 6 条评论
### 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.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 22 ### Browser (if applicable) _No response_ ### 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 With **Image Prompt Generation** enabled, both **create** (`image_generations`) and **edit** (`image_edits`) should use the refined prompt from the task model before calling the image backend. ### Actual Behavior - **Create path**: prompt is refined via `generate_image_prompt()`. - **Edit path**: `prompt` is set from `get_last_user_message()` and passed directly to `image_edits()`. ### Steps to Reproduce 1. Admin → **Images**: enable **Image Prompt Generation** and configure **Image Prompt Generation Prompt** (Interface / Tasks settings). 2. Enable **Image Edit** and configure an edit engine (e.g. ComfyUI edit workflow). 3. In a chat with image generation enabled, send a message that creates an image (no image in history yet). 4. Observe logs/network: `/api/v1/tasks/image_prompt/completions` (or equivalent) runs before generation. 5. Send a follow-up message asking to modify the image 6. Observe: edit is invoked with the literal user text; image prompt generation task does **not** run. ### Logs & Screenshots <img width="3363" height="1196" alt="Image" src="https://github.com/user-attachments/assets/effac998-f2ae-413f-b203-ce1d37edb290" /> ### Additional Information In `chat_image_generation_handler` (`backend/open_webui/utils/middleware.py`), `ENABLE_IMAGE_PROMPT_GENERATION` / `generate_image_prompt()` lives only in the `else` branch (create). The `if len(input_images) > 0 and ENABLE_IMAGE_EDIT` branch (edit) calls `image_edits()` immediately with the user message. Relevant structure on `main`: ```python if len(input_images) > 0 and request.app.state.config.ENABLE_IMAGE_EDIT: images = await image_edits(..., prompt=prompt, ...) # no generate_image_prompt() else: if request.app.state.config.ENABLE_IMAGE_PROMPT_GENERATION: res = await generate_image_prompt(...) images = await image_generations(...) ``` Run the image prompt generation block before the create/edit branch so both image_generations() and image_edits() receive the same refined prompt. The builtin edit_image tool (backend/open_webui/tools/builtin.py) also passes the tool prompt directly to image_edits() without prompt generation; that may be a separate enhancement if native function calling i
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @mlinares-tecnalia, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
# ⚠️ Invalid Issue Title @mlinares-tecnalia, your issue title is too short, too few words, or a generic placeholder — it doesn't tell maintainers what's actually being reported or requested. Please update the title to be **at least 10 characters and 2 words**, and to describe the actual issue. Bare placeholders like `bug`, `feat:`, or `issue` make triage difficult and slow down everyone. Example: `bug: Login fails when password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#20864](https://github.com/open-webui/open-webui/issues/20864) **issue: IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE is ignored when clicking the IMAGE button on LLM response. The prompt is sent directly to ComfyUI without translation/enhancement.** *Reports that the IMAGE_PROMPT_GENERATION template is not applied before sending prompts to ComfyUI, which is the same missing-prompt-processing problem affecting the edit path here. It specifically confirms the refinement step can be bypassed in image-related flows.* *by karoldydo · `bug`* 2. 🟣 [#21024](https://github.com/open-webui/open-w
💬 Classic298
not sure if this will be fixed, the legacy path for image generation is out of scope and you should use native tool calling. The prompt to only be applied on create is also intended today as the legacy path is no longer supported and the new native path does not need the generation prompt template and doesnt support it at all (this is all legacy)
💬 allenwebb
> not sure if this will be fixed, the legacy path for image generation is out of scope and you should use native tool calling. The prompt to only be applied on create is also intended today as the legacy path is no longer supported and the new native path does not need the generation prompt template and doesnt support it at all (this is all legacy) Where is the documentation for this? It requires running an additional tools server?
💬 Classic298
starting with next open webui version native tool calling will become the new default for all installations, legacy requiring explicit opt out @allenwebb https://docs.openwebui.com/getting-started/essentials#tool-calling this part will be removed in the next version docs update but you can read more here how to toggle it today
💡 痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 VanceVagell  ·  💬 3  ·  👍 12  ·  👥 2  |  Pain 2 · Budget 0 · Urgency 0
brokenworkaround
### Check Existing Issues - [x] I have searched the existing issues and discussions. ### Problem Description I have different LLM models on my local set up that are better at different things. I'd like to specify individual models for each of the "task model" features in the Settings > Interace >…
展开全文 · 3 条评论
### Check Existing Issues - [x] I have searched the existing issues and discussions. ### Problem Description I have different LLM models on my local set up that are better at different things. I'd like to specify individual models for each of the "task model" features in the Settings > Interace > Tasks section. Right now it only lets you specify 1 local and/or external model to cover all tasks. ### Desired Solution you'd like Could these settings please be broken out to let us select different models per task? For example, I'd like to use a tiny fast model for "Title Generation" because I don't especially care how accurate it is, it's more important that it not use many system resources for very long. Whereas I want a very capable model to do the task "Web Search Query Generation" and "Retrieval Query Generation". It would be great if the "Current model" option were available for each tasks, because there might be some tasks where I want the current model to do the thing (e.g. a great thinking model might be better for a strong web search query on a complex discussion, so I might leave that set to "Current model" so web search quality varies by my conversation model). ### Alternatives Considered I've tried using a tiny model for all tasks, but it does an awful job at web search queries and retrieval tasks, although it's fine for title generation. I've tried using the current model I'm working with (i.e. if you don't specify a task model), but sometimes it's way overkill for title generation (e.g. if I'm using DeepSeek R1 then title generation takes forever). So I'd really like to be able to specify what models to use for each task type. ### Additional Context _No response_
💬 d-shehu
Any chance the devs would revisit this? It seems like a common usage pattern with Agentic frameworks to designate specific models for certain actions based on performance, complexity and other tradeoffs. Title, tags and follow up questions could easily be delegated to small/fast models, search and RAG to a medium size models and the actual response to the question assigned to the current model.
💬 tq1008
This would be a great feature. The use case is real — I also run a tiny model for titles and a bigger one for retrieval queries. One workaround in the meantime: if you use an OpenAI-compatible endpoint, you can route different task types to different models via a proxy/gateway. For example, point title generation to `deepseek-chat` (fast, cheap at $0.28/1M tokens) and web search queries to `deepseek-reasoner` (more capable). This pattern works well with just about any OpenAI SDK compatible provider — the model name in the request determines which backend model handles it.
💬 d-shehu
Are you using intelligent routing with your proxy? If so how does it work and is it deterministic based on the prompt or probabilistic using some routing model? Thanks.
💡 痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 vzd3v  ·  💬 3  ·  👍 0  ·  👥 3  |  Pain 2 · Budget 2 · Urgency 1
productionworkarounddeploydeploymentbug
### 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. - [x] I am using the latest version of Open W…
展开全文 · 3 条评论
### 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. - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.9.6 ### Ollama Version (if applicable) n/a ### Operating System Ubuntu 24.04 (server), `ghcr.io/open-webui/open-webui:v0.9.6` ### Browser (if applicable) Any (reproduced in Chrome 137 and with plain `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.** - [x] I have documented **step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation.** ### Expected Behavior Opening the chat **“Attach files”** picker fetches a lightweight file *list* (id, filename, meta) — a few KB. ### Actual Behavior The picker calls `GET /api/v1/files/search?filename=*&skip=0&limit=50`, and the backend serializes **`data.content` (the full extracted text) of every listed file** into the response. On our instance (165 files, some large PDFs/DOCX): | Request | Response size | Time | |---|---|---| | `GET /api/v1/files/search?filename=*&skip=0&limit=50` | **63,570,528 bytes (~64 MB)** | 1.96 s | | `GET /api/v1/files/search?filename=*&skip=0&limit=50&content=false` | **27,522 bytes (~27 KB)** | 1.54 s | That is a ~2,300× payload difference for a UI that only renders filenames. The same request is re-issued for every search-input change in the picker, so each picker interaction can transfer hundreds of MB. `GET /api/v1/files/` has the same issue (~23 MB here), affecting other list consumers. ### Steps to Reproduce 1. Run `ghcr.io/open-webui/open-webui:v0.9.6` (stock config; ours uses pgvector + an OpenAI-compatible embedding endpoint, but that is irrelevant — any deployment reproduces it). 2. Upload ~50+ documents with substantial text (multi-MB PDFs/DOCX/XLSX). 3. Open a chat, click **+** → **Attach files** (the in-app file picker, not OS upload). 4. In browser DevTools → Network, observe `GET /api/v1/files/search?filename=*&skip=0&limit=50` transferring tens of MB. Type in the picker’s search box and observe a similarly sized response per query change. ### Root Cause The backend already supports skipping content — `search_files` has `content: bool = Query(True)` and strips `data.content` when `false` (`backend/open_webui/routers/files.py`, `/search` route). The frontend just never passes it: `searchFiles()` in `src/lib/apis/files/index.ts` builds the query from `filename`, `skip`, `limit` only. ### Suggested Fix - Pass `content=false` from `searchFiles()` (and `getFiles()` where the caller only renders a list), **or** - flip the `/search` default to `content=false`, since returning the full extracted text of *all* files by default is rarely the intent of a search/list call (note: it also returns content of other users’ files for admins with `BYPASS_ADMIN_ACCESS_CONTROL`). Happy to submit a PR for either variant if maintainers indicate the preferred direction. ### Logs No backend errors — the requests succeed (`200`); the issue is payload size/latency. Container log excerpt showing the picker traffic: ``` GET /api/v1/files/search?filename=*&skip=0&limit=50 HTTP/1.1" 200 GET /api/v1/files/search?filename=*&skip=0&limit=50 HTTP/1.1" 200 (×8 within one session) ``` ### Workaround (for other affected users) Reverse-proxy level: append `content=false` to `/api/v1/files/search` whe
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#7476](https://github.com/open-webui/open-webui/issues/7476) **Feature request: Allow selective field retreival in list files API** *This is directly about the same files API returning full file content by default and requesting selective field retrieval for list endpoints. It matches the new issue’s root cause and proposed fix around lightweight metadata-only responses.* *by sreinwald* 2. 🟣 [#18863](https://github.com/open-webui/open-webui/issues/18863) **feat: payload size limitations for the API** *This broader API payload-size request is related because it addresses oversiz
💬 nivas4506
is the file is open or not
💬 Classic298
https://github.com/open-webui/open-webui/pull/25774
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 TomTheWise  ·  💬 11  ·  👍 7  ·  👥 6  |  Pain 0 · Budget 1 · Urgency 0
we need
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the …
展开全文 · 11 条评论
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions. ### Problem Description gemma4 just released - with combined audio and vision support Im sure there will be multiple changes required in OpenWebUI for taking fully advantage. ### Desired Solution you'd like I guess there will be multiple changes required in OpenWebUI for taking fully advantage of the new gemma4: - Another seperate way to interact with audio directly - this would make things probably easier and more intuitive as the the whisper dictate is a replacement for the keyboard and can stay as such. And probably users wat to continue to use speech recognition instead of typing but still prefer text to be sent to gemma4 via chat. OR (but i think this is worse: - When a model with native audio capability is detected ar configured as such in the Admin UI audio should not be sent to whisper. ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 Classic298
Audio input you say? @tjbck strongly related: https://github.com/open-webui/open-webui/issues/5894
💬 TomTheWise
The smaller ones can understand audio, the larger ones can even understand / „see“ video without audio. https://ai.google.dev/gemma/docs/core/model_card_4 https://youtu.be/jZVBoFOJK-Q?t=117 Llama.cpp is currently only supporting text+image for day0 support. I guess the audio support will maybe more like comparable to supporting Mistral AIs Voxtral realtime and maybe less like whisper?
💬 Classic298
Related: https://github.com/open-webui/open-webui/issues/23471
💬 mglaubitz
We use Open WebUI in as a tool for our university students and we have many use cases in teaching and research where interacting with audio / video is common demand (i.e. transcribe a recorded interview). Thus, I strongly support the idea of having a dedicated way to deal with audio / video input. Users want to be able to deliberately send an audio to a transcription endpoint together with a prompt or pass along a video to "see". Right now videos are treated in the same way as PDF files an audio is only transcribed implicitly.
💬 Classic298
https://github.com/open-webui/open-webui/issues/17217
💬 Classic298
https://github.com/open-webui/open-webui/issues/23538
💬 TomTheWise
Google finally uploaded jinja chat templates that apparently now have a good quality. IF (and I have no idea how it works in OWUI) OWUI does indeed need updates for the gemma4 control tokens, now they are official clear. [Here is the google documentation](https://ai.google.dev/gemma/docs/core/prompt-formatting-gemma4?hl=de)
💬 TomTheWise
https://github.com/ggml-org/llama.cpp/pull/21421 llama.cpp now has initial multimodal audio support for gemma4 E4B / E2B
💬 pcomte
Yes, this is a very important feature to add. We need to be able to bypass the STT and feed the audio directly into the model. Audio is so much richer and carries additional information other than just words (voice tone, speed, emotions etc.) which Gemma4 can analyze.
💬 theronypony
Agreed - now that Gemma 4 12b is out with unified architecture, having a pathway to feed audio to the model would be really great
💬 vanmilleru
how about video? gemma4 also support video
💡 有付费/企业信号 → 评估咨询或付费机会;高优先级 → 考虑提交 PR 或开发插件
👤 AlbertodelaCruz  ·  💬 2  ·  👍 1  ·  👥 1  |  Pain 3 · Budget 2 · Urgency 0
cannotproductionfailsdeploydeployment
## Bug Summary `get_protected_resource_metadata()` in `backend/open_webui/utils/oauth.py` only attempts RFC 9728 Protected Resource Metadata (PRM) discovery when the anonymous `initialize` probe returns **401** with a `WWW-Authenticate` header. Some remote MCP servers answer **200** to an anonymou…
展开全文 · 2 条评论
## Bug Summary `get_protected_resource_metadata()` in `backend/open_webui/utils/oauth.py` only attempts RFC 9728 Protected Resource Metadata (PRM) discovery when the anonymous `initialize` probe returns **401** with a `WWW-Authenticate` header. Some remote MCP servers answer **200** to an anonymous `initialize` and only enforce authorization at `tools/call` time. Google's hosted Workspace MCPs behave this way (e.g. `https://gmailmcp.googleapis.com/mcp/v1`), while still publishing a perfectly valid PRM document at the RFC 9728 §4.2 well-known URI: ``` $ curl -s https://gmailmcp.googleapis.com/.well-known/oauth-protected-resource/mcp/v1 {"authorization_servers":["https://accounts.google.com/"], "resource":"https://gmailmcp.googleapis.com/mcp/v1", "scopes_supported":["https://mail.google.com/","https://www.googleapis.com/auth/gmail.modify", ...]} ``` Because the probe returns 200, Open WebUI never fetches this document: `scopes_supported` and `authorization_servers` stay empty, so the OAuth flow requests no scopes and the connection cannot be authorized correctly. ## Steps to Reproduce 1. Admin Settings → Tool Servers → add an MCP connection to `https://gmailmcp.googleapis.com/mcp/v1` with OAuth 2.1 (static client credentials from a Google Cloud project with the Gmail MCP API enabled). 2. Authorize the connection. 3. The authorization request is built without the scopes advertised by the resource's PRM document. ## Expected Behavior PRM discovery should follow RFC 9728: use the `WWW-Authenticate` `resource_metadata` hint when the server returns 401, and otherwise fall back to the well-known URIs — regardless of the probe's HTTP status. ## Actual Behavior Discovery only happens on 401; servers answering 200/4xx-other to the anonymous probe never get PRM discovery. ## Environment - Open WebUI: reproduced on `v0.9.6` and present in current `dev` (`backend/open_webui/utils/oauth.py`, `if response.status == 401:`). ## Proposed Fix Run the discovery unconditionally after the probe (prefer the `WWW-Authenticate` hint when present, fall back to well-known URIs otherwise). Verified against Google's Gmail MCP in a production deployment. PR incoming.
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @AlbertodelaCruz, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#19794](https://github.com/open-webui/open-webui/issues/19794) **MCP OAuth 2.1: Not following WWW-Authenticate → Protected Resource → Authorization Server discovery chain** *This is the closest match: it describes the same MCP OAuth discovery chain problem and specifically the need to follow WWW-Authenticate → Protected Resource Metadata → Authorization Server discovery. The new issue is a narrower case where PRM discovery is skipped unless the initial probe returns 401.* *by jamie-dit · `bug`* 2. 🟣 [#24216](https://github.com/open-webui/open-webui/issues/24216) **issue: MCP OAuth
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 skokhanovskiy  ·  💬 2  ·  👍 0  ·  👥 1  |  Pain 4 · Budget 0 · Urgency 2
productionworkaroundregressionfailsimmediatelybug
### 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 …
展开全文 · 2 条评论
### 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 0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Linux ### Browser (if applicable) _No response_ ### 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 When the AI uses `replace_note_content` to edit a note, the new content should persist in the editor. Subsequent user keystrokes should not alter the content the AI wrote. ### Actual Behavior The tool returns `{"status":"success"}` and `view_note` immediately shows the new text — but as soon as the user types any character in the open editor, the AI's edit vanishes and the original content is restored. Restarting the server temporarily reveals the edit until the note is opened again. ### Steps to Reproduce 1. Open a note in the editor and type some content. 2. In a chat, ask the AI to rewrite the note using the `replace_note_content` built-in tool. 3. Observe that the tool returns success and `view_note` shows the new text. 4. Without closing the note tab, type any character in the editor. 5. The editor reverts to the original content. The AI's edit is gone. ## PoC Fully self-contained, headless reproduction — no browser needed. The script authenticates, writes via the API as the tool does, then emits the same socket event a browser sends on a keystroke. `docker-compose.yml`: ```yaml services: open-webui: image: ghcr.io/open-webui/open-webui:main ports: - "3000:8080" environment: WEBUI_SECRET_KEY: "poc-secret-key-12345" DEFAULT_USER_ROLE: "admin" ENABLE_SIGNUP: "true" OLLAMA_BASE_URL: "" volumes: - owui-data:/app/backend/data healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8080/health"] interval: 5s timeout: 10s retries: 30 start_period: 30s test: image: python:3.12-slim volumes: - ./test_bug.py:/test_bug.py:ro command: > bash -c "pip install --quiet requests 'python-socketio[client]' && python /test_bug.py" environment: WEBUI_URL: "http://open-webui:8080" depends_on: open-webui: condition: service_healthy volumes: owui-data: ``` `test_bug.py`: ```python import os, sys, time import requests, socketio BASE_URL = os.environ.get("WEBUI_URL", "http://localhost:3000") EMAIL = "poc@example.com" PASSWORD = "Poc123456!" ORIGINAL_CONTENT = {"md": "# Original\nOriginal content."} LLM_CONTENT = {"
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @skokhanovskiy, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#23362](https://github.com/open-webui/open-webui/issues/23362) **Bug: Notes added to folders are not treated as context** *This is the closest notes-related bug I found. It involves LLM-editable notes and the notes subsystem, so it is thematically related to AI-driven note updates, even though it describes a different context/feature request rather than the stale-editor overwrite bug.* *by sugoidesune · `bug`* 2. 🟢 [#13464](https://github.com/open-webui/open-webui/issues/13464) **enh: notes** *The parent notes feature tracking issue includes 'rewrite notes based on transcriptio
💡 痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 AlbertodelaCruz  ·  💬 2  ·  👍 0  ·  👥 1  |  Pain 3 · Budget 2 · Urgency 0
brokenproductionfailsdeploydeployment
## Problem When connecting to an MCP server, Open WebUI requests **every** OAuth scope the server advertises — either the Authorization Server's `scopes_supported` (during dynamic client registration) or the Protected Resource Metadata's `scopes_supported` (with static credentials). Some servers a…
展开全文 · 2 条评论
## Problem When connecting to an MCP server, Open WebUI requests **every** OAuth scope the server advertises — either the Authorization Server's `scopes_supported` (during dynamic client registration) or the Protected Resource Metadata's `scopes_supported` (with static credentials). Some servers advertise scope catalogs that are broader than what a deployment needs, or even mutually exclusive. Google's hosted Gmail MCP advertises: ``` "scopes_supported": ["https://mail.google.com/", ".../gmail.modify", ".../gmail.compose", ".../gmail.readonly", ".../gmail.metadata"] ``` Requesting all of them is a problem twice over: - **Broken operations:** `gmail.metadata` is incompatible with full-content reads; a token carrying it makes `get_thread` with `messageFormat: FULL_CONTENT` fail. - **Over-granting:** users are asked to consent to full mailbox access (`https://mail.google.com/`) when the deployment only needs read/compose. There is currently no way for an admin to narrow this down — neither globally nor per connection. ## Proposed Solution A `MCP_OAUTH_ALLOWED_SCOPES` environment variable (space- or comma-separated allowlist). When set, advertised scopes not in the list are not requested; when unset, behavior is unchanged. Scope strings are matched exactly, and since they are globally unique per service (especially for Google APIs), a single deployment-wide allowlist works across multiple MCP connections. Verified in a production deployment against Google's Gmail MCP: with the allowlist set to `gmail.readonly gmail.compose`, the consent screen and the issued token are limited to exactly those scopes. A per-connection scope field in the Tool Server connection UI would be a natural follow-up; the env var provides the deployment-level safety net with no UI changes. PR incoming.
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @AlbertodelaCruz, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#25950](https://github.com/open-webui/open-webui/issues/25950) **issue: DCR flow seeds registration `scope` from Authorization Server `scopes_supported` instead of Protected Resource Metadata (RFC 9728)** *This issue is directly about how Open WebUI chooses MCP OAuth scopes from discovered metadata. The new request is also about controlling which discovered scopes are requested, so both concern scope-selection behavior in the MCP OAuth flow.* *by riljian · `bug`* 2. 🟣 [#23668](https://github.com/open-webui/open-webui/issues/23668) **Bug: admin-configured scopes overridden by disco
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 danieltr3s  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 3 · Budget 1 · Urgency 1
productionfailsfailingclientsbug
### 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 …
展开全文 · 2 条评论
### 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.9.6 (latest) ### Ollama Version (if applicable) _No response_ ### Operating System Debian 12 ### Browser (if applicable) _No response_ ### 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 The Eject operation should strip the configured connection prefix from the model identifier before transmitting the API request to the backend. This ensures the backend receives the exact, clean model name it expects (e.g., sending 'model-name' instead of 'prefix.model-name'). ### Actual Behavior The Eject action transmits the full internal identifier, including the prefix, directly to the backend API endpoint. As a result, the backend rejects the request with a "model not found" or 404 error because it does not recognize the prefixed string (e.g., receiving 'prefix.model-name' instead of just 'model-name'). ### Steps to Reproduce 1. Go to **Settings > Connections** and configure an OpenAI-compatible API backend. 2. Set a **Prefix ID** for this connection (e.g., 'my-backend'). 3. Load a model belonging to this connection. 4. Attempt to trigger the **Eject/Unload** action on the loaded model. 5. Check the network logs or backend console; the request fails because it targets 'my-backend.model-name' instead of 'model-name'. ### Logs & Screenshots <img width="1341" height="318" alt="Image" src="https://github.com/user-attachments/assets/245c8fc4-34b3-466c-962e-a09af396db71" /> <img width="1042" height="344" alt="Image" src="https://github.com/user-attachments/assets/886c8041-4d5d-4329-bb47-7aae4805476a" /> <img width="1577" height="312" alt="Image" src="https://github.com/user-attachments/assets/cdb83909-96df-4dea-92c2-35b7861a1003" /> ### Additional Information This issue only occurs when a Prefix ID is defined on the OpenAI compatible connection (for example: llama.cpp). If no prefix is used, the eject action works flawlessly because the internal UI identifier matches the backend's model identifier exactly. The bug likely resides in the component/function handling the eject button payload generation, where it pulls 'model.id' instead of the underlying un-prefixed model reference.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22134](https://github.com/open-webui/open-webui/issues/22134) **issue: Using aliases with OpenAI proxy returns 404** *This is the closest conceptual match: both report a 404 caused by OpenWebUI sending a model identifier that the backend does not recognize. The alias issue specifically says the proxy fails to resolve the user-facing name back to the base model before calling the backend, which is analogous to eject sending the prefixed internal ID instead of the clean model name.* *by gaby · `bug`* 2. 🟣 [#22260](https://github.com/open-webui/open-webui/issues/22260) **issue: atte
💬 JAVA-LW
This looks like another case where the user-facing model ID and the upstream/resolved model ID need to be kept separate. Prefix IDs are useful in the UI/control plane, but the backend call often needs the clean provider model name plus connection metadata. If those get collapsed into one string, unload/eject/list-model operations can easily send an ID the upstream does not recognize. Disclosure: I work on 1flowbase, an open-source virtual model gateway. We are trying to make this separation explicit: clients call a stable virtual model endpoint, while the gateway owns aliasing, provider-specific model IDs, fallback, and resolved upstream metadata. This issue is a good example of why OpenAI-compatible routing needs a small control plane, not just string prefixes.
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 jimbo-p  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 2 · Budget 2 · Urgency 1
productionregressiondeploydeploymentbug
### 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 …
展开全文 · 1 条评论
### 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 0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Windows 10 ### Browser (if applicable) Firefox ### 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 Opening a Knowledge Base — and any background polling for in-flight files — should issue a lookup whose cost scales with the number of pending files, not with the total extracted document text in the file table. With a large file table this query should remain an index lookup, and the polling that drives it should not be able to stack requests on top of each other. A KB with no genuinely-processing files should generate negligible DB load. This is the same pathology I reported in #25082, on a different (newly-added in 0.9.6) endpoint. ### Actual Behavior The new `GET /api/v1/knowledge/{id}/files/pending endpoint` (0.9.6) is backed by `Files.get_pending_files_for_knowledge` in `backend/open_webui/models/files.py`, which runs: ``` SELECT ... FROM file WHERE CAST(((meta -> 'data') ->> 'knowledge_id') AS VARCHAR) = $1 AND CAST((data ->> 'status') AS VARCHAR) IN ('pending','processing') AND file.id NOT IN (SELECT file_id FROM knowledge_file WHERE knowledge_id = $2); ``` All three predicates are unindexed JSON expressions, so every call is a full sequential scan of file. Since file.data holds the full extracted content of every document, that table is multi-GB on a large deployment, a plain COUNT with this filter took 1m43s for me. The frontend amplifies it. In `src/lib/components/chat/Knowledge/KnowledgeBase.svelte`, `init()` calls the endpoint on every KB page load, and if anything is pending it starts `setInterval(..., 5000)` with an async callback and no overlap guard so it re-fires every 5s regardless of whether the previous request finished. When the query takes minutes, the polls pile up: I saw 30+ concurrent parallel seq-scans of file at once, one set per open tab. On my deployment (5k users, hundreds of thousands of files) this pinned Aurora Serverless v2 at 100% of 120 ACU and took the instance down. I had to roll back to 0.9.5. ### Steps to Reproduce 1. Stand up Open WebUI v0.9.6 backed by Postgres, with a non-trivial file table (large extracted data.content). 2. Open a Knowledge Base in Workspace → Knowledge; open it in a few tabs. 3. Watch the Postgres logs / pg_stat_activity. Each init() and each 5s interval fires SELECT public.file... as a full seq-scan; with multiple
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#25082](https://github.com/open-webui/open-webui/issues/25082) **issue: GET /api/v1/knowledge/search/files: unindexed JSON ILIKE per keystroke (chat '#' + model KB selector)** *This is the closest prior performance regression in Knowledge file endpoints. It also reports unindexed JSON predicates over the large `file` table causing seq-scans and DB load, so it shares the same root class of issue even though it targets `/knowledge/search/files` rather than `/knowledge/{id}/files/pending`.* *by jimbo-p · `bug`* 2. 🟣 [#20510](https://github.com/open-webui/open-webui/issues/20510) **fe
💡 有付费/企业信号 → 评估咨询或付费机会;痛点明确 → 可联系需求方;高优先级 → 考虑提交 PR 或开发插件
👤 bannert1337  ·  💬 7  ·  👍 0  ·  👥 4  |  Pain 3 · Budget 0 · Urgency 1
productionmanuallyfailsbug
### 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 …
展开全文 · 7 条评论
### 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.8.12 ### Ollama Version (if applicable) _No response_ ### Operating System Debian 13 ### Browser (if applicable) _No response_ ### 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 The old RAG Query Generation and Retrieval process should also be skipped when native function calling is enabled and a collection is selected in chat. ### Actual Behavior After updating from v0.8.10 to v0.8.12, when selecting a collection in Chat now causes the old RAG Query Generation and Retrieval process to start before the model starts generating. The model with native function calling enabled should handle the retrieval themself and being either limited or suggested to use the selected collection. ### Steps to Reproduce 1. Create multiple collections with documents. 2. Create model with collections attached and native function calling enabled. 3. Open chat with created model. 4. Select collection with `+` button in chat text field. 5. Send message with collection selected. ### Logs & Screenshots <img width="1496" height="280" alt="Image" src="https://github.com/user-attachments/assets/93052543-2e9f-4fab-a699-d2ecd2641585" /> <img width="1968" height="224" alt="Image" src="https://github.com/user-attachments/assets/b185d92f-32b8-427f-b631-21ca09951eca" /> ### Additional Information I have a model in Open WebUI with native function calling enabled and multiple collections attached. This works perfectly fine.
💬 Classic298
99% sure this is intended. If you manually add it, it will be queried the old fashioned way, because you also added it the old fashioned way. If you want the AI to query it you need to have it use it's tools. The old "add knowledge base" RAG still exists of course, if you manually add it. Leaving it open for @tjbck to triage but i am relatively sure this is intended
💬 bannert1337
Thanks for the clarification! I understand that this is how the code currently routes the request, but I'd like to kindly challenge if this should be the intended behavior from a UX and architecture perspective. As a user, my intuition is that selecting a specific knowledge base (e.g. via `#`) should act as a scope/filter for the agent, not as a switch that degrades the model's capabilities. If I have a model with Native Tool Calling enabled, I expect it to use its tools autonomously. By manually attaching a collection, I simply want to tell the agent: "Please use your search tools, but restrict your search to this specific collection." > Falling back to the legacy RAG pipeline (Task Model -> Embed -> Rerank -> Inject as prompt context) just because a collection was selected creates a ve
💬 Classic298
Ok - but you just figured it out yourself. Its not an issue. Its a feature request if anything And yes this parameter exists and is currently used for custom models.
💬 Tyrannius
Wouldnt it then be better to move the "collection scope" from the model profile to the collection creation / collections access switcher? Like "Name of the collection" , "Describe your collection" and "Which model shall have access to the collection?" and below that the access as usual. The user , who intentionally have the right to create collections probably wont be using the attachment funtion anyways. No?
💬 j820301
@Classic298 Hello, If I access the Knowledge Base (KB) through query_knowledge_files in native mode, am I correct in understanding that no reranking is performed, even when ENABLE_RAG_HYBRID_SEARCH is enabled? I would expect query_knowledge_files to provide an option for reranking. Is there currently any way to enable this behavior? From my testing, it appears that no reranking scores are returned, except when content is manually added to the KB. Is that expected behavior?
💬 Classic298
no query knowledge files should do reranking
💬 j820301
Thank you for your reply. Just to make sure I understand correctly: can I assume that query_knowledge_files is intended to return the retrieved documents directly, without any reranking, and that this is the expected behavior going forward? In other words, should this be considered the standard behavior for knowledge base queries in future versions as well?
💡 痛点明确 → 可联系需求方
👤 HenkieTenkie62  ·  💬 5  ·  👍 1  ·  👥 4  |  Pain 3 · Budget 0 · Urgency 1
cannotunableproductionbug
### 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 …
展开全文 · 5 条评论
### 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 dev-slim image ### Open WebUI Version dev-slim Created 2026-06-02 04:14:37 ### Ollama Version (if applicable) _No response_ ### Operating System pop-os 22.04 ### Browser (if applicable) Chrome latest ### 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 Adding a space when renaming won't open the file. ### Actual Behavior Adding a space when renaming opens the file. Also title is not editable when file is opened for viewing/editing, I don't know if this is intended. ### Steps to Reproduce Rename a KB file, and try adding a space. ### Logs & Screenshots <img width="950" height="601" alt="Image" src="https://github.com/user-attachments/assets/3fe3a3de-4cd9-497a-adef-7ff0dcd12bc7" /> ### Additional Information This was tested on the lastest dev-slim image Created | 2026-06-02 04:14:37
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#6390](https://github.com/open-webui/open-webui/issues/6390) **Cannot Rename Folders By Pressing Enter** *This is the closest behavioral match: it reports a rename interaction bug where keyboard input does not behave correctly while renaming items. The new issue is also about renaming causing unintended behavior in the file/folder tree.* *by ProjectMoon* 2. 🟣 [#10211](https://github.com/open-webui/open-webui/issues/10211) **Unable to edit knowledge uploaded file** *Both issues involve editing/renaming a knowledge-base file entry from the knowledge UI. While the failure mode dif
💬 silentoplayz
I am able to reproduce this issue on the latest `dev` via Google Chrome browser, but not Firefox. Either way, it's a confirmed issue now. I'll submit a PR for a fix soon.
💬 silentoplayz
Testing wanted https://github.com/open-webui/open-webui/pull/25627
💬 HenkieTenkie62
@silentoplayz Tested on dev+#25627 works perfectl. Thanks!
💬 Classic298
@HenkieTenkie62 tysm for testing! rarity
💡 痛点明确 → 可联系需求方
👤 arnebenjamin  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 4 · Budget 0 · Urgency 1
unableproductionworkaroundfailingbug
### 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 …
展开全文 · 2 条评论
### 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 0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Windows 11 ### Browser (if applicable) Edge ### 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 When a chat session uses a per-user OpenAPI tool server and the LLM makes multiple sequential tool calls, each call should complete and return a result to the backend. The chat should continue normally after all tool calls finish. ### Actual Behavior The chat hangs indefinitely after the first tool call completes. The backend logs tool_call_handler for the second tool call but never sends the execute:tool WebSocket event to the browser — and since WEBSOCKET_EVENT_CALLER_TIMEOUT defaults to None, sio.call() blocks forever. Root cause: executeTool in src/routes/+layout.svelte has no try-catch. If executeToolServer throws on a second call (e.g. because toolServerData is undefined), cb() is never called and the backend never unblocks: // Current code — no try-catch, cb() never called on throw const executeTool = async (data, cb, chatId) => { const { toolServer, toolServerData, token } = resolveToolServer(data.server?.url); if (toolServer) { const res = await executeToolServer( token, toolServer.url, data?.name, data?.params, toolServerData, chatId ); if (cb) { cb(structuredClone(res)); } // never reached if executeToolServer throws } else { if (cb) { cb({ error: 'Tool Server Not Found' }); } } }; ### Steps to Reproduce 1. Add a per-user OpenAPI tool server under User Settings → Tool Servers 2. Start a chat where the LLM needs to make 2+ sequential tool calls (e.g. "list all open deals, then get the details of the top one") 3. Observe: first tool call completes and result appears in the tool citation; second call never fires — chat hangs indefinitely ### Logs & Screenshots Open WebUI backend logs — tool_call_handler fires for the second tool, then silence: 2026-06-09 09:43:32 | DEBUG | open_webui.utils.middleware:tool_call_handler:1331 tool_call={'name': 'pipedrive_list_deals', 'parameters': {'start': 0, 'limit': 500}} [no further tool-related log lines until manual restart] Tool server logs — only one POST received per hang, second call never arrives: INFO: "POST /pipedrive/tools/pipedrive_list_deals HTTP/1.1" 200 OK [no further POST requests] Browser console — first execute:tool fires and returns; second event never appe
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#24367](https://github.com/open-webui/open-webui/issues/24367) **issue: Unable to use global tool server while user tool server works properly** *Related to per-user vs global tool server behavior in the tool-server pipeline. It shows a bug in how tool server configuration is resolved/used, which is the same area implicated by sequential tool calls failing when toolServerData becomes unavailable.* *by theFra985 · `bug`* 2. 🟣 [#20207](https://github.com/open-webui/open-webui/issues/20207) **issue: Infinite loading screen when MCP tool is enabled.** *This is a hang/loading-state
💬 rehan243
So you're on Open WebUI v0.9.6 with Docker on Windows 11, right? We've seen similar hangs in our RAG pipeline when we didn't properly handle sequential tool calls. Turns out, it's often related to how the underlying server handles concurrent requests. I'd check if your tool server is configured to handle multiple calls in sequence properly. We hit this at ~100 concurrent calls and had to tweak our Ollama config to avoid timeouts. The thing is, `executeTool` in `+layout.svelte` is missing a try-catch, so if there's an error, it'll just hang. Not gonna lie, took us a few tries to figure out the right config values for our setup. We're using a similar tech stack, and adding proper error handling and retries fixed our issue.
💡 痛点明确 → 可联系需求方
👤 M0n7y5  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 4 · Budget 0 · Urgency 1
unableproductionfailsfailingbug
### 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 …
展开全文 · 2 条评论
### 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 latest ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 22.04, ### Browser (if applicable) _No response_ ### 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 Being able to generate images using models from openrouter ### Actual Behavior The generation fails with error message. ### Steps to Reproduce Just add openrouter as an provider and try the same model as on the picture ### Logs & Screenshots <img width="1039" height="198" alt="Image" src="https://github.com/user-attachments/assets/c86fe500-7eae-431d-80d5-9eb98f22af03" /> ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#18998](https://github.com/open-webui/open-webui/issues/18998) **feat: Support Openrouter image generation** *This is the original feature request for OpenRouter image generation support, directly matching the new issue’s topic. It provides context that OpenRouter image generation has been a known area of work in Open WebUI.* *by Joly0* 2. 🟣 [#20634](https://github.com/open-webui/open-webui/issues/20634) **issue: OpenRouter image generation `Chunk too big` error** *This issue reports a failure specifically when generating images through OpenRouter, which is very close to the ne
💬 Ag3169
I always get simular issues, i try to generate an image and the AI model just says "I was unable to use your image generator tool as i got a 404 error" or simular
💡 痛点明确 → 可联系需求方
👤 ericnicolaides  ·  💬 1  ·  👍 1  ·  👥 1  |  Pain 4 · Budget 0 · Urgency 1
cannotnot workingproductioncrashbug
### 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 …
展开全文 · 1 条评论
### 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 Open WebUI version: 0.9.6 ### Ollama Version (if applicable) Model: Llama 3.3 70B (via vLLM with native tool calling) ### Operating System Debian 13 ### Browser (if applicable) Search engine: SearXNG ### 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 When a model using native function calling (function_calling: native) emits a tool call with numeric parameters as strings (e.g., "count": "1" instead of "count": 1), the builtin tool functions should coerce the values to int before use and execute normally. ### Actual Behavior The builtin tool functions declare int/Optional[int] type hints but never coerce the actual runtime values. When the model passes a numeric parameter as a string, any comparison or arithmetic on that value raises: TypeError: '<' not supported between instances of 'int' and 'str' This crashes the tool call and the model receives an error response instead of search results. ### Steps to Reproduce 1. Configure a model with native function calling enabled (Admin Panel → Function Calling = Native) 2. Enable SearXNG web search 3. In a chat, ask the model to search for something (e.g., "What is the weather in Portland OR?") 4. The model emits a tool call: search_web(query="Portland Oregon weather today", count=1) 5. If the model passes count as the string "1" in the tool call JSON, the min(count, max_count) comparison on line 233 of builtin.py crashes with TypeError ### Logs & Screenshots 2026-06-03 02:15:56.762 | ERROR | open_webui.tools.builtin:search_web:245 - search_web error: '<' not supported between instances of 'int' and 'str' Full traceback shows the error at: File "/app/backend/open_webui/utils/middleware.py", line 4645, in response_handler tool_result = await tool_function(**tool_function_params) ### Additional Information 20 builtin tool functions in backend/open_webui/tools/builtin.py are affected — any that accept int or Optional[int] parameters and use them in comparisons, arithmetic, or slicing: - search_web: min(count, max_count) - calculate_timestamp: days_ago + (weeks_ago * 7), months_ago > 0, years_ago > 0 - search_notes, search_chats, search_channel_messages: start_timestamp * 1_000_000_000, end_timestamp * 1_000_000_000 - search_memories, search_channels, list_knowledge_bases, search_knowledge_bases, search_knowledge_files, list_knowledge, query_kn
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#21645](https://github.com/open-webui/open-webui/issues/21645) **issue: websearch with Native mode and API Responses not working** *Related because it involves native tool calling and web search failures in the same execution path. While the reported error differs ('choices' KeyError vs. TypeError), it is the closest existing issue about builtin web search breaking under Native mode.* *by MarceloMassarente · `bug`* 2. 🟣 [#13248](https://github.com/open-webui/open-webui/issues/13248) **issue: Tool parameters with default values cannot be overridden by tool_call input** *Related
💡 痛点明确 → 可联系需求方
👤 rajeevaroraakm  ·  💬 2  ·  👍 0  ·  👥 1  |  Pain 4 · Budget 0 · Urgency 1
brokenproductionfailsfailingbug
## Summary When an OpenAI-compatible provider sends `"timings": null` (or any other null dict field) in streaming chunks, `dict.update(None)` throws a `TypeError` on every content chunk. The exception is caught silently at `DEBUG` log level, so `output` remains `[]` for the entire stream and the sa…
展开全文 · 2 条评论
## Summary When an OpenAI-compatible provider sends `"timings": null` (or any other null dict field) in streaming chunks, `dict.update(None)` throws a `TypeError` on every content chunk. The exception is caught silently at `DEBUG` log level, so `output` remains `[]` for the entire stream and the saved message has `content: ""` and `output: []`. ## Affected version 0.9.2 ## Affected file and line `open_webui/utils/middleware.py` (~line 3963): ```python raw_usage = data.get('usage', {}) or {} raw_usage.update(data.get('timings', {})) # llama.cpp ``` ## Root cause `dict.get(key, default)` returns the default **only when the key is absent**. When the JSON contains `"timings": null`, the key exists and `.get('timings', {})` returns `None`. Calling `{}.update(None)` raises: ``` TypeError: 'NoneType' object is not iterable ``` This fires inside the `async for line in response.body_iterator` loop. The catch-all at the bottom of that loop catches it silently: ```python except Exception as e: done = 'data: [DONE]' in line if done: pass else: log.debug(f'Error: {e}') # silent! continue ``` Because the exception fires before content is extracted from the delta, `output` remains empty. With `ENABLE_REALTIME_CHAT_SAVE=False` (the default), nothing is written until the stream ends — at which point `serialize_output([])` returns `""`. ## Reproduction Confirmed with `mlx-vlm` serving `mlx-community/gemma-4-12b-it-4bit`. Example streaming chunk: ```json { "id": "chatcmpl-...", "object": "chat.completion.chunk", "choices": [{"index": 0, "delta": {"content": "Hi"}, "finish_reason": null}], "usage": null, "timings": null } ``` Any OpenAI-compatible provider sending null for `timings` or other dict fields will trigger this. It is not specific to mlx-vlm. **Symptoms:** - Chat UI shows an empty assistant message bubble - Follow-up suggestions still generate (they run as a separate model call) - Non-streaming (`stream: false`) requests work correctly — different code path - `DEBUG` logs show `Error: 'NoneType' object is not iterable` for every content chunk ## Fix Add `or {}` to guard against null — consistent with how `usage` is already handled on the line above: ```python raw_usage = data.get('usage', {}) or {} raw_usage.update(data.get('timings', {}) or {}) # llama.cpp — guard against null ``` ## Broader concern The `except Exception as e: log.debug(...)` catch-all in the streaming loop will silently swallow any processing error for any content chunk, always producing empty output. Raising to `WARNING` or `ERROR` would surface unexpected provider response formats much faster.
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @rajeevaroraakm, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#25083](https://github.com/open-webui/open-webui/issues/25083) **issue: bug: backend forwards persisted empty assistant messages to upstream, poisoning chats with strict OpenAI-compatible providers** *Related at the symptom level: both issues involve Open WebUI producing empty assistant messages during streaming with OpenAI-compatible providers. This issue is about the saved empty output causing later upstream rejections, while the new issue explains one root cause for why the streamed assistant content becomes empty in the first place.* *by shawnxiao105-afk · `bug`* 2. 🟣 [#23066]
💡 痛点明确 → 可联系需求方
👤 Leseratte10  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 5 · Budget 0 · Urgency 0
can'tcannotbrokenworkaroundstuck
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description Having used LM Studio in the past, I'd like to have a bit more flexibility when deleting single messages in a given chat. For example, in LM Studio, I can delete the LLM's response if I don't like it, and then regenerate it. In Open WebUI, I cannot delete the entire response, I first need to regenerate it so it shows "2/2", then change back to 1/2, then delete that generation. Also, when I delete one of my messages, Open WebUI automatically deletes the LLM's response as well. In LM Studio, when I delete my message, the LLM answer stays in the chat context anyways, it's just two generated answers after another. The user message just disappears from the screen and from the LLM context. Also, when I keep re-generating a particular message, and there's an error (like the LLM provider is unreachable or whatever), then I can't delete that generation. I can scroll through the generations (1/3, 2/3, 3/3, ...), and I can delete the ones that have actual text, but I cannot delete the ones that just consist of an error, the "delete" button is just missing. ### Proposed Solution - Deleting a user message should not cause the LLM's response to be deleted as well. - It should be possible to delete the last LLM response and re-generate it, without having to first re-generate it, then scroll back to the previous message, then deleting it. - It should be possible to delete failed / error messages. ### Alternatives Considered I can edit the user message and replace it with a blank text, but that doesn't really look nice. Also, it's not really expected behaviour in a chat, where each message has its own "delete" button, that deleting one message will also auto-delete the response to said message. As for deleting the LLM response, yeah, there's a workaround (generate new message, flip back to the previous generation, press delete), but it'd be simpler if this was just built-in. ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#5096](https://github.com/open-webui/open-webui/issues/5096) **Allow deletion of individual user messages/model reply branches** *This is directly about deleting individual user message/model response branches, which overlaps with the new request for more flexible deletion of single chat messages and assistant response branches.* *by CookSleep* 2. 🟣 [#4923](https://github.com/open-webui/open-webui/issues/4923) **bug: message delete issue** *This bug report describes deletion behavior that hides or affects subsequent messages after deleting a message, closely related to the new
💡 痛点明确 → 可联系需求方
👤 squirrel-oss  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 4 · Budget 0 · Urgency 1
unablebrokenproductionfailingbug
### 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 …
展开全文 · 1 条评论
### 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 running the main branch image: ghcr.io/open-webui/open-webui:main ### Ollama Version (if applicable) ollama:latest ### Operating System Ubunto 22.04 LTS ### Browser (if applicable) 148.0.7778.179 (Official Build) (64-bit) ### 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 Both Open WebUI instances (Main on port 3000 and Experimental on port 3001) should be fully accessible and functional when reached through the SSH tunnel using local port forwarding. The frontend should successfully connect to the backend on both instances, allowing normal login and use without any “Open WebUI backend required” error. ### Actual Behavior I’m running two separate Open WebUI instances on the same Ubuntu server using Docker Compose, accessed via SSH tunnel (PuTTY) with local port forwarding: - Main → `localhost:3000` → **Working perfectly** - Experimental → `localhost:3001` → **Broken** **Error:** “Open WebUI backend required. Oops! You’re using an unsupported method, front-end only. Please serve the WebUI from the backend.” ### Steps to Reproduce **What I’ve already tried:** - Full PuTTY reconnect + hard refresh (`Ctrl + Shift + R`) - Restarting only the Experimental container - Clearing browser cache - Multiple waits and retries **Current state:** - Both containers show as **healthy** in `docker ps` - Main instance works without issues - Experimental keeps showing the backend error (sometimes looping “failing to connect”) **Setup:** - Two separate `docker-compose.yml` files - Both point to the same shared Ollama backend - Using local port forwarding in PuTTY (3000 → 3002 and 3001 → 3001) Has anyone else experienced this flaky behaviour with a second instance behind an SSH tunnel? Any reliable fixes? Thanks in advance. ### Logs & Screenshots none ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22581](https://github.com/open-webui/open-webui/issues/22581) **issue: WebSocket uses ws:// instead of wss:// when Open WebUI is served over HTTPS (Open Terminal Container)** *This issue is about WebSocket connections failing when Open WebUI is served through HTTPS because the client chooses the wrong scheme (`ws://` vs `wss://`). A second instance exposed through an SSH tunnel can hit the same kind of frontend-backend connection mismatch and produce backend-required/failed-to-connect errors.* *by ieQ-strecker · `bug`* 2. 🟢 [#15162](https://github.com/open-webui/open-webui/issues
💡 痛点明确 → 可联系需求方
👤 Rinrin0413  ·  💬 3  ·  👍 1  ·  👥 2  |  Pain 3 · Budget 0 · Urgency 1
does not workproductionstuckbug
### 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 …
展开全文 · 3 条评论
### 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.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Fedora Linux 43 (Workstation Edition) x86_64 ### Browser (if applicable) _No response_ ### 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 When selecting the exact same model ID (e.g., `gemma3:270m` vs `gemma3:270m`) in a side-by-side chat, both chat panes should receive and display the streamed responses independently without interfering with each other. ### Actual Behavior When identically named models are used, only one model pane receives the streamed response. The other pane remains stuck in a "waiting for response" state, and the stop button becomes unresponsive. Upon reloading the page, both panes display the exact same response (the one from the model that succeeded). The payload suggests that message_ids may collide because the model ID is used as the key. When the exact same model ID is specified for both panes, a key collision occurs, causing the latter message ID to overwrite the former. Consequently, the frontend loses track of one of the message streams. ### Steps to Reproduce 1. Start Open WebUI using the following Docker command: `sudo docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda` 2. Ensure you have a local Ollama model available (e.g., `gemma3:270m`). 3. Open "Open WebUI". 4. Select the **exact same model** for both panes (e.g., `gemma3:270m` and `gemma3:270m`). 5. Send a prompt (e.g., "hello"). 6. Observe that only one pane generates a response, while the other is stuck waiting. The stop button does not work. 7. Reload the page and observe that both panes now display the same text. 8. (Note: Using two distinct model IDs or calling a model individually works perfectly fine.) ### Logs & Screenshots Neither `docker logs -f open-webui` nor the browser console show explicit errors because this is a logical state management issue. However, the relevant evidence is in the `completions` POST request payload: ```json {"stream":true,"model":"gemma3:270m","params":{},"tool_servers":[],"features":{"voice":false,"image_generation":false,"code_interpreter":false,"web_search":false},"variables":{"{{USER_NAME}}":"User","{{USER_EMAIL}}":"*@*.*","{{USER_LOCATION}}":"Unknown","{{CURRENT_DATETIME}}":"2026-06-12 00:54:16","{{CURRENT_DATE
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#14531](https://github.com/open-webui/open-webui/issues/14531) **issue: Conversation with multiple models incorrectly reuses the context of only one model** *Very similar multi-model side-by-side context bug: only one model's conversation state is reused across all models. Your report is a more specific variant where identical model IDs collide in the message tracking map, leading to one stream being lost.* *by Jefferderp · `bug`* 2. 🟣 [#14973](https://github.com/open-webui/open-webui/issues/14973) **issue: Chat context is lost when multiple models are used simultaneously** *Re
💬 silentoplayz
This confirms an issue I ran into last night, but didn't think much of at the time. I also tested the described issue again and was able to reproduce it this time around. ## After waiting around 1 minute, but before a page refresh <img width="2013" height="952" alt="Image" src="https://github.com/user-attachments/assets/5614f2f9-ce75-42c8-aa72-ee43c5784d15" /> ## After refreshing the page <img width="2013" height="952" alt="Image" src="https://github.com/user-attachments/assets/3eb15acd-483a-4436-86a0-fde081649c55" />
💬 silentoplayz
Should be solved with https://github.com/open-webui/open-webui/pull/25987. Testing is wanted!
💡 痛点明确 → 可联系需求方
👤 Memory455  ·  💬 3  ·  👍 0  ·  👥 3  |  Pain 2 · Budget 0 · Urgency 2
productionfailsimmediatelybug
### 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 …
展开全文 · 3 条评论
### 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.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Windows 11、macOS Tahoe ### Browser (if applicable) _No response_ ### 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 Open WebUI should handle the Bearer token consistently across all Open Terminal features. If the Bearer token contains accidental leading or trailing whitespace, Open WebUI should either: 1. Trim the whitespace before saving or using the token, or 2. Reject the configuration and show a clear validation warning, such as: `Bearer token contains leading or trailing whitespace`. The connection test, file listing, AI/tool calls, and interactive terminal should all behave consistently. If the token is accepted by the connection test and file listing, the interactive terminal should also work. If the token is invalid due to whitespace, the issue should be detected during configuration or connection testing. ### Actual Behavior When the Bearer token has one trailing space at the end, most Open Terminal-related features still work: * The connection test passes. * The Files page can successfully list files from Open Terminal. * AI/tool calls using Open Terminal also work normally. However, when opening the Files page and expanding the Terminal option to start an interactive terminal session, the terminal immediately fails with: ```text [Connection closed] ``` This behavior is confusing because the same configuration appears valid in other parts of Open WebUI, but only the interactive terminal fails. ### Steps to Reproduce 1. Configure Open-Terminal in Open-WebUI. 2. Enter a valid Bearer token, but accidentally add one trailing space at the end. * Example: `your-secret-key ` 3. Save the Open-Terminal configuration. 4. Run the connection test. 5. Observe that the connection test passes. 6. Open the Files page in Open-WebUI. 7. Confirm that files from Open-Terminal can be listed successfully. 8. Confirm that AI/tool calls using Open-Terminal work normally. 9. In the `Files` page, expand the `Terminal` option to start an interactive terminal session. 10. Observe that the terminal immediately fails with: ```text [Connection closed] ``` 11. Remove the trailing space from the Bearer token and save the configuration again. 12. Reopen the interactive terminal. 13. Observe that the terminal works normally after the trailing space is removed. ### Logs & Screenshots <img wi
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22581](https://github.com/open-webui/open-webui/issues/22581) **issue: WebSocket uses ws:// instead of wss:// when Open WebUI is served over HTTPS (Open Terminal Container)** *This is the closest terminal-specific connection failure issue. It also affects the interactive terminal session and results in a connection failure, though the root cause here is insecure WebSocket protocol rather than token whitespace.* *by ieQ-strecker · `bug`* 2. 🟣 [#22124](https://github.com/open-webui/open-webui/issues/22124) **bug: Terminal tool: null "wait" parameter sent as string "None", causing 4
💬 silentoplayz
I am able to reproduce this issue on the latest `dev` commit and can confirm its existence.
💬 Classic298
https://github.com/open-webui/open-webui/pull/25686
💡 痛点明确 → 可联系需求方
👤 vzd3v  ·  💬 3  ·  👍 0  ·  👥 2  |  Pain 3 · Budget 0 · Urgency 1
blockedproductionstuckbug
### Summary Uploading a `.pptx` (or any other format that goes through `UnstructuredPowerPointLoader`-like loaders) to a freshly built/recreated `open-webui` container leaves the file stuck at `status=pending` forever. Knowledge-base ingestion silently never advances. Chat works, embeddings work, b…
展开全文 · 3 条评论
### Summary Uploading a `.pptx` (or any other format that goes through `UnstructuredPowerPointLoader`-like loaders) to a freshly built/recreated `open-webui` container leaves the file stuck at `status=pending` forever. Knowledge-base ingestion silently never advances. Chat works, embeddings work, but RAG document processing is blocked end-to-end. ### Root cause `unstructured==0.18.31` + `nltk==3.9.3` (both pinned in `backend/requirements.txt` on `main`, `v0.9.1`, and `v0.9.2`) require the language-tagged NLTK resource `averaged_perceptron_tagger_eng` for sentence/POS tagging in PPTX/Word partitioning. NLTK 3.9.x renamed several taggers to add an `_eng` suffix. The Dockerfile (and `backend/start.sh`) bundles only `punkt_tab`: ```dockerfile python -c "import nltk; nltk.download('punkt_tab')" ``` `averaged_perceptron_tagger_eng` is never pre-downloaded. On first PPTX upload after a fresh `docker compose up --force-recreate` (or a clean image pull), `unstructured` raises: ``` LookupError: Resource 'averaged_perceptron_tagger_eng' not found. Please use the NLTK Downloader to obtain the resource: >>> import nltk >>> nltk.download('averaged_perceptron_tagger_eng') ``` Confirmed by direct probe inside the container: ```python from langchain_community.document_loaders import UnstructuredPowerPointLoader UnstructuredPowerPointLoader('/path/to/file.pptx').load() # -> LookupError: Resource 'averaged_perceptron_tagger_eng' not found. ``` After `python -c "import nltk; nltk.download('averaged_perceptron_tagger_eng', download_dir='/root/nltk_data')"`, the same probe succeeds in ~1.5s and any subsequent file upload completes within seconds. ### Why it appears as 'pending' rather than 'failed' The exception path in `process_uploaded_file` is supposed to set `status='failed'` with the error string, but in practice the file row stays at `status='pending'` (no `failed`, no `completed`, no log line at WARN/ERROR), making this look like a silent hang rather than a deterministic failure. The frontend SSE on `/api/v1/files/{id}/process/status?stream=true` keeps spinning. Worth a separate look on its own — the exception is being swallowed somewhere in the BackgroundTask/asyncio chain. Reproduces with both `process_in_background=true` and inline. ### Reproduction 1. Pull `ghcr.io/open-webui/open-webui:v0.9.2` (or `v0.9.1`, identical packages). 2. Start fresh, configure any embedding backend. 3. Upload any `.pptx` (e.g. via Knowledge → Upload). 4. File row stays at `data->>'status' = 'pending'` indefinitely. No log lines mentioning the file ID after the initial `POST /api/v1/files/?process=true HTTP/1.1 200`. Probe to confirm root cause: ```bash docker exec -it open-webui-app python3 -c " from langchain_community.document_loaders import UnstructuredPowerPointLoader import glob p = glob.glob('/app/backend/data/uploads/*.pptx')[0] UnstructuredPowerPointLoader(p).load() " ``` ### Proposed fix Two parts: 1. **Bundle the missing NLTK resource alongside `punkt_tab`.** Mirror the existing pattern in both Dockerfile branches (`USE_CUDA=true` and `else`) and in `backend/start.sh` / `backend/start_windows.bat`: ```dockerfile python -c "import nltk; nltk.download('punkt_tab'); nltk.download('averaged_perceptron_tagger_eng')" ``` Keeps the airgapped-friendliness improvement from #21165 consistent across the resources `unstructured` 0.18.x actually needs. 2. **Surface the failure.** Make sure the `process_uploaded_file` exception path actually transitions `data->>'status'` to `failed` with the original error string in `data->>'error'` so the UI shows a clear error instead of an infinite spinner. Today the SSE polls `data->>'status'` and never sees a terminal state. Happy to put up a PR for (1) — it's a 3-character diff. ### Environment - Open WebUI: `v0.9.2` (and `v0.9.1`, same deps) - `unstructured`: `0.18.31` - `nltk`: `3.9.3` - Vector store: `pgvector` 0.8.2 - Embedding engine: `openai`-compatible (LiteLLM → GigaChat)
💬 owui-terminator[bot]
🔍 **Similar Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. [#20107](https://github.com/open-webui/open-webui/issues/20107) **issue:PPTX not parsed correctly in temporary chat** *by mengdeer589 · `bug`* 2. [#16260](https://github.com/open-webui/open-webui/issues/16260) **feat: nltk_data taggers and tokenizers to docker image** *by artokarj* 3. [#17594](https://github.com/open-webui/open-webui/issues/17594) **issue: Dragging .xlsx file into open-webui triggers punkt_tab not found error** *by peuportier · `bug`* 4. [#16158](https://github.com/open-webui/open-webui/issues/16158) **issue: Processing does not continue after open_webui.retrieval.utils:generate_openai_batch_embeddings cal
💬 vzd3v
Putting up a tightly-scoped fix as #24396 (mirrors #21165 in scope). The status='pending' / silent-swallow part of the symptom is left for a separate fix.
💬 vzd3v
PR moved to #24396 — added the required PR-template sections and CLA confirmation that auto-closed #24395. (Earlier #24394 was auto-closed for targeting main.)
💡 痛点明确 → 可联系需求方
👤 angpao  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 3 · Budget 0 · Urgency 1
cannotproductioncrashbug
### 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 …
展开全文 · 2 条评论
### 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 Git Clone ### Open WebUI Version v0.9.6 (latest) ### Ollama Version (if applicable) _No response_ ### Operating System portainer ### Browser (if applicable) _No response_ ### 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 cannot reshape array of size 275532 into shape (1752,1240,newaxis) ### Actual Behavior cannot reshape array of size 275532 into shape (1752,1240,newaxis) ### Steps to Reproduce cannot reshape array of size 275532 into shape (1752,1240,newaxis) ### Logs & Screenshots cannot reshape array of size 275532 into shape (1752,1240,newaxis) ### Additional Information cannot reshape array of size 275532 into shape (1752,1240,newaxis)
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#8856](https://github.com/open-webui/open-webui/issues/8856) **PDF Upload - cannot reshape array of size #X into shape** *This matches the same PDF knowledge-upload crash with the exact error signature, caused by image extraction during PDF parsing. The reported reshape failure and knowledge-base context are directly aligned with the new issue.* *by BloodBlight* 2. 🟣 [#24321](https://github.com/open-webui/open-webui/issues/24321) **issue: PDF in Knowledge garbled** *This is about PDFs in the Knowledge tab and indicates the same document-processing path is producing incorrect P
💬 silentoplayz
Many people have provided a possible working solution in an existing discussion post. See https://github.com/open-webui/open-webui/discussions/8877
💡 痛点明确 → 可联系需求方
👤 reachlanroycorte-byte  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 3 · Budget 0 · Urgency 1
not workingproductionno longerbug
### 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 …
展开全文 · 2 条评论
### 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 Git Clone ### Open WebUI Version v0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 24.04 ### Browser (if applicable) _No response_ ### 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 Send Authorization: Bearer header with a Token ### Actual Behavior NO header seen ### Steps to Reproduce Bring up a OpenWebUI container with below environment Settings. MICROSOFT_CLIENT_ID=xxxx MICROSOFT_CLIENT_SECRET=yyyy MICROSOFT_CLIENT_TENANT_ID=zzzz MICROSOFT_REDIRECT_URI=https://openweb.example.com/oauth/microsoft/callback MICROSOFT_OAUTH_SCOPE=openid email profile offline_access OPENID_PROVIDER_URL=https://login.microsoftonline.com/zzzz/v2.0/.well-known/openid-configuration ENABLE_OAUTH_GROUP_MANAGEMENT=true ENABLE_FORWARD_OAUTH_TOKEN=True ENABLE_OAUTH_SIGNUP=true ENABLE_FORWARD_USER_INFO_HEADERS=true FORWARD_USER_INFO_HEADER_USER_ID=X-User-Id USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36 ### Logs & Screenshots <img width="1202" height="773" alt="Image" src="https://github.com/user-attachments/assets/52a76187-7d42-42d4-aa24-bd62ea549188" /> ### Additional Information Even the User-Agent Header setting of Variable is not working as expected.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#23463](https://github.com/open-webui/open-webui/issues/23463) **issue: v0.8.11/12, connection OAuth Authorization header no longer sent to model backend. undeclared cookie_expires var** *This is the closest match: it reports that after upgrading to v0.8.11/0.8.12 the OAuth Authorization header stopped being forwarded to the model backend. The new issue describes the same symptom, just with Microsoft Entra ID and `ENABLE_FORWARD_OAUTH_TOKEN`.* *by bitsofinfo · `bug`* 2. 🟣 [#23074](https://github.com/open-webui/open-webui/issues/23074) **issue: v0.8.11 - OpenAI Responses API - oAut
💬 reachlanroycorte-byte
<img width="1634" height="807" alt="Image" src="https://github.com/user-attachments/assets/ba20183e-2c46-4d53-b840-710d0380515d" />
💡 痛点明确 → 可联系需求方
👤 sichunqin  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 3 · Budget 0 · Urgency 1
regressionfailsfailingbug
## Bug Description When `RAG_EMBEDDING_ENGINE=""` and `RAG_EMBEDDING_MODEL=""` are set (disabling RAG embeddings), uploading files with `.diff` extension causes an `AttributeError: 'NoneType' object has no attribute 'encode'` error. The error occurs at `/app/backend/open_webui/retrieval/utils.py` …
展开全文 · 2 条评论
## Bug Description When `RAG_EMBEDDING_ENGINE=""` and `RAG_EMBEDDING_MODEL=""` are set (disabling RAG embeddings), uploading files with `.diff` extension causes an `AttributeError: 'NoneType' object has no attribute 'encode'` error. The error occurs at `/app/backend/open_webui/retrieval/utils.py` line 839: ```python lambda query, prefix=None: embedding_function.encode( query, batch_size=int(embedding_batch_size), **({"prompt": prefix} if prefix else {}), ).tolist() ``` When `embedding_function` is `None`, calling `.encode()` raises `AttributeError`. ## Steps to Reproduce 1. Set environment variables: ```bash RAG_EMBEDDING_ENGINE="" RAG_EMBEDDING_MODEL="" ``` 2. Start Open-WebUI with these environment variables 3. Upload a `.diff` file (or any file that triggers RAG processing) 4. Observe the error in logs: ``` AttributeError: 'NoneType' object has no attribute 'encode' ``` ## Root Cause The `get_embedding_function` function doesn't handle the case where `embedding_function` parameter is `None`. When RAG is disabled via empty environment variables, `embedding_function` becomes `None`. ## Proposed Fix Add a check for `embedding_function is None` before calling `.encode()`: ```diff --- backend/open_webui/retrieval/utils.py.orig +++ backend/open_webui/retrieval/utils.py.fixed @@ -839,9 +839,9 @@ ( lambda query, prefix=None: embedding_function.encode( query, batch_size=int(embedding_batch_size), **({"prompt": prefix} if prefix else {}), - ).tolist() + ).tolist() if embedding_function is not None else [] ), query, prefix, ) ``` This fix returns an empty list when `embedding_function` is `None`, preventing the `AttributeError`. ## Impact - **Files affected**: `backend/open_webui/retrieval/utils.py` - **Users affected**: Anyone running Open-WebUI with RAG disabled (empty embedding config) - **Severity**: Medium - prevents file uploads when RAG is disabled ## Additional Context This bug was discovered while testing file uploads with custom LLM providers. The user had embedding disabled but still wanted to upload `.diff` files for patch review functionality.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#20732](https://github.com/open-webui/open-webui/issues/20732) **issue: NoneType has no attribute 'encode'** *This is the closest prior report of the same runtime error: `'NoneType' object has no attribute 'encode'` during document/file upload and RAG processing. The new issue differs in trigger conditions, but the underlying failure mode is the same missing-None handling in the embedding path.* *by kmeliksetian · `bug`* 2. 🟣 [#15535](https://github.com/open-webui/open-webui/issues/15535) **issue: Plain text file upload to knowledge fails with 400: 'NoneType' object has no attribu
💬 Classic298
https://github.com/open-webui/open-webui/pull/25683
💡 痛点明确 → 可联系需求方
👤 shaun0927  ·  💬 1  ·  👍 1  ·  👥 1  |  Pain 3 · Budget 0 · Urgency 1
productionregressionfailsbug
### 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 exact duplicate. - [x] I am using the latest version of Open…
展开全文 · 1 条评论
### 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 exact duplicate. - [x] I am using the latest version of Open WebUI. ### Installation Method Git Clone ### Open WebUI Version latest `main` as of 2026-04-16 (latest release also checked: `v0.8.12`) ### Ollama Version (if applicable) _No response_ ### Operating System macOS Sequoia ### Browser (if applicable) _No response_ ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of Open WebUI. - [x] I have provided a deterministic local reproduction of the affected code path. - [x] I have included the relevant code path, expected behavior, actual behavior, and exact reproduction steps. ### Expected Behavior Updating a file's content should not leave any knowledge collection in a worse state than before. If the KB reindex step fails after the file content has been updated, Open WebUI should either: - preserve the old KB vectors, or - fail the request before destructive cleanup happens. ### Actual Behavior `/files/{id}/data/content/update` currently deletes the old KB vectors first and only then tries to rebuild them. If the rebuild fails, the exception is reduced to a warning and the route still returns success. That can leave the knowledge collection without any vectors for that file. This is different from `#20558`: - `#20558` = stale old embeddings remained after edits - this report = the old embeddings are deleted, the rebuild fails, and the route still succeeds ### Steps to Reproduce The current `main` code in `backend/open_webui/routers/files.py` does this during content updates: 1. update the file content via `process_file(..., content=...)` 2. for each knowledge collection referencing the file: - `delete(... filter={'file_id': id})` - `process_file(..., collection_name=knowledge.id)` 3. if step 2b fails, only log a warning and continue A deterministic local reproduction is: ```python from dataclasses import dataclass kb_vectors = {'kb-1': [{'file_id': 'file-1', 'chunk': 'OLD EMBEDDING'}]} @dataclass class Knowledge: id: str class VECTOR_DB_CLIENT: @staticmethod def delete(collection_name, filter): kb_vectors[collection_name] = [ v for v in kb_vectors.get(collection_name, []) if v.get('file_id') != filter['file_id'] ] class ProcessFileForm: def __init__(self, file_id, collection_name=None): self.file_id = file_id self.collection_name = collection_name def process_file(request, form, user, db=None): if form.collection_name: raise RuntimeError('reindex failed') for knowledge in [Knowledge(id='kb-1')]: try: VECTOR_DB_CLIENT.delete(collection_name=knowledge.id, filter={'file_id': 'file-1'}) process_file(None, ProcessFileForm(file_id='file-1', collection_name=knowledge.id), user=None) except Exception as e: print('swallowed knowledge reindex failure:', e) print('remaining_vectors =', kb_vectors['kb-1']) ``` Actual output: ```text swallowed knowledge reindex failure: reindex failed remaining_vectors = [] ``` The route-level call sequence is effectively: ```text process_file(file-1, content='NEW') delete(kb-1, {'file_id': 'file-1'}) process_file(file-1, collection_name='kb-1') # fails return {'content': 'NEW'} ``` ### Logs & Screenshots Relevant current code path (`backend/open_webui/routers/files.py`): ```python await ASYNC_VECTOR_DB_CLIENT.delete(collection_name=knowledge.id, filter={'file_id': id}) await process_file( request, ProcessFileForm(file_id=id, collection_name=knowledge.id), user=user, db=db, ) ``` and on failure: ```python log.warning(f'Failed to update knowledge {knowledge.id} after content change for file {id}: {e}') ``` ### Additional Informa
💬 shaun0927
I opened a narrow fix PR for this report: #23789. The PR preserves the old KB vector ids until the replacement reindex succeeds and includes a focused regression test.
💡 痛点明确 → 可联系需求方
👤 bwgabrielsusai  ·  💬 2  ·  👍 1  ·  👥 1  |  Pain 2 · Budget 0 · Urgency 1
blockedproductionbug
### 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 …
展开全文 · 2 条评论
### 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 Git Clone ### Open WebUI Version 0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Windows 10 ### Browser (if applicable) _No response_ ### 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 ### Description When an admin disables chat deletion for users (`chat.delete` permission set to `false`), the restriction is correctly enforced when: - A user tries to delete an individual chat - A user tries to delete a folder that **directly contains** chat conversations However, the restriction is **NOT enforced** when a user deletes a **parent/master folder** that contains no direct chats but has **subfolders with chat conversations inside them**. The parent folder is deleted successfully, which cascades and deletes all subfolders and their chats — effectively bypassing the permission entirely. --- ### Expected Behavior Deleting the Master Folder should be blocked if **any descendant subfolder** contains chats that the user does not have permission to delete. ### Actual Behavior Deleting the Master Folder succeeds and cascades — silently deleting all subfolders and their chat conversations, bypassing the `chat.delete` permission check. ### Steps to Reproduce ### Steps to Reproduce 1. As an admin, disable chat deletion for users (`Admin Panel → Users → Permissions → Allow Chat Deletion = false`) 2. Log in as a regular (non-admin) user 3. Create a **Master Folder** in the sidebar 4. Inside the Master Folder, create a **Subfolder** 5. Inside the Subfolder, start one or more chat conversations 6. Attempt to delete the **Subfolder** → ✅ Correctly blocked with permission error 7. Attempt to delete the **Master Folder** (which has no direct chats) → ❌ **Deletion succeeds**, wiping out the Subfolder and all its chats --- ### Logs & Screenshots ### Root Cause In `backend/open_webui/routers/folders.py`, the `delete_folder_by_id` endpoint checks for chats only in the **top-level folder** being deleted: ```python # Current (buggy) code if await Chats.count_chats_by_folder_id_and_user_id(id, user.id, db=db): chat_delete_permission = await has_permission( user.id, 'chat.delete', request.app.state.config.USER_PERMISSIONS, db=db ) if user.role != 'admin' and not chat_delete_permission: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACCESS_PROHIBITED, ) ``` When the master folder ha
💬 silentoplayz
I was able to reproduce this issue on the latest `dev` as described and am working to submit a fix PR for this issue. Testing is welcome once I have it submitted!
💬 silentoplayz
https://github.com/open-webui/open-webui/pull/25930
💡 痛点明确 → 可联系需求方
👤 AZComputerSolutions  ·  💬 3  ·  👍 0  ·  👥 1  |  Pain 3 · Budget 0 · Urgency 0
does not workmanuallyfails
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 3 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description when scrolling a lot of return token information from AI if I need to scroll all the way to the top or somewhere inbetween there is no scroll bar. You have to move over to the text and use the scroll wheel which does not work very well. ### Proposed Solution It would be easier to use if there was a scroll bar as I often scroll up and down the next to copy stuff out of it and its really hard to do that if there is no scroll bar as I need to manually use the scroll which and a lot of time to scroll to the top of a large amount of return text. ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @AZComputerSolutions, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
# ⚠️ Invalid Issue Title @AZComputerSolutions, your issue title is too short, too few words, or a generic placeholder — it doesn't tell maintainers what's actually being reported or requested. Please update the title to be **at least 10 characters and 2 words**, and to describe the actual issue. Bare placeholders like `bug`, `feat:`, or `issue` make triage difficult and slow down everyone. Example: `bug: Login fails when password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#17215](https://github.com/open-webui/open-webui/issues/17215) **issue: No Scrollbar Visible on Chat Window (Up-Down)** *This is the closest match: it reports that the chat window scrollbar disappears/inconsistently appears and explicitly asks for a visible up/down scrollbar when interacting with long chat content.* *by bernd-sprenger · `bug`* 2. 🟣 [#11782](https://github.com/open-webui/open-webui/issues/11782) **feat: Improve scrollbar** *This issue requests improving the scrollbar because it is too thin, low-contrast, and disappears outside the window. It overlaps strongly wi
💡 痛点明确 → 可联系需求方
👤 roller100  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 3 · Budget 0 · Urgency 0
brokencrashworkaround
### 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. - [x] I am using the latest version of Open W…
展开全文 · 2 条评论
### 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. - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.9.6 (also present on `main` as of 2026-06-02) ### Operating System Linux (Docker) ### Description `POST /api/v1/configs/tool_servers` returns **500 Internal Server Error** when any MCP-type connection in the saved config has `info: null`. This is a Python dict-default footgun: `dict.get(key, default)` returns `None` — not the default — when the key is *present* with value `None`. ### Root Cause `ToolServerConnection.model_dump()` serialises `info=None` as `{"info": None, ...}` (the key is *present*). Two places in `set_tool_servers_config` then do: ```python server_id = connection.get('info', {}).get('id') # ^^^ # When info is None (explicitly stored), .get('info', {}) returns None — not {} # → AttributeError: 'NoneType' object has no attribute 'get' ``` **Occurrence 1** (`configs.py` ~line 187) — cleanup loop over *old* connections: ```python for connection in request.app.state.config.TOOL_SERVER_CONNECTIONS: server_type = connection.get('type', 'openapi') auth_type = connection.get('auth_type', 'none') if auth_type in ('oauth_2.1', 'oauth_2.1_static'): server_id = connection.get('info', {}).get('id') # ← crashes when info is None ``` **Occurrence 2** (`configs.py` ~line 205) — registration loop over *new* connections: ```python for connection in request.app.state.config.TOOL_SERVER_CONNECTIONS: server_type = connection.get('type', 'openapi') if server_type == 'mcp': server_id = connection.get('info', {}).get('id') # ← crashes when info is None ``` ### Steps to Reproduce ```bash # 1. POST an MCP connection leaving info absent (defaults to None via model_dump) curl -X POST http://localhost:8080/api/v1/configs/tool_servers \ -H "Authorization: Bearer <admin-key>" \ -H "Content-Type: application/json" \ -d '{ "TOOL_SERVER_CONNECTIONS": [{ "url": "http://my-mcp-server:8000", "path": "/mcp", "type": "mcp", "auth_type": "none", "headers": null, "key": null, "config": null, "info": null }] }' # → 200 OK (the connections are saved) # 2. POST again (any update) — now the saved connection has info: null curl -X POST http://localhost:8080/api/v1/configs/tool_servers \ -H "Authorization: Bearer <admin-key>" \ -H "Content-Type: application/json" \ -d '{"TOOL_SERVER_CONNECTIONS": []}' # → 500 Internal Server Error ``` Server log: ``` AttributeError: 'NoneType' object has no attribute 'get' File ".../routers/configs.py", line 205, in set_tool_servers_config server_id = connection.get('info', {}).get('id') ``` ### Fix Replace both occurrences with a null-safe pattern: ```python # Before (both occurrences): server_id = connection.get('info', {}).get('id') # After: server_id = (connection.get('info') or {}).get('id') ``` This handles all three cases correctly: - key absent → `None or {}` → `{}` - key present, value `None` → `None or {}` → `{}` - key present, value `{}` or a populated dict → passes through ### Additional Notes - The `ToolServerConnection` model declares `info: dict | None = None`, so `None` is a valid value per the schema and `model_dump()` will produce it whenever callers omit `info` or set it explicitly to `None`. - Occurrence 1 only fires when an existing connection has `auth_type: "oauth_2.1"` or `"oauth_2.1_static"` and `info: null`. Occurrence 2 fires for any `type: "mcp"` connection with `info: null`. - **Workaround**: always include `"info": {"id": "..."}` in the payload — the `200` path works correctly.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#21600](https://github.com/open-webui/open-webui/issues/21600) **issue: Previously Configured Tool Servers via UI Break When TOOL_SERVER_CONNECTIONS Is Introduced or Empty** *This issue is about tool server configuration migration and crashes when existing stored tool server data is empty or missing required structure. It is the closest match to a server-side failure in the tool server config path, though the specific trigger here is `info: null` rather than old UI-stored records.* *by BernhardtMilan · `bug`* 2. 🟣 [#22490](https://github.com/open-webui/open-webui/issues/22490) **i
💬 roller100
The bot flagged #21600 and #22490 as potentially related — neither is a duplicate: - **#21600** — `IndexError` in `routers/tools.py` during a UI→env-var migration (v0.8.3). Different file, different error type, different root cause. - **#22490** — `IndexError` on the `TOOL_SERVER_CONNECTIONS` list after an upgrade (v0.8.10). Again a different file and a different root cause. This issue is specific to `routers/configs.py` in the 0.9.x MCP handler: `ToolServerConnection.model_dump()` serialises `info=None` as `{"info": None, ...}` (key present, value null), after which `connection.get('info', {})` returns `None` instead of `{}`, crashing `.get('id')` on the next call. The fix is isolated to two lines in `set_tool_servers_config`.
💡 痛点明确 → 可联系需求方
👤 Nexory  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 2 · Budget 0 · Urgency 1
cannotstuckbug
## Summary `chatCompletedHandler` is invoked fire-and-forget (no `await`) at line 1883. Inside it, after an `await getChatList(...)` call at line 1536, it unconditionally executes `taskIds = null` (line 1538). Because the handler yields at that `await`, a concurrent `sendMessage` call can resolve i…
展开全文 · 2 条评论
## Summary `chatCompletedHandler` is invoked fire-and-forget (no `await`) at line 1883. Inside it, after an `await getChatList(...)` call at line 1536, it unconditionally executes `taskIds = null` (line 1538). Because the handler yields at that `await`, a concurrent `sendMessage` call can resolve its own network request in the meantime and assign fresh task IDs to `taskIds` (lines 2500-2504). When `chatCompletedHandler` then resumes, it wipes those freshly written task IDs. The result is that `stopResponse()` (line 2579) iterates an empty/null list and the stop-generation UI binding (`{taskIds}` at line 3099) renders as inactive, so in-flight background tasks (title generation, follow-ups, tags) cannot be cancelled by the user. ## What I observed Relevant code in `src/lib/components/chat/Chat.svelte`: ```svelte // L1531-1538 — chatCompletedHandler clears taskIds unconditionally const chatCompletedHandler = async (_chatId, modelId, responseMessageId, messages) => { if ($chatId == _chatId && !$temporaryChatEnabled) { currentChatPage.set(1); await chats.set(await getChatList(localStorage.token, $currentChatPage)); // <-- yields here } taskIds = null; // <-- resumes here, overwrites any concurrent assignment }; // L1880-1891 — fire-and-forget call site (no await) chatCompletedHandler( chatId, message.model, message.id, createMessagesList(history, message.id) ); await processNextInQueue(chatId); // sendMessage may run concurrently // L2499-2505 — sendMessage assigns taskIds after its own await const newTaskIds = res.task_ids ?? (res.task_id ? [res.task_id] : []); if (taskIds) { taskIds.push(...newTaskIds); } else { taskIds = newTaskIds; // <-- written while chatCompletedHandler is suspended at getChatList } ``` **Race sequence:** 1. Response stream for message N finishes; `chatCompletedHandler` is dispatched fire-and-forget and suspends at `await getChatList(...)`. 2. User sends message N+1 (or the queue processes the next request via `processNextInQueue`); `sendMessage` issues its HTTP request and awaits the response. 3. While `chatCompletedHandler` is still suspended, `sendMessage`'s `await` resolves; `taskIds` is `null` at that point so the `else` branch at L2504 fires: `taskIds = newTaskIds`. 4. `chatCompletedHandler` resumes and executes `taskIds = null`, erasing the IDs just set. 5. `stopResponse()` reads `if (taskIds)` as falsy; no stop calls are issued; the UI stop button disappears. The partial fix in open PR #22146 adds a `get(chatId) !== _chatId` guard before `taskIds = null`, which prevents the stale-navigation variant of this race (user navigates away) but does not prevent the same-chat interleaved race described above, because `_chatId === $chatId` holds true for in-progress messages in the same conversation. ## Suggested fix Replace the unconditional `taskIds = null` in `chatCompletedHandler` with a generation-stamp or sequence-number guard so the handler only clears `taskIds` when no newer `sendMessage` has started since the handler was invoked: ```svelte // Option A: capture taskIds reference at dispatch time and only null if unchanged const chatCompletedHandler = async (_chatId, modelId, responseMessageId, messages) => { const capturedTaskIds = taskIds; // snapshot before first await if ($chatId == _chatId && !$temporaryChatEnabled) { currentChatPage.set(1); await chats.set(await getChatList(localStorage.token, $currentChatPage)); } // Only clear if sendMessage hasn't assigned new task IDs since we were dispatched if (taskIds === capturedTaskIds) { taskIds = null; } }; ``` Alternatively, introduce a monotonic `sendGeneration` counter incremented at the start of each `sendMessage` call and captured in `chatCompletedHandler` at dispatch time; only null `taskIds` if `sendGeneration === capturedGeneration`.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#23181](https://github.com/open-webui/open-webui/issues/23181) **issue: Switching conversations while message queue is processing causes messages to be sent in bulk and race condition issues** *This report is about queue processing and race conditions when switching conversations while messages are still being processed. It is not the same exact taskIds-clearing bug, but it is closely related to concurrent send/queue state corruption in the chat component.* *by ShirasawaSama · `bug`* 2. 🟣 [#20018](https://github.com/open-webui/open-webui/issues/20018) **issue: Generation cant stop
💬 Classic298
https://github.com/open-webui/open-webui/pull/25687
💡 痛点明确 → 可联系需求方
👤 riljian  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 1 · Budget 1 · Urgency 1
productionclientsbug
### 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 …
展开全文 · 1 条评论
### 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.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System macOS Tahoe ### Browser (if applicable) _No response_ ### 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 When Open WebUI registers a client via **RFC 7591 Dynamic Client Registration (DCR)** for an MCP / OAuth 2.1 tool server, the `scope` it sends in the registration request should be derived from the **resource's** advertised scopes, following the principle of least privilege: 1. the `scope` value from the `WWW-Authenticate` 401 challenge, if present; otherwise 2. the **Protected Resource Metadata** (`/.well-known/oauth-protected-resource`, RFC 9728 §2) `scopes_supported` — i.e. the scopes specific to *this* protected resource. This matches the MCP Authorization spec's [Scope Selection Strategy](https://modelcontextprotocol.io/specification/draft/basic/authorization#scope-selection-strategy) and is exactly the source already adopted for the **static-credentials** flow in **PR #24690** ("use Protected Resource Metadata scopes in static OAuth 2.1 flow", merged in v0.9.6, closing #24730 / relating to #23668). ### Actual Behavior The **DCR flow** still seeds the registration `scope` from the **Authorization Server Metadata** `scopes_supported` — the full catalog of every scope the AS can grant across **all** resources it protects — not from the Protected Resource Metadata. In `backend/open_webui/utils/oauth.py`, `get_oauth_client_info_with_dynamic_client_registration()` fetches the PRM but **ignores** `resource_metadata.scopes_supported`, and instead does (current `main`, commit `f2e1aa1`, ~L448–452): ```python resource_metadata = await get_protected_resource_metadata(oauth_server_url) # PRM fetched... resource = resource_metadata.resource discovery_urls = resource_metadata.get_discovery_urls(oauth_server_url) for url in discovery_urls: ... oauth_server_metadata = OAuthMetadata.model_validate(await ...json()) ... if ( oauth_client_metadata.scope is None and oauth_server_metadata.scopes_supported is not None # <-- AS catalog ): oauth_client_metadata.scope = ' '.join(oauth_server_metadata.scopes_supported) ``` `resource_metadata.scopes_supported` (PRM) is never consulted here. The space-joined AS `scopes_supported` is then serialized into the registration POST body (`model_dump(...)` → `session.post(registration_url, json=registr
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#23668](https://github.com/open-webui/open-webui/issues/23668) **Bug: admin-configured scopes overridden by discovered scopes_supported in static-credential OAuth flow** *This is the closest prior OAuth scope bug: it shows Open WebUI already incorrectly prefers discovered `scopes_supported` over the intended source in the static OAuth flow. The new issue is the same class of problem in the DCR flow, just with Protected Resource Metadata versus Authorization Server metadata.* *by dhruvalgupta2003* 2. 🟣 [#19794](https://github.com/open-webui/open-webui/issues/19794) **MCP OAuth 2.1:
💡 有付费/企业信号 → 评估咨询或付费机会
👤 FedeCuci  ·  💬 5  ·  👍 6  ·  👥 4  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched the existing issues and discussions. ### Problem Description Currently, there's no way to mark or save important information within chat conversations in Open WebUI. Often times I want to go back to a point in the chat where there was a useful piece…
展开全文 · 5 条评论
### Check Existing Issues - [x] I have searched the existing issues and discussions. ### Problem Description Currently, there's no way to mark or save important information within chat conversations in Open WebUI. Often times I want to go back to a point in the chat where there was a useful piece of information, but I don't remember exactly where it is. This makes knowledge retention and retrieval inefficient, especially for users who have many conversations or use the platform for learning or research. ### Desired Solution you'd like 1. Add text highlighting functionality that allows users to select and highlight important parts of any message 2. Automatic saving of these highlights to a user's profile/account 3. A dedicated "Highlights" tab that displays all highlights in chronological order 4. The ability to click on any highlight to jump back to its original conversation context 5. Search functionality that allows users to search through their highlights ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 tjbck
Great suggestion, taking a look.
💬 Classic298
great idea also consider being able to mark messages with a heart or star so you can easily find them in the message history or in this Highlights tab
💬 FedeCuci
Just wanted to gently bump this issue, hoping for an update if possible. I think it could really differentiate OWUI from other leading AI chat interfaces!
💬 FedeCuci
related discussion: #21423
💬 silentoplayz
Semi-related PR - https://github.com/open-webui/open-webui/pull/25178
💡 持续观察
👤 soonlaii-upskill  ·  💬 2  ·  👍 0  ·  👥 1  |  Pain 2 · Budget 0 · Urgency 1
manuallyfailsbug
## Description When a filter function's `outlet` hook converts a non-HTML code block (e.g. \`\`\`markdown) to \`\`\`html, the artifact panel does not automatically open on the right side. The user must manually click the code block to trigger it. For \`\`\`html blocks emitted directly by the LLM d…
展开全文 · 2 条评论
## Description When a filter function's `outlet` hook converts a non-HTML code block (e.g. \`\`\`markdown) to \`\`\`html, the artifact panel does not automatically open on the right side. The user must manually click the code block to trigger it. For \`\`\`html blocks emitted directly by the LLM during streaming, the panel auto-opens correctly. ## Steps to Reproduce 1. Create a filter function with an `outlet` hook that converts \`\`\`markdown blocks to \`\`\`html (e.g., a markdown-to-HTML document renderer) 2. Send a prompt that triggers the LLM to emit a \`\`\`markdown block 3. After streaming completes, the outlet converts it to \`\`\`html 4. The artifact panel does not open automatically — user must click the code block ## Expected Behavior The artifact panel should auto-open after the outlet converts the content to \`\`\`html, just like it does for \`\`\`html blocks emitted directly during streaming. ## Root Cause Analysis `ContentRenderer.svelte` (line ~247) has an `onUpdate` callback that calls `showArtifacts.set(true)` when the markdown renderer processes a code block with `lang="html"`. This fires correctly during the initial streaming render. However, when the outlet modifies the message content post-stream (converting \`\`\`markdown → \`\`\`html), the markdown renderer's `onUpdate` callback does not re-fire for the new \`\`\`html block. The Svelte reactive system updates the content, but the artifact detection logic in `onUpdate` is not re-triggered. ## Environment - Open WebUI version: 0.9.x (from upstream dev branch ~May 2026) - Browser: Chrome - Platform: macOS
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @soonlaii-upskill, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#14417](https://github.com/open-webui/open-webui/issues/14417) **issue: Artifact iframe doesn't open for javascript code blocks only** *This is the closest match: it reports that the artifact iframe does not auto-open for `javascript` code blocks while `html` does, which is the same auto-open detection path in `ContentRenderer.svelte`.* *by theimpostor · `bug`* 2. 🟢 [#24854](https://github.com/open-webui/open-webui/issues/24854) **bug: Filter outlet replacement content renders <details> as plain text instead of collapsible disclosure** *This involves a filter `outlet` replacing
💡 痛点明确 → 可联系需求方
👤 GaetanVDB07  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 2 · Budget 0 · Urgency 1
cannotproductionbug
### 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 …
展开全文 · 1 条评论
### 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.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 24.04.4 LTS ### Browser (if applicable) _No response_ ### 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 `SafePlaywrightURLLoader` should reliably clean up Playwright resources after each URL and after loader failures or cancellation. Specifically: - each `page` created by `browser.new_page()` should be closed in a per-URL `finally` block; - the connected or launched browser should be closed in an outer `finally` block; - cleanup should happen even when `page.goto()`, route handling, evaluator logic, cancellation, or `continue_on_failure=False` exits early. ### Actual Behavior In `backend/open_webui/retrieval/web/utils.py`, both `SafePlaywrightURLLoader.lazy_load()` and `SafePlaywrightURLLoader.alazy_load()` create a Playwright page per URL but do not close the page per URL. The browser is closed only after the URL loop completes normally. If execution exits early, cleanup can be skipped. During slow pages, bot-protection/challenge pages, route timeouts, or interrupted web searches, this can leave Playwright pages/sessions open longer than necessary and can accumulate resources on a remote Playwright server. Observed failure mode: - `WEB_LOADER_ENGINE=playwright` - `PLAYWRIGHT_WS_URL=ws://playwright:3002/` - web search triggered multiple Playwright route/navigation timeouts - Open WebUI logs showed repeated Playwright timeout exceptions - Open WebUI became degraded under load - restarting the Playwright service cleared the immediate issue ### Steps to Reproduce 1. Run Open WebUI with Docker. 2. Run a remote Playwright server. 3. Configure Open WebUI with: WEB_LOADER_ENGINE=playwright PLAYWRIGHT_WS_URL=ws://playwright:3002/ PLAYWRIGHT_TIMEOUT=15000 WEB_LOADER_CONCURRENT_REQUESTS=8 4. Enable web search. 5. Trigger web searches that include slow, bot-protected, redirect-heavy, or challenge pages. 6. Observe Open WebUI backend logs showing Playwright Page.goto, Route.fetch, or route continuation timeouts. 7. Observe that page.close() is not called per URL, and browser.close() is not protected by finally. ### Logs & Screenshots 2026-06-09T14:28:45.711113852Z ERROR open_webui.retrieval.web.utils:alazy_load:614 - Error loading https://www.outdoorxl.nl/crespo.html: Browser.new_page: Route.continue_: ... Route.fetch: Timeout 30000ms exceeded. Call log: - GET ht
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#11847](https://github.com/open-webui/open-webui/issues/11847) **issue: TypeError occurred During handling exceptions in SafePlaywrightURLLoader.alazy_load()** *This is the closest prior SafePlaywrightURLLoader bug and it also involves exceptions inside `alazy_load()`. It suggests the loader’s error-handling path has been fragile before, making it relevant to the current cleanup-on-failure problem.* *by genjuro214 · `bug`* 2. 🟣 [#16801](https://github.com/open-webui/open-webui/issues/16801) **issue: Playwright Timeout (ms) interpreted as seconds** *This issue is about Playwrigh
💡 痛点明确 → 可联系需求方
👤 liuhomefax-sketch  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 2 · Budget 0 · Urgency 1
workaroundfailsimmediately
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description When utilizing Open WebUI with fast local models (generating 40+ tokens per second on modern hardware), the chat interface aggressively auto-scrolls the viewport downward. If a user tries to focus and read an answer from the top while it is actively streaming, the layout constantly jumps, causing severe eye strain. Currently, the only workaround is a manual user gesture: flicking the mouse wheel upward the millisecond text generation begins to force-trigger the internal scroll lock. ### Proposed Solution We should implement a more stable reading view modeled after Google Gemini's user interface: 1 Native Scroll Anchoring: Utilize robust CSS scroll anchoring (⁠overflow-anchor: auto⁠) on the chat container. This ensures that when new tokens stream in off-screen below the current viewport, the text the user is actively reading remains completely locked, solid, and motionless. 2 Strict Bottom-Pin Check: The JavaScript auto-scroll script (⁠scrollToBottom⁠) should only execute if the user's scrollbar is actively pinned to the absolute bottom pixel of the window. If the user has scrolled up even a fraction, auto-scrolling should immediately stand down without requiring an aggressive user gesture to fight it. This enhancement would massively improve readability for power users running high-speed local workstations. Thank you for maintaining such an incredible project! ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#1195](https://github.com/open-webui/open-webui/issues/1195) **bug: auto scroll fails to stop with small scroll amounts** *Directly matches the core auto-scroll behavior problem: small upward scrolls fail to stop the streaming autoscroll, which is very close to the requested strict bottom-pin check.* *by fbirlik* 2. 🟣 [#19365](https://github.com/open-webui/open-webui/issues/19365) **feat: disable auto scroll** *This feature request is about disabling auto-scroll entirely for readability while responses generate. The new issue is a more refined version of the same concern, focus
💡 痛点明确 → 可联系需求方
👤 EntropyYue  ·  💬 2  ·  👍 1  ·  👥 2  |  Pain 1 · Budget 0 · Urgency 1
productionbug
### 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 …
展开全文 · 2 条评论
### 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 0.9.5 ### Ollama Version (if applicable) _No response_ ### Operating System Ununtu 22.04 ### Browser (if applicable) _No response_ ### 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 The notification for unread messages should not appear after the refresh. ### Actual Behavior Notice that the prompt will appear again after the refresh operation. ### Steps to Reproduce 1. Click on the new conversation button to send any prompts to the model. 2. After obtaining the complete output, click on the new conversation again. 3. Refresh the webpage 4. It can be observed that a "unread" notification appears next to the message created in step 1 in the side bar. ### Logs & Screenshots There are no issues with the log at all. ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22781](https://github.com/open-webui/open-webui/issues/22781) **issue: Thread Sidebar in Channel Remains Open After Message Deletion** *This is the closest sidebar/thread-related bug. It describes stale thread UI state persisting incorrectly after a message action, which is similar to unread state reappearing after refresh.* *by silentoplayz · `bug`, `confirmed issue`* 2. 🟣 [#23171](https://github.com/open-webui/open-webui/issues/23171) **Issue #23171** *This issue is about transient message state not being persisted correctly across refresh/switching chats, which matches the
💬 Classic298
https://github.com/open-webui/open-webui/pull/25782
💡 持续观察
👤 NatoBoram  ·  💬 0  ·  👍 0  ·  👥 0  |  Pain 2 · Budget 0 · Urgency 1
does not workproductionbug
### 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 …
展开全文
### 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.9.6 ### Ollama Version (if applicable) 0.30.7 ### Operating System Pop!_OS 24.04 LTS x86_64 ### Browser (if applicable) Firefox 153.0a1 ### 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 It should work. ### Actual Behavior ```log open-webui | 2026-06-12 12:24:03.704 | INFO | open_webui.retrieval.web.ollama:search_ollama_cloud:26 - Searching with Ollama for query: what is embeddinggemma open-webui | 2026-06-12 12:24:03.704 | INFO | open_webui.retrieval.web.ollama:search_ollama_cloud:26 - Searching with Ollama for query: gemma 4 model architecture details open-webui | 2026-06-12 12:24:03.705 | INFO | open_webui.retrieval.web.ollama:search_ollama_cloud:26 - Searching with Ollama for query: does gemma 4 use embeddinggemma open-webui | 2026-06-12 12:24:03.795 | ERROR | open_webui.retrieval.web.ollama:search_ollama_cloud:51 - Error searching Ollama: 401 Client Error: Unauthorized for url: https://ollama.com/api/web_search open-webui | 2026-06-12 12:24:03.796 | ERROR | open_webui.retrieval.web.ollama:search_ollama_cloud:51 - Error searching Ollama: 401 Client Error: Unauthorized for url: https://ollama.com/api/web_search open-webui | 2026-06-12 12:24:03.798 | ERROR | open_webui.retrieval.web.ollama:search_ollama_cloud:51 - Error searching Ollama: 401 Client Error: Unauthorized for url: https://ollama.com/api/web_search open-webui | 2026-06-12 12:24:03.798 | ERROR | open_webui.utils.middleware:chat_web_search_handler:1649 - 404: [ERROR: No results found from web search] ``` ### Steps to Reproduce 1. Configure Open-WebUI to use Ollama Cloud Web Search ```env ENABLE_WEB_SEARCH=true WEB_SEARCH_ENGINE=ollama_cloud OLLAMA_CLOUD_WEB_SEARCH_API_KEY= ``` 2. Ask a model to search something ### Logs & Screenshots ```log open-webui | 2026-06-12 12:24:03.704 | INFO | open_webui.retrieval.web.ollama:search_ollama_cloud:26 - Searching with Ollama for query: what is embeddinggemma open-webui | 2026-06-12 12:24:03.704 | INFO | open_webui.retrieval.web.ollama:search_ollama_cloud:26 - Searching with Ollama for query: gemma 4 model architecture details
💡 痛点明确 → 可联系需求方
👤 KastenMonster  ·  💬 1  ·  👍 3  ·  👥 1  |  Pain 1 · Budget 0 · Urgency 0
doesn't work
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description I don't know if this is a bug or rather a feature in terms of where to put this. Nevertheless, it's annoying at least for users. When you select a Tool that belongs to an mcp server Open WebUI correctly sends you to the providers page for oauth. The problem now is that upon authentication you're redirect back to Open WebUI with the default model selected. So when you trigger this flow with a non default Model you have to switch back to the original model to start your chat... This can be quit unintuitive for users as they expect to have the correct model selected. Steps to reproduce: - Have at least two models - Connect a mcp server via oauth 2.1 - select the non default model - enable the tool and complete the oauth ### Proposed Solution After redirecting back to Open WebUI the Model from which the OAuth flow was triggered should be selected again regardless of which is your default model ### Alternatives Considered As stated above i'm unsure if this intentional and therefore a feat or a bug that needs to be fixed. Regardless of that i don't have an alternative for now ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#17235](https://github.com/open-webui/open-webui/issues/17235) **issue: QueryParams (e.g. pre-selected model) gets lost after login via SSO (/auth/redirect endpoint)** *This is the closest match: it reports that a pre-selected model/query parameter is lost after an auth redirect and Open WebUI falls back to the default model. The new issue has the same underlying symptom, but specifically after an MCP OAuth redirect.* *by MaxStroh · `bug`* 2. 🟣 [#20847](https://github.com/open-webui/open-webui/issues/20847) **issue: MCP OAuth2.1 initial auth doesn't work when a tool is enabled by
💡 持续观察
👤 Mereep  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 1 · Budget 0 · Urgency 1
productionbug
### 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 …
展开全文 · 1 条评论
### 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 Git Clone ### Open WebUI Version v0.9.6 ### Ollama Version (if applicable) _No response_ ### Operating System MacOS ### Browser (if applicable) _No response_ ### 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 Bash `{,,}` (lower-case substitution) is not available in older bash version. As an older version is default-bundled with current MacOS this will prevent startup using `start.sh`. **Solution:** Lowercasing can be easily achieved using a cross-platform compatible helper as e.g., ```bash lowercase() { printf '%s' "$1" | tr '[:upper:]' '[:lower:]' } ``` and later be used like ```bash if [[ "$(lowercase "$WEB_LOADER_ENGINE")" == "playwright" ]]; then ``` ### Actual Behavior Program does not start ### Steps to Reproduce run `start.sh` on 3.X bash (e.g., bundled with MacOS) ### Logs & Screenshots `./start.sh: line 21: ${WEB_LOADER_ENGINE,,}: bad substitution` ### Additional Information _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#3259](https://github.com/open-webui/open-webui/issues/3259) **error during manual install: ${USE_OLLAMA_DOCKER,,}: bad substitution** *This is the clearest match: it reports the same `bad substitution` failure in `start.sh` on macOS, caused by Bash parameter lowercasing syntax not supported by older Bash versions. The new issue even shows the same class of startup-breaking error.* *by arielelkin* 2. 🟣 [#22933](https://github.com/open-webui/open-webui/issues/22933) **issue: Playwright integration not being used** *This issue is related to the same `start.sh`/Playwright branch o
💡 持续观察
👤 Th3R3alDuk3  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 1 · Budget 0 · Urgency 1
cannotdeadline
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description Chunks written to the vector DB carry metadata such as `file_id`, `created_by`, `source` and `embedding_config`, but **no timestamp**. In `save_docs_to_vector_db()` (`backend/open_webui/routers/retrieval.py`), the per-chunk metadata dict includes `created_by` but never a `created_at` or `indexed_at`. The only creation time available lives one level up - on the `file` / `knowledge` records in the main DB. This makes two common operations impractical: 1. **Time-based filtering/boosting at query time** - retrieval cannot filter or boost by recency (e.g. `created_at` >= …) directly in the vector store; it would require joining back to the main DB. 2. **Time-based retention/cleanup** - there is no reliable way to identify and purge stale chunks (e.g. older than X days), since the chunks themselves carry no age information. ### Proposed Solution Add a `created_at` (and ideally `indexed_at`) field to the chunk metadata at indexing time, alongside the existing `created_by`. For JSON-metadata backends this is non-breaking - a single field added to the metadata dict in `save_docs_to_vector_db()`: [`save_docs_to_vector_db()` in `retrieval.py` (L1467)](https://github.com/open-webui/open-webui/blob/main/backend/open_webui/routers/retrieval.py#L1467) ```python metadatas = [ { **doc.metadata, **(metadata if metadata else {}), 'created_at': int(time.time()), 'embedding_config': { ... }, } for doc in docs ] ``` This unlocks: - **Recency-aware retrieval** - filter/boost by `created_at` directly in the vector store. - **Stateless, scheduled cleanup** - an external job (e.g. a Kubernetes `CronJob`) can query and delete chunks by age directly against the vector DB, with no join into the main DB and no coupling to the app, making retention trivial to automate. ### Alternatives Considered _No response_ ### Additional Context I run Open WebUI on my own Kubernetes cluster with enforced data-retention deadlines. Implementing this today is very cumbersome, since there's no per-chunk timestamp to filter on. A per-chunk `created_at` would let a `CronJob` purge chunks by age directly in the vector DB.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#14076](https://github.com/open-webui/open-webui/issues/14076) **issue: Persistent Data Remnants in Docker Volume After Deleting Knowledge Base Files in Open-WebUI** *This is about deleted knowledge-base files leaving residual vector DB data behind. While it focuses on storage cleanup rather than timestamps, it is closely related to the broader problem of managing and purging stale chunk data in the vector store.* *by mokieli · `bug`* 2. 🟣 [#24431](https://github.com/open-webui/open-webui/issues/24431) **issue: Qdrant – deleted memory points not removed from vector DB, causing sta
💡 持续观察
👤 Classic298  ·  💬 4  ·  👍 0  ·  👥 2  |  Pain 0 · Budget 0 · Urgency 1
bug
**Issue** Open WebUI appears to persist only the last LLM call’s `usage` object for a streaming assistant response that uses native/server-side tool calls. Earlier LLM calls in the same tool loop are overwritten before the final assistant message is saved. This makes the built-in analytics token us…
展开全文 · 4 条评论
**Issue** Open WebUI appears to persist only the last LLM call’s `usage` object for a streaming assistant response that uses native/server-side tool calls. Earlier LLM calls in the same tool loop are overwritten before the final assistant message is saved. This makes the built-in analytics token usage inaccurate for tool-using conversations. **Affected Path** This applies to streaming chat completions with native/server-side tool calling, where one visible assistant message may require multiple upstream LLM calls: 1. Initial LLM call returns tool calls. 2. Open WebUI executes tools. 3. Open WebUI sends another LLM call with tool results. 4. This may repeat. 5. Final LLM call returns the visible assistant answer. Each upstream LLM call can return its own `usage` object, but Open WebUI seems to persist only the final one. **Code Evidence** In `backend/open_webui/utils/middleware.py`, `streaming_chat_response_handler(...)` creates a single shared `usage` variable for the whole assistant response: ```python usage = None ``` Inside `stream_body_handler(...)`, that variable is reused: ```python nonlocal usage ``` When a streamed usage object arrives, it overwrites the previous value: ```python raw_usage = data.get('usage', {}) or {} raw_usage.update(data.get('timings', {})) # llama.cpp if raw_usage: usage = normalize_usage(raw_usage) ``` The Responses API path does the same: ```python if response_metadata.get('usage'): response_metadata['usage'] = normalize_usage(response_metadata['usage']) usage = response_metadata['usage'] ``` During native tool loops, the same `stream_body_handler(...)` is called again for follow-up LLM calls: ```python await stream_body_handler(res, new_form_data) ``` At the end, only the final value of `usage` is persisted: ```python await Chats.upsert_message_to_chat_by_id_and_message_id( metadata['chat_id'], metadata['message_id'], { 'done': True, 'content': serialize_output(output), 'output': output, **({'usage': usage} if usage else {}), }, ) ``` or, with realtime save enabled: ```python await Chats.upsert_message_to_chat_by_id_and_message_id( metadata['chat_id'], metadata['message_id'], {'done': True, 'usage': usage}, ) ``` Analytics then reads from the persisted assistant-message usage in `backend/open_webui/models/chat_messages.py`, for example: ```python ChatMessage.usage.isnot(None) ``` and sums: ```python func.coalesce(func.sum(input_tokens), 0) func.coalesce(func.sum(output_tokens), 0) ``` So analytics only sees the final persisted `usage` object. **Expected Behavior** For one visible assistant message that performs multiple LLM calls through a native tool loop, Open WebUI should persist aggregated usage for the whole assistant response. Example: ```text LLM call 1: 1,000 tokens LLM call 2: 2,000 tokens LLM call 3: 3,000 tokens ``` Expected persisted assistant-message usage: ```json { "input_tokens": "...sum...", "output_tokens": "...sum...", "total_tokens": 6000 } ``` **Actual Behavior** Only the last LLM call’s usage appears to be persisted. Using the example above, analytics would count approximately: ```text 3,000 tokens ``` instead of: ```text 6,000 tokens ``` **Impact** This causes Open WebUI’s built-in analytics to undercount token usage for tool-heavy conversations. The undercount can be significant because tool loops often resend growing context on every LLM call. Affected analytics endpoints include token aggregation by model/user, since they rely on `ChatMessage.usage`.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#13086](https://github.com/open-webui/open-webui/issues/13086) **issue: Incorrect Token Usage Calculation using Function Calling in Native Mode** *This is the closest match: it specifically reports incorrect token usage calculation in native function calling, where multiple upstream API calls occur in one assistant turn. The new issue narrows that same problem to streaming tool-call loops and analytics persistence.* *by ChenxingLi · `bug`* 2. 🟣 [#24294](https://github.com/open-webui/open-webui/issues/24294) **issue: Analytics token count stays at 0 for streaming responses, but wor
💬 Classic298
2 and 3 not related 1 is related but dead activity
💬 Classic298
Also related with #23770.
💬 Classic298
https://github.com/open-webui/open-webui/pull/25659
💡 持续观察
👤 mightykatun  ·  💬 0  ·  👍 0  ·  👥 0  |  Pain 1 · Budget 0 · Urgency 1
cannotbug
## 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. Related items exist and are listed below. - [x…
展开全文
## 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. Related items exist and are listed below. - [x] I am using the latest version of Open WebUI. ## Installation Method Git Clone / Docker ## Open WebUI Version Current `dev` / `main` code path containing commit `afaa404fe442435368defb0858cba213baa1725b`. ## Operating System Linux ## Expected Behavior Changing the MinerU API timeout in Admin Settings > Documents > Content Extraction Engine > MinerU should save successfully through `POST /api/v1/retrieval/config/update`. ## Actual Behavior Saving a numeric MinerU API timeout from the WebUI returns HTTP 422 before the backend update handler runs. The WebUI field is an `<input type="number">`, so the request payload sends `MINERU_API_TIMEOUT` as a JSON number. The backend `ConfigForm` currently declares `MINERU_API_TIMEOUT` as `str | None`, which Pydantic v2 rejects for numeric JSON input. ## Steps to Reproduce 1. Run Open WebUI from a version containing MinerU timeout configuration support. 2. Log in as an administrator. 3. Open Admin Settings > Documents. 4. Set Content Extraction Engine to MinerU. 5. Change API Timeout from the default `300` to another numeric value, such as `600`. 6. Save the settings. 7. Observe `POST /api/v1/retrieval/config/update` returning HTTP 422. ## Logs & Screenshots Observed request: ```text POST /api/v1/retrieval/config/update Status: 422 ``` Validation cause: ```text MINERU_API_TIMEOUT expects str | None, but the WebUI number input sends a JSON number. ``` ## Additional Information Related feature request: #18495 Related closed PR: #20016 Related implementation commit: afaa404fe442435368defb0858cba213baa1725b A minimal fix is to allow the update schema to accept both numeric WebUI values and existing string/env values, e.g. `int | str | None`.
💡 持续观察
👤 msharp9  ·  💬 3  ·  👍 0  ·  👥 2  |  Pain 1 · Budget 0 · Urgency 0
fails
Open AI whisper transcription endpoint supports srt, verbose_json, and vtt. https://developers.openai.com/api/docs/guides/speech-to-text It looks like Open WebUI hard codes a simple `{"text": "..."}` response though. https://github.com/open-webui/open-webui/blob/02dc3e689ceac915a870b373318b99c029dd…
展开全文 · 3 条评论
Open AI whisper transcription endpoint supports srt, verbose_json, and vtt. https://developers.openai.com/api/docs/guides/speech-to-text It looks like Open WebUI hard codes a simple `{"text": "..."}` response though. https://github.com/open-webui/open-webui/blob/02dc3e689ceac915a870b373318b99c029ddf603/backend/open_webui/routers/audio.py#L1085 It would be nice to just return the requested format.
💬 owui-terminator[bot]
# ⚠️ Missing Issue Title Prefix @msharp9, your issue title is missing a categorising prefix (e.g. `bug:`, `feat:`, `docs:`). Please update the title to lead with one of: - **bug**: bug report or error - **feat**: feature request or enhancement - **docs**: documentation issue - **question**: usage question - **help**: support request Example: `bug: Login fails when the password contains special characters`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#21281](https://github.com/open-webui/open-webui/issues/21281) **feat: Audio OpenAI-compatible config parity (auth modes + custom headers) for STT/TTS** *This is the closest match because it is also about the Audio STT OpenAI-compatible path and configuration handling. While it focuses on auth/header parity rather than response format, it touches the same audio router and upstream OpenAI compatibility layer that would need to preserve requested transcription parameters.* *by tariktalay* 2. 🟣 [#16884](https://github.com/open-webui/open-webui/issues/16884) **issue: STT (OpenAI) Whis
💬 msharp9
The issues appear related, but aren't duplicates.
💡 持续观察
👤 Classic298  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 1 · Budget 0 · Urgency 0
fails
(无正文)
2 条评论
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#23848](https://github.com/open-webui/open-webui/issues/23848) **feat: Create new Admin Fields to Restrict Knowledge Base File Upload Count & Size** *This request is directly about adding admin controls for knowledge base upload size/count limits. It’s the closest match to a server-side file size limit enforcement problem in uploads.* *by chejohn* 2. 🟣 [#21057](https://github.com/open-webui/open-webui/issues/21057) **issue: Max Upload Size / Max File Upload Count not persisting across ... days and multiple restarts** *This issue discusses upload size/count limits not persisting
💬 Classic298
https://github.com/open-webui/open-webui/pull/25869
💡 持续观察
👤 ThingWerks  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 1 · Budget 0 · Urgency 0
manually
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 2 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description the only method to start loading model into VRAM is by submitting a query, not really ideal. ### Proposed Solution It would be awesome if the drop down model selector box had a button to load the model into memory right then and there. So you could already start the delayed process of loading the model, so that way the model is already being loaded while you begin to formulate your question. By the time your submitting the question, the model is already loaded. just right here in this menu you could put a button to load the model right then and there: <img width="685" height="485" alt="Image" src="https://github.com/user-attachments/assets/c5bf0a8e-d045-4296-91a1-b966722ef314" /> ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#4679](https://github.com/open-webui/open-webui/issues/4679) **Feature Request: Preemptive Model Loading Before Input Submission** *This is the closest match: it requests preemptive model loading to reduce the delay before a first query is answered. The new issue asks for a UI button to trigger that same loading behavior manually from the model selector.* *by cybersholt* 2. 🟣 [#9245](https://github.com/open-webui/open-webui/issues/9245) **Unload ollama model from memory** *This related feature request is the inverse side of the same memory-management problem—unloading models fr
💬 gurjyant-byte
i would like to work on this issue,please assign me
💡 持续观察
👤 nahoj  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 1 · Budget 0 · Urgency 0
crash
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 2 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description Loguru stacks in logs include variables which may include secrets. Here is a stack I recently got with @owndev's Google Gemini pipe, showing my API key as an HTTP header: ```log open-webui-1 | File "/usr/local/lib/python3.11/site-packages/google/genai/_api_client.py", line 1464, in async_request_streamed open-webui-1 | response = await self._async_request(http_request=http_request, stream=True) open-webui-1 | │ │ └ HttpRequest(headers={'Content-Type': 'application/json', 'x-goog-api-key': '<my key>', 'user-a... open-webui-1 | │ └ <function BaseApiClient._async_request at 0x73662078f2e0> open-webui-1 | └ <google.genai._api_client.BaseApiClient object at 0x736610ef7a10> ``` ### Proposed Solution Claude suggests this to show stack traces without variables: ```patch Index: backend/open_webui/utils/logger.py IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/backend/open_webui/utils/logger.py b/backend/open_webui/utils/logger.py --- a/backend/open_webui/utils/logger.py (revision 02dc3e689ceac915a870b373318b99c029ddf603) +++ b/backend/open_webui/utils/logger.py (date 1780758307199) @@ -185,6 +185,8 @@ level=GLOBAL_LOG_LEVEL, format=stdout_format, filter=audit_filter, + diagnose=False, # prevents local variable values (incl. secrets) from appearing in tracebacks + backtrace=True, ) if AUDIT_LOG_LEVEL != 'NONE' and ENABLE_AUDIT_LOGS_FILE: try: ``` ### Alternatives Considered I didn't find a way to configure this behavior more finely though I may have missed one. ### Additional Context `GLOBAL_LOG_LEVEL: INFO`
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#13510](https://github.com/open-webui/open-webui/issues/13510) **Verbose Debug Logs** *This issue is about reducing sensitive data exposure in logs. While it focuses on chat payload verbosity rather than stack traces, it overlaps with the same logging/privacy concern and the need to redact potentially sensitive content from debug output.* *by The-LittleTeapot* 2. 🟣 [#25135](https://github.com/open-webui/open-webui/issues/25135) **JSON log sink crashes with AttributeError on every exception (LOG_FORMAT=json)** *This is directly about the Loguru-based logging implementation in `b
💬 nahoj
(My understanding is that Loguru's behavior is not controlled by the general logging level.)
💡 持续观察
👤 spflueger  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 1 · Budget 0 · Urgency 0
cannot
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description Rotating oidc client credentials via client secret cannot be automated easily. Secret has to be changed on both sides and ideally with some overlap window. Especially if the oidc provider is not under your control, changing the secret in the idp is troublesome. ### Proposed Solution Support the private-key-jwt oidc client auth https://oauth.net/private-key-jwt/ This also has some benefits being slightly more secure as not a single long living token is being used. ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#19131](https://github.com/open-webui/open-webui/issues/19131) **issue: client_id parameter is not passed in authorize access token request with OIDC provider** *This OIDC issue is closely related because it documents another missing client-auth request parameter in the token exchange. It suggests the auth flow currently lacks flexibility around client authentication, which is the same feature area as supporting private_key_jwt.* *by Oleg52 · `bug`* 2. 🟣 [#21097](https://github.com/open-webui/open-webui/issues/21097) **feat: Support input of static oauth client data** *This req
💡 持续观察
👤 pfn  ·  💬 1  ·  👍 2  ·  👥 1  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the …
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions. ### Problem Description Continuing the discussion from #23740 which is closed prematurely. I have to apply the following diff to middleware.py in addition to running a fairly carefully crafted filter function in order for API calls to track outlet() correctly https://gist.github.com/pfn/cdf3631365e6bee59912016b7a953175 With this filter and the diff in place, both non-streaming and streaming API calls through openwebui work for me. Without the filter active and the diff, neither API call use-case works. The diff is primarily required for the streaming use-case. The filter is required for both streaming and non-streaming API calls. ### Desired Solution you'd like I'm relatively happy with how the linked gist solves the problem. If it could be made more elegant, I would like that. ### Alternatives Considered N/A ### Additional Context Discussed in discord. > pfn0 [SJBH], — 7:18 PM > not sure what it is yet (looking at the code, event_emitter shouldn't be the problem) > ctx = await build_chat_response_context(request, form_data, user, model, metadata, tasks, events) > main.py:1851 @Classic this brings event_emitter to life > pfn0 [SJBH], — 7:50 PM > @Classic final finding: streaming_chat_response_handler -> w/o event_emitter -> does not ever call outlet_filter_handler (and if outlet_filter_handler is force-called, assistant_message is not available)
💬 Classic298
https://github.com/open-webui/open-webui/pull/25650
💡 持续观察
👤 bshenderson  ·  💬 0  ·  👍 0  ·  👥 0  |  Pain 1 · Budget 0 · Urgency 0
production
## Bug: ModelEditor marks all `collection_names` knowledge entries as `legacy: true`, causing "Legacy Collection" UI label ### Description In the Model Editor UI (`src/lib/components/workspace/Models/ModelEditor.svelte`), the knowledge mapping logic **unconditionally sets `legacy: true`** for know…
展开全文
## Bug: ModelEditor marks all `collection_names` knowledge entries as `legacy: true`, causing "Legacy Collection" UI label ### Description In the Model Editor UI (`src/lib/components/workspace/Models/ModelEditor.svelte`), the knowledge mapping logic **unconditionally sets `legacy: true`** for knowledge entries that use the `collection_names` format — the same format that was introduced as the replacement for the old `collection_name` format. This causes the UI to display "Legacy Collection" labels for all knowledge collections, even when they are using the current, non-legacy format. ### Affected File `src/lib/components/workspace/Models/ModelEditor.svelte`, lines 303-320: ```typescript knowledge = (model?.meta?.knowledge ?? []).map((item) => { if (item?.collection_name && item?.type !== 'file') { return { id: item.collection_name, name: item.name, legacy: true }; } else if (item?.collection_names) { return { name: item.name, type: 'collection', collection_names: item.collection_names, legacy: true // <-- BUG: this should NOT be legacy: true }; } else { return item; } }); ``` ### Root Cause Line 315 sets `legacy: true` for entries that have `collection_names` (the **new** format). The `collection_names` array format was introduced in the knowledge table migration (`6a39f3d8e55c_add_knowledge_table.py`) as the replacement for the single `collection_name` string. The old `collection_name` format correctly gets `legacy: true`, but the new `collection_names` format should **not**. The downstream rendering in `src/lib/components/workspace/Models/Knowledge.svelte` line 180-181 uses this `legacy` flag to determine the display label: ```svelte type={file?.legacy ? `Legacy${file.type ? ` ${file.type}` : ''}` : (file?.type ?? 'collection')} ``` So any entry with `legacy: true` gets rendered as "Legacy Collection" regardless of whether the underlying data format is actually legacy. ### Reproduction Steps 1. Create a knowledge collection via the OWUI Knowledge interface 2. Create or edit a model and associate it with that knowledge collection 3. Save the model — the `model.meta.knowledge` array now contains entries with `collection_names: [uuid]` 4. Re-open the model in the Model Editor 5. The knowledge section displays "Legacy Collection" label for each collection ### Expected Behavior Knowledge entries using the `collection_names` format (the current format) should display as "collection" in the Model Editor, not "Legacy Collection". The `legacy` flag should only be `true` for entries using the deprecated `collection_name` (singular) format. ### Actual Behavior All knowledge entries with `collection_names` are marked as `legacy: true` and displayed as "Legacy Collection" in the Model Editor UI, regardless of the database state. Clearing browser cache does not help because the `legacy: true` is set dynamically by the frontend code on every load. ### Environment - Open WebUI version: 0.9.6 (dev-cuda) - Backend: Python/FastAPI with PostgreSQL - Frontend: SvelteKit ### Proposed Fix Change line 315 from `legacy: true` to `legacy: false`: ```typescript } else if (item?.collection_names) { return { name: item.name, type: 'collection', collection_names: item.collection_names, legacy: false // collection_names is the current format }; } ``` ### Additional Context The migration `6a39f3d8e55c_add_knowledge_table.py` introduced the `collection_names` array as the replacement for the old `collection_name` string. The middleware in `utils/middleware.py` (line 2480+) correctly distinguishes between the two formats: - `collection_name` (singular) = legacy format, triggers migration to new format - `collection_names` (array) = current format, used directly The ModelEditor frontend logic does not match this distinction — it treats both as legac
💡 持续观察
👤 Lyhtande  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
## Describe the bug When using **Call mode** (voice overlay), the chat input field receives focus automatically after every model response finishes. This causes two problems: 1. **Formatting toolbar appears** — if the rich text toolbar is enabled, it pops up after every response, even though it's …
展开全文 · 2 条评论
## Describe the bug When using **Call mode** (voice overlay), the chat input field receives focus automatically after every model response finishes. This causes two problems: 1. **Formatting toolbar appears** — if the rich text toolbar is enabled, it pops up after every response, even though it's not needed in hands-free mode. 2. **Mobile keyboard opens** — on Android/iOS PWA, the auto-focus triggers the virtual keyboard every time the assistant finishes speaking, which defeats the purpose of hands-free call mode. ## Steps to Reproduce 1. Open a chat in **Call mode** (microphone icon → call overlay active) 2. Ask any question via voice 3. Wait for the model to finish responding / TTS to finish playing 4. Observe: the chat input field receives focus automatically ## Expected behavior In call mode, the input field should **not** receive focus after a response. The user is operating hands-free; auto-focusing the input serves no purpose and actively disrupts the experience (especially on mobile). ## Current behavior The input receives focus after each response, causing: - The rich text formatting toolbar to appear - The mobile virtual keyboard to open (PWA on Android/iOS) ## Code analysis The codebase already contains a partial fix with an explicit comment in `src/lib/components/chat/Chat.svelte`: ```js // focus on chat input (skip during voice call to avoid triggering mobile keyboard) if (!$showCallOverlay) { chatInput?.focus(); } ``` However, there are several other `.focus()` calls in `Chat.svelte` and `MessageInput.svelte` that do **not** check `$showCallOverlay`, e.g.: - `Chat.svelte` ~line 261 (navigateHandler) - `Chat.svelte` ~line 877 (onMount / init) - `Chat.svelte` ~line 1386 (model change handler, inside `setTimeout`) - `MessageInput.svelte` ~line 1088 (onMount) - `MessageInput.svelte` ~line 1165 (modal close callback) All of these need the same `if (!$showCallOverlay)` guard. ## Environment - Open WebUI version: current - Platform: Desktop + Android PWA - Browser: Chrome ## Additional context This issue has existed for a long time and is particularly disruptive on mobile PWA where the keyboard covers half the screen after every single response in what is supposed to be a fully hands-free interaction mode.
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#14010](https://github.com/open-webui/open-webui/issues/14010) **issue: Keyboard appears during android call** *This is the closest match: it reports the Android keyboard appearing during a voice call. The new issue explains the root cause more specifically as unwanted chat-input autofocus in call mode.* *by lee-b · `bug`* 2. 🟣 [#20722](https://github.com/open-webui/open-webui/issues/20722) **issue: Mobile viewport doesn't resize when the keyboard appears** *Not about call mode specifically, but it covers the mobile keyboard/viewport behavior once the keyboard is triggered. It
💬 Lyhtande
Thanks for the related issue suggestions! I checked both: - **#14010** reports the same Android keyboard symptom, but was closed/stale without a fix and doesn't identify the root cause. - **#20722** is about general viewport resizing when the keyboard appears — unrelated to call mode. This issue is distinct: it pinpoints the specific cause (multiple `.focus()` calls in `Chat.svelte` / `MessageInput.svelte` that don't check `$showCallOverlay`) and affects both desktop (formatting toolbar pops up) and mobile (keyboard). The existing partial fix in the codebase even has a comment acknowledging this — it just wasn't applied consistently everywhere. Happy to provide a PR if that would help move this forward.
💡 持续观察
👤 TazyFoundSoup  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 2 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description I don't know when a file has been uploaded so I can send the message. ### Proposed Solution When you still have files waiting to be sent, you can press the send button, and it turns into a spin wheel and automatically sends when the file/s are finished uploading. ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#12228](https://github.com/open-webui/open-webui/issues/12228) **feat: uploading files without backend processing** *This feature request also concerns the upload flow in chat and how the UI should behave while files are still being prepared. It proposes bypassing backend processing and sending raw file URLs, which is adjacent to coordinating message send timing with file upload completion.* *by wangjiyang* 2. 🟣 [#23320](https://github.com/open-webui/open-webui/issues/23320) **issue: FileInput menu stays open after selecting upload actions in chat input** *This issue is about t
💬 TazyFoundSoup
No this isn't a duplicate
💡 持续观察
👤 ER-EPR  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 2 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description When using Firecrawl as the web loader engine (`WEB_LOADER_ENGINE=firecrawl`), there is currently no way to configure Firecrawl-specific scraping options through environment variables or the admin panel. Specifically: 1. **`onlyMainContent`** (default: true): A deterministic HTML-level filter that excludes headers, navs, footers, etc. No LLM involved. 2. **`onlyCleanContent`** (default: false, Beta): Runs an additional **LLM-based pass** over the generated markdown to remove residual boilerplate that `onlyMainContent` can miss. This is particularly useful for RAG applications as it produces cleaner, LLM-ready content. 3. **`formats`**: Control output formats (markdown, html, links, etc.) Currently, the `SafeFireCrawlLoader` class accepts a `params` dictionary, but there's no mechanism to populate it with user-defined Firecrawl options. The only configurable Firecrawl environment variables are: - `FIRECRAWL_API_KEY` - `FIRECRAWL_API_BASE_URL` - `FIRECRAWL_TIMEOUT` ### Proposed Solution Add environment variables and corresponding admin panel UI options to configure Firecrawl-specific scraping parameters: **Proposed Environment Variables:** # Only return main content, excluding headers/navs/footers (default: true) # This is a deterministic HTML filter, no LLM involved FIRECRAWL_ONLY_MAIN_CONTENT=true # Beta: Run additional LLM-based pass to remove residual boilerplate (default: false) # Uses LLM to clean markdown output, preserving headings, lists, tables, code blocks FIRECRAWL_ONLY_CLEAN_CONTENT=false # Output formats (default: "markdown") # Options: markdown, html, rawHtml, links, images, screenshot, json, etc. FIRECRAWL_FORMATS="markdown" **Implementation Details:** 1. Add these environment variables to `backend/open_webui/config.py` similar to existing Firecrawl variables 2. Modify `SafeFireCrawlLoader` initialization in `backend/open_webui/retrieval/web/utils.py` to pass these options to `scrape_firecrawl_url` 3. Update the admin panel (Settings > Documents > Web Loader) to expose these options when Firecrawl is selected as the engine 4. Update documentation in `docs/reference/env-configuration.md` **Example Usage:** # docker-compose.yml environment: - WEB_LOADER_ENGINE=firecrawl - FIRECRAWL_API_KEY=fc-xxxxx - FIRECRAWL_ONLY_MAIN_CONTENT=true - FIRECRAWL_ONLY_CLEAN_CONTENT=true # Enable LLM-based cleaning for better RAG quality - FIRECRAWL_FORMATS=markdown ### Alternatives Considered 1. **Using the external web loader**: Configure a custom Firecrawl service with the desired options, but this requires maintaining additional infrastructure. 2. **Using Firecrawl Pipelines**: Install the Firecrawl Open-WebUI-Pipelines extension, but this adds complexity and may not integrate seamlessly with the built-in web search and RAG features. ### Additional Context **Why this matters:** - **Better RAG quality**: `onlyCleanContent` uses LLM to produce cleaner markdown by removing navigation menus, footers, ads, and other non-content elements that `onlyMainContent` might miss, leading to better embeddings and retrieval quality. - **Reduced token usage**: Cleaner content means fewer tokens sent to LLMs, reducing costs and improving response times. - **Flexibility**: Users can choose between fast deterministic filtering (`onlyMainContent`) and more thorough LLM-based cleaning (`onlyCleanContent`) based on their needs. **Firecrawl API Reference:** According to Firecrawl's official API documentation, the `/v2/scrape` endpoint accepts: { "url": "https://example.com", "formats": ["markdown"], "onlyMainContent": true, "onlyCl
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#19734](https://github.com/open-webui/open-webui/issues/19734) **issue: Firecrawl web loader times out after 3 seconds (ignoring environment variables)** *This is directly related because it tracks Firecrawl web loader configuration and shows prior work on exposing Firecrawl-specific environment variables. The new feature request extends that same configuration surface to additional Firecrawl scrape options.* *by Sorkai · `bug`* 2. 🟣 [#12207](https://github.com/open-webui/open-webui/issues/12207) **feat: Support for Firecrawl for WebSearch** *This is the existing Firecrawl feat
💬 ER-EPR
not duplicate
💡 持续观察
👤 typed-sigterm  ·  💬 2  ·  👍 0  ·  👥 2  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 2 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description This is related to an old CommonMark issue: https://github.com/commonmark/commonmark-spec/issues/650, which breaks UX for CJK users (Chinese + Japanese + Korean ≈ 1.6 billion speakers in the world). <img width="2169" height="462" alt="Image" src="https://github.com/user-attachments/assets/0a8698e8-ab18-4d2e-a987-e64a9778662c" /> ### Proposed Solution https://github.com/tats-u/markdown-cjk-friendly can fix this. ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#14067](https://github.com/open-webui/open-webui/issues/14067) **issue: Issues related to Markdown rendering of non-English chat content** *This issue reports Markdown rendering anomalies specifically when chat content includes Chinese, including spacing-sensitive formatting around formulas and bold text. That matches the new request’s goal of making Markdown rendering CJK-friendly.* *by Yu-QX · `bug`* 2. 🟣 [#12151](https://github.com/open-webui/open-webui/issues/12151) **issue: Markdown parsing issues(Chinese)** *This earlier issue is directly about Markdown parsing issues in
💬 typed-sigterm
This is not duplicated. Listed issues are all about incorrect LaTeX but this issue is not related to LaTeX.
💡 持续观察
👤 glundgren93  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description Right now only Dynamic Client Registration (DCR) or static OAUTH is supported. Where the latest spec says that CIMD should be supported. https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#client-id-metadata-documents ### Proposed Solution Support Client ID metadata document ### Alternatives Considered _No response_ ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#25950](https://github.com/open-webui/open-webui/issues/25950) **issue: DCR flow seeds registration `scope` from Authorization Server `scopes_supported` instead of Protected Resource Metadata (RFC 9728)** *This is directly related to the same MCP OAuth discovery and registration path, but at a different layer: it discusses how DCR registration should source scopes from Protected Resource Metadata rather than the Authorization Server metadata. CIMD support likely affects the same client-registration flow and scope derivation logic.* *by riljian · `bug`* 2. 🟣 [#24730](https://github
💡 持续观察
👤 yovo4  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description OpenWebUI already shows a loaded/running indicator for native Ollama models when Ollama-specific metadata such as `expires_at` is available. This is very useful because users can see whether selecting a model will likely require loading/switching models. Pipe/manifold models currently appear to support returning model entries primarily as `{ "id": "...", "name": "..." }`. This makes it difficult for custom providers to expose equivalent runtime state, even when the backend can determine it. -- I have a Pipe Function that exposes Letta agents as individual OpenWebUI models. Each Letta agent may use an underlying Ollama model. The Pipe can query Letta for the agent configuration and Ollama `/api/ps` for currently loaded models, including `expires_at`. However, there does not appear to be a supported way for the Pipe to pass that loaded/running state back to OpenWebUI so the UI can show the same kind of indicator that direct Ollama models receive. ### Proposed Solution Allow `pipes()` model definitions to include optional status metadata, for example: - `loaded: true | false` - `expires_at: string | null` - `provider_model: string` - `runtime.provider: "ollama"` - or an `ollama` metadata object compatible with the existing Ollama model indicator logic OpenWebUI could then render the existing loaded/running indicator for custom Pipe/manifold models when this metadata is present. ### Alternatives Considered Annotating model names: Works but fragile, can be overridden in the UI. doesn't integrate with existing indicators. Status messages at request time: only visible after sending a message and not during model selection, defeating the purpose in some cases. Separate status/info page: feasible, but disconnected from the model selector and adds user friction. ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#22135](https://github.com/open-webui/open-webui/issues/22135) **feat: Pipe register models add more information** *This is the closest match: it asks for pipes() model registrations to support more than just id/name, i.e. additional metadata fields. The new issue is a narrower version focused specifically on loaded/running-state metadata for model-selector indicators.* *by CoronaAustralis* 2. 🟣 [#24111](https://github.com/open-webui/open-webui/issues/24111) **feat: Provider failover status indicator per model with last-switch timestamp** *This is related at the UI/indicator le
💡 持续观察
👤 peanutbother  ·  💬 1  ·  👍 0  ·  👥 1  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Descriptio…
展开全文 · 1 条评论
### Check Existing Issues - [x] I have searched all existing **open AND closed** issues and discussions and found none comparable to my request. ### Verify Feature Scope - [x] I believe this feature request is appropriately scoped for the Issues section as described above. ### Problem Description When using mlx-audio.server the server returns nd-json by default for live transcriptions to be able to stream them. This breaks open webui because it expects json instead. ### Proposed Solution A **Additional Parameters** Box for json parameters like TTS has could solve this. We could supply `"response_format": "json"` using that. ### Alternatives Considered omni-mlx-server sadly breaks too and has some other quirks because it utilizes the same stack. ### Additional Context _No response_
💬 owui-terminator[bot]
<!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#25622](https://github.com/open-webui/open-webui/issues/25622) **feat: Support transcription formats from upstream endpoints** *Directly related: it requests that Open WebUI support upstream transcription formats instead of hard-coding `{"text": ...}`. Your issue is also about STT response formatting, specifically handling NDJSON vs JSON from an upstream server.* *by msharp9* 2. 🟢 [#21281](https://github.com/open-webui/open-webui/issues/21281) **feat: Audio OpenAI-compatible config parity (auth modes + custom headers) for STT/TTS** *Related because it asks for additional config
💡 持续观察
👤 zhengyanglsun  ·  💬 0  ·  👍 0  ·  👥 0  |  Pain 0 · Budget 0 · Urgency 0
无命中信号
Related Discussion: https://github.com/open-webui/open-webui/discussions/25856 ## Summary Request to add [iFlow Search](https://platform.iflow.cn/docs/) as a native Web Search provider, plus an optional Web Fetch loader using the same API credentials. I opened [Discussion #25856](https://github.c…
展开全文
Related Discussion: https://github.com/open-webui/open-webui/discussions/25856 ## Summary Request to add [iFlow Search](https://platform.iflow.cn/docs/) as a native Web Search provider, plus an optional Web Fetch loader using the same API credentials. I opened [Discussion #25856](https://github.com/open-webui/open-webui/discussions/25856) first per contribution guidelines and am following up here for visibility while awaiting maintainer feedback. ## Proposed integration | Layer | Config | iFlow API | | --- | --- | --- | | Web Search | `WEB_SEARCH_ENGINE=iflow` | `POST /api/search/webSearch` | | Page fetch | `WEB_LOADER_ENGINE=iflow` | `POST /api/search/webFetch` | Shared configuration: - `IFLOW_API_KEY` - `IFLOW_BASE_URL` (default `https://platform.iflow.cn`) Admin UI: - Settings → Web Search → Search Engine → **iFlow Search** - Settings → Web Search → Web Loader Engine → **iFlow Web Fetch** ## Motivation iFlow provides web search and page fetch behind one API key. This matches Open WebUI's existing split between Web Search engines and Web Loader engines (similar to Tavily / Firecrawl), while sharing one small client implementation. ## Implementation status (local, not yet submitted) - Web Search provider + Web Fetch loader implemented locally on branch `feat/iflow-search-provider` - Mock tests passing; manual UI verified - No new Python dependencies - **Image Search is out of scope** for the first PR (separate API route, not part of the Web Search provider model) ## Questions for maintainers 1. Is it acceptable to submit Web Search provider + Web Fetch loader in **one atomic PR**, given the shared client and config? 2. Should documentation go in a separate PR to `open-webui/docs`, as usual? 3. Please confirm that **`dev`** is the correct target branch. I will wait for feedback before opening the PR. cc @tjbck @Classic298
💡 持续观察