mirror of
https://github.com/open-webui/open-webui.git
synced 2026-10-15 04:18:18 +00:00
On a shared Valkey or ElastiCache, Open WebUI's vector store connections identified themselves only as the generic GLIDE Python client, the same as every other app using that library, so operators could not tell its traffic apart in server-side logs. Both connections now report the library name as GlidePySync(open-webui). The tag needs valkey-glide-sync 2.5.2 or newer, so the pinned install version moves from 2.3.1 to 2.5.2, and an older manual install fails at startup until it is upgraded. Fixes #31654
239 lines
5.5 KiB
TOML
239 lines
5.5 KiB
TOML
[project]
|
|
name = "open-webui"
|
|
description = "Open WebUI"
|
|
authors = [
|
|
{ name = "Timothy Jaeryang Baek", email = "tim@openwebui.com" }
|
|
]
|
|
license = { file = "LICENSE" }
|
|
dependencies = [
|
|
"fastapi==0.136.3",
|
|
"uvicorn[standard]==0.51.0",
|
|
"pydantic==2.13.4",
|
|
"python-multipart==0.0.32",
|
|
"itsdangerous==2.2.0",
|
|
|
|
"python-socketio==5.16.2",
|
|
"orjson==3.11.9",
|
|
"cryptography==48.0.0",
|
|
"pyotp==2.9.0",
|
|
"qrcode==8.2",
|
|
"bcrypt==5.0.0",
|
|
"argon2-cffi==25.1.0",
|
|
"PyJWT[crypto]==2.13.0",
|
|
"authlib==1.7.2",
|
|
"joserfc==1.7.4",
|
|
|
|
"requests==2.34.2",
|
|
"aiohttp==3.14.3", # do not update to 3.13.3 - broken
|
|
"aiodns==3.6.1", # keep pinned: 4.x pulls pycares 5 (c-ares 1.34.6) which breaks DNS on some hosts (#28013, #28215); opt-in via AIOHTTP_CLIENT_ASYNC_DNS_RESOLVER
|
|
"aiocache==0.12.3",
|
|
"aiofiles==25.1.0",
|
|
"starlette-compress==1.7.1",
|
|
"Brotli==1.2.0",
|
|
"brotlicffi==1.2.0.1",
|
|
"httpx[socks,http2,zstd,cli,brotli]==0.28.1",
|
|
"starsessions[redis]==2.2.1",
|
|
"python-mimeparse==2.0.0",
|
|
|
|
"sqlalchemy[asyncio]==2.0.50",
|
|
"aiosqlite==0.22.1",
|
|
"psycopg[binary]==3.3.4",
|
|
"alembic==1.18.4",
|
|
|
|
"pycrdt==0.14.8",
|
|
"redis==8.0.1",
|
|
"hiredis==3.4.2",
|
|
# "valkey-glide-sync==2.5.2", # optional: install manually if VECTOR_DB=valkey
|
|
|
|
"pytz==2026.2",
|
|
|
|
"loguru==0.7.3",
|
|
"asgiref==3.11.1",
|
|
|
|
"tiktoken==0.13.0",
|
|
"regex==2026.5.9",
|
|
"google-re2==1.1.20251105",
|
|
"mcp==1.27.2",
|
|
|
|
"openai==2.29.0",
|
|
"anthropic==0.86.0",
|
|
|
|
"langchain-core==1.4.8",
|
|
"langchain-classic==1.0.7",
|
|
"langchain-text-splitters==1.1.2",
|
|
|
|
"fake-useragent==2.2.0",
|
|
"chromadb==1.5.9",
|
|
"opensearch-py==3.2.0",
|
|
"PyMySQL==1.2.0",
|
|
"boto3==1.42.62",
|
|
|
|
"transformers==5.5.4",
|
|
"sentence-transformers==5.5.1",
|
|
"accelerate==1.13.0",
|
|
"pyarrow==20.0.0", # fix: pin pyarrow version to 20 for rpi compatibility #15897
|
|
"einops==0.8.2",
|
|
|
|
"ftfy==6.3.1",
|
|
"chardet==7.4.3",
|
|
"pypdf==6.7.5",
|
|
"docx2txt==0.9",
|
|
"python-docx==1.2.0",
|
|
"python-pptx==1.0.2",
|
|
"msoffcrypto-tool==6.0.0",
|
|
"Markdown==3.10.2",
|
|
"beautifulsoup4==4.14.3",
|
|
"lxml==6.1.1",
|
|
"pypandoc==1.17",
|
|
"pandas==3.0.3",
|
|
"openpyxl==3.1.5",
|
|
"pyxlsb==1.0.10",
|
|
"xlrd==2.0.2",
|
|
"validators==0.35.0",
|
|
"psutil==7.2.2",
|
|
"sentencepiece==0.2.1",
|
|
"soundfile==0.13.1",
|
|
"azure-ai-documentintelligence==1.0.2",
|
|
|
|
"pillow==12.3.0",
|
|
"opencv-python-headless==4.13.0.92",
|
|
"rapidocr==3.10.0",
|
|
"rank-bm25==0.2.2",
|
|
|
|
"onnxruntime==1.26.0",
|
|
"faster-whisper==1.2.1",
|
|
|
|
"black==26.5.1",
|
|
"youtube-transcript-api==1.2.4",
|
|
|
|
"pydub==0.25.1",
|
|
"ddgs==9.14.4",
|
|
|
|
"googleapis-common-protos==1.75.0",
|
|
"google-cloud-storage==3.9.0",
|
|
|
|
"azure-identity==1.25.3",
|
|
"azure-storage-blob==12.29.0",
|
|
|
|
"ldap3==2.9.1",
|
|
]
|
|
readme = "README.md"
|
|
requires-python = ">= 3.11, < 3.13.0a1"
|
|
dynamic = ["version"]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"License :: Other/Proprietary License",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: Communications :: Chat",
|
|
"Topic :: Multimedia",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
postgres = [
|
|
"psycopg2-binary==2.9.12",
|
|
"pgvector==0.4.2",
|
|
]
|
|
mariadb = [
|
|
"mariadb==1.1.14",
|
|
]
|
|
unstructured = [
|
|
"unstructured==0.22.31",
|
|
]
|
|
|
|
all = [
|
|
"psycopg2-binary==2.9.12",
|
|
"pgvector==0.4.2",
|
|
"playwright==1.60.0", # Caution: version must match docker-compose.playwright.yaml - Update the docker-compose.yaml if necessary
|
|
"elasticsearch==9.4.1",
|
|
|
|
"qdrant-client==1.18.0",
|
|
|
|
"weaviate-client==4.20.3",
|
|
"pymilvus==2.6.14",
|
|
"pinecone==6.0.2",
|
|
"oracledb==3.4.2",
|
|
"colbert-ai==0.2.22",
|
|
|
|
"azure-search-documents==12.0.0",
|
|
"unstructured==0.22.31",
|
|
]
|
|
|
|
[project.scripts]
|
|
open-webui = "open_webui:app"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.rye]
|
|
managed = true
|
|
dev-dependencies = []
|
|
|
|
[tool.hatch.metadata]
|
|
allow-direct-references = true
|
|
|
|
[tool.hatch.version]
|
|
path = "package.json"
|
|
pattern = '"version":\s*"(?P<version>[^"]+)"'
|
|
|
|
[tool.hatch.build.hooks.custom] # keep this for reading hooks from `hatch_build.py`
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
sources = ["backend"]
|
|
exclude = [
|
|
".dockerignore",
|
|
".gitignore",
|
|
".webui_secret_key",
|
|
"dev.sh",
|
|
"requirements.txt",
|
|
"start.sh",
|
|
"start_windows.bat",
|
|
"webui.db",
|
|
"chroma.sqlite3",
|
|
]
|
|
force-include = { "CHANGELOG.md" = "open_webui/CHANGELOG.md", build = "open_webui/frontend" }
|
|
|
|
[tool.codespell]
|
|
# Ref: https://github.com/codespell-project/codespell#using-a-config-file
|
|
skip = '.git*,*.svg,package-lock.json,i18n,*.lock,*.css,*-bundle.js,locales,example-doc.txt,emoji-shortcodes.json'
|
|
check-hidden = true
|
|
# ignore-regex = ''
|
|
ignore-words-list = 'ans'
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest-asyncio>=1.0.0",
|
|
"ruff>=0.15.5",
|
|
]
|
|
|
|
[tool.black]
|
|
line-length = 120
|
|
skip-string-normalization = true
|
|
|
|
[tool.ruff]
|
|
line-length = 120
|
|
|
|
[tool.ruff.format]
|
|
quote-style = "single"
|
|
docstring-code-format = false
|
|
|
|
[tool.ruff.lint]
|
|
select = [
|
|
"E", # pycodestyle errors
|
|
"F", # pyflakes
|
|
"W", # pycodestyle warnings
|
|
"I", # isort
|
|
"UP", # pyupgrade
|
|
"C90", # mccabe
|
|
"Q", # flake8-quotes
|
|
"ICN", # flake8-import-conventions
|
|
]
|
|
|
|
# Plugin configs:
|
|
flake8-import-conventions.banned-from = [ "ast", "datetime" ]
|
|
flake8-import-conventions.aliases = { datetime = "dt" }
|
|
flake8-quotes.inline-quotes = "single"
|
|
mccabe.max-complexity = 10
|
|
pydocstyle.convention = "google"
|