Skip to content
Merged

Dev #255

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
233 commits
Select commit Hold shift + click to select a range
8f37a1b
i18n: improve zh-CN translation
ShirasawaSama Dec 22, 2025
42b6cf3
i18n: improve zh-TW translation
ShirasawaSama Dec 22, 2025
d053600
refac: styling
tjbck Dec 22, 2025
769110f
refac: styling
tjbck Dec 22, 2025
e9706cb
Merge pull request #20104 from ShirasawaSama/i18n/improve-chinese-tra…
tjbck Dec 22, 2025
117b1bf
refac
tjbck Dec 22, 2025
9824f0e
enh: ENABLE_DB_MIGRATIONS
tjbck Dec 23, 2025
758325a
infra: dockerfile base image
tjbck Dec 23, 2025
5995771
fix: channel model mention
tjbck Dec 23, 2025
2e9e46a
Update translation.json (pt-BR) (#20131)
joaoback Dec 23, 2025
c0ec049
refac: citation
tjbck Dec 25, 2025
4be9917
refac
tjbck Dec 25, 2025
df10609
refac
tjbck Dec 25, 2025
9c61e95
refac
tjbck Dec 26, 2025
85bbed3
enh: sync stats
tjbck Dec 26, 2025
459cfde
refac
tjbck Dec 26, 2025
4a17a7c
refac
tjbck Dec 26, 2025
44faf00
refac
tjbck Dec 26, 2025
6c14ba1
refac
tjbck Dec 26, 2025
51dd488
refac
tjbck Dec 26, 2025
39a2b97
refac
tjbck Dec 26, 2025
f5c07e3
refac
tjbck Dec 26, 2025
d292711
fix: extract correct MIME type from base64 profile images (#20171)
landerrosette Dec 26, 2025
9c2f514
refac
tjbck Dec 26, 2025
25db822
openWebUI supports openGauss vector store (#20179)
vincentsunx Dec 26, 2025
d08f9ed
refac
tjbck Dec 26, 2025
5f20102
refac
tjbck Dec 26, 2025
adf4630
refac
tjbck Dec 26, 2025
3b0d25a
refac
tjbck Dec 26, 2025
ac0ae2a
refac
tjbck Dec 26, 2025
a960958
refac
tjbck Dec 26, 2025
37b1560
refac
tjbck Dec 27, 2025
7b6f8b4
refac
tjbck Dec 27, 2025
d4de26b
refac
tjbck Dec 27, 2025
2041ab4
refac/enh: db session sharing
tjbck Dec 28, 2025
145c751
refac
tjbck Dec 28, 2025
c79fb7d
refac
tjbck Dec 28, 2025
eb4b085
refac
tjbck Dec 28, 2025
6dd0f99
rm: outdated tests
tjbck Dec 28, 2025
b1d0f00
refac/enh: db session sharing
tjbck Dec 28, 2025
93db0a4
I18n: improve chinese translation (#20197)
ShirasawaSama Dec 28, 2025
9405628
chore: dep-min
tjbck Dec 28, 2025
475dd91
refac
tjbck Dec 28, 2025
26af1f9
enh: WHISPER_COMPUTE_TYPE env var
tjbck Dec 28, 2025
267cc14
chore: rm google-generativeai
tjbck Dec 28, 2025
cc602ab
feat: Dynamically load yaml to speed up page loading (#20204)
ShirasawaSama Dec 28, 2025
3994d88
chore: remove vega import to reduce build size (#20200)
ShirasawaSama Dec 28, 2025
9a9b5ef
feat: add sidebar toggle to workspace and admin models pages (#20176)
silentoplayz Dec 28, 2025
87e8d39
feat: Dynamically load xlsx to speed up page loading (#20203)
ShirasawaSama Dec 28, 2025
ca176c5
Update KnowledgeSelector.svelte (#20213)
Classic298 Dec 28, 2025
88dbc14
refac
tjbck Dec 28, 2025
5d1459d
refac
tjbck Dec 28, 2025
2453b75
refac
tjbck Dec 28, 2025
5649a66
refac
tjbck Dec 28, 2025
fe3047d
refac
tjbck Dec 28, 2025
c024511
init (#20212)
Classic298 Dec 30, 2025
aaea9a5
refac/fix: comfyui filter output node type
tjbck Dec 30, 2025
b337103
chore(deps): update and synchronize backend dependencies (#20225)
Classic298 Dec 30, 2025
d5ccd95
fix: Update CitationModal.svelte (#20209)
Classic298 Dec 30, 2025
3b66016
fix: Update ResponseMessage.svelte (#20210)
Classic298 Dec 30, 2025
4750a7c
feat: expose ADMIN_EMAIL setting in Admin Panel (#20260)
Classic298 Dec 30, 2025
214dd50
feat: make changelog modal X button persist dismissal like "Okay, Let…
Classic298 Dec 30, 2025
95ce70c
Update Chat.svelte (#20256)
Classic298 Dec 30, 2025
464846d
fix: retry Brave Search on HTTP 429 rate limit with 1s delay (#20255)
Classic298 Dec 30, 2025
935808f
feat: Dynamically load mammoth to speed up page loading (#20202)
ShirasawaSama Dec 30, 2025
697e94e
fix: prevent crash when invalid OpenAPI spec is loaded for tool serve…
Classic298 Dec 30, 2025
61e25dc
refac
tjbck Dec 30, 2025
d3a6827
enh: ENABLE_MARKDOWN_HEADER_TEXT_SPLITTER
tjbck Dec 30, 2025
18a33a0
refac
tjbck Dec 30, 2025
08bf467
refac
tjbck Dec 30, 2025
fe84afd
enh: delta annotations support
tjbck Dec 30, 2025
b997d00
fix: prevent crash when regenerating message with missing parent (#20…
silentoplayz Dec 30, 2025
c2c389f
refac
tjbck Dec 30, 2025
450421b
fix: correct pending_user_overlay type definition in Config (#20285)
Classic298 Dec 31, 2025
2acee80
fix: normalize Windows CRLF line endings in clipboard text (#20283)
Classic298 Dec 31, 2025
6351077
refac
tjbck Dec 31, 2025
a2e9263
fix: add explicit HTTPException for access control failures (#20280)
Classic298 Dec 31, 2025
2c0ebbc
fix: prevent null crashes in users and notes routers (#20279)
Classic298 Dec 31, 2025
07cbc52
fix: prevent update_user_settings_by_id crash when user is None (#20278)
Classic298 Dec 31, 2025
6d08720
fix: prevent invalidate_token crash when decode_token returns None (#…
Classic298 Dec 31, 2025
46f867c
fix: prevent save_docs_to_vector_db crash on empty result.ids (#20275)
Classic298 Dec 31, 2025
201c38a
fix: prevent delete_entries_from_collection crash when file is None (…
Classic298 Dec 31, 2025
b91e8b7
fix: properly raise exceptions instead of returning them in chat.py (…
Classic298 Dec 31, 2025
048692c
fix: prevent insert_shared_chat_by_chat_id crash when chat is None (#…
Classic298 Dec 31, 2025
f4670b3
fix: prevent get_user_ids_from_room crash on missing session (#20271)
Classic298 Dec 31, 2025
9195d7a
fix: prevent delete_chat_by_id crash when chat is None (#20270)
Classic298 Dec 31, 2025
5a556b0
UPD: i18n: es-ES language v.0.6.44 (#20265)
rgaricano Dec 31, 2025
252a983
fix: cross-chat data corruption and tiptap editor access errors (#20266)
silentoplayz Dec 31, 2025
0bd295b
fix: prevent getOpenAIUrls and getOpenAIKeys crash on null response (…
Classic298 Dec 31, 2025
6c203fc
fix: prevent getChatList crash on null API response (#20269)
Classic298 Dec 31, 2025
71ca25c
refac
tjbck Dec 31, 2025
8b3a4c1
fix: rename 'Feedbacks' to 'Feedback' in UI and URL (#20296)
silentoplayz Dec 31, 2025
4f918e7
fix: resolve duplicate key and null message errors in chat (#20268)
silentoplayz Dec 31, 2025
431632d
fix: normalize local CrossEncoder reranking scores for relevance thre…
Classic298 Dec 31, 2025
dfc5dad
enh: REQUESTS_VERIFY
tjbck Dec 31, 2025
bf2b296
fix: oauth server_metadata_url issue
tjbck Dec 31, 2025
fdae564
refac
tjbck Dec 31, 2025
b619a15
refac/fix: rtl support
tjbck Dec 31, 2025
89ad1c6
enh: FIRECRAWL_TIMEOUT
tjbck Dec 31, 2025
6c7f966
properly handle async-generator Redis methods in SentinelRedisProx to…
Ithanil Dec 31, 2025
f7f8a26
feat: JINA_API_BASE_URL
tjbck Dec 31, 2025
4eadf84
refac
tjbck Dec 31, 2025
a1036e5
enh: folder_max_file_count
tjbck Dec 31, 2025
b677964
refac
tjbck Dec 31, 2025
c144122
refac/fix: reply to message recursion issue
tjbck Dec 31, 2025
f981843
refac
tjbck Jan 1, 2026
89565c5
refac/fix: oauth discovery urls
tjbck Jan 1, 2026
d3ee3fd
refac
tjbck Jan 1, 2026
e4a5b06
enh: embedding_batch_size for local embedding engine
tjbck Jan 1, 2026
f0829ba
refac: deprecate generate image action button
tjbck Jan 1, 2026
ccd3295
refac
tjbck Jan 2, 2026
cfecca8
fix: handle undefined file.url in UserMessage to prevent TypeError (#…
silentoplayz Jan 3, 2026
bf42535
feat: add support for passing 'steps' in image generation requests (#…
silentoplayz Jan 3, 2026
8712446
fix: resolve undefined knowledge base name in file reference tooltip …
silentoplayz Jan 3, 2026
a2f8e41
chore: dep bump (#20315)
Classic298 Jan 3, 2026
1c82506
fix: Missing field for entering the Mineru Cloud API key (#20328)
Classic298 Jan 3, 2026
bd07ef8
refac
tjbck Jan 3, 2026
e55bf2c
refac
tjbck Jan 3, 2026
c324359
feat: chunk min size target for md header splitter
tjbck Jan 3, 2026
dc2c2f2
refac
tjbck Jan 3, 2026
e754940
refac
tjbck Jan 4, 2026
614cb56
feat: Add configurable DDGS backend selection with UI support (#20366)
Classic298 Jan 4, 2026
2bb13d5
refac: get_db_context
tjbck Jan 4, 2026
b55a46a
refac
tjbck Jan 4, 2026
1f059fe
feat: Prompts Atomic PR of #20243 (#20368)
Classic298 Jan 5, 2026
5c1d522
feat: native function calling for built-in tools
tjbck Jan 5, 2026
6b5643c
feat: Add read-only access support for Knowledge Bases (#20371)
Classic298 Jan 5, 2026
ca514cd
refac: group share to settings
tjbck Jan 5, 2026
3f577c0
refac: notes organization issue
tjbck Jan 5, 2026
e27fb3e
refac
tjbck Jan 5, 2026
646835d
feat: builtin native tools
tjbck Jan 5, 2026
a327064
refac
tjbck Jan 5, 2026
00af37b
enh: model gif/webp support
tjbck Jan 5, 2026
9c5773d
feat: add chat:message:favorite event for action functions (#20375)
silentoplayz Jan 5, 2026
d3ab9f4
fix: failed hash in files
tjbck Jan 5, 2026
1d08376
refac
tjbck Jan 5, 2026
460ab07
chore: y-protocols dep
tjbck Jan 5, 2026
bb821ab
fix: revert model profile image cache
tjbck Jan 5, 2026
b1d3067
refac
tjbck Jan 5, 2026
ab7b97e
refac
tjbck Jan 5, 2026
f5455d4
Chore: dup bump for NPM and PIP (#20386)
Classic298 Jan 5, 2026
8d568cc
refac
tjbck Jan 5, 2026
8ef0f77
refac
tjbck Jan 5, 2026
cd5a38a
feat: Models Atomic PR of #20243 (#20369)
Classic298 Jan 5, 2026
713a65e
fix: inject full context knowledge into system message for KV prefix …
Classic298 Jan 5, 2026
de9cff6
refac
tjbck Jan 5, 2026
4cf901f
refac
tjbck Jan 5, 2026
40c45ff
feat: text fragment url in citations
tjbck Jan 5, 2026
119fc21
refac
tjbck Jan 5, 2026
619f260
refac
tjbck Jan 5, 2026
2543252
refac
tjbck Jan 5, 2026
5921a19
refac
tjbck Jan 5, 2026
c87031e
feat: Tools Atomic PR of #20243 (#20370)
Classic298 Jan 5, 2026
1cfbb82
chore: lock sync
tjbck Jan 5, 2026
927a765
refac
tjbck Jan 5, 2026
1148d1c
fix/refac: images
tjbck Jan 5, 2026
87ebbbe
fix: explicit casting client errors with some datatypes in websearch …
jannikstdl Jan 6, 2026
1749038
refac
tjbck Jan 6, 2026
cc04669
feat: add interface user permission (#20424)
Classic298 Jan 6, 2026
72698a0
i18n: Comprehensive improvements to Polish (pl-PL) translation (#20425)
BLACKTHOMAS Jan 6, 2026
732d9b4
fix: resolve N+1 query pattern in users endpoint (#20427)
Classic298 Jan 6, 2026
502813c
chore: aggregation (#20430)
Classic298 Jan 6, 2026
60e916d
enh: built-in tools toggle in model editor
tjbck Jan 7, 2026
2789f6a
enh: builtin tools
tjbck Jan 7, 2026
c8622ad
feat: builtin kb tools
tjbck Jan 7, 2026
9611364
refac
tjbck Jan 7, 2026
ab400e3
enh: native tool citations
tjbck Jan 7, 2026
35d385e
refac
tjbck Jan 7, 2026
0654df7
refac
tjbck Jan 7, 2026
0e1edc4
feat: add search bar to admin settings sidebar (#20434)
silentoplayz Jan 7, 2026
084f0ef
fix(notes): eliminate N+1 query in get_notes endpoint
tjbck Jan 7, 2026
7497433
fix: More n+1 channel perf fixes (#20460)
Classic298 Jan 7, 2026
b8fb9e8
fix(channels): eliminate N+1 query in get_channel_messages endpoint (…
Classic298 Jan 7, 2026
48f1b2d
fix(channels): eliminate N+1 query in get_pinned_messages endpoint (#…
Classic298 Jan 7, 2026
b73d30b
feat: implement global memories toggle and permissions (#20462)
silentoplayz Jan 7, 2026
e67891a
refac
tjbck Jan 7, 2026
aa084f8
refac
tjbck Jan 7, 2026
b6cef30
refac
tjbck Jan 7, 2026
c417fdd
refac
tjbck Jan 7, 2026
7003490
chore: format
tjbck Jan 7, 2026
ae56bca
Update translation.json (#20472)
Classic298 Jan 7, 2026
e7207c8
refac: styling
tjbck Jan 7, 2026
4b4743b
feat: enforce permissions in backend (#20471)
silentoplayz Jan 7, 2026
a9a979f
refac: files search
tjbck Jan 7, 2026
9b06fdc
refac
tjbck Jan 7, 2026
c114757
feat: export kb to zip
tjbck Jan 8, 2026
7aee9c4
feat: improve Chinese translation (#20487)
ShirasawaSama Jan 8, 2026
9223efa
fix: native function calling system prompt duplication
tjbck Jan 8, 2026
9451b13
feat: add ENABLE_USER_STATUS toggle for admin-controlled user status …
Classic298 Jan 8, 2026
8e7ebdb
refac
tjbck Jan 8, 2026
ef9cd0e
refac
tjbck Jan 8, 2026
48bdb3f
refac
tjbck Jan 8, 2026
cd296fc
feat: channel webhooks
tjbck Jan 8, 2026
00837d8
refac
tjbck Jan 8, 2026
9e9616b
fix: input quick note
tjbck Jan 8, 2026
924af3d
chore: format
tjbck Jan 8, 2026
b377e5f
chore: format
tjbck Jan 8, 2026
15934d2
Update translation.json (pt-BR) (#20493)
joaoback Jan 8, 2026
ffbd6ec
refac
tjbck Jan 8, 2026
b2a1f71
refac: get feedback ids
tjbck Jan 8, 2026
9a9a824
refac
tjbck Jan 8, 2026
1138929
feat: headless admin creation
tjbck Jan 9, 2026
daccf07
enh: file context model setting
tjbck Jan 9, 2026
3a57233
chore: aiohttp
tjbck Jan 9, 2026
10838b3
refac/fix: feedback leaderboard
tjbck Jan 9, 2026
401c194
refac
tjbck Jan 9, 2026
bb6188a
feat: per model tts voice
tjbck Jan 9, 2026
869108a
refac: tts split
tjbck Jan 9, 2026
83dce80
Update translation.json (#20513)
Classic298 Jan 9, 2026
a7b4b6e
enh: WHISPER_MULTILINGUAL
tjbck Jan 9, 2026
f4d9913
chore: CHANGELOG (#20261)
Classic298 Jan 9, 2026
636ba17
chore: format
tjbck Jan 9, 2026
9496e8f
feat: model evaluation activity chart
tjbck Jan 9, 2026
74c4af6
refac
tjbck Jan 9, 2026
7a7a0c4
chore: format
tjbck Jan 9, 2026
db02d80
refac
tjbck Jan 9, 2026
592a621
doc: changelog
tjbck Jan 9, 2026
7bb11f9
refac: wording
tjbck Jan 9, 2026
eff7725
chore: format
tjbck Jan 9, 2026
3c986ad
enh: kb metadata search
tjbck Jan 9, 2026
5990c51
chore: format
tjbck Jan 9, 2026
6adde20
Merge pull request #20394 from open-webui/dev
tjbck Jan 9, 2026
8646aeb
refac/fix: DATABASE_ENABLE_SESSION_SHARING env var
tjbck Jan 9, 2026
c4de5ea
chore: bump
tjbck Jan 9, 2026
f9b0534
Merge pull request #20522 from open-webui/dev
tjbck Jan 9, 2026
8deef78
chore
tjbck Jan 9, 2026
f2a360c
Merge pull request #20523 from open-webui/dev
tjbck Jan 9, 2026
f385ff2
Merge remote-tracking branch 'oui/main' into dev
OrenZhang Jan 10, 2026
2e2c105
chore(repo): merge from remote
OrenZhang Jan 10, 2026
67038da
chore(changelog): update changelog for version 0.7.1.1
OrenZhang Jan 10, 2026
b3b5897
chore(Dockerfile): update npm to latest version
OrenZhang Jan 10, 2026
b3aa22b
chore(build): update npm to latest version before installing dependen…
OrenZhang Jan 10, 2026
9c1c915
chore(build): update npm to latest version before installing dependen…
OrenZhang Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/workflows/format-build-frontend.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ jobs:
node-version: '22'

- name: Install Dependencies
run: npm install --force
run: |
npm install -g npm@latest
npm install --force

- name: Format Frontend
run: npm run format
Expand All @@ -61,7 +63,9 @@ jobs:
node-version: '22'

- name: Install Dependencies
run: npm ci --force
run: |
npm install -g npm@latest
npm ci --force

- name: Run vitest
run: npm run test:frontend
124 changes: 124 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions CHANGELOG_EXTRA.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.7.1.1] - 2026.01.10

### Changed

- 合并官方 0.7.1 改动

## [0.6.43.2] - 2025.12.22

### Fixed
Expand Down
11 changes: 9 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ ARG USE_CUDA_VER=cu128
# IMPORTANT: If you change the embedding model (sentence-transformers/all-MiniLM-L6-v2) and vice versa, you aren't able to use RAG Chat with your previous documents loaded in the WebUI! You need to re-embed them.
ARG USE_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
ARG USE_RERANKING_MODEL=""
ARG USE_AUXILIARY_EMBEDDING_MODEL=TaylorAI/bge-micro-v2

# Tiktoken encoding name; models to use can be found at https://huggingface.co/models?library=tiktoken
ARG USE_TIKTOKEN_ENCODING_NAME="cl100k_base"
Expand All @@ -35,14 +36,15 @@ WORKDIR /app
RUN apk add --no-cache git

COPY package.json package-lock.json ./
RUN npm install -g npm@latest
RUN npm ci --force

COPY . .
ENV APP_BUILD_HASH=${BUILD_HASH}
RUN npm run build

######## WebUI backend ########
FROM python:3.11-slim-bookworm AS base
FROM python:3.11.14-slim-bookworm AS base

# Use args
ARG USE_CUDA
Expand All @@ -52,6 +54,7 @@ ARG USE_SLIM
ARG USE_PERMISSION_HARDENING
ARG USE_EMBEDDING_MODEL
ARG USE_RERANKING_MODEL
ARG USE_AUXILIARY_EMBEDDING_MODEL
ARG UID
ARG GID

Expand All @@ -67,7 +70,8 @@ ENV ENV=prod \
USE_SLIM_DOCKER=${USE_SLIM} \
USE_CUDA_DOCKER_VER=${USE_CUDA_VER} \
USE_EMBEDDING_MODEL_DOCKER=${USE_EMBEDDING_MODEL} \
USE_RERANKING_MODEL_DOCKER=${USE_RERANKING_MODEL}
USE_RERANKING_MODEL_DOCKER=${USE_RERANKING_MODEL} \
USE_AUXILIARY_EMBEDDING_MODEL_DOCKER=${USE_AUXILIARY_EMBEDDING_MODEL}

## Basis URL Config ##
ENV OLLAMA_BASE_URL="/ollama" \
Expand All @@ -88,6 +92,7 @@ ENV WHISPER_MODEL="base" \
## RAG Embedding model settings ##
ENV RAG_EMBEDDING_MODEL="$USE_EMBEDDING_MODEL_DOCKER" \
RAG_RERANKING_MODEL="$USE_RERANKING_MODEL_DOCKER" \
AUXILIARY_EMBEDDING_MODEL="$USE_AUXILIARY_EMBEDDING_MODEL_DOCKER" \
SENTENCE_TRANSFORMERS_HOME="/app/backend/data/cache/embedding/models"

## Tiktoken model settings ##
Expand Down Expand Up @@ -136,13 +141,15 @@ RUN pip3 install --no-cache-dir uv && \
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/$USE_CUDA_DOCKER_VER --no-cache-dir && \
uv pip install --system -r requirements.txt --no-cache-dir && \
python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \
python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ.get('AUXILIARY_EMBEDDING_MODEL', 'TaylorAI/bge-micro-v2'), device='cpu')" && \
python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \
python -c "import os; import tiktoken; tiktoken.get_encoding(os.environ['TIKTOKEN_ENCODING_NAME'])"; \
else \
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --no-cache-dir && \
uv pip install --system -r requirements.txt --no-cache-dir && \
if [ "$USE_SLIM" != "true" ]; then \
python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \
python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ.get('AUXILIARY_EMBEDDING_MODEL', 'TaylorAI/bge-micro-v2'), device='cpu')" && \
python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \
python -c "import os; import tiktoken; tiktoken.get_encoding(os.environ['TIKTOKEN_ENCODING_NAME'])"; \
fi; \
Expand Down
120 changes: 112 additions & 8 deletions backend/open_webui/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from open_webui.env import (
DATA_DIR,
DATABASE_URL,
ENABLE_DB_MIGRATIONS,
ENV,
REDIS_URL,
REDIS_KEY_PREFIX,
Expand All @@ -33,7 +34,7 @@
WEBUI_NAME,
log,
)
from open_webui.internal.db import Base, get_db, Session
from open_webui.internal.db import Base, get_db
from open_webui.utils.redis import get_redis_connection


Expand Down Expand Up @@ -1433,6 +1434,14 @@ def feishu_oauth_register(oauth: OAuth):
os.environ.get("USER_PERMISSIONS_FEATURES_API_KEYS", "False").lower() == "true"
)

USER_PERMISSIONS_FEATURES_MEMORIES = (
os.environ.get("USER_PERMISSIONS_FEATURES_MEMORIES", "True").lower() == "true"
)

USER_PERMISSIONS_SETTINGS_INTERFACE = (
os.environ.get("USER_PERMISSIONS_SETTINGS_INTERFACE", "True").lower() == "true"
)

DEFAULT_USER_PERMISSIONS = {
"workspace": {
"models": USER_PERMISSIONS_WORKSPACE_MODELS_ACCESS,
Expand Down Expand Up @@ -1490,6 +1499,10 @@ def feishu_oauth_register(oauth: OAuth):
"web_search": USER_PERMISSIONS_FEATURES_WEB_SEARCH,
"image_generation": USER_PERMISSIONS_FEATURES_IMAGE_GENERATION,
"code_interpreter": USER_PERMISSIONS_FEATURES_CODE_INTERPRETER,
"memories": USER_PERMISSIONS_FEATURES_MEMORIES,
},
"settings": {
"interface": USER_PERMISSIONS_SETTINGS_INTERFACE,
},
}

Expand All @@ -1505,6 +1518,12 @@ def feishu_oauth_register(oauth: OAuth):
os.environ.get("ENABLE_FOLDERS", "True").lower() == "true",
)

FOLDER_MAX_FILE_COUNT = PersistentConfig(
"FOLDER_MAX_FILE_COUNT",
"folders.max_file_count",
os.environ.get("FOLDER_MAX_FILE_COUNT", ""),
)

ENABLE_CHANNELS = PersistentConfig(
"ENABLE_CHANNELS",
"channels.enable",
Expand All @@ -1517,6 +1536,12 @@ def feishu_oauth_register(oauth: OAuth):
os.environ.get("ENABLE_NOTES", "True").lower() == "true",
)

ENABLE_USER_STATUS = PersistentConfig(
"ENABLE_USER_STATUS",
"users.enable_status",
os.environ.get("ENABLE_USER_STATUS", "True").lower() == "true",
)

ENABLE_EVALUATION_ARENA_MODELS = PersistentConfig(
"ENABLE_EVALUATION_ARENA_MODELS",
"evaluation.arena.enable",
Expand Down Expand Up @@ -2020,6 +2045,12 @@ class BannerModel(BaseModel):
os.environ.get("ENABLE_CODE_INTERPRETER", "True").lower() == "true",
)

ENABLE_MEMORIES = PersistentConfig(
"ENABLE_MEMORIES",
"memories.enable",
os.environ.get("ENABLE_MEMORIES", "True").lower() == "true",
)

CODE_INTERPRETER_ENGINE = PersistentConfig(
"CODE_INTERPRETER_ENGINE",
"code_interpreter.engine",
Expand Down Expand Up @@ -2290,6 +2321,51 @@ class BannerModel(BaseModel):
except Exception:
PGVECTOR_IVFFLAT_LISTS = 100

# openGauss
OPENGAUSS_DB_URL = os.environ.get("OPENGAUSS_DB_URL", DATABASE_URL)

OPENGAUSS_INITIALIZE_MAX_VECTOR_LENGTH = int(
os.environ.get("OPENGAUSS_INITIALIZE_MAX_VECTOR_LENGTH", "1536")
)

OPENGAUSS_POOL_SIZE = os.environ.get("OPENGAUSS_POOL_SIZE", None)

if OPENGAUSS_POOL_SIZE != None:
try:
OPENGAUSS_POOL_SIZE = int(OPENGAUSS_POOL_SIZE)
except Exception:
OPENGAUSS_POOL_SIZE = None

OPENGAUSS_POOL_MAX_OVERFLOW = os.environ.get("OPENGAUSS_POOL_MAX_OVERFLOW", 0)

if OPENGAUSS_POOL_MAX_OVERFLOW == "":
OPENGAUSS_POOL_MAX_OVERFLOW = 0
else:
try:
OPENGAUSS_POOL_MAX_OVERFLOW = int(OPENGAUSS_POOL_MAX_OVERFLOW)
except Exception:
OPENGAUSS_POOL_MAX_OVERFLOW = 0

OPENGAUSS_POOL_TIMEOUT = os.environ.get("OPENGAUSS_POOL_TIMEOUT", 30)

if OPENGAUSS_POOL_TIMEOUT == "":
OPENGAUSS_POOL_TIMEOUT = 30
else:
try:
OPENGAUSS_POOL_TIMEOUT = int(OPENGAUSS_POOL_TIMEOUT)
except Exception:
OPENGAUSS_POOL_TIMEOUT = 30

OPENGAUSS_POOL_RECYCLE = os.environ.get("OPENGAUSS_POOL_RECYCLE", 3600)

if OPENGAUSS_POOL_RECYCLE == "":
OPENGAUSS_POOL_RECYCLE = 3600
else:
try:
OPENGAUSS_POOL_RECYCLE = int(OPENGAUSS_POOL_RECYCLE)
except Exception:
OPENGAUSS_POOL_RECYCLE = 3600

# Pinecone
PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY", None)
PINECONE_ENVIRONMENT = os.environ.get("PINECONE_ENVIRONMENT", None)
Expand Down Expand Up @@ -2753,13 +2829,18 @@ class BannerModel(BaseModel):
os.environ.get("RAG_EXTERNAL_RERANKER_TIMEOUT", ""),
)


RAG_TEXT_SPLITTER = PersistentConfig(
"RAG_TEXT_SPLITTER",
"rag.text_splitter",
os.environ.get("RAG_TEXT_SPLITTER", ""),
)

ENABLE_MARKDOWN_HEADER_TEXT_SPLITTER = PersistentConfig(
"ENABLE_MARKDOWN_HEADER_TEXT_SPLITTER",
"rag.enable_markdown_header_text_splitter",
os.environ.get("ENABLE_MARKDOWN_HEADER_TEXT_SPLITTER", "True").lower() == "true",
)

TIKTOKEN_CACHE_DIR = os.environ.get("TIKTOKEN_CACHE_DIR", f"{CACHE_DIR}/tiktoken")
TIKTOKEN_ENCODING_NAME = PersistentConfig(
"TIKTOKEN_ENCODING_NAME",
Expand All @@ -2770,6 +2851,13 @@ class BannerModel(BaseModel):
CHUNK_SIZE = PersistentConfig(
"CHUNK_SIZE", "rag.chunk_size", int(os.environ.get("CHUNK_SIZE", "1000"))
)

CHUNK_MIN_SIZE_TARGET = PersistentConfig(
"CHUNK_MIN_SIZE_TARGET",
"rag.chunk_min_size_target",
int(os.environ.get("CHUNK_MIN_SIZE_TARGET", "0")),
)

CHUNK_OVERLAP = PersistentConfig(
"CHUNK_OVERLAP",
"rag.chunk_overlap",
Expand Down Expand Up @@ -2952,7 +3040,6 @@ class BannerModel(BaseModel):
os.getenv("WEB_LOADER_TIMEOUT", ""),
)


ENABLE_WEB_LOADER_SSL_VERIFICATION = PersistentConfig(
"ENABLE_WEB_LOADER_SSL_VERIFICATION",
"rag.web.loader.ssl_verification",
Expand Down Expand Up @@ -3061,12 +3148,24 @@ class BannerModel(BaseModel):
os.getenv("SERPLY_API_KEY", ""),
)

DDGS_BACKEND = PersistentConfig(
"DDGS_BACKEND",
"rag.web.search.ddgs_backend",
os.getenv("DDGS_BACKEND", "auto"),
)

JINA_API_KEY = PersistentConfig(
"JINA_API_KEY",
"rag.web.search.jina_api_key",
os.getenv("JINA_API_KEY", ""),
)

JINA_API_BASE_URL = PersistentConfig(
"JINA_API_BASE_URL",
"rag.web.search.jina_api_base_url",
os.getenv("JINA_API_BASE_URL", ""),
)

SEARCHAPI_API_KEY = PersistentConfig(
"SEARCHAPI_API_KEY",
"rag.web.search.searchapi_api_key",
Expand Down Expand Up @@ -3201,6 +3300,12 @@ class BannerModel(BaseModel):
os.environ.get("FIRECRAWL_API_BASE_URL", "https://api.firecrawl.dev"),
)

FIRECRAWL_TIMEOUT = PersistentConfig(
"FIRECRAWL_TIMEOUT",
"rag.web.loader.firecrawl_timeout",
os.environ.get("FIRECRAWL_TIMEOUT", ""),
)

EXTERNAL_WEB_SEARCH_URL = PersistentConfig(
"EXTERNAL_WEB_SEARCH_URL",
"rag.web.search.external_web_search_url",
Expand Down Expand Up @@ -3558,17 +3663,16 @@ class BannerModel(BaseModel):
os.getenv("WHISPER_MODEL", "base"),
)

WHISPER_COMPUTE_TYPE = os.getenv("WHISPER_COMPUTE_TYPE", "int8")
WHISPER_MODEL_DIR = os.getenv("WHISPER_MODEL_DIR", f"{CACHE_DIR}/whisper/models")
WHISPER_MODEL_AUTO_UPDATE = (
not OFFLINE_MODE
and os.environ.get("WHISPER_MODEL_AUTO_UPDATE", "").lower() == "true"
)

WHISPER_VAD_FILTER = PersistentConfig(
"WHISPER_VAD_FILTER",
"audio.stt.whisper_vad_filter",
os.getenv("WHISPER_VAD_FILTER", "False").lower() == "true",
)
WHISPER_VAD_FILTER = os.getenv("WHISPER_VAD_FILTER", "False").lower() == "true"

WHISPER_MULTILINGUAL = os.getenv("WHISPER_MULTILINGUAL", "False").lower() == "true"

WHISPER_LANGUAGE = os.getenv("WHISPER_LANGUAGE", "").lower() or None

Expand Down
Loading