Skip to content

Commit 265d1b2

Browse files
authored
Add support for mariadb-vector as backing vector DB (open-webui#21931)
1 parent caf3362 commit 265d1b2

7 files changed

Lines changed: 653 additions & 0 deletions

File tree

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ RUN chown -R $UID:$GID /app $HOME
127127
RUN apt-get update && \
128128
apt-get install -y --no-install-recommends \
129129
git build-essential pandoc gcc netcat-openbsd curl jq \
130+
libmariadb-dev \
130131
python3-dev \
131132
ffmpeg libsm6 libxext6 zstd \
132133
&& rm -rf /var/lib/apt/lists/*

backend/open_webui/config.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,6 +2359,78 @@ class BannerModel(BaseModel):
23592359
CHROMA_HTTP_SSL = os.environ.get("CHROMA_HTTP_SSL", "false").lower() == "true"
23602360
# this uses the model defined in the Dockerfile ENV variable. If you dont use docker or docker based deployments such as k8s, the default embedding model will be used (sentence-transformers/all-MiniLM-L6-v2)
23612361

2362+
2363+
# MariaDB Vector (mariadb-vector)
2364+
MARIADB_VECTOR_DB_URL = os.environ.get("MARIADB_VECTOR_DB_URL", "").strip()
2365+
2366+
MARIADB_VECTOR_INITIALIZE_MAX_VECTOR_LENGTH = int(
2367+
os.environ.get("MARIADB_VECTOR_INITIALIZE_MAX_VECTOR_LENGTH", "1536").strip() or "1536"
2368+
)
2369+
2370+
# Distance strategy:
2371+
# - cosine => vec_distance_cosine(...)
2372+
# - euclidean => vec_distance_euclidean(...)
2373+
MARIADB_VECTOR_DISTANCE_STRATEGY = (
2374+
os.environ.get("MARIADB_VECTOR_DISTANCE_STRATEGY", "cosine").strip().lower()
2375+
)
2376+
2377+
# HNSW M parameter (MariaDB VECTOR INDEX ... M=<int>)
2378+
MARIADB_VECTOR_INDEX_M = int(os.environ.get("MARIADB_VECTOR_INDEX_M", "8").strip() or "8")
2379+
2380+
# Pooling (MariaDB-Vector)
2381+
MARIADB_VECTOR_POOL_SIZE = os.environ.get("MARIADB_VECTOR_POOL_SIZE", None)
2382+
2383+
if MARIADB_VECTOR_POOL_SIZE != None:
2384+
try:
2385+
MARIADB_VECTOR_POOL_SIZE = int(MARIADB_VECTOR_POOL_SIZE)
2386+
except Exception:
2387+
MARIADB_VECTOR_POOL_SIZE = None
2388+
2389+
MARIADB_VECTOR_POOL_MAX_OVERFLOW = os.environ.get("MARIADB_VECTOR_POOL_MAX_OVERFLOW", 0)
2390+
2391+
if MARIADB_VECTOR_POOL_MAX_OVERFLOW == "":
2392+
MARIADB_VECTOR_POOL_MAX_OVERFLOW = 0
2393+
else:
2394+
try:
2395+
MARIADB_VECTOR_POOL_MAX_OVERFLOW = int(MARIADB_VECTOR_POOL_MAX_OVERFLOW)
2396+
except Exception:
2397+
MARIADB_VECTOR_POOL_MAX_OVERFLOW = 0
2398+
2399+
MARIADB_VECTOR_POOL_TIMEOUT = os.environ.get("MARIADB_VECTOR_POOL_TIMEOUT", 30)
2400+
2401+
if MARIADB_VECTOR_POOL_TIMEOUT == "":
2402+
MARIADB_VECTOR_POOL_TIMEOUT = 30
2403+
else:
2404+
try:
2405+
MARIADB_VECTOR_POOL_TIMEOUT = int(MARIADB_VECTOR_POOL_TIMEOUT)
2406+
except Exception:
2407+
MARIADB_VECTOR_POOL_TIMEOUT = 30
2408+
2409+
MARIADB_VECTOR_POOL_RECYCLE = os.environ.get("MARIADB_VECTOR_POOL_RECYCLE", 3600)
2410+
2411+
if MARIADB_VECTOR_POOL_RECYCLE == "":
2412+
MARIADB_VECTOR_POOL_RECYCLE = 3600
2413+
else:
2414+
try:
2415+
MARIADB_VECTOR_POOL_RECYCLE = int(MARIADB_VECTOR_POOL_RECYCLE)
2416+
except Exception:
2417+
MARIADB_VECTOR_POOL_RECYCLE = 3600
2418+
2419+
ENABLE_MARIADB_VECTOR = True
2420+
if VECTOR_DB == "mariadb-vector":
2421+
if not MARIADB_VECTOR_DB_URL:
2422+
ENABLE_MARIADB_VECTOR = False
2423+
else:
2424+
try:
2425+
parsed = urlparse(MARIADB_VECTOR_DB_URL)
2426+
scheme = (parsed.scheme or "").lower()
2427+
# Require official driver so VECTOR binds as float32 bytes correctly
2428+
if scheme != "mariadb+mariadbconnector":
2429+
ENABLE_MARIADB_VECTOR = False
2430+
except Exception:
2431+
ENABLE_MARIADB_VECTOR = False
2432+
2433+
23622434
# Milvus
23632435
MILVUS_URI = os.environ.get("MILVUS_URI", f"{DATA_DIR}/vector_db/milvus.db")
23642436
MILVUS_DB = os.environ.get("MILVUS_DB", "default")

0 commit comments

Comments
 (0)