Skip to content

fix: Open WebUI 0.12.0 compatibility (Azure 3.0.1, Gemini 1.19.1, e2e) - #199

Merged
owndev merged 6 commits into
mainfrom
feature/owui-0.12-compat
Oct 10, 2026
Merged

owndev merged 6 commits into
mainfrom
feature/owui-0.12-compat

Conversation

@owndev

@owndev owndev commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Why

Open WebUI v0.12.0 was released on 2026-10-10. On main, all suites passed on 0.11.3 and 0.11.4, but 0.12.0 gave 542 PASS / 5 FAIL. Two of the causes are in our functions; the rest are test assumptions that 0.12 changed. One further 0.12 incompatibility turned up while reading Open WebUI's diff.

Fixes in the functions

  • Azure AI Foundry 3.0.0 → 3.0.1:
    • Cause: Open WebUI 0.12 renamed the metadata key that holds the typed prompt before its RAG template is added: user_prompt became base_user_prompt (middleware.py:3333; 0.11.4: :3231). The pipeline read only the old key.
    • Effect on 0.12: with attached files or chats, knowledge, or web search, Azure AI Search searched with the template text ("### Task: Respond to the user query…") instead of what the user typed.
    • Fix: the pipeline now reads base_user_prompt first and falls back to user_prompt. Nothing changes on 0.11.
    • New check azure.rag.query-text.metadata covers four cases: only the new key, only the old key, both, and a None new key.
  • Google Gemini 1.19.0 → 1.19.1:
    • Cause: when Open WebUI 0.12 rebuilds a saved chat, it drops every assistant message without content and output. Before, it dropped only failed ones (middleware.py:2277; 0.11.4: :2241).
    • Effect on 0.12: after an empty answer (for example, stopped before its first token), the next image-edit turn was taken for a guided regeneration. The edit message's upload was then also read as history, and with IMAGE_DEDUP_HISTORY=false it was sent twice.
    • Fix: request and saved chat now skip empty answers by the same rule.
    • New check gemini.imgedit.empty-answer: it fails with 1.19.0 on 0.12.0 and passes with 1.19.1 on 0.12.0 and 0.11.4.

Test changes

  • Module names in the log:
    • Open WebUI 0.12 loads each function as function_<id>_<uuid hex> (utils/plugin.py:277). Expected-error signatures such as ("function_azure:pipe", …) therefore stopped matching. That caused the azure, n8n and infomaniak server-log failures.
    • One azure "no traceback" check passed on 0.12 without testing anything, because it no longer found its error blocks.
    • harness/logs.py now normalizes the names to function_<id> everywhere it reads the log.
  • gemini.imgedit.admin: Open WebUI 0.12 deliberately no longer lets an admin continue another user's chat. It answers 404, because writing needs write access to the chat (main.py:1554, models/chats.py:1903-1945). The check is version-gated: on 0.12 and later it expects the 404 and no upstream request. The admin reading another user's file stays covered by imgedit.api-foreign.
  • Docs: docs/testing.md lists 0.12.0, 0.11.4 and 0.11.3 as tested, with 549 checks. CLAUDE.md notes both 0.12 pitfalls. DEFAULT_IMAGE stays v0.11.4-slim until the first 0.12 patch release.

Verification

Run Result
All suites, --strict-known, v0.12.0-slim 549 PASS, 0 FAIL, 0 KNOWN (1046 s)
All suites, --strict-known, v0.11.4-slim 549 PASS, 0 FAIL, 0 KNOWN
All suites, --strict-known, v0.11.3-slim 549 PASS, 0 FAIL, 0 KNOWN
Meta-test (E2E_MOCK_FAULT=500) 57 PASS, 388 FAIL, 0 KNOWN
ruff 0.11.10 check + format clean

Other 0.12 changes, not addressed here

  • Shared chats with "allow replies" (new in 0.12): Gemini's history loading accepts only the chat owner or an admin, which is stricter than Open WebUI's own access rules. A participant who replies doesn't get the earlier generated images sent along. This touches access control and is left for a separate decision.
  • Cosmetic:
    • Other participants of a shared chat see streamed text only at the end.
    • time_token_tracker now counts the <attached_files> tags, because 0.12 adds them before inlet filters.
  • Valve types are now validated when function code is saved. Changing a valve's type in a later version would block saving the update.

🤖 Generated with Claude Code

owndev and others added 6 commits October 11, 2026 00:18
Open WebUI 0.12 loads every function as function_<id>_<uuid4 hex>
(utils/plugin.py:277; 0.11.x: function_<id>), so its log lines read
function_azure_<hex>:pipe:4120. Signatures such as
("function_azure:pipe", "request: 400") no longer matched: the errors the
azure, n8n and infomaniak suites provoke on purpose failed server-log, and
the "no traceback" part of the azure rag search-error checks matched no
block at all.

ServerLog now strips the suffix from everything it reads (since, lines,
the error / warning blocks), also tool_<id>_<hex>; ids with underscores
(time_token_tracker) keep their full name. server.log in the output
directory stays as logged.

+semver: none

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s turn

Open WebUI 0.12 gives an admin only read access to another user's chat:
chat_completion asks Chats.get_accessible_chat_by_id(chat_id, user,
permission='write') (main.py:1554, models/chats.py:1903), which needs the
owner, a chat shared with replies allowed or a shared folder, and answers
HTTP 404 before any pipe runs. Up to 0.11 the owner or any admin could
continue a chat (main.py:1495 in 0.11.4). The admin turn of
gemini.imgedit.admin therefore never reached the pipe (turn3: contents=0).

On 0.12 and later the check now expects exactly that (HTTP 404, no upstream
request); on 0.11 it still checks that the pipe reads the user's chat and
sends the admin's file and the generated image. The admin's file access on
the API path stays covered by imgedit.api-foreign.

+semver: none

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Open WebUI 0.12 renamed the metadata key that holds the user's prompt
before its RAG template is added: metadata['user_prompt'] (0.11.4
utils/middleware.py:3231) is now metadata['base_user_prompt'] (0.12.0
utils/middleware.py:3333). _search_query_text found neither key and fell
back to the rewritten user message, so with an attached file or chat,
knowledge or web search, Azure AI Search got the RAG template ("### Task:
Respond to the user query ...") as its search text instead of the typed
prompt (azure.rag.query-text.attached).

The pipeline now reads base_user_prompt first and falls back to
user_prompt, so Open WebUI 0.11 and older behave as before. Version 3.0.1.

Tests: azure.rag.query-text.attached shows the search text first in its
detail; new azure.rag.query-text.metadata runs the staged file in the
driver process with a wrapped user message and base_user_prompt,
user_prompt, both, and a None base_user_prompt, on every Open WebUI version.

+semver: patch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…UI 0.12

Open WebUI 0.12 leaves every assistant message without content and output
out of the request it rebuilds from a saved chat (load_messages_from_db,
utils/middleware.py:2277); 0.11.4 left out only failed ones
(middleware.py:2241). _trailing_user_messages still mirrored the old rule
for the saved chain, so after an empty answer without an error (stopped
before its first token) the request had one trailing user message more
than the chain and the edit turn counted as a guided regeneration: the
upload of the edit message was also taken as history, and with
IMAGE_DEDUP_HISTORY=false it was sent twice.

Answers without content, output and tool calls are now skipped in the
request and in the saved chain alike, which counts the same on every Open
WebUI version. Version 1.19.1.

Test: gemini.imgedit.empty-answer (a saved chat with an empty answer, the
next turn with an upload, IMAGE_DEDUP_HISTORY=false). With 1.19.0 it fails
on 0.12.0 (sent=[..., upload1, upload2, upload2]) and passes on 0.11.4.

+semver: patch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All suites in strict known mode: 549 PASS, 0 FAIL, 0 KNOWN on
v0.12.0-slim, v0.11.4-slim and v0.11.3-slim (azure_ai_foundry.py 3.0.1,
google_gemini.py 1.19.1); the meta-test with main 31a4e7d gives
57 PASS / 388 FAIL / 0 KNOWN. Documents the module-name normalization of
the log signatures, the version-dependent imgedit.admin check, the new
azure.rag.query-text.metadata and gemini.imgedit.empty-answer checks, run
times on 0.12.0, and what check_owui_api.sh cannot see (it passed 0.12.0
although __metadata__["user_prompt"] was renamed).

+semver: none

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…LAUDE.md

+semver: none

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@owndev
owndev merged commit 6b99dcf into main Oct 10, 2026
15 of 16 checks passed
@owndev
owndev deleted the feature/owui-0.12-compat branch October 10, 2026 23:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant