open-webui 0.3.30.dev2__tar.gz → 0.3.31.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (551) hide show
  1. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/ISSUE_TEMPLATE/bug_report.md +4 -0
  2. open_webui-0.3.31.dev1/.github/ISSUE_TEMPLATE/feature_request.md +25 -0
  3. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/format-backend.yaml +1 -1
  4. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/format-build-frontend.yaml +2 -2
  5. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/integration-test.yml +4 -1
  6. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/lint-backend.disabled +1 -1
  7. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/CHANGELOG.md +45 -0
  8. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/Dockerfile +4 -4
  9. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/PKG-INFO +8 -7
  10. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/README.md +4 -4
  11. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/audio/main.py +137 -96
  12. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/ollama/main.py +5 -2
  13. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/openai/main.py +10 -6
  14. open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/loaders/main.py +190 -0
  15. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval}/main.py +411 -685
  16. open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/models/colbert.py +81 -0
  17. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval}/utils.py +59 -47
  18. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval}/vector/connector.py +4 -4
  19. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval}/vector/dbs/chroma.py +54 -19
  20. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval}/vector/dbs/milvus.py +94 -13
  21. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/brave.py +1 -1
  22. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/duckduckgo.py +1 -1
  23. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/google_pse.py +1 -1
  24. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/jina_search.py +1 -1
  25. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/searchapi.py +1 -1
  26. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/searxng.py +1 -1
  27. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/serper.py +1 -1
  28. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/serply.py +1 -1
  29. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/serpstack.py +1 -1
  30. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/tavily.py +1 -1
  31. open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web/utils.py +97 -0
  32. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/db.py +24 -2
  33. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/main.py +6 -3
  34. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/files.py +63 -3
  35. open_webui-0.3.31.dev1/backend/open_webui/apps/webui/models/knowledge.py +152 -0
  36. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/chats.py +6 -5
  37. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/files.py +92 -11
  38. open_webui-0.3.31.dev1/backend/open_webui/apps/webui/routers/knowledge.py +348 -0
  39. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/memories.py +1 -1
  40. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/config.py +1 -20
  41. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/constants.py +10 -1
  42. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/env.py +50 -0
  43. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/main.py +97 -69
  44. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/util.py +6 -0
  45. open_webui-0.3.31.dev1/backend/open_webui/migrations/versions/6a39f3d8e55c_add_knowledge_table.py +80 -0
  46. open_webui-0.3.31.dev1/backend/open_webui/migrations/versions/c0fbf31ca0db_update_file_table.py +32 -0
  47. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/misc.py +1 -1
  48. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/schemas.py +4 -0
  49. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/requirements.txt +9 -7
  50. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/package-lock.json +460 -49
  51. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/package.json +5 -3
  52. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/pyproject.toml +4 -2
  53. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/app.css +6 -0
  54. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/app.html +1 -0
  55. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/files/index.ts +60 -0
  56. open_webui-0.3.31.dev1/src/lib/apis/knowledge/index.ts +308 -0
  57. {open_webui-0.3.30.dev2/src/lib/apis/rag → open_webui-0.3.31.dev1/src/lib/apis/retrieval}/index.ts +121 -174
  58. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/streaming/index.ts +2 -0
  59. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/utils/index.ts +3 -3
  60. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/AddFilesPlaceholder.svelte +9 -1
  61. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Audio.svelte +4 -1
  62. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Documents.svelte +8 -70
  63. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/WebSearch.svelte +2 -2
  64. open_webui-0.3.31.dev1/src/lib/components/chat/Artifacts.svelte +305 -0
  65. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Chat.svelte +192 -55
  66. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ChatControls.svelte +67 -25
  67. open_webui-0.3.30.dev2/src/lib/components/chat/Messages/Placeholder.svelte → open_webui-0.3.31.dev1/src/lib/components/chat/ChatPlaceholder.svelte +5 -2
  68. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Controls/Controls.svelte +6 -1
  69. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/CallOverlay.svelte +36 -30
  70. open_webui-0.3.30.dev2/src/lib/components/chat/MessageInput/Commands/Documents.svelte → open_webui-0.3.31.dev1/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte +92 -77
  71. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/Commands/Models.svelte +31 -11
  72. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/Commands/Prompts.svelte +2 -2
  73. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/Commands.svelte +24 -15
  74. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput.svelte +32 -81
  75. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/CodeBlock.svelte +113 -65
  76. open_webui-0.3.31.dev1/src/lib/components/chat/Messages/ContentRenderer.svelte +208 -0
  77. open_webui-0.3.31.dev1/src/lib/components/chat/Messages/Error.svelte +15 -0
  78. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte +35 -8
  79. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown.svelte +20 -3
  80. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Message.svelte +15 -41
  81. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/MultiResponseMessages.svelte +8 -4
  82. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ResponseMessage.svelte +78 -27
  83. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/UserMessage.svelte +2 -1
  84. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages.svelte +23 -7
  85. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Overview.svelte +4 -1
  86. open_webui-0.3.31.dev1/src/lib/components/chat/Placeholder.svelte +227 -0
  87. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Interface.svelte +27 -0
  88. open_webui-0.3.31.dev1/src/lib/components/chat/Suggestions.svelte +53 -0
  89. open_webui-0.3.31.dev1/src/lib/components/common/Badge.svelte +18 -0
  90. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/CodeEditor.svelte +59 -9
  91. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Collapsible.svelte +2 -2
  92. open_webui-0.3.31.dev1/src/lib/components/common/FileItem.svelte +126 -0
  93. open_webui-0.3.31.dev1/src/lib/components/common/FileItemModal.svelte +108 -0
  94. open_webui-0.3.31.dev1/src/lib/components/common/SVGPanZoom.svelte +29 -0
  95. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/documents/AddDocModal.svelte +3 -6
  96. open_webui-0.3.31.dev1/src/lib/components/icons/ArrowPath.svelte +19 -0
  97. open_webui-0.3.31.dev1/src/lib/components/icons/ArrowsPointingOut.svelte +19 -0
  98. open_webui-0.3.31.dev1/src/lib/components/icons/BarsArrowUp.svelte +19 -0
  99. open_webui-0.3.31.dev1/src/lib/components/icons/BookOpen.svelte +19 -0
  100. open_webui-0.3.31.dev1/src/lib/components/icons/Cube.svelte +19 -0
  101. open_webui-0.3.31.dev1/src/lib/components/icons/FloppyDisk.svelte +20 -0
  102. open_webui-0.3.31.dev1/src/lib/components/icons/FolderOpen.svelte +19 -0
  103. open_webui-0.3.31.dev1/src/lib/components/icons/Info.svelte +19 -0
  104. open_webui-0.3.31.dev1/src/lib/components/icons/LightBlub.svelte +19 -0
  105. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Navbar/Menu.svelte +26 -6
  106. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Navbar.svelte +8 -3
  107. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/ChatItem.svelte +16 -4
  108. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar.svelte +9 -2
  109. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/UpdateInfoToast.svelte +1 -1
  110. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Documents.svelte +2 -2
  111. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Functions/FunctionEditor.svelte +24 -3
  112. open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection/AddContentMenu.svelte +107 -0
  113. open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection/AddTextContentModal.svelte +125 -0
  114. open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection/Files.svelte +34 -0
  115. open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection.svelte +717 -0
  116. open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/CreateCollection.svelte +146 -0
  117. open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/ItemMenu.svelte +69 -0
  118. open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge.svelte +195 -0
  119. open_webui-0.3.31.dev1/src/lib/components/workspace/Models/Knowledge/Selector.svelte +167 -0
  120. open_webui-0.3.31.dev1/src/lib/components/workspace/Models/Knowledge.svelte +63 -0
  121. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Tools/ToolkitEditor.svelte +23 -2
  122. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/constants.ts +1 -1
  123. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ar-BH/translation.json +36 -11
  124. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/bg-BG/translation.json +36 -11
  125. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/bn-BD/translation.json +36 -11
  126. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ca-ES/translation.json +42 -17
  127. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ceb-PH/translation.json +36 -11
  128. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/de-DE/translation.json +36 -11
  129. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/dg-DG/translation.json +36 -11
  130. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/en-GB/translation.json +36 -11
  131. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/en-US/translation.json +36 -11
  132. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/es-ES/translation.json +36 -11
  133. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fa-IR/translation.json +36 -11
  134. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fi-FI/translation.json +36 -11
  135. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fr-CA/translation.json +39 -14
  136. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fr-FR/translation.json +39 -14
  137. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/he-IL/translation.json +36 -11
  138. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/hi-IN/translation.json +36 -11
  139. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/hr-HR/translation.json +36 -11
  140. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/id-ID/translation.json +36 -11
  141. open_webui-0.3.31.dev1/src/lib/i18n/locales/ie-GA/translation.json +788 -0
  142. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/it-IT/translation.json +36 -11
  143. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ja-JP/translation.json +36 -11
  144. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ka-GE/translation.json +36 -11
  145. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ko-KR/translation.json +36 -11
  146. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/languages.json +4 -0
  147. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/lt-LT/translation.json +36 -11
  148. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ms-MY/translation.json +36 -11
  149. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/nb-NO/translation.json +36 -11
  150. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/nl-NL/translation.json +36 -11
  151. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pa-IN/translation.json +36 -11
  152. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pl-PL/translation.json +36 -11
  153. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pt-BR/translation.json +36 -11
  154. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pt-PT/translation.json +36 -11
  155. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ro-RO/translation.json +36 -11
  156. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ru-RU/translation.json +60 -35
  157. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/sr-RS/translation.json +36 -11
  158. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/sv-SE/translation.json +36 -11
  159. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/th-TH/translation.json +36 -11
  160. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/tk-TW/translation.json +36 -11
  161. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/tr-TR/translation.json +36 -11
  162. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/uk-UA/translation.json +36 -11
  163. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/vi-VN/translation.json +36 -11
  164. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/zh-CN/translation.json +45 -20
  165. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/zh-TW/translation.json +36 -11
  166. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/stores/index.ts +4 -1
  167. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/index.ts +32 -0
  168. open_webui-0.3.31.dev1/src/lib/utils/marked/extension.ts +70 -0
  169. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/rag/index.ts +1 -1
  170. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/+layout.svelte +26 -31
  171. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/+layout.svelte +9 -9
  172. open_webui-0.3.31.dev1/src/routes/(app)/workspace/knowledge/+page.svelte +5 -0
  173. open_webui-0.3.31.dev1/src/routes/(app)/workspace/knowledge/[id]/+page.svelte +5 -0
  174. open_webui-0.3.31.dev1/src/routes/(app)/workspace/knowledge/create/+page.svelte +5 -0
  175. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/models/create/+page.svelte +10 -2
  176. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/models/edit/+page.svelte +29 -3
  177. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/auth/+page.svelte +6 -6
  178. open_webui-0.3.30.dev2/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  179. open_webui-0.3.30.dev2/backend/open_webui/migrations/scripts/revision.py +0 -19
  180. open_webui-0.3.30.dev2/bun.lockb +0 -0
  181. open_webui-0.3.30.dev2/src/lib/components/chat/MessageInput/Suggestions.svelte +0 -118
  182. open_webui-0.3.30.dev2/src/lib/components/chat/Messages/Error.svelte +0 -26
  183. open_webui-0.3.30.dev2/src/lib/components/common/FileItem.svelte +0 -154
  184. open_webui-0.3.30.dev2/src/lib/components/workspace/Models/Knowledge/Selector.svelte +0 -138
  185. open_webui-0.3.30.dev2/src/lib/components/workspace/Models/Knowledge.svelte +0 -106
  186. open_webui-0.3.30.dev2/src/routes/(app)/workspace/documents/+page.svelte +0 -5
  187. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.dockerignore +0 -0
  188. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.env.example +0 -0
  189. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.eslintignore +0 -0
  190. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.eslintrc.cjs +0 -0
  191. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.gitattributes +0 -0
  192. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/FUNDING.yml +0 -0
  193. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/dependabot.yml +0 -0
  194. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/pull_request_template.md +0 -0
  195. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/build-release.yml +0 -0
  196. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/deploy-to-hf-spaces.yml +0 -0
  197. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/docker-build.yaml +0 -0
  198. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/lint-frontend.disabled +0 -0
  199. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/release-pypi.yml +0 -0
  200. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.gitignore +0 -0
  201. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.npmrc +0 -0
  202. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.prettierignore +0 -0
  203. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.prettierrc +0 -0
  204. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/CODE_OF_CONDUCT.md +0 -0
  205. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/Caddyfile.localhost +0 -0
  206. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/INSTALLATION.md +0 -0
  207. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/LICENSE +0 -0
  208. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/Makefile +0 -0
  209. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/TROUBLESHOOTING.md +0 -0
  210. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/.dockerignore +0 -0
  211. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/.gitignore +0 -0
  212. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/data/readme.txt +0 -0
  213. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/dev.sh +0 -0
  214. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/__init__.py +0 -0
  215. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/alembic.ini +0 -0
  216. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/images/main.py +0 -0
  217. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/images/utils/comfyui.py +0 -0
  218. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval}/vector/main.py +0 -0
  219. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/main.py +0 -0
  220. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/testdata/brave.json +0 -0
  221. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/testdata/google_pse.json +0 -0
  222. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/testdata/searchapi.json +0 -0
  223. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/testdata/searxng.json +0 -0
  224. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/testdata/serper.json +0 -0
  225. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/testdata/serply.json +0 -0
  226. {open_webui-0.3.30.dev2/backend/open_webui/apps/rag/search → open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web}/testdata/serpstack.json +0 -0
  227. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/socket/main.py +0 -0
  228. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/socket/utils.py +0 -0
  229. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/001_initial_schema.py +0 -0
  230. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/002_add_local_sharing.py +0 -0
  231. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/003_add_auth_api_key.py +0 -0
  232. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/004_add_archived.py +0 -0
  233. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/005_add_updated_at.py +0 -0
  234. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/006_migrate_timestamps_and_charfields.py +0 -0
  235. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/007_add_user_last_active_at.py +0 -0
  236. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/008_add_memory.py +0 -0
  237. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/009_add_models.py +0 -0
  238. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/010_migrate_modelfiles_to_models.py +0 -0
  239. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/011_add_user_settings.py +0 -0
  240. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/012_add_tools.py +0 -0
  241. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/013_add_user_info.py +0 -0
  242. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/014_add_files.py +0 -0
  243. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/015_add_functions.py +0 -0
  244. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/016_add_valves_and_is_active.py +0 -0
  245. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/017_add_user_oauth_sub.py +0 -0
  246. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/migrations/018_add_function_is_global.py +0 -0
  247. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/wrappers.py +0 -0
  248. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/auths.py +0 -0
  249. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/chats.py +0 -0
  250. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/documents.py +0 -0
  251. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/functions.py +0 -0
  252. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/memories.py +0 -0
  253. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/models.py +0 -0
  254. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/prompts.py +0 -0
  255. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/tags.py +0 -0
  256. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/tools.py +0 -0
  257. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/users.py +0 -0
  258. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/auths.py +0 -0
  259. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/configs.py +0 -0
  260. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/documents.py +0 -0
  261. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/functions.py +0 -0
  262. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/models.py +0 -0
  263. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/prompts.py +0 -0
  264. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/tools.py +0 -0
  265. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/users.py +0 -0
  266. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/utils.py +0 -0
  267. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/utils.py +0 -0
  268. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/data/readme.txt +0 -0
  269. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/README +0 -0
  270. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/env.py +0 -0
  271. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/script.py.mako +0 -0
  272. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/versions/7e5b5dc7342b_init.py +0 -0
  273. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/versions/ca81bd47c050_add_config_table.py +0 -0
  274. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/favicon.png +0 -0
  275. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSans-Bold.ttf +0 -0
  276. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSans-Italic.ttf +0 -0
  277. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSans-Regular.ttf +0 -0
  278. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSansJP-Regular.ttf +0 -0
  279. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSansKR-Regular.ttf +0 -0
  280. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSansSC-Regular.ttf +0 -0
  281. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/logo.png +0 -0
  282. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/splash.png +0 -0
  283. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/user-import.csv +0 -0
  284. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/__init__.py +0 -0
  285. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_auths.py +0 -0
  286. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_chats.py +0 -0
  287. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_documents.py +0 -0
  288. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_models.py +0 -0
  289. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_prompts.py +0 -0
  290. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_users.py +0 -0
  291. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/util/abstract_integration_test.py +0 -0
  292. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/util/mock_user.py +0 -0
  293. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/logo.png +0 -0
  294. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/payload.py +0 -0
  295. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/response.py +0 -0
  296. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/security_headers.py +0 -0
  297. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/task.py +0 -0
  298. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/tools.py +0 -0
  299. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/utils.py +0 -0
  300. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/webhook.py +0 -0
  301. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/start.sh +0 -0
  302. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/start_windows.bat +0 -0
  303. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/confirm_remove.sh +0 -0
  304. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/data/example-doc.txt +0 -0
  305. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/chat.cy.ts +0 -0
  306. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/documents.cy.ts +0 -0
  307. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/registration.cy.ts +0 -0
  308. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/settings.cy.ts +0 -0
  309. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/support/e2e.ts +0 -0
  310. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/support/index.d.ts +0 -0
  311. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/tsconfig.json +0 -0
  312. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress.config.ts +0 -0
  313. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/demo.gif +0 -0
  314. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.a1111-test.yaml +0 -0
  315. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.amdgpu.yaml +0 -0
  316. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.api.yaml +0 -0
  317. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.data.yaml +0 -0
  318. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.gpu.yaml +0 -0
  319. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.yaml +0 -0
  320. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/CONTRIBUTING.md +0 -0
  321. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/README.md +0 -0
  322. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/SECURITY.md +0 -0
  323. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/apache.md +0 -0
  324. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/hatch_build.py +0 -0
  325. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/i18next-parser.config.ts +0 -0
  326. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/helm/README.md +0 -0
  327. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/kustomization.yaml +0 -0
  328. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/ollama-service.yaml +0 -0
  329. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/ollama-statefulset.yaml +0 -0
  330. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/open-webui.yaml +0 -0
  331. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-deployment.yaml +0 -0
  332. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-ingress.yaml +0 -0
  333. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-pvc.yaml +0 -0
  334. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-service.yaml +0 -0
  335. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/gpu/kustomization.yaml +0 -0
  336. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/gpu/ollama-statefulset-gpu.yaml +0 -0
  337. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/postcss.config.js +0 -0
  338. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/run-compose.sh +0 -0
  339. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/run-ollama-docker.sh +0 -0
  340. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/run.sh +0 -0
  341. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/scripts/prepare-pyodide.js +0 -0
  342. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/app.d.ts +0 -0
  343. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/audio/index.ts +0 -0
  344. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/auths/index.ts +0 -0
  345. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/chats/index.ts +0 -0
  346. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/configs/index.ts +0 -0
  347. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/documents/index.ts +0 -0
  348. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/functions/index.ts +0 -0
  349. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/images/index.ts +0 -0
  350. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/index.ts +0 -0
  351. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/memories/index.ts +0 -0
  352. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/models/index.ts +0 -0
  353. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/ollama/index.ts +0 -0
  354. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/openai/index.ts +0 -0
  355. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/prompts/index.ts +0 -0
  356. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/tools/index.ts +0 -0
  357. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/users/index.ts +0 -0
  358. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/ChangelogModal.svelte +0 -0
  359. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/AddUserModal.svelte +0 -0
  360. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/EditUserModal.svelte +0 -0
  361. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Connections.svelte +0 -0
  362. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Database.svelte +0 -0
  363. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/General.svelte +0 -0
  364. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Images.svelte +0 -0
  365. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Interface.svelte +0 -0
  366. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Models.svelte +0 -0
  367. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Pipelines.svelte +0 -0
  368. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Users.svelte +0 -0
  369. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings.svelte +0 -0
  370. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/UserChatsModal.svelte +0 -0
  371. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Controls/Valves.svelte +0 -0
  372. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/CallOverlay/VideoInputMenu.svelte +0 -0
  373. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/FilesOverlay.svelte +0 -0
  374. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/InputMenu.svelte +0 -0
  375. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/VoiceRecording.svelte +0 -0
  376. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Citations.svelte +0 -0
  377. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/CitationsModal.svelte +0 -0
  378. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown/KatexRenderer.svelte +0 -0
  379. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte +0 -0
  380. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Name.svelte +0 -0
  381. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ProfileImage.svelte +0 -0
  382. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ProfileImageBase.svelte +0 -0
  383. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/RateComment.svelte +0 -0
  384. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ResponseMessage/WebSearchResults.svelte +0 -0
  385. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Skeleton.svelte +0 -0
  386. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ModelSelector/Selector.svelte +0 -0
  387. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ModelSelector.svelte +0 -0
  388. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Overview/Flow.svelte +0 -0
  389. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Overview/Node.svelte +0 -0
  390. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/About.svelte +0 -0
  391. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Account/UpdatePassword.svelte +0 -0
  392. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Account.svelte +0 -0
  393. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte +0 -0
  394. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Audio.svelte +0 -0
  395. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Chats.svelte +0 -0
  396. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/General.svelte +0 -0
  397. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Models.svelte +0 -0
  398. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte +0 -0
  399. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte +0 -0
  400. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization/ManageModal.svelte +0 -0
  401. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization.svelte +0 -0
  402. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/SettingsModal.svelte +0 -0
  403. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ShareChatModal.svelte +0 -0
  404. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ShortcutsModal.svelte +0 -0
  405. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/TagChatModal.svelte +0 -0
  406. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Tags.svelte +0 -0
  407. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Banner.svelte +0 -0
  408. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Checkbox.svelte +0 -0
  409. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/ConfirmDialog.svelte +0 -0
  410. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Drawer.svelte +0 -0
  411. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Dropdown.svelte +0 -0
  412. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Image.svelte +0 -0
  413. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/ImagePreview.svelte +0 -0
  414. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Loader.svelte +0 -0
  415. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Modal.svelte +0 -0
  416. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Overlay.svelte +0 -0
  417. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Pagination.svelte +0 -0
  418. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Selector.svelte +0 -0
  419. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/SensitiveInput.svelte +0 -0
  420. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Spinner.svelte +0 -0
  421. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Switch.svelte +0 -0
  422. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tags/TagInput.svelte +0 -0
  423. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tags/TagList.svelte +0 -0
  424. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tags.svelte +0 -0
  425. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tooltip.svelte +0 -0
  426. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Valves.svelte +0 -0
  427. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/documents/EditDocModal.svelte +0 -0
  428. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/AdjustmentsHorizontal.svelte +0 -0
  429. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ArchiveBox.svelte +0 -0
  430. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ArrowDownTray.svelte +0 -0
  431. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ArrowUpCircle.svelte +0 -0
  432. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Bolt.svelte +0 -0
  433. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Bookmark.svelte +0 -0
  434. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/BookmarkSlash.svelte +0 -0
  435. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatBubble.svelte +0 -0
  436. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatBubbleOval.svelte +0 -0
  437. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatBubbles.svelte +0 -0
  438. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatMenu.svelte +0 -0
  439. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Check.svelte +0 -0
  440. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronDown.svelte +0 -0
  441. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronLeft.svelte +0 -0
  442. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronRight.svelte +0 -0
  443. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronUp.svelte +0 -0
  444. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronUpDown.svelte +0 -0
  445. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Clipboard.svelte +0 -0
  446. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/DocumentArrowUpSolid.svelte +0 -0
  447. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/DocumentDuplicate.svelte +0 -0
  448. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/EllipsisHorizontal.svelte +0 -0
  449. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/EllipsisVertical.svelte +0 -0
  450. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/EyeSlash.svelte +0 -0
  451. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/GarbageBin.svelte +0 -0
  452. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/GlobeAlt.svelte +0 -0
  453. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/GlobeAltSolid.svelte +0 -0
  454. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Headphone.svelte +0 -0
  455. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Heart.svelte +0 -0
  456. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Keyboard.svelte +0 -0
  457. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Lifebuoy.svelte +0 -0
  458. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Link.svelte +0 -0
  459. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/MagnifyingGlass.svelte +0 -0
  460. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Map.svelte +0 -0
  461. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/MenuLines.svelte +0 -0
  462. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Merge.svelte +0 -0
  463. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Pencil.svelte +0 -0
  464. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Plus.svelte +0 -0
  465. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/QuestionMarkCircle.svelte +0 -0
  466. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Search.svelte +0 -0
  467. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Share.svelte +0 -0
  468. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Sparkles.svelte +0 -0
  469. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Star.svelte +0 -0
  470. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/User.svelte +0 -0
  471. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/WrenchSolid.svelte +0 -0
  472. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/XMark.svelte +0 -0
  473. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Help/HelpMenu.svelte +0 -0
  474. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Help.svelte +0 -0
  475. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Overlay/AccountPending.svelte +0 -0
  476. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte +0 -0
  477. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/ChatMenu.svelte +0 -0
  478. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/UserMenu.svelte +0 -0
  479. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/playground/ChatCompletion.svelte +0 -0
  480. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/playground/Playground.svelte +0 -0
  481. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/playground/TextCompletion.svelte +0 -0
  482. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Functions/FunctionMenu.svelte +0 -0
  483. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Functions.svelte +0 -0
  484. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/ActionsSelector.svelte +0 -0
  485. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/Capabilities.svelte +0 -0
  486. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/FiltersSelector.svelte +0 -0
  487. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/ModelMenu.svelte +0 -0
  488. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/ToolsSelector.svelte +0 -0
  489. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models.svelte +0 -0
  490. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Prompts/PromptMenu.svelte +0 -0
  491. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Prompts.svelte +0 -0
  492. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Tools/ToolMenu.svelte +0 -0
  493. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Tools.svelte +0 -0
  494. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/common/ManifestModal.svelte +0 -0
  495. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/common/ValvesModal.svelte +0 -0
  496. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/index.ts +0 -0
  497. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/tk-TM/transaltion.json +0 -0
  498. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/index.ts +0 -0
  499. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/types/index.ts +0 -0
  500. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/_template_old.ts +0 -0
  501. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/characters/index.ts +0 -0
  502. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/marked/katex-extension.ts +0 -0
  503. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/transitions/index.ts +0 -0
  504. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/workers/pyodide.worker.ts +0 -0
  505. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/+page.svelte +0 -0
  506. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/admin/+layout.svelte +0 -0
  507. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/admin/+page.svelte +0 -0
  508. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/admin/settings/+page.svelte +0 -0
  509. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/c/[id]/+page.svelte +0 -0
  510. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/playground/+layout.svelte +0 -0
  511. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/playground/+page.svelte +0 -0
  512. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/+page.svelte +0 -0
  513. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/functions/+page.svelte +0 -0
  514. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/functions/create/+page.svelte +0 -0
  515. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/functions/edit/+page.svelte +0 -0
  516. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/models/+page.svelte +0 -0
  517. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/prompts/+page.svelte +0 -0
  518. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/prompts/create/+page.svelte +0 -0
  519. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/prompts/edit/+page.svelte +0 -0
  520. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/tools/+page.svelte +0 -0
  521. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/tools/create/+page.svelte +0 -0
  522. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/tools/edit/+page.svelte +0 -0
  523. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/+error.svelte +0 -0
  524. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/+layout.js +0 -0
  525. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/+layout.svelte +0 -0
  526. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/error/+page.svelte +0 -0
  527. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/s/[id]/+page.svelte +0 -0
  528. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/tailwind.css +0 -0
  529. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/assets/fonts/Archivo-Variable.ttf +0 -0
  530. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/assets/fonts/Inter-Variable.ttf +0 -0
  531. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/assets/fonts/Mona-Sans.woff2 +0 -0
  532. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/audio/greeting.mp3 +0 -0
  533. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/doge.png +0 -0
  534. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/favicon.png +0 -0
  535. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/manifest.json +0 -0
  536. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/opensearch.xml +0 -0
  537. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/pyodide/pyodide-lock.json +0 -0
  538. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/robots.txt +0 -0
  539. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/static/favicon.png +0 -0
  540. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/static/splash-dark.png +0 -0
  541. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/static/splash.png +0 -0
  542. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/themes/rosepine-dawn.css +0 -0
  543. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/themes/rosepine.css +0 -0
  544. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/user.png +0 -0
  545. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/svelte.config.js +0 -0
  546. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/tailwind.config.js +0 -0
  547. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/test/test_files/image_gen/sd-empty.pt +0 -0
  548. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/tsconfig.json +0 -0
  549. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/update_ollama_models.sh +0 -0
  550. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/uv.lock +0 -0
  551. {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/vite.config.ts +0 -0
@@ -8,6 +8,10 @@ assignees: ''
8
8
 
9
9
  # Bug Report
10
10
 
11
+ **Important: Before submitting a bug report, please check whether a similar issue or feature request has already been posted in the Issues or Discussions section. It's likely we're already tracking it. In case of uncertainty, initiate a discussion post first. This helps us all to efficiently focus on improving the project.**
12
+
13
+ **Let's collaborate respectfully. If you bring negativity, please understand our capacity to engage may be limited. If you're open to learning and communicating constructively, we're more than happy to assist you. Remember, Open WebUI is a volunteer-driven project maintained by a single maintainer, supported by our amazing contributors who also manage full-time jobs. We respect your time; please respect ours. If you have an issue, We highly encourage you to submit a pull request or to fork the project. We actively work to prevent contributor burnout to preserve the quality and continuity of Open WebUI.**
14
+
11
15
  ## Installation Method
12
16
 
13
17
  [Describe the method you used to install the project, e.g., git clone, Docker, pip, etc.]
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+ ---
8
+
9
+ # Feature Request
10
+
11
+ **Important: Before submitting a feature request, please check whether a similar issue or feature request has already been posted in the Issues or Discussions section. It's likely we're already tracking it. In case of uncertainty, initiate a discussion post first. This helps us all to efficiently focus on improving the project.**
12
+
13
+ **Let's collaborate respectfully. If you bring negativity, please understand our capacity to engage may be limited. If you're open to learning and communicating constructively, we're more than happy to assist you. Remember, Open WebUI is a volunteer-driven project maintained by a single maintainer, supported by our amazing contributors who also manage full-time jobs. We respect your time; please respect ours. If you have an issue, We highly encourage you to submit a pull request or to fork the project. We actively work to prevent contributor burnout to preserve the quality and continuity of Open WebUI.**
14
+
15
+ **Is your feature request related to a problem? Please describe.**
16
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
17
+
18
+ **Describe the solution you'd like**
19
+ A clear and concise description of what you want to happen.
20
+
21
+ **Describe alternatives you've considered**
22
+ A clear and concise description of any alternative solutions or features you've considered.
23
+
24
+ **Additional context**
25
+ Add any other context or screenshots about the feature request here.
@@ -23,7 +23,7 @@ jobs:
23
23
  - uses: actions/checkout@v4
24
24
 
25
25
  - name: Set up Python
26
- uses: actions/setup-python@v4
26
+ uses: actions/setup-python@v5
27
27
  with:
28
28
  python-version: ${{ matrix.python-version }}
29
29
 
@@ -21,7 +21,7 @@ jobs:
21
21
  - name: Setup Node.js
22
22
  uses: actions/setup-node@v4
23
23
  with:
24
- node-version: '20' # Or specify any other version you want to use
24
+ node-version: '22' # Or specify any other version you want to use
25
25
 
26
26
  - name: Install Dependencies
27
27
  run: npm install
@@ -48,7 +48,7 @@ jobs:
48
48
  - name: Setup Node.js
49
49
  uses: actions/setup-node@v4
50
50
  with:
51
- node-version: '20'
51
+ node-version: '22'
52
52
 
53
53
  - name: Install Dependencies
54
54
  run: npm ci
@@ -85,7 +85,7 @@ jobs:
85
85
  # - uses: actions/checkout@v4
86
86
 
87
87
  # - name: Set up Python
88
- # uses: actions/setup-python@v4
88
+ # uses: actions/setup-python@v5
89
89
  # with:
90
90
  # python-version: ${{ matrix.python-version }}
91
91
 
@@ -182,6 +182,9 @@ jobs:
182
182
  WEBUI_SECRET_KEY: secret-key
183
183
  GLOBAL_LOG_LEVEL: debug
184
184
  DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres
185
+ DATABASE_POOL_SIZE: 10
186
+ DATABASE_POOL_MAX_OVERFLOW: 10
187
+ DATABASE_POOL_TIMEOUT: 30
185
188
  run: |
186
189
  cd backend
187
190
  uvicorn open_webui.main:app --port "8081" --forwarded-allow-ips '*' &
@@ -16,7 +16,7 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v4
18
18
  - name: Use Python
19
- uses: actions/setup-python@v4
19
+ uses: actions/setup-python@v5
20
20
  - name: Use Bun
21
21
  uses: oven-sh/setup-bun@v1
22
22
  - name: Install dependencies
@@ -5,6 +5,51 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.3.31] - 2024-10-06
9
+
10
+ ### Added
11
+
12
+ - **📚 Knowledge Feature**: Reimagined documents feature, now more performant with a better UI for enhanced organization; includes streamlined API integration for Retrieval-Augmented Generation (RAG). Detailed documentation forthcoming: https://docs.openwebui.com/
13
+ - **🌐 New Landing Page**: Freshly designed landing page; toggle between the new UI and the classic chat UI from Settings > Interface for a personalized experience.
14
+ - **📁 Full Document Retrieval Mode**: Toggle between full document retrieval or traditional snippets by clicking on the file item. This mode enhances document capabilities and supports comprehensive tasks like summarization by utilizing the entire content instead of RAG.
15
+ - **📄 Extracted File Content Display**: View extracted content directly by clicking on the file item, simplifying file analysis.
16
+ - **🎨 Artifacts Feature**: Render web content and SVGs directly in the interface, supporting quick iterations and live changes.
17
+ - **🖊️ Editable Code Blocks**: Supercharged code blocks now allow live editing directly in the LLM response, with live reloads supported by artifacts.
18
+ - **🔧 Code Block Enhancements**: Introduced a floating copy button in code blocks to facilitate easier code copying without scrolling.
19
+ - **🔍 SVG Pan/Zoom**: Enhanced interaction with SVG images, including Mermaid diagrams, via new pan and zoom capabilities.
20
+ - **🔍 Text Select Quick Actions**: New floating buttons appear when text is highlighted in LLM responses, offering deeper interactions like "Ask a Question" or "Explain".
21
+ - **🗃️ Database Pool Configuration**: Enhanced database handling to support scalable user growth.
22
+ - **🔊 Experimental Audio Compression**: Compress audio files to navigate around the 25MB limit for OpenAI's speech-to-text processing.
23
+ - **🔍 Query Embedding**: Adjusted embedding behavior to enhance system performance by not repeating query embedding.
24
+ - **💾 Lazy Load Optimizations**: Implemented lazy loading of large dependencies to minimize initial memory usage, boosting performance.
25
+ - **🍏 Apple Touch Icon Support**: Optimizes the display of icons for web bookmarks on Apple mobile devices.
26
+
27
+ ### Fixed
28
+
29
+ - **🔘 Action Button Issue**: Resolved a bug where action buttons were not functioning, enhancing UI reliability.
30
+ - **🔄 Multi-Model Chat Loop**: Fixed an infinite loop issue in multi-model chat environments, ensuring smoother chat operations.
31
+ - **📄 Chat PDF/TXT Export Issue**: Resolved problems with exporting chat logs to PDF and TXT formats.
32
+ - **🔊 Call to Text-to-Speech Issues**: Rectified problems with text-to-speech functions to improve audio interactions.
33
+
34
+ ### Changed
35
+
36
+ - **⚙️ Endpoint Renaming**: Renamed 'rag' endpoints to 'retrieval' for clearer function description.
37
+ - **🎨 Styling and Interface Updates**: Multiple refinements across the platform to enhance visual appeal and user interaction.
38
+
39
+ ### Removed
40
+
41
+ - **🗑️ Deprecated 'DOCS_DIR'**: Removed the outdated 'docs_dir' variable in favor of more direct file management solutions, with direct file directory syncing and API uploads for a more integrated experience.
42
+
43
+ ## [0.3.30] - 2024-09-26
44
+
45
+ ### Fixed
46
+
47
+ - **🍞 Update Available Toast Dismissal**: Enhanced user experience by ensuring that once the update available notification is dismissed, it won't reappear for 24 hours.
48
+ - **📋 Ollama /embed Form Data**: Adjusted the integration inaccuracies in the /embed form data to ensure it perfectly matches with Ollama's specifications.
49
+ - **🔧 O1 Max Completion Tokens Issue**: Resolved compatibility issues with OpenAI's o1 models max_completion_tokens param to ensure smooth operation.
50
+ - **🔄 Pip Install Database Issue**: Fixed a critical issue where database changes during pip installations were reverting and not saving chat logs, now ensuring data persistence and reliability in chat operations.
51
+ - **🏷️ Chat Rename Tab Update**: Fixed the functionality to change the web browser's tab title simultaneously when a chat is renamed, keeping tab titles consistent.
52
+
8
53
  ## [0.3.29] - 2023-09-25
