mirror of
https://github.com/open-webui/open-webui.git
synced 2026-08-13 01:02:25 -06:00
c5ec01b1f9
Since v0.11.0 shipped aiodns, aiohttp silently switched every outbound request from the OS resolver to c-ares. On some Windows hosts the bundled c-ares 1.34.6 (pycares 5) discovers only 127.0.0.1:53 as nameserver, so every external provider lookup fails (#28013). In Docker the long-lived c-ares channel intermittently stops resolving container names while Docker's embedded DNS keeps answering, which wipes the Ollama model list and fails all in-flight chats with a misleading "Model not found" (#28215). This restores the pre-0.11 ThreadedResolver (OS resolver) by default and gates the c-ares path behind a new env var, AIOHTTP_CLIENT_ASYNC_DNS_RESOLVER, off by default. The event-loop DNS perf improvement is now opt-in for deployments whose resolver setup is known to work with c-ares, instead of a process-wide side effect of the package being installed. aiodns is also downgraded and pinned to 3.6.1 (pycares<5), the last release before the broken c-ares 1.34.6 build, so opting in does not hit the Windows regression. The hardcoded AsyncResolver in the Mistral OCR loader now follows the same switch. Simply removing aiodns instead was not an option because opting in would then be impossible, and #28215 showed the Docker failure is c-ares itself, not aiodns 4.x.
254 lines
5.9 KiB
TOML
254 lines
5.9 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",
|
|
"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.13.5", # 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
|
|
"async-timeout==5.0.1",
|
|
"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.13.1",
|
|
"redis==8.0.1",
|
|
"hiredis==3.4.0",
|
|
# "valkey-glide-sync==2.3.1", # optional: install manually if VECTOR_DB=valkey
|
|
|
|
"pytz==2026.2",
|
|
"APScheduler==3.11.2",
|
|
"RestrictedPython==8.2",
|
|
|
|
"loguru==0.7.3",
|
|
"asgiref==3.11.1",
|
|
|
|
"tiktoken==0.13.0",
|
|
"regex==2026.5.9",
|
|
"mcp==1.27.2",
|
|
|
|
"openai==2.29.0",
|
|
"anthropic==0.86.0",
|
|
"google-genai==1.66.0",
|
|
|
|
"langchain==1.2.10",
|
|
"langchain-community==0.4.2",
|
|
"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",
|
|
"fpdf2==2.8.7",
|
|
"pymdown-extensions==10.21.3",
|
|
"docx2txt==0.9",
|
|
"python-pptx==1.0.2",
|
|
"msoffcrypto-tool==6.0.0",
|
|
"nltk==3.9.4",
|
|
"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.2.0",
|
|
"opencv-python-headless==4.13.0.92",
|
|
"rapidocr==3.9.2",
|
|
"rank-bm25==0.2.2",
|
|
|
|
"onnxruntime==1.26.0",
|
|
"faster-whisper==1.2.1",
|
|
|
|
"black==26.5.1",
|
|
"youtube-transcript-api==1.2.4",
|
|
"pytube==15.0.0",
|
|
|
|
"pydub==0.25.1",
|
|
"ddgs==9.14.4",
|
|
|
|
"google-api-python-client==2.197.0",
|
|
"google-auth-httplib2==0.4.0",
|
|
"google-auth-oauthlib==1.4.0",
|
|
|
|
"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 = [
|
|
"pymongo==4.17.0",
|
|
"psycopg2-binary==2.9.12",
|
|
"pgvector==0.4.2",
|
|
"moto[s3]>=5.0.26",
|
|
"docker~=7.1.0",
|
|
"pytest~=8.4.1",
|
|
"pytest-docker~=3.2.5",
|
|
"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"
|