pyproject.toml 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. [project]
  2. name = "open-webui"
  3. description = "Open WebUI"
  4. authors = [
  5. { name = "Timothy Jaeryang Baek", email = "tim@openwebui.com" }
  6. ]
  7. license = { file = "LICENSE" }
  8. dependencies = [
  9. "fastapi==0.115.7",
  10. "uvicorn[standard]==0.35.0",
  11. "pydantic==2.11.7",
  12. "python-multipart==0.0.20",
  13. "itsdangerous==2.2.0",
  14. "python-socketio==5.13.0",
  15. "python-jose==3.4.0",
  16. "passlib[bcrypt]==1.7.4",
  17. "cryptography",
  18. "bcrypt==4.3.0",
  19. "argon2-cffi==25.1.0",
  20. "PyJWT[crypto]==2.10.1",
  21. "authlib==1.6.3",
  22. "requests==2.32.5",
  23. "aiohttp==3.12.15",
  24. "async-timeout",
  25. "aiocache",
  26. "aiofiles",
  27. "starlette-compress==1.6.0",
  28. "httpx[socks,http2,zstd,cli,brotli]==0.28.1",
  29. "starsessions[redis]==2.2.1",
  30. "sqlalchemy==2.0.38",
  31. "alembic==1.14.0",
  32. "peewee==3.18.1",
  33. "peewee-migrate==1.12.2",
  34. "pycrdt==0.12.25",
  35. "redis",
  36. "PyMySQL==1.1.1",
  37. "boto3==1.40.5",
  38. "APScheduler==3.10.4",
  39. "RestrictedPython==8.0",
  40. "loguru==0.7.3",
  41. "asgiref==3.8.1",
  42. "tiktoken",
  43. "mcp==1.14.1",
  44. "openai",
  45. "anthropic",
  46. "google-genai==1.38.0",
  47. "google-generativeai==0.8.5",
  48. "langchain==0.3.27",
  49. "langchain-community==0.3.29",
  50. "fake-useragent==2.2.0",
  51. "chromadb==1.0.20",
  52. "opensearch-py==2.8.0",
  53. "transformers",
  54. "sentence-transformers==5.1.1",
  55. "accelerate",
  56. "pyarrow==20.0.0",
  57. "einops==0.8.1",
  58. "ftfy==6.2.3",
  59. "pypdf==6.0.0",
  60. "fpdf2==2.8.2",
  61. "pymdown-extensions==10.14.2",
  62. "docx2txt==0.8",
  63. "python-pptx==1.0.2",
  64. "unstructured==0.16.17",
  65. "nltk==3.9.1",
  66. "Markdown==3.8.2",
  67. "pypandoc==1.15",
  68. "pandas==2.2.3",
  69. "openpyxl==3.1.5",
  70. "pyxlsb==1.0.10",
  71. "xlrd==2.0.1",
  72. "validators==0.35.0",
  73. "psutil",
  74. "sentencepiece",
  75. "soundfile==0.13.1",
  76. "azure-ai-documentintelligence==1.0.2",
  77. "pillow==11.3.0",
  78. "opencv-python-headless==4.11.0.86",
  79. "rapidocr-onnxruntime==1.4.4",
  80. "rank-bm25==0.2.2",
  81. "onnxruntime==1.20.1",
  82. "faster-whisper==1.1.1",
  83. "black==25.1.0",
  84. "youtube-transcript-api==1.1.0",
  85. "pytube==15.0.0",
  86. "pydub",
  87. "ddgs==9.0.0",
  88. "google-api-python-client",
  89. "google-auth-httplib2",
  90. "google-auth-oauthlib",
  91. "googleapis-common-protos==1.70.0",
  92. "google-cloud-storage==2.19.0",
  93. "azure-identity==1.25.0",
  94. "azure-storage-blob==12.24.1",
  95. "ldap3==2.9.1",
  96. "firecrawl-py==1.12.0",
  97. "tencentcloud-sdk-python==3.0.1336",
  98. "oracledb>=3.2.0",
  99. ]
  100. readme = "README.md"
  101. requires-python = ">= 3.11, < 3.13.0a1"
  102. dynamic = ["version"]
  103. classifiers = [
  104. "Development Status :: 4 - Beta",
  105. "License :: Other/Proprietary License",
  106. "Programming Language :: Python :: 3",
  107. "Programming Language :: Python :: 3.11",
  108. "Programming Language :: Python :: 3.12",
  109. "Topic :: Communications :: Chat",
  110. "Topic :: Multimedia",
  111. ]
  112. [project.optional-dependencies]
  113. postgres = [
  114. "psycopg2-binary==2.9.10",
  115. "pgvector==0.4.1",
  116. ]
  117. all = [
  118. "pymongo",
  119. "psycopg2-binary==2.9.9",
  120. "pgvector==0.4.0",
  121. "moto[s3]>=5.0.26",
  122. "gcp-storage-emulator>=2024.8.3",
  123. "docker~=7.1.0",
  124. "pytest~=8.3.2",
  125. "pytest-docker~=3.1.1",
  126. "playwright==1.49.1",
  127. "elasticsearch==9.1.0",
  128. "qdrant-client==1.14.3",
  129. "pymilvus==2.5.0",
  130. "pinecone==6.0.2",
  131. "oracledb==3.2.0",
  132. "colbert-ai==0.2.21",
  133. ]
  134. [project.scripts]
  135. open-webui = "open_webui:app"
  136. [build-system]
  137. requires = ["hatchling"]
  138. build-backend = "hatchling.build"
  139. [tool.rye]
  140. managed = true
  141. dev-dependencies = []
  142. [tool.hatch.metadata]
  143. allow-direct-references = true
  144. [tool.hatch.version]
  145. path = "package.json"
  146. pattern = '"version":\s*"(?P<version>[^"]+)"'
  147. [tool.hatch.build.hooks.custom] # keep this for reading hooks from `hatch_build.py`
  148. [tool.hatch.build.targets.wheel]
  149. sources = ["backend"]
  150. exclude = [
  151. ".dockerignore",
  152. ".gitignore",
  153. ".webui_secret_key",
  154. "dev.sh",
  155. "requirements.txt",
  156. "start.sh",
  157. "start_windows.bat",
  158. "webui.db",
  159. "chroma.sqlite3",
  160. ]
  161. force-include = { "CHANGELOG.md" = "open_webui/CHANGELOG.md", build = "open_webui/frontend" }
  162. [tool.codespell]
  163. # Ref: https://github.com/codespell-project/codespell#using-a-config-file
  164. skip = '.git*,*.svg,package-lock.json,i18n,*.lock,*.css,*-bundle.js,locales,example-doc.txt,emoji-shortcodes.json'
  165. check-hidden = true
  166. # ignore-regex = ''
  167. ignore-words-list = 'ans'
  168. [dependency-groups]
  169. dev = [
  170. "pytest-asyncio>=1.0.0",
  171. ]