9
54
 
10
55
  ### Fixed
@@ -17,7 +17,7 @@ ARG UID=0
17
17
  ARG GID=0
18
18
 
19
19
  ######## WebUI frontend ########
20
- FROM --platform=$BUILDPLATFORM node:21-alpine3.19 as build
20
+ FROM --platform=$BUILDPLATFORM node:22-alpine3.20 AS build
21
21
  ARG BUILD_HASH
22
22
 
23
23
  WORKDIR /app
@@ -30,7 +30,7 @@ ENV APP_BUILD_HASH=${BUILD_HASH}
30
30
  RUN npm run build
31
31
 
32
32
  ######## WebUI backend ########
33
- FROM python:3.11-slim-bookworm as base
33
+ FROM python:3.11-slim-bookworm AS base
34
34
 
35
35
  # Use args
36
36
  ARG USE_CUDA
@@ -82,7 +82,7 @@ ENV HF_HOME="/app/backend/data/cache/embedding/models"
82
82
 
83
83
  WORKDIR /app/backend
84
84
 
85
- ENV HOME /root
85
+ ENV HOME=/root
86
86
  # Create user and group if not root
87
87
  RUN if [ $UID -ne 0 ]; then \
88
88
  if [ $GID -ne 0 ]; then \
@@ -161,6 +161,6 @@ USER $UID:$GID
161
161
 
