Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
d590647
Update translation.json
OriginalSimon Feb 13, 2025
3ac3615
Merge pull request #9890 from OriginalSimon/dev
tjbck Feb 13, 2025
86074cf
fix: re-enable tool use when sending tool output
smonux Feb 13, 2025
e98f859
format
smonux Feb 13, 2025
c47eddc
Optional title generation
nachogmd Feb 13, 2025
70e8337
Update translation.json
Kylapaallikko Feb 13, 2025
c315634
Merge pull request #9917 from nachogmd/dev
tjbck Feb 13, 2025
df1ff8f
chore: remove flask
tjbck Feb 13, 2025
95d56c7
Merge pull request #9907 from smonux/dev
tjbck Feb 13, 2025
ba4b0db
fix playground text completion
SleepyYui Feb 13, 2025
cd27845
fix: direct connections
tjbck Feb 13, 2025
deeb04e
Merge pull request #9942 from SleepyYui/bugfix-9635
tjbck Feb 13, 2025
f20b7c2
fix: user direct connections
tjbck Feb 13, 2025
68519d6
enh: multiple tool calls support
tjbck Feb 13, 2025
e143550
fix
tjbck Feb 13, 2025
da75706
refac
tjbck Feb 14, 2025
27d395b
feat: add web search via SerpApi
xring Feb 14, 2025
c9a8808
refac
tjbck Feb 14, 2025
b7aeb43
refac
tjbck Feb 14, 2025
fa92abc
refac
tjbck Feb 14, 2025
d9ee53b
refac: placeholder performance
tjbck Feb 14, 2025
7b37cdc
Merge pull request #9980 from xring/web_search_serpapi
tjbck Feb 14, 2025
304aed0
chore: format
tjbck Feb 14, 2025
99b50b3
refac
tjbck Feb 14, 2025
ceef600
support async load for websearch
Yimi81 Feb 14, 2025
893bfe9
doc: changelog
tjbck Feb 14, 2025
2017856
Merge pull request #9945 from open-webui/dev
tjbck Feb 14, 2025
d3f7193
web loader support proxy
Yimi81 Feb 14, 2025
85c2288
Update translation.json
panda44312 Feb 14, 2025
f376a61
Merge branch 'open-webui:main' into patch-4
panda44312 Feb 14, 2025
42119e2
Update translation.json
panda44312 Feb 14, 2025
9072959
fix: remove whitespace to improve typesetting for inline Markdown
tremlin Feb 14, 2025
8d898f2
Added romanian translations
bogdanr Feb 14, 2025
5ca39eb
Update tavily.py
liucoj Feb 14, 2025
a8e3104
FIx: Domain Filter list in tavily.py
liucoj Feb 14, 2025
941c787
Add presence penalty (openAi/ollama/others) and repeat penalty (ollam…
ferret99gt Feb 14, 2025
ca84580
Merge pull request #1 from liucoj/liucoj-patch-1
liucoj Feb 14, 2025
9a17079
Update translation.json
Kylapaallikko Feb 14, 2025
6b853ec
Update translation.json
Kylapaallikko Feb 14, 2025
c70947c
Update translation.json
Kylapaallikko Feb 14, 2025
665b67f
Update main.py
silentoplayz Feb 14, 2025
fcb1178
Update translation.json
Kylapaallikko Feb 14, 2025
2448c4e
Update translation.json
Kylapaallikko Feb 14, 2025
7037ae2
Update translation.json
Kylapaallikko Feb 14, 2025
3d26bca
refac: deprecate `[` `]` prompt variables
tjbck Feb 14, 2025
7705ba1
Merge pull request #10024 from Kylapaallikko/main
tjbck Feb 14, 2025
8d63ee5
Merge pull request #10019 from liucoj/dev
tjbck Feb 14, 2025
0746e2f
Merge pull request #10021 from silentoplayz/ASCII-font-change
tjbck Feb 14, 2025
c797ef3
Merge pull request #9990 from panda44312/patch-4
tjbck Feb 14, 2025
a13f90f
Merge pull request #10002 from alpha-pet/fix-markdown-inline-whitespace
tjbck Feb 14, 2025
2a67d3d
Merge pull request #10005 from bogdanr/main
tjbck Feb 14, 2025
3e54369
Merge pull request #9988 from Yimi81/feat-support-async-load
tjbck Feb 14, 2025
bb72957
Update field label for Ollama convention
ferret99gt Feb 14, 2025
b38acc8
Merge branch 'dev' into feate-webloader-support-proxy
Yimi81 Feb 15, 2025
74c8690
Merge pull request #9989 from Yimi81/feate-webloader-support-proxy
tjbck Feb 15, 2025
1aa963a
Update Chat.svelte error handling of previous message
LuyiTian Feb 15, 2025
4045e96
i18n: update zh-TW
TiancongLx Feb 15, 2025
0dae8de
fix: return local date from `getFormattedDate`
crizCraig Feb 15, 2025
e67eb89
style: black format
crizCraig Feb 15, 2025
f0feb7b
refac
tjbck Feb 16, 2025
38291e9
refac
tjbck Feb 16, 2025
fb12ee3
fix exception where openrouter doesn't populate - no longer index wi…
i-infra Feb 16, 2025
5e3742f
and one last edit
i-infra Feb 16, 2025
3d0c06c
refac: duckduckgo
tjbck Feb 16, 2025
bbda717
refac: citations
tjbck Feb 16, 2025
b99f296
Merge pull request #10075 from TiancongLx/dev
tjbck Feb 16, 2025
ff60754
refac: general admin settings
tjbck Feb 16, 2025
a0126f3
refac: general admin settings
tjbck Feb 16, 2025
30182d7
refac
tjbck Feb 16, 2025
e3fa48b
chore: tailwind v4 migration
tjbck Feb 16, 2025
60e3229
refac
tjbck Feb 16, 2025
052531a
refac
tjbck Feb 16, 2025
fd8998a
refac
tjbck Feb 16, 2025
b0ad5cd
Merge pull request #10076 from crizCraig/local_date
tjbck Feb 16, 2025
fab0933
Merge pull request #10065 from LuyiTian/dev
tjbck Feb 16, 2025
f2006c7
refac: styling
tjbck Feb 16, 2025
87ff1a9
refac: styling
tjbck Feb 16, 2025
e4d6fc6
refac: theme
tjbck Feb 16, 2025
5af926b
refac
tjbck Feb 16, 2025
ea15d91
Merge pull request #10016 from ferret99gt/tweak-and-add-advanced-para…
tjbck Feb 16, 2025
19c340d
refac: pipelines
tjbck Feb 16, 2025
91de8e0
refac: styling
tjbck Feb 16, 2025
63cf80a
refac
tjbck Feb 16, 2025
3b856b6
refac
tjbck Feb 16, 2025
8218906
refac
tjbck Feb 17, 2025
ab94017
Auto text direction (fix for RTL) in most cases
ttv20 Feb 17, 2025
b73b834
fix table header align on rtl
ttv20 Feb 17, 2025
834617a
fix blockquote border line direction in RTL
ttv20 Feb 17, 2025
0888ddd
Fix card title direction and alignment (for RTL)
ttv20 Feb 17, 2025
93590d2
Merge branch 'dev' into patch-1
ttv20 Feb 17, 2025
d26569f
Update ChatItem.svelte: Revert text-align for download button in rtl
ttv20 Feb 17, 2025
8d14934
Update MarkdownTokens.svelte: Revert text-align for download button i…
ttv20 Feb 17, 2025
a5fa1cd
Merge pull request #10209 from i-infra/iinf/fix-for-openrouter
tjbck Feb 17, 2025
3df6fa7
Merge pull request #10206 from ttv20/patch-1
tjbck Feb 17, 2025
2f75eef
enh: code execution settings
tjbck Feb 18, 2025
05af003
enh: warning
tjbck Feb 18, 2025
b850b8a
refac: styling
tjbck Feb 18, 2025
70a5be0
refac
tjbck Feb 18, 2025
16ce8ab
refac
tjbck Feb 18, 2025
ca0b721
enh: full context web search
tjbck Feb 18, 2025
dbe5d1c
refac
tjbck Feb 18, 2025
f72e28a
enh: message delete confirm dialog
tjbck Feb 18, 2025
93731e4
fix: temp chat message continue
tjbck Feb 18, 2025
0c46102
enh: svg diagram download button
tjbck Feb 18, 2025
a79a6a5
chore: format
tjbck Feb 18, 2025
9bd26d6
enh: avif support
tjbck Feb 18, 2025
ba6cde8
fix: include_domain does NOT exist
tjbck Feb 18, 2025
658944e
refac
tjbck Feb 18, 2025
c657e2a
doc: readme
tjbck Feb 18, 2025
fdaa6a9
doc: readme
tjbck Feb 18, 2025
d5ab2c6
refac: readme
tjbck Feb 18, 2025
e8b11a7
chore: format
tjbck Feb 18, 2025
188b928
doc: changelog
tjbck Feb 18, 2025
e4c9734
Merge pull request #10038 from open-webui/dev
tjbck Feb 18, 2025
1764170
refac
tjbck Feb 18, 2025
c513308
Merge pull request #10236 from open-webui/dev
tjbck Feb 18, 2025
0c3ba51
doc: changelog
tjbck Feb 18, 2025
3f3a5bb
Merge pull request #10238 from open-webui/dev
tjbck Feb 18, 2025
071ec72
Merge remote-tracking branch 'open-webui/main'
gewlar Feb 18, 2025
7c8d796
Increase splash size
gewlar Feb 18, 2025
09585ff
Change name to IntelliChat
gewlar Feb 18, 2025
e1a89da
build(deps): bump dompurify and mermaid
dependabot[bot] Feb 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,46 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.5.14] - 2025-02-17

