diff --git a/.env.example b/.env.example index de763f31c..3d2aafc09 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,6 @@ # Ollama URL for the backend to connect -# The path '/ollama/api' will be redirected to the specified backend URL -OLLAMA_API_BASE_URL='http://localhost:11434/api' +# The path '/ollama' will be redirected to the specified backend URL +OLLAMA_BASE_URL='http://localhost:11434' OPENAI_API_BASE_URL='' OPENAI_API_KEY='' diff --git a/Dockerfile b/Dockerfile index 7eb34dab8..2d2f522ae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ FROM python:3.11-slim-bookworm as base ENV ENV=prod ENV PORT "" -ENV OLLAMA_API_BASE_URL "/ollama/api" +ENV OLLAMA_BASE_URL "/ollama" ENV OPENAI_API_BASE_URL "" ENV OPENAI_API_KEY "" diff --git a/README.md b/README.md index 0b346853b..2528996e8 100644 --- a/README.md +++ b/README.md @@ -95,10 +95,10 @@ Don't forget to explore our sibling project, [Open WebUI Community](https://open - **If Ollama is on a Different Server**, use this command: -- To connect to Ollama on another server, change the `OLLAMA_API_BASE_URL` to the server's URL: +- To connect to Ollama on another server, change the `OLLAMA_BASE_URL` to the server's URL: ```bash - docker run -d -p 3000:8080 -e OLLAMA_API_BASE_URL=https://example.com/api -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main + 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 ``` - After installation, you can access Open WebUI at [http://localhost:3000](http://localhost:3000). Enjoy! 😄 @@ -110,7 +110,7 @@ If you're experiencing connection issues, it’s often due to the WebUI docker c **Example Docker Command**: ```bash -docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_API_BASE_URL=http://127.0.0.1:11434/api --name open-webui --restart always ghcr.io/open-webui/open-webui:main +docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main ``` ### Other Installation Methods diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index d3163501a..8e8f89da0 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -4,7 +4,7 @@ The Open WebUI system is designed to streamline interactions between the client (your browser) and the Ollama API. At the heart of this design is a backend reverse proxy, enhancing security and resolving CORS issues. -- **How it Works**: The Open WebUI is designed to interact with the Ollama API through a specific route. When a request is made from the WebUI to Ollama, it is not directly sent to the Ollama API. Initially, the request is sent to the Open WebUI backend via `/ollama/api` route. From there, the backend is responsible for forwarding the request to the Ollama API. This forwarding is accomplished by using the route specified in the `OLLAMA_API_BASE_URL` environment variable. Therefore, a request made to `/ollama/api` in the WebUI is effectively the same as making a request to `OLLAMA_API_BASE_URL` in the backend. For instance, a request to `/ollama/api/tags` in the WebUI is equivalent to `OLLAMA_API_BASE_URL/tags` in the backend. +- **How it Works**: The Open WebUI is designed to interact with the Ollama API through a specific route. When a request is made from the WebUI to Ollama, it is not directly sent to the Ollama API. Initially, the request is sent to the Open WebUI backend via `/ollama` route. From there, the backend is responsible for forwarding the request to the Ollama API. This forwarding is accomplished by using the route specified in the `OLLAMA_BASE_URL` environment variable. Therefore, a request made to `/ollama` in the WebUI is effectively the same as making a request to `OLLAMA_BASE_URL` in the backend. For instance, a request to `/ollama/api/tags` in the WebUI is equivalent to `OLLAMA_BASE_URL/api/tags` in the backend. - **Security Benefits**: This design prevents direct exposure of the Ollama API to the frontend, safeguarding against potential CORS (Cross-Origin Resource Sharing) issues and unauthorized access. Requiring authentication to access the Ollama API further enhances this security layer. @@ -15,7 +15,7 @@ If you're experiencing connection issues, it’s often due to the WebUI docker c **Example Docker Command**: ```bash -docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_API_BASE_URL=http://127.0.0.1:11434/api --name open-webui --restart always ghcr.io/open-webui/open-webui:main +docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main ``` ### General Connection Errors @@ -25,8 +25,8 @@ docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_API_BASE_ **Troubleshooting Steps**: 1. **Verify Ollama URL Format**: - - When running the Web UI container, ensure the `OLLAMA_API_BASE_URL` is correctly set, including the `/api` suffix. (e.g., `http://192.168.1.1:11434/api` for different host setups). + - When running the Web UI container, ensure the `OLLAMA_BASE_URL` is correctly set. (e.g., `http://192.168.1.1:11434` for different host setups). - In the Open WebUI, navigate to "Settings" > "General". - - Confirm that the Ollama Server URL is correctly set to `[OLLAMA URL]/api` (e.g., `http://localhost:11434/api`), including the `/api` suffix. + - Confirm that the Ollama Server URL is correctly set to `[OLLAMA URL]` (e.g., `http://localhost:11434`). By following these enhanced troubleshooting steps, connection issues should be effectively resolved. For further assistance or queries, feel free to reach out to us on our community Discord. diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index d4d1e91a6..f4442d04f 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -15,7 +15,7 @@ import asyncio from apps.web.models.users import Users from constants import ERROR_MESSAGES from utils.utils import decode_token, get_current_user, get_admin_user -from config import OLLAMA_BASE_URL, WEBUI_AUTH +from config import OLLAMA_BASE_URLS from typing import Optional, List, Union @@ -29,8 +29,7 @@ app.add_middleware( allow_headers=["*"], ) -app.state.OLLAMA_BASE_URL = OLLAMA_BASE_URL -app.state.OLLAMA_BASE_URLS = [OLLAMA_BASE_URL] +app.state.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS app.state.MODELS = {} diff --git a/backend/apps/web/routers/utils.py b/backend/apps/web/routers/utils.py index 6356bf452..fbb350cf2 100644 --- a/backend/apps/web/routers/utils.py +++ b/backend/apps/web/routers/utils.py @@ -14,7 +14,7 @@ import json from utils.utils import get_admin_user from utils.misc import calculate_sha256, get_gravatar_url -from config import OLLAMA_API_BASE_URL, DATA_DIR, UPLOAD_DIR +from config import OLLAMA_BASE_URLS, DATA_DIR, UPLOAD_DIR from constants import ERROR_MESSAGES @@ -75,7 +75,7 @@ async def download_file_stream(url, file_path, file_name, chunk_size=1024 * 1024 hashed = calculate_sha256(file) file.seek(0) - url = f"{OLLAMA_API_BASE_URL}/blobs/sha256:{hashed}" + url = f"{OLLAMA_BASE_URLS[0]}/blobs/sha256:{hashed}" response = requests.post(url, data=file) if response.ok: @@ -147,7 +147,7 @@ def upload(file: UploadFile = File(...)): hashed = calculate_sha256(f) f.seek(0) - url = f"{OLLAMA_API_BASE_URL}/blobs/sha256:{hashed}" + url = f"{OLLAMA_BASE_URLS[0]}/blobs/sha256:{hashed}" response = requests.post(url, data=f) if response.ok: diff --git a/backend/config.py b/backend/config.py index cd1a27023..f01989cb5 100644 --- a/backend/config.py +++ b/backend/config.py @@ -207,20 +207,25 @@ OLLAMA_API_BASE_URL = os.environ.get( "OLLAMA_API_BASE_URL", "http://localhost:11434/api" ) -if ENV == "prod": - if OLLAMA_API_BASE_URL == "/ollama/api": - OLLAMA_API_BASE_URL = "http://host.docker.internal:11434/api" - - OLLAMA_BASE_URL = os.environ.get("OLLAMA_BASE_URL", "") -if OLLAMA_BASE_URL == "": +if ENV == "prod": + if OLLAMA_BASE_URL == "/ollama": + OLLAMA_BASE_URL = "http://host.docker.internal:11434" + + +if OLLAMA_BASE_URL == "" and OLLAMA_API_BASE_URL != "": OLLAMA_BASE_URL = ( OLLAMA_API_BASE_URL[:-4] if OLLAMA_API_BASE_URL.endswith("/api") else OLLAMA_API_BASE_URL ) +OLLAMA_BASE_URLS = os.environ.get("OLLAMA_BASE_URLS", "") +OLLAMA_BASE_URLS = OLLAMA_BASE_URLS if OLLAMA_BASE_URLS != "" else OLLAMA_BASE_URL + +OLLAMA_BASE_URLS = [url.strip() for url in OLLAMA_BASE_URLS.split(",")] + #################################### # OPENAI_API diff --git a/docker-compose.yaml b/docker-compose.yaml index c41c56d8e..f69084b8a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -14,7 +14,7 @@ services: build: context: . args: - OLLAMA_API_BASE_URL: '/ollama/api' + OLLAMA_BASE_URL: '/ollama' dockerfile: Dockerfile image: ghcr.io/open-webui/open-webui:main container_name: open-webui @@ -25,7 +25,7 @@ services: ports: - ${OPEN_WEBUI_PORT-3000}:8080 environment: - - 'OLLAMA_API_BASE_URL=http://ollama:11434/api' + - 'OLLAMA_BASE_URL=http://ollama:11434' - 'WEBUI_SECRET_KEY=' extra_hosts: - host.docker.internal:host-gateway diff --git a/kubernetes/helm/templates/webui-deployment.yaml b/kubernetes/helm/templates/webui-deployment.yaml index df13a14b6..bbd5706de 100644 --- a/kubernetes/helm/templates/webui-deployment.yaml +++ b/kubernetes/helm/templates/webui-deployment.yaml @@ -40,7 +40,7 @@ spec: - name: data mountPath: /app/backend/data env: - - name: OLLAMA_API_BASE_URL + - name: OLLAMA_BASE_URL value: {{ include "ollama.url" . | quote }} tty: true {{- with .Values.webui.nodeSelector }} diff --git a/kubernetes/manifest/base/webui-deployment.yaml b/kubernetes/manifest/base/webui-deployment.yaml index 174025a94..38efd5549 100644 --- a/kubernetes/manifest/base/webui-deployment.yaml +++ b/kubernetes/manifest/base/webui-deployment.yaml @@ -26,8 +26,8 @@ spec: cpu: "1000m" memory: "1Gi" env: - - name: OLLAMA_API_BASE_URL - value: "http://ollama-service.open-webui.svc.cluster.local:11434/api" + - name: OLLAMA_BASE_URL + value: "http://ollama-service.open-webui.svc.cluster.local:11434" tty: true volumeMounts: - name: webui-volume diff --git a/package.json b/package.json index cb16b3476..980793992 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.1.108", + "version": "0.1.109", "private": true, "scripts": { "dev": "vite dev --host", diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 2042198fb..bdd9c64e9 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -90,8 +90,3 @@ export const SUPPORTED_FILE_EXTENSIONS = [ // This feature, akin to $env/static/private, exclusively incorporates environment variables // that are prefixed with config.kit.env.publicPrefix (usually set to PUBLIC_). // Consequently, these variables can be securely exposed to client-side code. - -// Example of the .env configuration: -// OLLAMA_API_BASE_URL="http://localhost:11434/api" -// # Public -// PUBLIC_API_BASE_URL=$OLLAMA_API_BASE_URL