mirror of
https://github.com/open-webui/open-webui.git
synced 2026-07-11 08:34:32 -05:00
Compare commits
base: github-starred:dev
github-starred:v0.10.2
github-starred:v0.10.1
github-starred:v0.10.0
github-starred:v0.9.6
github-starred:v0.9.5
github-starred:v0.9.4
github-starred:v0.9.3
github-starred:v0.9.2
github-starred:v0.9.1
github-starred:v0.9.0
github-starred:v0.8.12
github-starred:v0.8.11
github-starred:v0.8.10
github-starred:v0.8.9
github-starred:v0.8.8
github-starred:v0.8.7
github-starred:v0.8.6
github-starred:v0.8.5
github-starred:v0.8.4
github-starred:v0.8.3
github-starred:v0.8.2
github-starred:v0.8.1
github-starred:v0.8.0
github-starred:v0.7.2
github-starred:v0.7.1
github-starred:v0.7.0
github-starred:v0.6.43
github-starred:v0.6.42
github-starred:v0.6.41
github-starred:v0.6.40
github-starred:v0.6.39
github-starred:v0.6.38
github-starred:v0.6.37
github-starred:v0.6.36
github-starred:v0.6.35
github-starred:v0.6.34
github-starred:v0.6.33
github-starred:v0.6.32
github-starred:v0.6.31
github-starred:v0.6.30
github-starred:v0.6.29
github-starred:v0.6.28
github-starred:v0.6.27
github-starred:v0.6.26
github-starred:v0.6.25
github-starred:v0.6.24
github-starred:v0.6.23
github-starred:v0.6.22
github-starred:v0.6.21
github-starred:v0.6.20
github-starred:v0.6.19
github-starred:v0.6.18
github-starred:v0.6.17
github-starred:v0.6.16
github-starred:v0.6.15
github-starred:v0.6.14
github-starred:v0.6.13
github-starred:v0.6.12
github-starred:v0.6.11
github-starred:v0.6.10
github-starred:v0.6.9
github-starred:v0.6.8
github-starred:v0.6.7
github-starred:v0.6.6
github-starred:v0.6.5
github-starred:v0.6.4
github-starred:v0.6.3
github-starred:v0.6.2
github-starred:v0.6.1
github-starred:v0.6.0
github-starred:v0.5.20
github-starred:v0.5.19
github-starred:v0.5.18
github-starred:v0.5.17
github-starred:v0.5.16
github-starred:v0.5.15
github-starred:v0.5.14
github-starred:v0.5.13
github-starred:v0.5.12
github-starred:v0.5.11
github-starred:v0.5.10
github-starred:v0.5.9
github-starred:v0.5.8
github-starred:v0.5.7
github-starred:v0.5.6
github-starred:v0.5.5
github-starred:v0.5.4
github-starred:v0.5.3
github-starred:v0.5.2
github-starred:v0.5.1
github-starred:v0.5.0
github-starred:v0.4.8
github-starred:v0.4.7
github-starred:v0.4.6
github-starred:v0.4.5
github-starred:v0.4.4
github-starred:v0.4.3
github-starred:v0.4.2
github-starred:v0.4.1
github-starred:v0.4.0
github-starred:v0.3.35
github-starred:v0.3.34
github-starred:v0.3.33
github-starred:v0.3.32
github-starred:v0.3.31
github-starred:v0.3.30
github-starred:v0.3.29
github-starred:v0.3.28
github-starred:v0.3.27
github-starred:v0.3.26
github-starred:v0.3.25
github-starred:v0.3.24
github-starred:v0.3.23
github-starred:v0.3.22
github-starred:v0.3.21
github-starred:v0.3.20
github-starred:v0.3.19
github-starred:v0.3.18
github-starred:v0.3.17
github-starred:v0.3.16
github-starred:v0.3.15
github-starred:v0.3.14
github-starred:v0.3.13
github-starred:v0.3.12
github-starred:v0.3.11
github-starred:v0.3.10
github-starred:v0.3.9
github-starred:v0.3.8
github-starred:v0.3.7
github-starred:v0.3.6
github-starred:v0.3.5
github-starred:v0.3.4
github-starred:v0.3.3
github-starred:v0.3.2
github-starred:v0.3.1
github-starred:v0.3.0
github-starred:v0.2.5
github-starred:v0.2.4
github-starred:v0.2.3
github-starred:v0.2.2
github-starred:v0.2.1
github-starred:v0.2.0
github-starred:v0.1.125
github-starred:v0.1.124
github-starred:v0.1.123
github-starred:v0.1.122
github-starred:v0.1.121
github-starred:v0.1.120
github-starred:v0.1.119
github-starred:v0.1.118
github-starred:v0.1.117
github-starred:v0.1.116
github-starred:v0.1.115
github-starred:v0.1.114
github-starred:v0.1.113
github-starred:v0.1.112
github-starred:v0.1.111
github-starred:v0.1.110
github-starred:v0.1.109
github-starred:v0.1.108
github-starred:v0.1.107
github-starred:v0.1.106
github-starred:v0.1.105
github-starred:v0.1.104
github-starred:v0.1.103
github-starred:v0.1.102
...
compare: github-starred:v0.10.0
github-starred:v0.10.2
github-starred:v0.10.1
github-starred:v0.10.0
github-starred:v0.9.6
github-starred:v0.9.5
github-starred:v0.9.4
github-starred:v0.9.3
github-starred:v0.9.2
github-starred:v0.9.1
github-starred:v0.9.0
github-starred:v0.8.12
github-starred:v0.8.11
github-starred:v0.8.10
github-starred:v0.8.9
github-starred:v0.8.8
github-starred:v0.8.7
github-starred:v0.8.6
github-starred:v0.8.5
github-starred:v0.8.4
github-starred:v0.8.3
github-starred:v0.8.2
github-starred:v0.8.1
github-starred:v0.8.0
github-starred:v0.7.2
github-starred:v0.7.1
github-starred:v0.7.0
github-starred:v0.6.43
github-starred:v0.6.42
github-starred:v0.6.41
github-starred:v0.6.40
github-starred:v0.6.39
github-starred:v0.6.38
github-starred:v0.6.37
github-starred:v0.6.36
github-starred:v0.6.35
github-starred:v0.6.34
github-starred:v0.6.33
github-starred:v0.6.32
github-starred:v0.6.31
github-starred:v0.6.30
github-starred:v0.6.29
github-starred:v0.6.28
github-starred:v0.6.27
github-starred:v0.6.26
github-starred:v0.6.25
github-starred:v0.6.24
github-starred:v0.6.23
github-starred:v0.6.22
github-starred:v0.6.21
github-starred:v0.6.20
github-starred:v0.6.19
github-starred:v0.6.18
github-starred:v0.6.17
github-starred:v0.6.16
github-starred:v0.6.15
github-starred:v0.6.14
github-starred:v0.6.13
github-starred:v0.6.12
github-starred:v0.6.11
github-starred:v0.6.10
github-starred:v0.6.9
github-starred:v0.6.8
github-starred:v0.6.7
github-starred:v0.6.6
github-starred:v0.6.5
github-starred:v0.6.4
github-starred:v0.6.3
github-starred:v0.6.2
github-starred:v0.6.1
github-starred:v0.6.0
github-starred:v0.5.20
github-starred:v0.5.19
github-starred:v0.5.18
github-starred:v0.5.17
github-starred:v0.5.16
github-starred:v0.5.15
github-starred:v0.5.14
github-starred:v0.5.13
github-starred:v0.5.12
github-starred:v0.5.11
github-starred:v0.5.10
github-starred:v0.5.9
github-starred:v0.5.8
github-starred:v0.5.7
github-starred:v0.5.6
github-starred:v0.5.5
github-starred:v0.5.4
github-starred:v0.5.3
github-starred:v0.5.2
github-starred:v0.5.1
github-starred:v0.5.0
github-starred:v0.4.8
github-starred:v0.4.7
github-starred:v0.4.6
github-starred:v0.4.5
github-starred:v0.4.4
github-starred:v0.4.3
github-starred:v0.4.2
github-starred:v0.4.1
github-starred:v0.4.0
github-starred:v0.3.35
github-starred:v0.3.34
github-starred:v0.3.33
github-starred:v0.3.32
github-starred:v0.3.31
github-starred:v0.3.30
github-starred:v0.3.29
github-starred:v0.3.28
github-starred:v0.3.27
github-starred:v0.3.26
github-starred:v0.3.25
github-starred:v0.3.24
github-starred:v0.3.23
github-starred:v0.3.22
github-starred:v0.3.21
github-starred:v0.3.20
github-starred:v0.3.19
github-starred:v0.3.18
github-starred:v0.3.17
github-starred:v0.3.16
github-starred:v0.3.15
github-starred:v0.3.14
github-starred:v0.3.13
github-starred:v0.3.12
github-starred:v0.3.11
github-starred:v0.3.10
github-starred:v0.3.9
github-starred:v0.3.8
github-starred:v0.3.7
github-starred:v0.3.6
github-starred:v0.3.5
github-starred:v0.3.4
github-starred:v0.3.3
github-starred:v0.3.2
github-starred:v0.3.1
github-starred:v0.3.0
github-starred:v0.2.5
github-starred:v0.2.4
github-starred:v0.2.3
github-starred:v0.2.2
github-starred:v0.2.1
github-starred:v0.2.0
github-starred:v0.1.125
github-starred:v0.1.124
github-starred:v0.1.123
github-starred:v0.1.122
github-starred:v0.1.121
github-starred:v0.1.120
github-starred:v0.1.119
github-starred:v0.1.118
github-starred:v0.1.117
github-starred:v0.1.116
github-starred:v0.1.115
github-starred:v0.1.114
github-starred:v0.1.113
github-starred:v0.1.112
github-starred:v0.1.111
github-starred:v0.1.110
github-starred:v0.1.109
github-starred:v0.1.108
github-starred:v0.1.107
github-starred:v0.1.106
github-starred:v0.1.105
github-starred:v0.1.104
github-starred:v0.1.103
github-starred:v0.1.102
38 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4d2e13cf2b | Merge pull request #26385 from open-webui/dev | ||
|
|
02dc3e689c |
Merge pull request #25590 from open-webui/dev
refac |
||
|
|
b868da6bcd |
Merge pull request #25589 from open-webui/dev
refac |
||
|
|
90f4b4fcda |
Merge pull request #25524 from open-webui/dev
refac |
||
|
|
b3e9d16b6f |
0.9.6 (#25497)
* refac * refac * refac: reorganize scripts and ci workflows * chore: remove unused cypress tests * chore: remove unused legacy test suite * refac: deprecate peewee migration layer The Alembic init migration (7e5b5dc7342b) already creates the equivalent schema. Peewee migrations are no longer needed for any version >= 0.3.6. * refac: remove dead peewee connection wrappers * refac * refac * style: ruff format * style: standardize os.environ.get to os.getenv * refac: modernize imports, standardize type hints and docstrings * refac: modernize type annotations (PEP 604 / PEP 585) * refac * feat: kb_exec * refac * refac * refac * refac * upd:i18n: es-ES Translation update v0.9.5 (#24651) es-ES Translation. Update v0.9.5 Added translation of new strings. * feat: knowledge directory * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * fix: German i18n translations (#24668) * i18n: Update Swedish (sv-SE) translation — merge with latest dev (#24665) Co-authored-by: Daniel Nylander <daniel@danielnylander.se> * refac * Fix translation for 'Authentication' in Danish (#24645) * refac * fix: korean i18n * i18n: Update catalan translation.json (#24569) * refac * fix: validate folder_id ownership on chat create + folder-update endpoints (#24588) POST /api/v1/chats/new and POST /api/v1/chats/{id}/folder accepted a caller-supplied folder_id with no validation — neither ownership, nor existence, nor UUID format. The row was persisted with the supplied value verbatim, so the DB ended up with chat rows whose folder_id referenced another user's folder, a non-existent UUID, or even a non-UUID string. No read path surfaces this across users — every chat-folder read is user_id-filtered on both sides — so this is referential-integrity hardening rather than a security boundary fix. But there's no reason to accept dangling references either, and the downstream consumers shouldn't have to assume the column is clean. Add a Folders.get_folder_by_id_and_user_id() lookup at both writers: if a folder_id is supplied, it must match a folder owned by the caller. None remains allowed (chat-without-folder is the default). Non-existent and non-UUID values fall through to 404. Reported by ShigekiTsuchiyama in GHSA-4vrg-2vcq-q7jc. Co-authored-by: ShigekiTsuchiyama <ShigekiTsuchiyama@users.noreply.github.com> * refac * refac * refac * refac * fix: enforce features.direct_tool_servers on chat-completion tool_servers (#24693) * fix: enforce features.direct_tool_servers on chat-completion tool_servers The features.direct_tool_servers per-user permission was correctly enforced on the storage path (routers/users.py user/settings/update, which strips toolServers from saved settings when the caller lacks the permission), but the inference path (/api/chat/completions) popped tool_servers straight from the request body into metadata with no permission check. The middleware (utils/middleware.py:2799) then consumed direct_tool_servers to inject system_prompt into the message array and register external tool specs that get invoked during the completion. End result: any authenticated user could bypass the admin-set per-user feature toggle and use inline tool_servers in their chat-completion requests, even when admin had explicitly denied the permission. Default for USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS is False (config.py:2750), so under default config no regular user is supposed to be able to use direct tool servers — making this a real boundary bypass on out-of-the-box deployments rather than a corner case. Mirror the storage-side behaviour at the inference entry point: pop tool_servers from the request body, then silently drop the value if the caller is non-admin and lacks features.direct_tool_servers. Admins always pass; users with the explicit grant always pass; everyone else gets None propagated into metadata, which the middleware already handles as the no-tool-servers case. Reported by berkant-koc in GHSA-f582-c373-jjf6. Co-authored-by: berkant-koc <berkant-koc@users.noreply.github.com> * chore: trim verbose comment on tool_servers permission check --------- Co-authored-by: berkant-koc <berkant-koc@users.noreply.github.com> * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * fix: legacy peewee tables fk * refac Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com> * fix: default optional env vars used with bash `,,` in start.sh (#24683) start.sh runs with `set -euo pipefail`, but three call sites added in |
||
|
|
3660bc00fd |
Merge pull request #24492 from open-webui/dev
0.9.5 |
||
|
|
f51d2b026f |
Merge pull request #24483 from open-webui/dev
0.9.4 |
||
|
|
adc9076d17 |
0.9.3 (#24482)
* refac * refac * refac * Merge pull request #24356 from Classic298/patch-1 doc/chore: Update SECURITY.md * refac * refac * refac * refac * refac * chore: Update SECURITY.md (#24363) * Update SECURITY.md * Update SECURITY.md * Implement asynchronous database ping for health checks (#24380) * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * fix: prevent STT from blocking the uvicorn event loop (#24338) The transcription endpoint was async but called the synchronous transcribe() function directly, blocking the single-threaded uvicorn event loop for the entire duration of inference. This caused all HTTP and WebSocket connections to stall for every user on the instance during STT processing. - Add asyncio import - Use async UploadFile.read() instead of synchronous file.file.read() - Offload the blocking transcribe() call via asyncio.to_thread() Closes #24169 * refac * fix: open file content in new window when clicking file name in FileItemModal (#24125) Previously, clicking the file name link did not open the file content because the condition checked `!isPDF && item.url`, which failed for `type === 'file'` items that use an ID-based URL path. Update the condition to trigger on `item.type === 'file' || item.url`, and resolve the correct URL by extracting `fileId` from `item.id` or `item.tempId` instead of using `item.url` directly as the file identifier. * refac * refac * refac * refac * refac * refac * refac * refac * refac * Refactor file processing to use asyncio for transcribing, improving concurrency. (#24379) * Apply validate_profile_image_url to ChannelWebhookForm.profile_image_url (#24370) * refac * refac * refac * refac * refac * fix: stream GET /chats/all to prevent OOM on large chat histories (#24461) Convert the /chats/all endpoint from loading all user chats into memory at once to a streaming NDJSON response that fetches chats in batches of 100. This prevents Out-of-Memory crashes for users with large chat histories. Backend: Added async generator that paginates through chats with short-lived DB sessions per batch (critical for SQLite lock release). Frontend: Updated getAllChats to consume the NDJSON stream via ReadableStream reader, accumulating results for the export file. Ref: open-webui#22206 * refac * refac * refac * refac * refac * refac * Enhance CommitSessionMiddleware to allow health probes to bypass session management, ensuring faster and more reliable responses. (#24384) * refac * refac * refac * refac * refac * refac * refac: apply DOMPurify to excel and office HTML render assignments (#24468) * I18n/improve chinese translation (#24194) * i18n: improve zh-CN translation * i18n: improve zh-TW translation * perf(prompts): filter prompt list in SQL instead of N+1 has_access loop (#24288) get_prompts_by_user_id used to fetch every active prompt (with users + all access grants), then call AccessGrants.has_access() once per prompt that the user did not own. With 600+ prompts this issued ~600 extra round-trips per request and explained the multi-second delay reported in the GET /api/v1/prompts and /api/v1/prompts/tags endpoints for non-admin users. Push the access check into a single SQL query via the existing AccessGrants.has_permission_filter (EXISTS subquery), so only accessible rows come back from the DB. Users and access grants for the surviving rows are still batch-fetched, no N+1 anywhere on this path. Co-authored-by: Claude <noreply@anthropic.com> * refac * refac * Update catalan translation.json (#24174) * perf(prompts): make /tags fetch only the tags column with SQL access filter (#24287) Non-admin GET /api/v1/prompts/tags went through get_prompts_by_user_id, which loaded every active prompt with its full content/data/meta plus owner records and all access grants, then ran one has_access query per prompt that wasn't owned by the caller - all so the endpoint could collapse the result to a sorted tag list. With 600 prompts this took several seconds while the admin path (a single SELECT) returned in <1s. Add Prompts.get_tags_by_user_id which selects only the tags column and applies the same EXISTS-based access filter used by /list. Also tighten the admin get_tags to project just the tags column instead of full rows. The endpoint is now one DB query (plus one for groups), no row hydration, no N+1. Co-authored-by: Claude <noreply@anthropic.com> * refac * refac * i18n: Add Tagalog (Filipino) translation (#24254) Signed-off-by: Adam Tao <tcx4c70@gmail.com> Co-authored-by: Tim Baek <tim@openwebui.com> Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> Co-authored-by: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com> Co-authored-by: Kylapaallikko <Kylapaallikko@users.noreply.github.com> Co-authored-by: Teay <pythontogoplease@gmail.com> Co-authored-by: tcx4c70 <tcx4c70@gmail.com> Co-authored-by: goodbey857 <76645482+goodbey857@users.noreply.github.com> Co-authored-by: Jacob Leksan <63938553+jmleksan@users.noreply.github.com> Co-authored-by: RomualdYT <romuald@gameurnews.fr> Co-authored-by: Lucas <lucas@vanosenbruggen.com> Co-authored-by: Classic298 <27028174+Classic298@users.noreply.github.com> Co-authored-by: Constantine <Runixer@gmail.com> * refac * refac * refac * style(env): satisfy ruff (datetime alias, line length, identity check) (#24118) * Korean Translation Update (#24087) Signed-off-by: Adam Tao <tcx4c70@gmail.com> Co-authored-by: Tim Baek <tim@openwebui.com> Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> Co-authored-by: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com> Co-authored-by: Kylapaallikko <Kylapaallikko@users.noreply.github.com> Co-authored-by: Teay <pythontogoplease@gmail.com> Co-authored-by: tcx4c70 <tcx4c70@gmail.com> Co-authored-by: goodbey857 <76645482+goodbey857@users.noreply.github.com> Co-authored-by: Jacob Leksan <63938553+jmleksan@users.noreply.github.com> Co-authored-by: RomualdYT <romuald@gameurnews.fr> Co-authored-by: Lucas <lucas@vanosenbruggen.com> Co-authored-by: Classic298 <27028174+Classic298@users.noreply.github.com> Co-authored-by: Constantine <Runixer@gmail.com> * refac * refac * refac * refac * refac * refac * refac * refac * refac * feat: brave search llm context * refac * refac * refac * refac * refac * refac * refac * fix(mcp): remove asyncio.wait_for/shield from MCP cleanup in chat handler (#24105) asyncio.wait_for() and asyncio.shield() create new asyncio Tasks which violate anyio cancel-scope task-ownership rules. The MCPClient's exit_stack contains anyio resources (streamable_http transport) that use anyio cancel scopes. When exited from a different task, anyio raises 'Attempted to exit a cancel scope that isn't the current task's current cancel scope' as a BaseException. This BaseException propagates through the finally block, discards the completed response return value, and surfaces as a 500 Internal Server Error / 'No response returned.' - silently swallowing successful MCP tool calls and blocking the chat endpoint. Fix: call client.disconnect() directly in a simple loop. MCPClient.disconnect() already catches BaseException internally (see prior commit), so no wrapper is needed. Signed-off-by: Adam Tao <tcx4c70@gmail.com> Co-authored-by: Tim Baek <tim@openwebui.com> Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> Co-authored-by: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com> Co-authored-by: Kylapaallikko <Kylapaallikko@users.noreply.github.com> Co-authored-by: Teay <pythontogoplease@gmail.com> Co-authored-by: tcx4c70 <tcx4c70@gmail.com> Co-authored-by: goodbey857 <76645482+goodbey857@users.noreply.github.com> Co-authored-by: Jacob Leksan <63938553+jmleksan@users.noreply.github.com> Co-authored-by: RomualdYT <romuald@gameurnews.fr> Co-authored-by: Lucas <lucas@vanosenbruggen.com> Co-authored-by: Classic298 <27028174+Classic298@users.noreply.github.com> Co-authored-by: Constantine <Runixer@gmail.com> Co-authored-by: Circe (Claude Code Sonnet 4.6) <circe@athena-council.org> Co-authored-by: Claude <noreply@anthropic.com> * fix:image url validation and signout post (#24420) * refac(routers): reject external URLs in profile/model image handlers * refac(ui): centralize image URL validation in safeImageUrl helper * refac(auths): make signout POST-only * refac: gate external profile image redirect behind ENABLE_PROFILE_IMAGE_URL_FORWARDING Restore the 302 redirect for external http(s) profile image URLs in the user and model profile-image endpoints, but gate it behind a new ENABLE_PROFILE_IMAGE_URL_FORWARDING env flag (default: True). Existing deployments that rely on external profile image forwarding continue to work unchanged. Operators who want to suppress the redirect (to prevent client-side IP/UA/Referer leaks) can set the flag to False. * refac * refac * refac * refac * refac * refac * refac * refac * refac * chore: format * chore: changelog (#24358) * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * changelog * doc: changelog * refac * refac * refac * chore: format * refac --------- Signed-off-by: Adam Tao <tcx4c70@gmail.com> Co-authored-by: Classic298 <27028174+Classic298@users.noreply.github.com> Co-authored-by: Jacob Leksan <63938553+jmleksan@users.noreply.github.com> Co-authored-by: Athanasios Oikonomou <athoik@gmail.com> Co-authored-by: Shirasawa <764798966@qq.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Aleix Dorca <aleixdorca@mac.com> Co-authored-by: Vincent Agra <agravj007@gmail.com> Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> Co-authored-by: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com> Co-authored-by: Kylapaallikko <Kylapaallikko@users.noreply.github.com> Co-authored-by: Teay <pythontogoplease@gmail.com> Co-authored-by: tcx4c70 <tcx4c70@gmail.com> Co-authored-by: goodbey857 <76645482+goodbey857@users.noreply.github.com> Co-authored-by: RomualdYT <romuald@gameurnews.fr> Co-authored-by: Lucas <lucas@vanosenbruggen.com> Co-authored-by: Constantine <Runixer@gmail.com> Co-authored-by: Shamil <ashm.tech@proton.me> Co-authored-by: Cyp <cypher9715@naver.com> Co-authored-by: looselyhuman <fieldian@gmail.com> Co-authored-by: Circe (Claude Code Sonnet 4.6) <circe@athena-council.org> |
||
|
|
8dae237a0b |
0.9.2 (#24081)
* refac * fix: remove reactive label from onDestroy in Markdown * Update fi-FI translation.json (#24010) Added missing translations. * refac * i18n: update ko-KR translations (conflict solved) (#23949) * i18n: update ko-KR translations * i18n: fix missing ko-KR translations and reviewed pr-bot recommendation * i18n: add pt-BR translations for newly added UI items and consistency pass (#23954) New **pt-BR** translations for items introduced in the latest releases, plus a consistency/quality pass across existing strings (grammar, tone, capitalization, pluralization). Placeholders and hotkeys preserved. No logic changes. * fix(utils): Switch throttle decorator to async (#23979) After migration to async db operations, the throttle decorator also needs to support async. Since the decorator is only used for async funcs now, we can just switch it to async instead of supporting sync and async at the same time. Signed-off-by: Adam Tao <tcx4c70@gmail.com> * refac * refac * refac * refac * feat: add PaddleOCR-vl loader support and implement retrieval router infrastructure (#23945) Co-authored-by: Tim Baek <tim@openwebui.com> Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> * refac * refac * Enhance image loading performance by adding preload links and setting loading attributes for logos in app.html (#24011) * feat(ui): add citation source overflow badge (#23918) * refac * i18n: enhance and expand Dutch language translations (#23944) * refac * refac * refac * perf: redirect default model profile image to canonical static URL (#24015) - Return 302 to /static/favicon.png instead of streaming the same PNG per model id so browsers can cache one asset for default avatars. - Validate stored /static/ paths with decode, normpath, and /static prefix checks; invalid paths fall back to favicon. Made-with: Cursor * refac * refac * refac * refac * refac * refac * refac * feat: enhance RichTextInput configuration to prevent duplicate extensions when rich text is enabled (#24009) * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * changelog (#24072) * refactor(firecrawl): use v2 API directly (#23934) Co-authored-by: Tim Baek <tim@openwebui.com> * chore: bump * perf(chats): drop redundant db.refresh after commit in update_chat_by_id (#24024) The chat table has no computed columns (no DEFAULT, SERIAL/IDENTITY, or TRIGGER that populate server-side values on UPDATE), and every column modified by update_chat_by_id is set explicitly from Python values earlier in the function. db.refresh therefore issues a SELECT that replaces those just-written Python values with the round-tripped database representation of the same values, which is a no-op for functional purposes but pulls the entire chat.chat JSON blob back over the network and through the driver's JSON decoder. On large, active chats where chat.chat can reach tens of megabytes, skipping the refresh measurably reduces latency and eliminates one ~JSON-sized transient allocation per write. * refac * chore: format * chore: i18n * refac --------- Signed-off-by: Adam Tao <tcx4c70@gmail.com> Co-authored-by: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com> Co-authored-by: Kylapaallikko <Kylapaallikko@users.noreply.github.com> Co-authored-by: Teay <pythontogoplease@gmail.com> Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> Co-authored-by: tcx4c70 <tcx4c70@gmail.com> Co-authored-by: goodbey857 <76645482+goodbey857@users.noreply.github.com> Co-authored-by: Jacob Leksan <63938553+jmleksan@users.noreply.github.com> Co-authored-by: RomualdYT <romuald@gameurnews.fr> Co-authored-by: Lucas <lucas@vanosenbruggen.com> Co-authored-by: Classic298 <27028174+Classic298@users.noreply.github.com> Co-authored-by: Constantine <Runixer@gmail.com> |
||
|
|
0a8a620fb6 |
Merge pull request #23925 from open-webui/dev
0.9.1 |
||
|
|
f31768e20e |
Merge pull request #23318 from open-webui/dev
0.9.0 |
||
|
|
9bd84258d0 |
Merge pull request #23120 from open-webui/dev
0.8.12 |
||
|
|
4d058a125b |
Merge pull request #23035 from open-webui/dev
0.8.11 |
||
|
|
e4e69a10ec |
Merge pull request #22469 from open-webui/dev
0.8.10 |
||
|
|
6c159a97b7 |
Merge pull request #22390 from open-webui/dev
refac |
||
|
|
947dcd34bd |
Merge pull request #22385 from open-webui/dev
0.8.9 |
||
|
|
79f0437980 |
Merge pull request #22168 from open-webui/dev
0.8.8 |
||
|
|
6137f7cb7e |
Merge pull request #22121 from open-webui/dev
0.8.7 |
||
|
|
9c9a18d6d4 |
Merge pull request #21971 from open-webui/dev
0.8.6 |
||
|
|
1ac3dd4a89 |
Merge pull request #21773 from open-webui/dev
0.8.5 |
||
|
|
2ed3055c42 |
Merge pull request #21618 from open-webui/dev
0.8.4 |
||
|
|
b8112d72b9 |
Merge pull request #21507 from open-webui/dev
refac |
||
|
|
4225791313 |
Merge pull request #21458 from open-webui/dev
0.8.3 |
||
|
|
7c7fe44328 |
Merge pull request #21443 from open-webui/dev
0.8.2 |
||
|
|
883f1dda0f |
Merge pull request #21346 from open-webui/dev
0.8.1 |
||
|
|
7a7a25766c |
Merge pull request #21314 from open-webui/dev
0.8.0 |
||
|
|
2b26355002 |
Merge pull request #20560 from open-webui/dev
0.7.2 |
||
|
|
f2a360cb87 |
Merge pull request #20523 from open-webui/dev
chore |
||
|
|
f9b0534e0c |
Merge pull request #20522 from open-webui/dev
0.7.1 |
||
|
|
6adde203cd |
Merge pull request #20394 from open-webui/dev
0.7 |
||
|
|
a7271532f8 |
0.6.43 (#20093)
* refac * fix: python pip install dep issue * Merge pull request #20085 from joaoback/patch-19 Update translation.json (pt-BR) * fix/refac: stt default content type * fix/refac: temp chat image handling * fix/refac: image action button * chore: bump --------- Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> |
||
|
|
d95f533214 |
Merge pull request #19729 from open-webui/dev
0.6.42 |
||
|
|
6f1486ffd0 |
Merge pull request #19466 from open-webui/dev
0.6.41 |
||
|
|
140605e660 |
Merge pull request #19462 from open-webui/dev
0.6.40 |
||
|
|
9899293f05 |
Merge pull request #19448 from open-webui/dev
0.6.39 |
||
|
|
e3faec62c5 |
Merge pull request #19416 from open-webui/dev
0.6.38 |
||
|
|
fc05e0a6c5 |
Merge pull request #19405 from open-webui/dev
chore: format |
||
|
|
fe6783c166 |
Merge pull request #19030 from open-webui/dev
0.6.37 |