### Fixed

- **🔧 Critical Import Error Resolved**: Fixed a circular import issue preventing 'override_static' from being correctly imported in 'open_webui.config', ensuring smooth system initialization and stability.

## [0.5.13] - 2025-02-17

### Added

- **🌐 Full Context Mode for Web Search**: Enable highly accurate web searches by utilizing full context mode—ideal for models with large context windows, ensuring more precise and insightful results.
- **⚡ Optimized Asynchronous Web Search**: Web searches now load significantly faster with optimized async support, providing users with quicker, more efficient information retrieval.
- **🔄 Auto Text Direction for RTL Languages**: Automatic text alignment based on language input, ensuring seamless conversation flow for Arabic, Hebrew, and other right-to-left scripts.
- **🚀 Jupyter Notebook Support for Code Execution**: The "Run" button in code blocks can now use Jupyter for execution, offering a powerful, dynamic coding experience directly in the chat.
- **🗑️ Message Delete Confirmation Dialog**: Prevent accidental deletions with a new confirmation prompt before removing messages, adding an additional layer of security to your chat history.
- **📥 Download Button for SVG Diagrams**: SVG diagrams generated within chat can now be downloaded instantly, making it easier to save and share complex visual data.
- **✨ General UI/UX Improvements and Backend Stability**: A refined interface with smoother interactions, improved layouts, and backend stability enhancements for a more reliable, polished experience.

### Fixed

- **🛠️ Temporary Chat Message Continue Button Fixed**: The "Continue Response" button for temporary chats now works as expected, ensuring an uninterrupted conversation flow.

### Changed

- **📝 Prompt Variable Update**: Deprecated square bracket '[]' indicators for prompt variables; now requires double curly brackets '{{}}' for consistency and clarity.
- **🔧 Stability Enhancements**: Error handling improved in chat history, ensuring smoother operations when reviewing previous messages.

## [0.5.12] - 2025-02-13

### Added

- **🛠️ Multiple Tool Calls Support for Native Function Mode**: Functions now can call multiple tools within a single response, unlocking better automation and workflow flexibility when using native function calling.

### Fixed

- **📝 Playground Text Completion Restored**: Addressed an issue where text completion in the Playground was not functioning.
- **🔗 Direct Connections Now Work for Regular Users**: Fixed a bug where users with the 'user' role couldn't establish direct API connections, enabling seamless model usage for all user tiers.
- **⚡ Landing Page Input No Longer Lags with Long Text**: Improved input responsiveness on the landing page, ensuring fast and smooth typing experiences even when entering long messages.
- **🔧 Parameter in Functions Fixed**: Fixed an issue where the reserved parameters wasn’t recognized within functions, restoring full functionality for advanced task-based automation.

## [0.5.11] - 2025-02-13

### Added
Expand Down
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,15 @@