162
162
  ARG BUILD_HASH
163
163
  ENV WEBUI_BUILD_VERSION=${BUILD_HASH}
164
- ENV DOCKER true
164
+ ENV DOCKER=true
165
165
 
166
166
  CMD [ "bash", "start.sh"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: open-webui
3
- Version: 0.3.30.dev2
3
+ Version: 0.3.31.dev1
4
4
  Summary: Open WebUI
5
5
  Author-email: Timothy Jaeryang Baek <tim@openwebui.com>
6
6
  License: MIT License
@@ -41,7 +41,7 @@ Requires-Dist: authlib==1.3.2
41
41
  Requires-Dist: bcrypt==4.2.0
42
42
  Requires-Dist: black==24.8.0
43
43
  Requires-Dist: boto3==1.35.0
44
- Requires-Dist: chromadb==0.5.5
44
+ Requires-Dist: chromadb==0.5.9
45
45
  Requires-Dist: colbert-ai==0.2.21
46
46
  Requires-Dist: docker~=7.1.0
47
47
  Requires-Dist: docx2txt==0.8
@@ -54,6 +54,7 @@ Requires-Dist: faster-whisper==1.0.3
54
54
  Requires-Dist: flask-cors==5.0.0
55
55
  Requires-Dist: flask==3.0.3
56
56
  Requires-Dist: fpdf2==2.7.9
57
+ Requires-Dist: ftfy==6.2.3
57
58
  Requires-Dist: google-generativeai==0.7.2
58
59
  Requires-Dist: langchain-chroma==0.1.2
59
60
  Requires-Dist: langchain-community==0.2.12
@@ -73,7 +74,7 @@ Requires-Dist: psycopg2-binary==2.9.9
73
74
  Requires-Dist: pydantic==2.8.2
74
75
  Requires-Dist: pydub
75
76
  Requires-Dist: pyjwt[crypto]==2.9.0
76
- Requires-Dist: pymilvus==2.4.6
77
+ Requires-Dist: pymilvus==2.4.7
77
78
  Requires-Dist: pymongo
78
79
  Requires-Dist: pymysql==1.1.1
79
80
  Requires-Dist: pypandoc==1.13
@@ -100,7 +101,7 @@ Requires-Dist: xlrd==2.0.1
100
101
  Requires-Dist: youtube-transcript-api==0.6.2
101
102
  Description-Content-Type: text/markdown
102
103
 
103
- # Open WebUI (Formerly Ollama WebUI) 👋
104
+ # Open WebUI 👋
104
105
 
105
106
  ![GitHub stars](https://img.shields.io/github/stars/open-webui/open-webui?style=social)
106
107
  ![GitHub forks](https://img.shields.io/github/forks/open-webui/open-webui?style=social)
@@ -208,7 +209,7 @@ This will start the Open WebUI server, which you can access at [http://localhost
208
209
  docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
209
210
  ```
210
211
 
211
- - **To run Open WebUI with Nvidia GPU support**, use this command:
212
+ - **To run Open WebUI with Nvidia GPU support**, use this command:
212
213
 
213
214
  ```bash
214
215
  docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
@@ -272,7 +273,7 @@ docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/wa
272
273
 
273
274
  In the last part of the command, replace `open-webui` with your container name if it is different.
274
275
 
275
- Check our Migration Guide available in our [Open WebUI Documentation](https://docs.openwebui.com/migration/).
276
+ Check our Migration Guide available in our [Open WebUI Documentation](https://docs.openwebui.com/tutorials/migration/).
276
277
 
277
278
  ### Using the Dev Branch 🌙
278
279
 
@@ -322,4 +323,4 @@ If you have any questions, suggestions, or need assistance, please open an issue
322
323
 
323
324
  ---
324
325
 
325
- Created by [Timothy J. Baek](https://github.com/tjbck) - Let's make Open WebUI even more amazing together! 💪
326
+ Created by [Timothy Jaeryang Baek](https://github.com/tjbck) - Let's make Open WebUI even more amazing together! 💪
@@ -1,4 +1,4 @@
1
- # Open WebUI (Formerly Ollama WebUI) 👋
1
+ # Open WebUI 👋
2
2
 
3
3
  ![GitHub stars](https://img.shields.io/github/stars/open-webui/open-webui?style=social)
4
4
  ![GitHub forks](https://img.shields.io/github/forks/open-webui/open-webui?style=social)
@@ -106,7 +106,7 @@ This will start the Open WebUI server, which you can access at [http://localhost
106
106
  docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
107
107
  ```
108
108
 
109
- - **To run Open WebUI with Nvidia GPU support**, use this command:
109
+ - **To run Open WebUI with Nvidia GPU support**, use this command:
110
110
 
111
111
  ```bash
112
112
  docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
@@ -170,7 +170,7 @@ docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/wa
170
170
 
171
171
  In the last part of the command, replace `open-webui` with your container name if it is different.
172
172
 
173
- Check our Migration Guide available in our [Open WebUI Documentation](https://docs.openwebui.com/migration/).
173
+ Check our Migration Guide available in our [Open WebUI Documentation](https://docs.openwebui.com/tutorials/migration/).
174
174
 
175
175
  ### Using the Dev Branch 🌙
176
176
 
@@ -220,4 +220,4 @@ If you have any questions, suggestions, or need assistance, please open an issue
220
220
 
221
221
  ---
222
222
 
223
- Created by [Timothy J. Baek](https://github.com/tjbck) - Let's make Open WebUI even more amazing together! 💪
223
+ Created by [Timothy Jaeryang Baek](https://github.com/tjbck) - Let's make Open WebUI even more amazing together! 💪
@@ -5,6 +5,8 @@ import os
5
5
  import uuid
6
6
  from functools import lru_cache
7
7
  from pathlib import Path
8
+ from pydub import AudioSegment
9
+ from pydub.silence import split_on_silence
8
10
 
9
11
  import requests
10
12
  from open_webui.config import (
@@ -35,7 +37,12 @@ from fastapi import Depends, FastAPI, File, HTTPException, Request, UploadFile,
35
37
  from fastapi.middleware.cors import CORSMiddleware
36
38
  from fastapi.responses import FileResponse
37
39
  from pydantic import BaseModel
38
- from open_webui.utils.utils import get_admin_user, get_current_user, get_verified_user
40
+ from open_webui.utils.utils import get_admin_user, get_verified_user
41
+
42
+ # Constants
43
+ MAX_FILE_SIZE_MB = 25
44
+ MAX_FILE_SIZE = MAX_FILE_SIZE_MB * 1024 * 1024 # Convert MB to bytes
45
+
39
46
 
40
47
  log = logging.getLogger(__name__)
41
48
  log.setLevel(SRC_LOG_LEVELS["AUDIO"])
@@ -353,67 +360,77 @@ async def speech(request: Request, user=Depends(get_verified_user)):
353
360
  )
354
361
 
355
362
 
356
- @app.post("/transcriptions")
357
- def transcribe(
358
- file: UploadFile = File(...),
359
- user=Depends(get_current_user),
360
- ):
361
- log.info(f"file.content_type: {file.content_type}")
363
+ def transcribe(file_path):
364
+ print("transcribe", file_path)
365
+ filename = os.path.basename(file_path)
366
+ file_dir = os.path.dirname(file_path)
367
+ id = filename.split(".")[0]
362
368
 
363
- if file.content_type not in ["audio/mpeg", "audio/wav", "audio/ogg", "audio/x-m4a"]:
364
- raise HTTPException(
365
- status_code=status.HTTP_400_BAD_REQUEST,
366
- detail=ERROR_MESSAGES.FILE_NOT_SUPPORTED,
369
+ if app.state.config.STT_ENGINE == "":
370
+ from faster_whisper import WhisperModel
371
+
372
+ whisper_kwargs = {
373
+ "model_size_or_path": WHISPER_MODEL,
374
+ "device": whisper_device_type,
375
+ "compute_type": "int8",
376
+ "download_root": WHISPER_MODEL_DIR,
377
+ "local_files_only": not WHISPER_MODEL_AUTO_UPDATE,
378
+ }
379
+
380
+ log.debug(f"whisper_kwargs: {whisper_kwargs}")
381
+
382
+ try:
383
+ model = WhisperModel(**whisper_kwargs)
384
+ except Exception:
385
+ log.warning(
386
+ "WhisperModel initialization failed, attempting download with local_files_only=False"
387
+ )
388
+ whisper_kwargs["local_files_only"] = False
389
+ model = WhisperModel(**whisper_kwargs)
390
+
391
+ segments, info = model.transcribe(file_path, beam_size=5)
392
+ log.info(
393
+ "Detected language '%s' with probability %f"
394
+ % (info.language, info.language_probability)
367
395
  )
368
396
 
369
- try:
370
- ext = file.filename.split(".")[-1]
397
+ transcript = "".join([segment.text for segment in list(segments)])
371
398
 
372
- id = uuid.uuid4()
373
- filename = f"{id}.{ext}"
399
+ data = {"text": transcript.strip()}
374
400
 
375
- file_dir = f"{CACHE_DIR}/audio/transcriptions"
376
- os.makedirs(file_dir, exist_ok=True)
377
- file_path = f"{file_dir}/{filename}"
401
+ # save the transcript to a json file
402
+ transcript_file = f"{file_dir}/{id}.json"
403
+ with open(transcript_file, "w") as f:
404
+ json.dump(data, f)
378
405
 
379
- print(filename)
406
+ print(data)
407
+ return data
408
+ elif app.state.config.STT_ENGINE == "openai":
409
+ if is_mp4_audio(file_path):
410
+ print("is_mp4_audio")
411
+ os.rename(file_path, file_path.replace(".wav", ".mp4"))
412
+ # Convert MP4 audio file to WAV format
413
+ convert_mp4_to_wav(file_path.replace(".wav", ".mp4"), file_path)
380
414
 
381
- contents = file.file.read()
382
- with open(file_path, "wb") as f:
383
- f.write(contents)
384
- f.close()
385
-
386
- if app.state.config.STT_ENGINE == "":
387
- from faster_whisper import WhisperModel
388
-
389
- whisper_kwargs = {
390
- "model_size_or_path": WHISPER_MODEL,
391
- "device": whisper_device_type,
392
- "compute_type": "int8",
393
- "download_root": WHISPER_MODEL_DIR,
394
- "local_files_only": not WHISPER_MODEL_AUTO_UPDATE,
395
- }
396
-
397
- log.debug(f"whisper_kwargs: {whisper_kwargs}")
398
-
399
- try:
400
- model = WhisperModel(**whisper_kwargs)
401
- except Exception:
402
- log.warning(
403
- "WhisperModel initialization failed, attempting download with local_files_only=False"
404
- )
405
- whisper_kwargs["local_files_only"] = False
406
- model = WhisperModel(**whisper_kwargs)
415
+ headers = {"Authorization": f"Bearer {app.state.config.STT_OPENAI_API_KEY}"}
407
416
 
408
- segments, info = model.transcribe(file_path, beam_size=5)
409
- log.info(
410
- "Detected language '%s' with probability %f"
411
- % (info.language, info.language_probability)
417
+ files = {"file": (filename, open(file_path, "rb"))}
418
+ data = {"model": app.state.config.STT_MODEL}
419
+
420
+ print(files, data)
421
+
422
+ r = None
423
+ try:
424
+ r = requests.post(
425
+ url=f"{app.state.config.STT_OPENAI_API_BASE_URL}/audio/transcriptions",
426
+ headers=headers,
427
+ files=files,
428
+ data=data,
412
429
  )
413
430
 
414
- transcript = "".join([segment.text for segment in list(segments)])
431
+ r.raise_for_status()
415
432
 
416
- data = {"text": transcript.strip()}
433
+ data = r.json()
417
434
 
418
435
  # save the transcript to a json file
419
436
  transcript_file = f"{file_dir}/{id}.json"
@@ -421,58 +438,82 @@ def transcribe(
421
438
  json.dump(data, f)
422
439
 
423
440
  print(data)
424
-
425
441
  return data
442
+ except Exception as e:
443
+ log.exception(e)
444
+ error_detail = "Open WebUI: Server Connection Error"
445
+ if r is not None:
446
+ try:
447
+ res = r.json()
448
+ if "error" in res:
449
+ error_detail = f"External: {res['error']['message']}"
450
+ except Exception:
451
+ error_detail = f"External: {e}"
426
452
 
427
- elif app.state.config.STT_ENGINE == "openai":
428
- if is_mp4_audio(file_path):
429
- print("is_mp4_audio")
430
- os.rename(file_path, file_path.replace(".wav", ".mp4"))
431
- # Convert MP4 audio file to WAV format
432
- convert_mp4_to_wav(file_path.replace(".wav", ".mp4"), file_path)
453
+ raise error_detail
433
454
 
434
- headers = {"Authorization": f"Bearer {app.state.config.STT_OPENAI_API_KEY}"}
435
455
 
436
- files = {"file": (filename, open(file_path, "rb"))}
437
- data = {"model": app.state.config.STT_MODEL}
456
+ @app.post("/transcriptions")
457
+ def transcription(
458
+ file: UploadFile = File(...),
459
+ user=Depends(get_verified_user),
460
+ ):
461
+ log.info(f"file.content_type: {file.content_type}")
438
462
 
439
- print(files, data)
463
+ if file.content_type not in ["audio/mpeg", "audio/wav", "audio/ogg", "audio/x-m4a"]:
464
+ raise HTTPException(
465
+ status_code=status.HTTP_400_BAD_REQUEST,
466
+ detail=ERROR_MESSAGES.FILE_NOT_SUPPORTED,
467
+ )
440
468
 
441
- r = None
442
- try:
443
- r = requests.post(
444
- url=f"{app.state.config.STT_OPENAI_API_BASE_URL}/audio/transcriptions",
445
- headers=headers,
446
- files=files,
447
- data=data,
448
- )
469
+ try:
470
+ ext = file.filename.split(".")[-1]
471
+ id = uuid.uuid4()
449
472
 
450
- r.raise_for_status()
451
-
452
- data = r.json()
453
-
454
- # save the transcript to a json file
455
- transcript_file = f"{file_dir}/{id}.json"
456
- with open(transcript_file, "w") as f:
457
- json.dump(data, f)
458
-
459
- print(data)
460
- return data
461
- except Exception as e:
462
- log.exception(e)
463
- error_detail = "Open WebUI: Server Connection Error"
464
- if r is not None:
465
- try:
466
- res = r.json()
467
- if "error" in res:
468
- error_detail = f"External: {res['error']['message']}"
469
- except Exception:
470
- error_detail = f"External: {e}"
471
-
472
- raise HTTPException(
473
- status_code=r.status_code if r != None else 500,
474
- detail=error_detail,
475
- )
473
+ filename = f"{id}.{ext}"
474
+ contents = file.file.read()
475
+
476
+ file_dir = f"{CACHE_DIR}/audio/transcriptions"
477
+ os.makedirs(file_dir, exist_ok=True)
478
+ file_path = f"{file_dir}/{filename}"
479
+
480
+ with open(file_path, "wb") as f:
481
+ f.write(contents)
482
+
483
+ try:
484
+ if os.path.getsize(file_path) > MAX_FILE_SIZE: # file is bigger than 25MB
485
+ log.debug(f"File size is larger than {MAX_FILE_SIZE_MB}MB")
486
+ audio = AudioSegment.from_file(file_path)
487
+ audio = audio.set_frame_rate(16000).set_channels(1) # Compress audio
488
+ compressed_path = f"{file_dir}/{id}_compressed.opus"
489
+ audio.export(compressed_path, format="opus", bitrate="32k")
490
+ log.debug(f"Compressed audio to {compressed_path}")
491
+ file_path = compressed_path
492
+
493
+ if (
494
+ os.path.getsize(file_path) > MAX_FILE_SIZE
495
+ ): # Still larger than 25MB after compression
496
+ log.debug(
497
+ f"Compressed file size is still larger than {MAX_FILE_SIZE_MB}MB: {os.path.getsize(file_path)}"
498
+ )
499
+ raise HTTPException(
500
+ status_code=status.HTTP_400_BAD_REQUEST,
501
+ detail=ERROR_MESSAGES.FILE_TOO_LARGE(
502
+ size=f"{MAX_FILE_SIZE_MB}MB"
503
+ ),
504
+ )
505
+
506
+ data = transcribe(file_path)
507
+ else:
508
+ data = transcribe(file_path)
509
+
510
+ return data
511
+ except Exception as e:
512
+ log.exception(e)
513
+ raise HTTPException(
514
+ status_code=status.HTTP_400_BAD_REQUEST,
515
+ detail=ERROR_MESSAGES.DEFAULT(e),
516
+ )
476
517
 
477
518
  except Exception as e:
478
519
  log.exception(e)
@@ -12,7 +12,6 @@ import aiohttp
12
12
  import requests
13
13
  from open_webui.apps.webui.models.models import Models
14
14
  from open_webui.config import (
15
- AIOHTTP_CLIENT_TIMEOUT,
16
15
  CORS_ALLOW_ORIGIN,
17
16
  ENABLE_MODEL_FILTER,
18
17
  ENABLE_OLLAMA_API,
@@ -21,6 +20,9 @@ from open_webui.config import (
21
20
  UPLOAD_DIR,
22
21
  AppConfig,
23
22
  )
23
+ from open_webui.env import AIOHTTP_CLIENT_TIMEOUT
24
+
25
+
24
26
  from open_webui.constants import ERROR_MESSAGES
25
27
  from open_webui.env import SRC_LOG_LEVELS
26
28
  from fastapi import Depends, FastAPI, File, HTTPException, Request, UploadFile
@@ -117,7 +119,7 @@ async def update_ollama_api_url(form_data: UrlUpdateForm, user=Depends(get_admin
117
119
 
118
120
 
119
121
  async def fetch_url(url):
120
- timeout = aiohttp.ClientTimeout(total=5)
122
+ timeout = aiohttp.ClientTimeout(total=3)
121
123
  try:
122
124
  async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
123
125
  async with session.get(url) as response:
@@ -787,6 +789,7 @@ async def generate_chat_completion(
787
789
  ):
788
790
  payload = {**form_data.model_dump(exclude_none=True)}
789
791
  log.debug(f"{payload = }")
792
+
790
793
  if "metadata" in payload:
791
794
  del payload["metadata"]
792
795
 
@@ -9,7 +9,6 @@ import aiohttp
9
9
  import requests
10
10
  from open_webui.apps.webui.models.models import Models
11
11
  from open_webui.config import (
12
- AIOHTTP_CLIENT_TIMEOUT,
13
12
  CACHE_DIR,
14
13
  CORS_ALLOW_ORIGIN,
15
14
  ENABLE_MODEL_FILTER,
@@ -19,6 +18,8 @@ from open_webui.config import (
19
18
  OPENAI_API_KEYS,
20
19
  AppConfig,
21
20
  )
21
+ from open_webui.env import AIOHTTP_CLIENT_TIMEOUT
22
+
22
23
  from open_webui.constants import ERROR_MESSAGES
23
24
  from open_webui.env import SRC_LOG_LEVELS
24
25
  from fastapi import Depends, FastAPI, HTTPException, Request
@@ -27,7 +28,6 @@ from fastapi.responses import FileResponse, StreamingResponse
27
28
  from pydantic import BaseModel
28
29
  from starlette.background import BackgroundTask
29
30
 
30
-
31
31
  from open_webui.utils.payload import (
32
32
  apply_model_params_to_body_openai,
33
33
  apply_model_system_prompt_to_body,
@@ -47,7 +47,6 @@ app.add_middleware(
47
47
  allow_headers=["*"],
48
48
  )
49
49
 
50
-
51
50
  app.state.config = AppConfig()
52
51
 
53
52
  app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
@@ -180,7 +179,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
180
179
 
181
180
 
182
181
  async def fetch_url(url, key):
183
- timeout = aiohttp.ClientTimeout(total=5)
182
+ timeout = aiohttp.ClientTimeout(total=3)
184
183
  try:
185
184
  headers = {"Authorization": f"Bearer {key}"}
186
185
  async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
@@ -407,20 +406,25 @@ async def generate_chat_completion(
407
406
 
408
407
  url = app.state.config.OPENAI_API_BASE_URLS[idx]
409
408
  key = app.state.config.OPENAI_API_KEYS[idx]
409
+ is_o1 = payload["model"].lower().startswith("o1-")
410
410
 
411
411
  # Change max_completion_tokens to max_tokens (Backward compatible)
412
- if "api.openai.com" not in url and not payload["model"].lower().startswith("o1-"):
412
+ if "api.openai.com" not in url and not is_o1:
413
413
  if "max_completion_tokens" in payload:
414
414
  # Remove "max_completion_tokens" from the payload
415
415
  payload["max_tokens"] = payload["max_completion_tokens"]
416
416
  del payload["max_completion_tokens"]
417
417
  else:
418
- if payload["model"].lower().startswith("o1-") and "max_tokens" in payload:
418
+ if is_o1 and "max_tokens" in payload:
419
419
  payload["max_completion_tokens"] = payload["max_tokens"]
420
420
  del payload["max_tokens"]
421
421
  if "max_tokens" in payload and "max_completion_tokens" in payload:
422
422
  del payload["max_tokens"]
423
423
 
424
+ # Fix: O1 does not support the "system" parameter, Modify "system" to "user"
425
+ if is_o1 and payload["messages"][0]["role"] == "system":
426
+ payload["messages"][0]["role"] = "user"
427
+
424
428
  # Convert the modified body back to JSON
425
429
  payload = json.dumps(payload)
426
430