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.
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/ISSUE_TEMPLATE/bug_report.md +4 -0
- open_webui-0.3.31.dev1/.github/ISSUE_TEMPLATE/feature_request.md +25 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/format-backend.yaml +1 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/format-build-frontend.yaml +2 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/integration-test.yml +4 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/lint-backend.disabled +1 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/CHANGELOG.md +45 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/Dockerfile +4 -4
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/PKG-INFO +8 -7
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/README.md +4 -4
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/audio/main.py +137 -96
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/ollama/main.py +5 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/openai/main.py +10 -6
- open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/loaders/main.py +190 -0
- {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
- open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/models/colbert.py +81 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- open_webui-0.3.31.dev1/backend/open_webui/apps/retrieval/web/utils.py +97 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/db.py +24 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/main.py +6 -3
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/files.py +63 -3
- open_webui-0.3.31.dev1/backend/open_webui/apps/webui/models/knowledge.py +152 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/chats.py +6 -5
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/files.py +92 -11
- open_webui-0.3.31.dev1/backend/open_webui/apps/webui/routers/knowledge.py +348 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/memories.py +1 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/config.py +1 -20
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/constants.py +10 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/env.py +50 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/main.py +97 -69
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/util.py +6 -0
- open_webui-0.3.31.dev1/backend/open_webui/migrations/versions/6a39f3d8e55c_add_knowledge_table.py +80 -0
- open_webui-0.3.31.dev1/backend/open_webui/migrations/versions/c0fbf31ca0db_update_file_table.py +32 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/misc.py +1 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/schemas.py +4 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/requirements.txt +9 -7
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/package-lock.json +460 -49
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/package.json +5 -3
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/pyproject.toml +4 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/app.css +6 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/app.html +1 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/files/index.ts +60 -0
- open_webui-0.3.31.dev1/src/lib/apis/knowledge/index.ts +308 -0
- {open_webui-0.3.30.dev2/src/lib/apis/rag → open_webui-0.3.31.dev1/src/lib/apis/retrieval}/index.ts +121 -174
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/streaming/index.ts +2 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/utils/index.ts +3 -3
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/AddFilesPlaceholder.svelte +9 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Audio.svelte +4 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Documents.svelte +8 -70
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/WebSearch.svelte +2 -2
- open_webui-0.3.31.dev1/src/lib/components/chat/Artifacts.svelte +305 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Chat.svelte +192 -55
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ChatControls.svelte +67 -25
- 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
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Controls/Controls.svelte +6 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/CallOverlay.svelte +36 -30
- 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
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/Commands/Models.svelte +31 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/Commands/Prompts.svelte +2 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/Commands.svelte +24 -15
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput.svelte +32 -81
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/CodeBlock.svelte +113 -65
- open_webui-0.3.31.dev1/src/lib/components/chat/Messages/ContentRenderer.svelte +208 -0
- open_webui-0.3.31.dev1/src/lib/components/chat/Messages/Error.svelte +15 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte +35 -8
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown.svelte +20 -3
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Message.svelte +15 -41
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/MultiResponseMessages.svelte +8 -4
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ResponseMessage.svelte +78 -27
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/UserMessage.svelte +2 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages.svelte +23 -7
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Overview.svelte +4 -1
- open_webui-0.3.31.dev1/src/lib/components/chat/Placeholder.svelte +227 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Interface.svelte +27 -0
- open_webui-0.3.31.dev1/src/lib/components/chat/Suggestions.svelte +53 -0
- open_webui-0.3.31.dev1/src/lib/components/common/Badge.svelte +18 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/CodeEditor.svelte +59 -9
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Collapsible.svelte +2 -2
- open_webui-0.3.31.dev1/src/lib/components/common/FileItem.svelte +126 -0
- open_webui-0.3.31.dev1/src/lib/components/common/FileItemModal.svelte +108 -0
- open_webui-0.3.31.dev1/src/lib/components/common/SVGPanZoom.svelte +29 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/documents/AddDocModal.svelte +3 -6
- open_webui-0.3.31.dev1/src/lib/components/icons/ArrowPath.svelte +19 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/ArrowsPointingOut.svelte +19 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/BarsArrowUp.svelte +19 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/BookOpen.svelte +19 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/Cube.svelte +19 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/FloppyDisk.svelte +20 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/FolderOpen.svelte +19 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/Info.svelte +19 -0
- open_webui-0.3.31.dev1/src/lib/components/icons/LightBlub.svelte +19 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Navbar/Menu.svelte +26 -6
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Navbar.svelte +8 -3
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/ChatItem.svelte +16 -4
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar.svelte +9 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/UpdateInfoToast.svelte +1 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Documents.svelte +2 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Functions/FunctionEditor.svelte +24 -3
- open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection/AddContentMenu.svelte +107 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection/AddTextContentModal.svelte +125 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection/Files.svelte +34 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/Collection.svelte +717 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/CreateCollection.svelte +146 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge/ItemMenu.svelte +69 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Knowledge.svelte +195 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Models/Knowledge/Selector.svelte +167 -0
- open_webui-0.3.31.dev1/src/lib/components/workspace/Models/Knowledge.svelte +63 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Tools/ToolkitEditor.svelte +23 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/constants.ts +1 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ar-BH/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/bg-BG/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/bn-BD/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ca-ES/translation.json +42 -17
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ceb-PH/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/de-DE/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/dg-DG/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/en-GB/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/en-US/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/es-ES/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fa-IR/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fi-FI/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fr-CA/translation.json +39 -14
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/fr-FR/translation.json +39 -14
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/he-IL/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/hi-IN/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/hr-HR/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/id-ID/translation.json +36 -11
- open_webui-0.3.31.dev1/src/lib/i18n/locales/ie-GA/translation.json +788 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/it-IT/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ja-JP/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ka-GE/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ko-KR/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/languages.json +4 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/lt-LT/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ms-MY/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/nb-NO/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/nl-NL/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pa-IN/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pl-PL/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pt-BR/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/pt-PT/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ro-RO/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/ru-RU/translation.json +60 -35
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/sr-RS/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/sv-SE/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/th-TH/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/tk-TW/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/tr-TR/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/uk-UA/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/vi-VN/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/zh-CN/translation.json +45 -20
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/zh-TW/translation.json +36 -11
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/stores/index.ts +4 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/index.ts +32 -0
- open_webui-0.3.31.dev1/src/lib/utils/marked/extension.ts +70 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/rag/index.ts +1 -1
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/+layout.svelte +26 -31
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/+layout.svelte +9 -9
- open_webui-0.3.31.dev1/src/routes/(app)/workspace/knowledge/+page.svelte +5 -0
- open_webui-0.3.31.dev1/src/routes/(app)/workspace/knowledge/[id]/+page.svelte +5 -0
- open_webui-0.3.31.dev1/src/routes/(app)/workspace/knowledge/create/+page.svelte +5 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/models/create/+page.svelte +10 -2
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/models/edit/+page.svelte +29 -3
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/auth/+page.svelte +6 -6
- open_webui-0.3.30.dev2/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
- open_webui-0.3.30.dev2/backend/open_webui/migrations/scripts/revision.py +0 -19
- open_webui-0.3.30.dev2/bun.lockb +0 -0
- open_webui-0.3.30.dev2/src/lib/components/chat/MessageInput/Suggestions.svelte +0 -118
- open_webui-0.3.30.dev2/src/lib/components/chat/Messages/Error.svelte +0 -26
- open_webui-0.3.30.dev2/src/lib/components/common/FileItem.svelte +0 -154
- open_webui-0.3.30.dev2/src/lib/components/workspace/Models/Knowledge/Selector.svelte +0 -138
- open_webui-0.3.30.dev2/src/lib/components/workspace/Models/Knowledge.svelte +0 -106
- open_webui-0.3.30.dev2/src/routes/(app)/workspace/documents/+page.svelte +0 -5
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.dockerignore +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.env.example +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.eslintignore +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.eslintrc.cjs +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.gitattributes +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/FUNDING.yml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/dependabot.yml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/pull_request_template.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/build-release.yml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/deploy-to-hf-spaces.yml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/docker-build.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/lint-frontend.disabled +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/release-pypi.yml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.gitignore +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.npmrc +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.prettierignore +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.prettierrc +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/CODE_OF_CONDUCT.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/Caddyfile.localhost +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/INSTALLATION.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/LICENSE +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/Makefile +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/TROUBLESHOOTING.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/.dockerignore +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/.gitignore +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/data/readme.txt +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/dev.sh +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/__init__.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/alembic.ini +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/images/main.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/images/utils/comfyui.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/socket/main.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/socket/utils.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/internal/wrappers.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/auths.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/chats.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/documents.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/functions.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/memories.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/models.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/prompts.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/tags.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/tools.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/models/users.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/auths.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/configs.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/documents.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/functions.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/models.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/prompts.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/tools.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/users.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/routers/utils.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/apps/webui/utils.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/data/readme.txt +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/README +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/env.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/script.py.mako +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/versions/7e5b5dc7342b_init.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/migrations/versions/ca81bd47c050_add_config_table.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/favicon.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSans-Bold.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSans-Italic.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSans-Regular.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSansJP-Regular.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSansKR-Regular.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/fonts/NotoSansSC-Regular.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/logo.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/splash.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/static/user-import.csv +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/__init__.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_auths.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_chats.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_documents.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_models.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_prompts.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/apps/webui/routers/test_users.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/util/abstract_integration_test.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/test/util/mock_user.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/logo.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/payload.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/response.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/security_headers.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/task.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/tools.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/utils.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/open_webui/utils/webhook.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/start.sh +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/backend/start_windows.bat +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/confirm_remove.sh +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/data/example-doc.txt +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/chat.cy.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/documents.cy.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/registration.cy.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/e2e/settings.cy.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/support/e2e.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/support/index.d.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress/tsconfig.json +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/cypress.config.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/demo.gif +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.a1111-test.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.amdgpu.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.api.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.data.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.gpu.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docker-compose.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/CONTRIBUTING.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/README.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/SECURITY.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/docs/apache.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/hatch_build.py +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/i18next-parser.config.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/helm/README.md +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/kustomization.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/ollama-service.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/ollama-statefulset.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/open-webui.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-deployment.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-ingress.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-pvc.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/base/webui-service.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/gpu/kustomization.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/kubernetes/manifest/gpu/ollama-statefulset-gpu.yaml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/postcss.config.js +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/run-compose.sh +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/run-ollama-docker.sh +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/run.sh +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/scripts/prepare-pyodide.js +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/app.d.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/audio/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/auths/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/chats/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/configs/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/documents/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/functions/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/images/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/memories/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/models/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/ollama/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/openai/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/prompts/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/tools/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/apis/users/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/ChangelogModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/AddUserModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/EditUserModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Connections.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Database.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/General.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Images.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Interface.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Models.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Pipelines.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings/Users.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/Settings.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/admin/UserChatsModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Controls/Valves.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/CallOverlay/VideoInputMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/FilesOverlay.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/InputMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/MessageInput/VoiceRecording.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Citations.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/CitationsModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown/KatexRenderer.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Name.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ProfileImage.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ProfileImageBase.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/RateComment.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/ResponseMessage/WebSearchResults.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Messages/Skeleton.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ModelSelector/Selector.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ModelSelector.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Overview/Flow.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Overview/Node.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/About.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Account/UpdatePassword.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Account.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Audio.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Chats.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/General.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Models.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization/ManageModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Settings/Personalization.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/SettingsModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ShareChatModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/ShortcutsModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/TagChatModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/chat/Tags.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Banner.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Checkbox.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/ConfirmDialog.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Drawer.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Dropdown.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Image.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/ImagePreview.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Loader.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Modal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Overlay.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Pagination.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Selector.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/SensitiveInput.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Spinner.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Switch.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tags/TagInput.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tags/TagList.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tags.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Tooltip.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/common/Valves.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/documents/EditDocModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/AdjustmentsHorizontal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ArchiveBox.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ArrowDownTray.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ArrowUpCircle.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Bolt.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Bookmark.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/BookmarkSlash.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatBubble.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatBubbleOval.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatBubbles.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChatMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Check.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronDown.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronLeft.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronRight.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronUp.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/ChevronUpDown.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Clipboard.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/DocumentArrowUpSolid.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/DocumentDuplicate.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/EllipsisHorizontal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/EllipsisVertical.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/EyeSlash.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/GarbageBin.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/GlobeAlt.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/GlobeAltSolid.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Headphone.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Heart.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Keyboard.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Lifebuoy.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Link.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/MagnifyingGlass.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Map.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/MenuLines.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Merge.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Pencil.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Plus.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/QuestionMarkCircle.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Search.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Share.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Sparkles.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/Star.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/User.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/WrenchSolid.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/icons/XMark.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Help/HelpMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Help.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Overlay/AccountPending.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/ChatMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/layout/Sidebar/UserMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/playground/ChatCompletion.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/playground/Playground.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/playground/TextCompletion.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Functions/FunctionMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Functions.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/ActionsSelector.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/Capabilities.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/FiltersSelector.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/ModelMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models/ToolsSelector.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Models.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Prompts/PromptMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Prompts.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Tools/ToolMenu.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/Tools.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/common/ManifestModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/components/workspace/common/ValvesModal.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/i18n/locales/tk-TM/transaltion.json +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/types/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/_template_old.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/characters/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/marked/katex-extension.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/utils/transitions/index.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/lib/workers/pyodide.worker.ts +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/admin/+layout.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/admin/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/admin/settings/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/c/[id]/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/playground/+layout.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/playground/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/functions/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/functions/create/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/functions/edit/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/models/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/prompts/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/prompts/create/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/prompts/edit/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/tools/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/tools/create/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/(app)/workspace/tools/edit/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/+error.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/+layout.js +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/+layout.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/error/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/routes/s/[id]/+page.svelte +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/src/tailwind.css +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/assets/fonts/Archivo-Variable.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/assets/fonts/Inter-Variable.ttf +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/assets/fonts/Mona-Sans.woff2 +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/audio/greeting.mp3 +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/doge.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/favicon.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/manifest.json +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/opensearch.xml +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/pyodide/pyodide-lock.json +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/robots.txt +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/static/favicon.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/static/splash-dark.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/static/splash.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/themes/rosepine-dawn.css +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/themes/rosepine.css +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/static/user.png +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/svelte.config.js +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/tailwind.config.js +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/test/test_files/image_gen/sd-empty.pt +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/tsconfig.json +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/update_ollama_models.sh +0 -0
- {open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/uv.lock +0 -0
- {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.
|
{open_webui-0.3.30.dev2 → open_webui-0.3.31.dev1}/.github/workflows/format-build-frontend.yaml
RENAMED
|
@@ -21,7 +21,7 @@ jobs:
|
|
|
21
21
|
- name: Setup Node.js
|
|
22
22
|
uses: actions/setup-node@v4
|
|
23
23
|
with:
|
|
24
|
-
node-version: '
|
|
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: '
|
|
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@
|
|
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 '*' &
|
|
@@ -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:
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
104
|
+
# Open WebUI 👋
|
|
104
105
|
|
|
105
106
|

|
|
106
107
|

|
|
@@ -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
|
-
|
|
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
|
|
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
|
|
1
|
+
# Open WebUI 👋
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|

|
|
@@ -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
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
-
|
|
370
|
-
ext = file.filename.split(".")[-1]
|
|
397
|
+
transcript = "".join([segment.text for segment in list(segments)])
|
|
371
398
|
|
|
372
|
-
|
|
373
|
-
filename = f"{id}.{ext}"
|
|
399
|
+
data = {"text": transcript.strip()}
|
|
374
400
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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
|
-
|
|
431
|
+
r.raise_for_status()
|
|
415
432
|
|
|
416
|
-
data =
|
|
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
|
-
|
|
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
|
-
|
|
437
|
-
|
|
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
|
-
|
|
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
|
-
|
|
442
|
-
|
|
443
|
-
|
|
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
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
log.
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
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=
|
|
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=
|
|
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
|
|
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
|
|
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
|
|