**Open WebUI is an [extensible](https://docs.openwebui.com/features/plugin/), feature-rich, and user-friendly self-hosted AI platform designed to operate entirely offline.** It supports various LLM runners like **Ollama** and **OpenAI-compatible APIs**, with **built-in inference engine** for RAG, making it a **powerful AI deployment solution**.

For more information, be sure to check out our [Open WebUI Documentation](https://docs.openwebui.com/).

![Open WebUI Demo](./demo.gif)

> [!TIP]
> **Looking for an [Enterprise Plan](https://docs.openwebui.com/enterprise)?** – **[Speak with Our Sales Team Today!](mailto:sales@openwebui.com)**
>
> Get **enhanced capabilities**, including **custom theming and branding**, **Service Level Agreement (SLA) support**, **Long-Term Support (LTS) versions**, and **more!**

For more information, be sure to check out our [Open WebUI Documentation](https://docs.openwebui.com/).

## Key Features of Open WebUI ⭐

- 🚀 **Effortless Setup**: Install seamlessly using Docker or Kubernetes (kubectl, kustomize or helm) for a hassle-free experience with support for both `:ollama` and `:cuda` tagged images.
Expand Down
107 changes: 98 additions & 9 deletions backend/open_webui/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
import logging
import os
import shutil
import base64

from datetime import datetime
from pathlib import Path
from typing import Generic, Optional, TypeVar
Expand Down Expand Up @@ -593,8 +595,6 @@ def oidc_oauth_register(client):
shutil.copyfile(frontend_favicon, STATIC_DIR / "favicon.png")
except Exception as e:
logging.error(f"An error occurred: {e}")
else:
logging.warning(f"Frontend favicon not found at {frontend_favicon}")

frontend_splash = FRONTEND_BUILD_DIR / "static" / "splash.png"

Expand All @@ -603,12 +603,18 @@ def oidc_oauth_register(client):
shutil.copyfile(frontend_splash, STATIC_DIR / "splash.png")
except Exception as e:
logging.error(f"An error occurred: {e}")
else:
logging.warning(f"Frontend splash not found at {frontend_splash}")

frontend_loader = FRONTEND_BUILD_DIR / "static" / "loader.js"

if frontend_loader.exists():
try:
shutil.copyfile(frontend_loader, STATIC_DIR / "loader.js")
except Exception as e:
logging.error(f"An error occurred: {e}")


####################################
# CUSTOM_NAME
# CUSTOM_NAME (Legacy)
####################################

CUSTOM_NAME = os.environ.get("CUSTOM_NAME", "")
Expand Down Expand Up @@ -650,6 +656,16 @@ def oidc_oauth_register(client):
pass


####################################
# LICENSE_KEY
####################################

LICENSE_KEY = PersistentConfig(
"LICENSE_KEY",
"license.key",
os.environ.get("LICENSE_KEY", ""),
)

####################################
# STORAGE PROVIDER
####################################
Expand Down Expand Up @@ -1190,6 +1206,12 @@ class BannerModel(BaseModel):
os.environ.get("ENABLE_TAGS_GENERATION", "True").lower() == "true",
)

ENABLE_TITLE_GENERATION = PersistentConfig(
"ENABLE_TITLE_GENERATION",
"task.title.enable",
os.environ.get("ENABLE_TITLE_GENERATION", "True").lower() == "true",
)


ENABLE_SEARCH_QUERY_GENERATION = PersistentConfig(
"ENABLE_SEARCH_QUERY_GENERATION",
Expand Down Expand Up @@ -1341,6 +1363,39 @@ class BannerModel(BaseModel):
# Code Interpreter
####################################


CODE_EXECUTION_ENGINE = PersistentConfig(
"CODE_EXECUTION_ENGINE",
"code_execution.engine",
os.environ.get("CODE_EXECUTION_ENGINE", "pyodide"),
)

CODE_EXECUTION_JUPYTER_URL = PersistentConfig(
"CODE_EXECUTION_JUPYTER_URL",
"code_execution.jupyter.url",
os.environ.get("CODE_EXECUTION_JUPYTER_URL", ""),
)

CODE_EXECUTION_JUPYTER_AUTH = PersistentConfig(
"CODE_EXECUTION_JUPYTER_AUTH",
"code_execution.jupyter.auth",
os.environ.get("CODE_EXECUTION_JUPYTER_AUTH", ""),
)

CODE_EXECUTION_JUPYTER_AUTH_TOKEN = PersistentConfig(
"CODE_EXECUTION_JUPYTER_AUTH_TOKEN",
"code_execution.jupyter.auth_token",
os.environ.get("CODE_EXECUTION_JUPYTER_AUTH_TOKEN", ""),
)


CODE_EXECUTION_JUPYTER_AUTH_PASSWORD = PersistentConfig(
"CODE_EXECUTION_JUPYTER_AUTH_PASSWORD",
"code_execution.jupyter.auth_password",
os.environ.get("CODE_EXECUTION_JUPYTER_AUTH_PASSWORD", ""),
)


ENABLE_CODE_INTERPRETER = PersistentConfig(
"ENABLE_CODE_INTERPRETER",
"code_interpreter.enable",
Expand All @@ -1362,26 +1417,37 @@ class BannerModel(BaseModel):
CODE_INTERPRETER_JUPYTER_URL = PersistentConfig(
"CODE_INTERPRETER_JUPYTER_URL",
"code_interpreter.jupyter.url",
os.environ.get("CODE_INTERPRETER_JUPYTER_URL", ""),
os.environ.get(
"CODE_INTERPRETER_JUPYTER_URL", os.environ.get("CODE_EXECUTION_JUPYTER_URL", "")
),
)

CODE_INTERPRETER_JUPYTER_AUTH = PersistentConfig(
"CODE_INTERPRETER_JUPYTER_AUTH",
"code_interpreter.jupyter.auth",
os.environ.get("CODE_INTERPRETER_JUPYTER_AUTH", ""),
os.environ.get(
"CODE_INTERPRETER_JUPYTER_AUTH",
os.environ.get("CODE_EXECUTION_JUPYTER_AUTH", ""),
),
)

CODE_INTERPRETER_JUPYTER_AUTH_TOKEN = PersistentConfig(
"CODE_INTERPRETER_JUPYTER_AUTH_TOKEN",
"code_interpreter.jupyter.auth_token",
os.environ.get("CODE_INTERPRETER_JUPYTER_AUTH_TOKEN", ""),
os.environ.get(
"CODE_INTERPRETER_JUPYTER_AUTH_TOKEN",
os.environ.get("CODE_EXECUTION_JUPYTER_AUTH_TOKEN", ""),
),
)


CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD = PersistentConfig(
"CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD",
"code_interpreter.jupyter.auth_password",
os.environ.get("CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD", ""),
os.environ.get(
"CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD",
os.environ.get("CODE_EXECUTION_JUPYTER_AUTH_PASSWORD", ""),
),
)


Expand Down Expand Up @@ -1700,6 +1766,12 @@ class BannerModel(BaseModel):
os.getenv("RAG_WEB_SEARCH_ENGINE", ""),
)

RAG_WEB_SEARCH_FULL_CONTEXT = PersistentConfig(
"RAG_WEB_SEARCH_FULL_CONTEXT",
"rag.web.search.full_context",
os.getenv("RAG_WEB_SEARCH_FULL_CONTEXT", "False").lower() == "true",
)

# You can provide a list of your own websites to filter after performing a web search.
# This ensures the highest level of safety and reliability of the information sources.
RAG_WEB_SEARCH_DOMAIN_FILTER_LIST = PersistentConfig(
Expand Down Expand Up @@ -1803,6 +1875,18 @@ class BannerModel(BaseModel):
os.getenv("SEARCHAPI_ENGINE", ""),
)

SERPAPI_API_KEY = PersistentConfig(
"SERPAPI_API_KEY",
"rag.web.search.serpapi_api_key",
os.getenv("SERPAPI_API_KEY", ""),
)

SERPAPI_ENGINE = PersistentConfig(
"SERPAPI_ENGINE",
"rag.web.search.serpapi_engine",
os.getenv("SERPAPI_ENGINE", ""),
)

BING_SEARCH_V7_ENDPOINT = PersistentConfig(
"BING_SEARCH_V7_ENDPOINT",
"rag.web.search.bing_search_v7_endpoint",
Expand Down Expand Up @@ -1835,6 +1919,11 @@ class BannerModel(BaseModel):
int(os.getenv("RAG_WEB_SEARCH_CONCURRENT_REQUESTS", "10")),
)

RAG_WEB_SEARCH_TRUST_ENV = PersistentConfig(
"RAG_WEB_SEARCH_TRUST_ENV",
"rag.web.search.trust_env",
os.getenv("RAG_WEB_SEARCH_TRUST_ENV", False),
)

####################################
# Images
Expand Down
1 change: 1 addition & 0 deletions backend/open_webui/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@

WEBUI_FAVICON_URL = "https://openwebui.com/favicon.png"

TRUSTED_SIGNATURE_KEY = os.environ.get("TRUSTED_SIGNATURE_KEY", "")

####################################
# ENV (dev,test,prod)
Expand Down
Loading