0.12.5: OCR params, embedding buffer, notifications, display_file

Adds the Mistral OCR parameters, the embedding buffer size, negative relevance thresholds, OpenTelemetry metrics exclusions and six new hideable chat input indicators. Covers the automation failure notification, display_file for chat and knowledge files, tool images for models without vision, animated ComfyUI output, Responses API images, shorter knowledge file lists in API responses and note recordings saved on upload.
This commit is contained in:
Classic298 committed 2026-10-29 11:30:48 +01:00
1 parent cacc3b20f7
commit 0ecc2c1a5a
13 files changed
+46 -11

No files matched your search

@@ -146,6 +146,7 @@ A few rules about how a custom rule is read:
- Automations run in the background worker loop on a polling interval.
- Every run records a status (`success` or `error`) and optional error details. A run that replies in a chat is recorded as `success` once the reply has finished. A reply that fails or is cancelled is recorded as `error`, and the run keeps its **View chat** link so you can open the chat.
- To be told when a run fails, subscribe a [notification target](/features/chat-conversations/chat-features/notifications#events) to `automation.run_failed`.
- Deleting an automation also removes its run history.
## Managing Automations from Chat
@@ -39,7 +39,7 @@ Use **Send Test** to fire a test notification and confirm the endpoint works.
### Events
Five events can be subscribed to:
Six events can be subscribed to:
| Event | Fires when |
|---|---|
@@ -48,6 +48,7 @@ Five events can be subscribed to:
| `channel.message` | A person or a bot account posts a message in a channel you belong to, group channels and direct messages included. You belong to a standard channel once you have opened or posted in it. |
| `calendar.alert` | A calendar event alert triggers. |
| `retrieval.content.process_failed` | A file fails content extraction. |
| `automation.run_failed` | One of your [automations](/features/chat-conversations/chat-features/automations) fails, on a schedule or when run by hand. The notification carries the automation name and the error. |
### Delivery: away or always
@@ -70,7 +71,7 @@ Pairing this with [Timers](/features/chat-conversations/chat-features/timers) is
## Upgrading From the Old Notification Webhook
Earlier versions had a single **Notification Webhook** URL under **Settings > Account** that fired on chat responses. That field is replaced by targets, and an existing URL is **migrated automatically** into a target subscribed to all five events, so notifications keep arriving without any action.
Earlier versions had a single **Notification Webhook** URL under **Settings > Account** that fired on chat responses. That field is replaced by targets, and an existing URL is **migrated automatically** into a target subscribed to all events, so notifications keep arriving without any action.
Two changes are worth knowing about:
@@ -97,7 +97,7 @@ To customize the prompt template used for generation, go to **Settings > Admin >
You can find the node ID by clicking on a node in ComfyUI and viewing its details.
Open WebUI returns the images from the workflow's **Save Image**, **Save Image (Advanced)** and **Preview Image** nodes.
Open WebUI returns the images from the workflow's **Save Image**, **Save Image (Advanced)**, **Save Animated WEBP**, **Save Animated PNG** and **Preview Image** nodes. Animated images stay animated in the chat.
![Screenshot of the ComfyUI Workflow Nodes section in Open WebUI, showing the mapping fields.](/images/image-generation-and-editing/comfyui-node-mapping.png)
@@ -28,6 +28,8 @@ If **Image** is missing from the **Integrations** menu entirely, then either ima
The model selector at the top of the chat stays on your normal chat model. The image model is configured once in the admin image settings and is never selected there.
Picking the image model as the chat model is the most common setup mistake. Everything looks configured, and generation fails or returns nothing useful, because an image model cannot hold a conversation and is not being asked for a picture in the way it expects. If image generation has stopped working and the settings look right, check what the model selector says first.
The exception is a chat model that creates images itself on a connection whose **API Type** is `Responses`, such as a Gemini image model through OpenRouter. Its images show in the reply.
:::
What happens next depends on the **Function Calling** mode. It can be set per chat in **Chat Controls** > **Advanced Params**, for yourself in **Settings** > **General** > **Advanced Parameters**, per model in the model editor or globally under **Model Defaults** in the admin model settings. The first of those that is not **Default** wins, and Native applies when none of them is set.
@@ -139,8 +139,8 @@ Enable **Builtin Tools** on the model and leave the categories you need switched
| Resource | Tools | Category |
|---|---|---|
| Files attached to the chat | `list_chat_files`, `query_chat_files`, `grep_chat_files`, `view_file` | **Files** |
| Knowledge bases and collections, including the knowledge of the folder the chat is in | `query_knowledge_files`, `search_knowledge_files`, `grep_knowledge_files`, `view_knowledge_file`, plus the discovery tools when no knowledge is attached to the model | **Knowledge Base** |
| Files attached to the chat | `list_chat_files`, `query_chat_files`, `grep_chat_files`, `view_file`, `display_file` | **Files** |
| Knowledge bases and collections, including the knowledge of the folder the chat is in | `query_knowledge_files`, `search_knowledge_files`, `grep_knowledge_files`, `view_knowledge_file`, `display_file`, plus the discovery tools when no knowledge is attached to the model | **Knowledge Base** |
| Notes | `search_notes`, `view_note` | **Notes** |
| Referenced chats | `search_chats`, `view_chat` | **Chat History** |
@@ -46,6 +46,10 @@ This documentation provides a step-by-step guide to integrating Mistral OCR with
By default, Open WebUI uploads a PDF to Mistral's file store and then runs OCR on it. Enabling **Use Base64** in **Settings → Admin → Documents** (or [`MISTRAL_OCR_USE_BASE64=true`](/reference/env-configuration#mistral_ocr_use_base64)) instead sends the PDF **inline as a base64 data URL** in a single request, skipping the separate upload step. This helps in proxy or air-gapped setups, or when the upload step fails; the trade-off is a larger single request.
### Optional: Choose the OCR Model
The **Parameters** field in **Settings → Admin → Documents** (or [`MISTRAL_OCR_PARAMS`](/reference/env-configuration#mistral_ocr_params)) takes a JSON object that is merged into every OCR request. For example, `{"model": "mistral-ocr-2512"}` replaces the default `mistral-ocr-latest` model.
### What Is Sent and What Happens on Failure
Open WebUI sends only `.pdf` uploads to Mistral OCR. Every other file type, images included, goes through the built-in loaders. A failed OCR call does not fail the upload: the file is indexed with a single chunk that reads `Error during processing: ...`, so check the file's extracted content when a document looks processed but returns nothing useful.
@@ -108,7 +108,7 @@ Open WebUI emits **170+ events** spanning every subsystem. Each name is namespac
| **Config** | `config.updated`, `config.models.updated`, `config.connections.updated`, `config.webhook.updated` |
| **Other** | `channel.*`, `calendar.*`, `automation.*`, `memory.*`, `note.*`, `image.*`, `audio.*`, `terminal.*`, `feedback.*`, `notification.*` |
A subset of these also drive user-facing [Notifications](/features/chat-conversations/chat-features/notifications): `chat.finished`, `chat.failed`, `channel.message`, `calendar.alert` and `retrieval.content.process_failed` are the five events a user can subscribe a webhook target to.
Some of these also drive user-facing [Notifications](/features/chat-conversations/chat-features/notifications#events), which lists the events a user can subscribe a target to.
The authoritative, complete list is exposed by the backend event catalog and shown in **Settings → Admin → General → Events** when configuring webhooks.
@@ -342,12 +342,14 @@ Write Always Loaded patterns against the [tool names the model sees](/features/e
| `grep_knowledge_files` | Exact text / regex search across knowledge file content. Returns matching lines with line numbers. Complements `query_knowledge_files` (semantic) when you need literal matches. |
| `view_file` | Read a user-accessible file by ID with character pagination (`offset`, `max_chars`) or line range (`start_line`, `end_line`, always numbered); `line_numbers` numbers character pages. |
| `view_knowledge_file` | Read a knowledge-base file by ID with character pagination (`offset`, `max_chars`) or line range (`start_line`, `end_line`, always numbered); `line_numbers` numbers character pages. |
| `display_file` | Show a knowledge-base file to the user inline in the chat, optionally opened at a page or slide. |
| `kb_exec` *(opt-in)* | Filesystem-style command interface for knowledge bases (`ls`, `tree`, `cat`, `head`, `tail`, `sed`, `grep`, `find`, `wc`, `stat`, with pipe support). Directory-aware: `ls docs/`, `tree`, `grep "x" docs/`, and path-based file refs (`docs/api/auth.md`). Replaces the discovery/read tools above when [`ENABLE_KB_EXEC`](/reference/env-configuration#enable_kb_exec) is set. |
| **Files** | *Requires per-model "Files" category enabled, the model's **File Upload** capability on with **File Context** off, the user's `chat.file_upload` permission, and at least one file attached to the current chat. Covers files the user attached to the conversation, not knowledge bases. Turning **File Context** off for this is also the setup that keeps the prompt prefix cacheable, so turn **Citations** off alongside it and put your citation rules in the system prompt instead; see [prompt caching](/features/chat-conversations/prompt-caching).* |
| `list_chat_files` | List the files attached to the current chat, with each file's ID, filename, content type and size. |
| `query_chat_files` | Semantic / RAG search across the attached files, or one file when given its ID. Results are returned as cited chunks. |
| `grep_chat_files` | Exact text / regex search across the attached files, returning matching lines with file IDs and line numbers, or just per-file counts. Capped at 50 matches by default, the same [`KNOWLEDGE_GREP_MAX_MATCHES`](/reference/env-configuration#knowledge_grep_max_matches) limit the knowledge greps use. |
| `view_file` | Read one of the attached files by ID, with character pagination or a line range. Same tool, and the same [`VIEW_FILE_DEFAULT_MAX_CHARS`](/reference/env-configuration#view_file_default_max_chars) / [`VIEW_FILE_MAX_CHARS`](/reference/env-configuration#view_file_max_chars) sizing, as when it reads a knowledge file. |
| `display_file` | Show one of the attached files to the user inline in the chat. |
| **Image Gen** | *Requires image generation enabled (per-tool) AND per-chat "Image Generation" toggle enabled.* |
| `generate_image` | Generates a new image based on a prompt. Requires `ENABLE_IMAGE_GENERATION`. |
| `edit_image` | Edits existing images based on a prompt and image URLs. Requires `ENABLE_IMAGE_EDIT`. |
@@ -441,6 +443,7 @@ Use this quick matrix instead of memorizing per-row caveats.
| `grep_knowledge_files` | ✅ (auto-scoped) | ✅ |
| `view_file` | ✅ (when attached items include files/collections) | ❌ |
| `view_knowledge_file` | ✅ (when attached items include files/collections) | ✅ |
| `display_file` | ✅ (when attached items include files/collections) | ✅ |
| `view_note` | ✅ (when attached items include notes) | ❌ |
Quick rule: `list_knowledge` and `list_knowledge_bases` are mutually exclusive.
@@ -454,7 +457,7 @@ Quick rule: `list_knowledge` and `list_knowledge_bases` are mutually exclusive.
When the **Knowledge Base** category is enabled and any of these are present, the model's system prompt gains an `<attached_knowledge>` block listing each item's type, ID, name, and which of the three it came from. This is a table of contents, not the content: it tells the model what it may reach for and gives it the IDs to pass to `query_knowledge_files` and friends, so it can scope a search to one knowledge base instead of guessing or searching everything.
:::info `kb_exec` replaces the matrix when enabled
When [`ENABLE_KB_EXEC`](/reference/env-configuration#enable_kb_exec) is set, Open WebUI injects `kb_exec` instead of the file-oriented tools listed above. Still injected alongside it: `query_knowledge_files` (always), `view_note` (when notes are attached), and `query_knowledge_bases` + `search_knowledge_bases` (when no KB is attached). The model interacts with files through familiar shell commands. See the [Knowledge feature page](/features/workspace/knowledge#filesystem-style-access-kb_exec) for details.
When [`ENABLE_KB_EXEC`](/reference/env-configuration#enable_kb_exec) is set, Open WebUI replaces the file-oriented tools listed above with `kb_exec`. Still injected alongside it: `query_knowledge_files` and `display_file` (always), `view_note` (when notes are attached), and `query_knowledge_bases` + `search_knowledge_bases` (when no KB is attached). The model interacts with files through familiar shell commands. See the [Knowledge feature page](/features/workspace/knowledge#filesystem-style-access-kb_exec) for details.
:::
#### Tool Reference
@@ -474,6 +477,7 @@ When [`ENABLE_KB_EXEC`](/reference/env-configuration#enable_kb_exec) is set, Ope
| `grep_knowledge_files` | `pattern` (required; regex auto-detected), `file_id` (optional, single-file mode), `case_insensitive` (default: false), `count_only` (default: false) | Matching lines with file IDs, filenames, and 1-indexed line numbers (capped at 50 matches by default, see [`KNOWLEDGE_GREP_MAX_MATCHES`](/reference/env-configuration#knowledge_grep_max_matches)) |
| `view_file` | `file_id` (required), `offset` (default: 0), `max_chars` (default: 10000, cap: 100000; both configurable), `line_numbers` (default: false), `start_line` / `end_line` (optional; line-based addressing overrides `offset`/`max_chars`) | `{id, filename, content, updated_at, created_at}`, includes `truncated`, `total_chars`, `next_offset` when paginated, or `total_lines`, `showing_lines`, `next_start_line` in line mode |
| `view_knowledge_file` | Same parameters as `view_file` | `{id, filename, content, updated_at, created_at, knowledge_id, knowledge_name}`, with the same pagination and line-mode fields as `view_file` |
| `display_file` | `path` (required; a `file_id` or `/api/v1/files/<file_id>/content`), `page` (optional; 1-based page or slide for PDF, DOCX and PPTX previews) | `{type, source, exists, displayed, path, name, content_type}`; the file is shown inline in the chat |
| `kb_exec` | `command` (required), a filesystem-style command: `ls` (root) / `ls <dir>/` / `ls -a` (flat with paths), sorted by path unless `-t` (newest), `-S` (largest) or `-r` (reverse) is given, `tree` / `tree <dir>/`, `cat -n <file>`, `head -N <file>`, `tail -N <file>`, `sed -n '<a>,<b>p' <file>`, `grep [-i\|-l\|-c] "<pattern>" [<dir>/\|<file>\|*.ext]`, `find [<dir>/] "<glob>"`, `wc <file>`, `stat <file>`; supports pipes (`grep "auth" \| head -5`); files referenced by path (`docs/api/auth.md`), filename, or file ID | Plain text command output (matches/listing/tree/file content as appropriate) |
| **Image Gen** | | |
| `generate_image` | `prompt` (required), `size` (optional, `WIDTHxHEIGHT` such as `1536x1024`; omit for the configured default) | `{status, message, images}`, auto-displayed. With a terminal selected, each image also carries `terminal_path` |
@@ -643,7 +647,7 @@ When the **Builtin Tools** capability is enabled, you can further control which
| **Memory** | `search_memories`, `list_memory_paths`, `read_memory_path`, `list_memories`, `update_memory`, `add_memory`, `replace_memory_content`, `delete_memory` | Search and manage user memories |
| **Chat History** | `search_chats`, `view_chat` | Search and view user chat history |
| **Notes** | `search_notes`, `view_note`, `write_note`, `replace_note_content` | Search, view, and manage user notes |
| **Knowledge Base** | `list_knowledge`, `list_knowledge_bases`, `search_knowledge_bases`, `query_knowledge_bases`, `search_knowledge_files`, `query_knowledge_files`, `grep_knowledge_files`, `view_file`, `view_knowledge_file` (or `kb_exec` + `query_knowledge_files` + `view_note`/`query_knowledge_bases`/`search_knowledge_bases` as applicable when [`ENABLE_KB_EXEC`](/reference/env-configuration#enable_kb_exec) is set) | Browse and query knowledge bases |
| **Knowledge Base** | `list_knowledge`, `list_knowledge_bases`, `search_knowledge_bases`, `query_knowledge_bases`, `search_knowledge_files`, `query_knowledge_files`, `grep_knowledge_files`, `view_file`, `view_knowledge_file`, `display_file` (or `kb_exec` + `query_knowledge_files` + `display_file` + `view_note`/`query_knowledge_bases`/`search_knowledge_bases` as applicable when [`ENABLE_KB_EXEC`](/reference/env-configuration#enable_kb_exec) is set) | Browse and query knowledge bases |
| **Web Search** | `search_web`, `fetch_url` | Search the web and fetch URL content |
| **Image Generation** | `generate_image`, `edit_image` | Generate and edit images |
| **Code Interpreter** | `execute_code` | Execute code in a sandboxed environment |
+1 -1
View File
@@ -71,7 +71,7 @@ Notes uses a context-aware **floating toolbar** for formatting:
* **Double-click text** to apply bold, italic, underline, strikethrough, or inline code
* **Drag-and-drop** list items to reorder
The top bar shows real-time **word and character counts**, and a **microphone icon** enables voice dictation.
The top bar shows real-time **word and character counts**. The **microphone icon** offers **Record**, **Capture Audio** and **Upload Audio**. The recording is saved to the note as soon as it is uploaded, and its transcription finishes on the server.
:::info Rich Text in Chats
This editor can also be enabled for standard chats: **Settings > Interface > Rich Text Input for Chat** and **Show Formatting Toolbar**.
+2
View File
@@ -118,6 +118,7 @@ With [native function calling](/features/extensibility/plugin/tools#tool-calling
| `grep_knowledge_files` | ✅ (scoped) | ✅ | Exact text / regex search across knowledge files (returns matching lines with line numbers; auto-detects regex like `error|warn`) |
| `view_file` | ✅ | ❌ | Read file content with pagination (`offset`/`max_chars`) or by line range (`start_line`/`end_line`, optional `line_numbers`) |
| `view_knowledge_file` | ✅ | ✅ | Read file content from any accessible KB |
| `display_file` | ✅ | ✅ | Show a file to the user inline in the chat, optionally at a page or slide |
| `view_note` | ✅ | ❌ | Read attached notes |
"Attached" here covers knowledge on the model, knowledge on the chat's folder, and knowledge bases or notes attached to the chat itself when the model's **File Context** capability is off. Whatever the source, the model is told what it has: its system prompt carries an `<attached_knowledge>` list of the items with their IDs, which it uses to page one knowledge base's file listing or to limit a filename search to a single knowledge base. Content search with `query_knowledge_files` covers all attached knowledge in one ranked pass and returns the highest scoring chunks across it, so chunks from different knowledge bases compete for the same result slots.
@@ -357,6 +358,7 @@ Knowledge bases can be managed programmatically:
- `POST /api/v1/files/{id}/data/content/update`: Replace the indexed text (body: `content`) and reprocess it in every knowledge base that contains the file. Empty `content` is rejected with `400`.
- `POST /api/v1/knowledge/{id}/file/add`: Add files to a knowledge base. A file whose extracted text is already in the knowledge base is rejected with `Duplicate content detected. Please provide unique content to proceed.`
- `POST /api/v1/knowledge/{id}/files/batch/add`: Add several files at once. The same duplicate check applies: a duplicate is reported as a failed file and the other files are still added.
- `GET /api/v1/knowledge/{id}/files`: List the files of a knowledge base, paginated with `page`. The calls that add or update files return only those files in `files`, and removing a file, renaming the knowledge base or changing its access return an empty `files` list, so read the full list from here.
- `POST /api/v1/knowledge/{id}/file/move`: Move a file between directories within the same KB (body: `file_id`, `directory_id`, where `null` moves to the KB root)
**Directories**
+1 -1
View File
@@ -154,7 +154,7 @@ The editor shows only the options that can work on this instance, for example **
| Setting | What it controls |
| :--- | :--- |
| **Vision** | Enable image analysis (requires a vision-capable base model). Raster images (PNG, JPEG, WebP, GIF) reach the model as image inputs; an SVG is read as a document, so it travels on **File Upload** and the model works from its source text. |
| **Vision** | Enable image analysis (requires a vision-capable base model). Raster images (PNG, JPEG, WebP, GIF) reach the model as image inputs; an SVG is read as a document, so it travels on **File Upload** and the model works from its source text. With Vision off, images returned by tools reach the model as a short `[image]` note. |
| **Web Search** | Enable the configured search provider |
| **Code Interpreter** | Enable Python code execution |
| **Terminal** | Let the model drive an attached [Open Terminal](/features/open-terminal) server to run commands and work with files. On by default; with it off, a chat's terminal is never handed to the model |
+20 -1
View File
@@ -335,6 +335,12 @@ is also being used and set to `True`. **Never disable this if OAUTH/SSO is not b
| `chat.attach_notes` | Attach Notes | **Attach Notes** in the **+** menu |
| `chat.attach_knowledge` | Attach Knowledge | **Attach Knowledge** in the **+** menu |
| `chat.reference_chats` | Reference Chats | **Reference Chats** in the **+** menu |
| `chat.selected_tools` | Selected Tools | The selected tools indicator in the chat input |
| `chat.selected_skills` | Selected Skills | The selected skills indicator in the chat input |
| `chat.selected_filters` | Selected Filters | The indicators for toggled-on filters in the chat input |
| `chat.selected_web_search` | Selected Web Search | The **Web Search** indicator in the chat input while web search is on |
| `chat.selected_image_generation` | Selected Image Generation | The **Image** indicator in the chat input while image generation is on |
| `chat.selected_code_interpreter` | Selected Code Interpreter | The **Code Interpreter** indicator in the chat input while it is on |
| `chat.status` | /status | The `/status` command |
| `chat.model_command` | /model | The `/model` command |
| `chat.settings_command` | /settings | The `/settings` command |
@@ -4004,6 +4010,13 @@ In a custom Docker image, change the version in the line that installs it and re
- Description: When enabled, PDFs are sent to the Mistral OCR API **inline as a base64 data URL** instead of being uploaded to Mistral's file store first. Useful when the separate upload step is undesirable (proxy/air-gapped setups) or fails; it trades the extra upload request for a single larger request. Also configurable as **Use Base64** in **Settings → Admin → Documents**.
- Persistence: This environment variable is a `ConfigVar` variable.
#### `MISTRAL_OCR_PARAMS`
- Type: `str` (JSON object)
- Default: Empty (the request is sent unchanged)
- Description: JSON object merged into every Mistral OCR request, e.g. `{"model": "mistral-ocr-2512"}` to pick the OCR model. Also configurable as **Parameters** in **Settings → Admin → Documents** when Mistral OCR is the extraction engine.
- Persistence: This environment variable is a `ConfigVar` variable.
#### `EXTERNAL_DOCUMENT_LOADER_URL`
- Type: `str`
@@ -4360,7 +4373,7 @@ Of the files it does receive, images are dispatched with `fileType=1` and PDFs w
- Type: `float`
- Default: `0.0`
- Description: Sets the relevance threshold to consider for documents when used with reranking.
- Description: Sets the relevance threshold to consider for documents when used with reranking. Only chunks scoring at or above this value are kept. `0` means no threshold. Negative values are valid for rerankers that return raw scores outside the 0 to 1 range.
- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_RAG_HYBRID_SEARCH`
@@ -4659,6 +4672,12 @@ Only increase this variable's value if it does. Otherwise you might run into une
:::
#### `RAG_EMBEDDING_BUFFER_SIZE`
- Type: `int`
- Default: `1000`
- Description: Number of chunks embedded and saved to the vector database per step while a document is processed. Rounded up to a whole multiple of [`RAG_EMBEDDING_BATCH_SIZE`](#rag_embedding_batch_size). Must be a positive integer.
#### `ENABLE_ASYNC_EMBEDDING`
- Type: `bool`
+2
View File
@@ -104,6 +104,8 @@ WebUI exports the following metrics via OpenTelemetry:
Metrics are sent via OTLP (default every 10 seconds, configurable via `OTEL_METRICS_EXPORT_INTERVAL_MILLIS`) and can be visualized in **Grafana** (via Prometheus/Mimir).
To leave routes such as health checks out of both traces and HTTP metrics, set `OTEL_PYTHON_FASTAPI_EXCLUDED_URLS` (or `OTEL_PYTHON_EXCLUDED_URLS`) to comma-separated regular expressions. Each is matched anywhere in the request URL, so `/health,/_app/immutable/.*` also covers `/health/db`.
## 🔧 Custom Collector Setup
To use a different (external) OpenTelemetry Collector/Stack: