forked from open-webui/open-webui
		
	Merge branch 'main' into doc
This commit is contained in:
		
						commit
						384f79dcb2
					
				
					 33 changed files with 436 additions and 176 deletions
				
			
		|  | @ -423,7 +423,7 @@ def get_loader(filename: str, file_content_type: str, file_path: str): | |||
|         "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", | ||||
|     ] or file_ext in ["xls", "xlsx"]: | ||||
|         loader = UnstructuredExcelLoader(file_path) | ||||
|     elif file_ext in known_source_ext or file_content_type.find("text/") >= 0: | ||||
|     elif file_ext in known_source_ext or (file_content_type and file_content_type.find("text/") >= 0): | ||||
|         loader = TextLoader(file_path) | ||||
|     else: | ||||
|         loader = TextLoader(file_path) | ||||
|  | @ -486,8 +486,8 @@ def store_doc( | |||
| 
 | ||||
| @app.get("/scan") | ||||
| def scan_docs_dir(user=Depends(get_admin_user)): | ||||
|     try: | ||||
|         for path in Path(DOCS_DIR).rglob("./**/*"): | ||||
|     for path in Path(DOCS_DIR).rglob("./**/*"): | ||||
|         try: | ||||
|             if path.is_file() and not path.name.startswith("."): | ||||
|                 tags = extract_folders_after_data_docs(path) | ||||
|                 filename = path.name | ||||
|  | @ -535,8 +535,8 @@ def scan_docs_dir(user=Depends(get_admin_user)): | |||
|                             ), | ||||
|                         ) | ||||
| 
 | ||||
|     except Exception as e: | ||||
|         print(e) | ||||
|         except Exception as e: | ||||
|             print(e) | ||||
| 
 | ||||
|     return True | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,13 +1,17 @@ | |||
| import os | ||||
| import chromadb | ||||
| from chromadb import Settings | ||||
| from secrets import token_bytes | ||||
| from base64 import b64encode | ||||
| from constants import ERROR_MESSAGES | ||||
| from bs4 import BeautifulSoup | ||||
| 
 | ||||
| from pathlib import Path | ||||
| import json | ||||
| import markdown | ||||
| from bs4 import BeautifulSoup | ||||
| import requests | ||||
| import shutil | ||||
| 
 | ||||
| from secrets import token_bytes | ||||
| from constants import ERROR_MESSAGES | ||||
| 
 | ||||
| 
 | ||||
| try: | ||||
|  | @ -17,6 +21,8 @@ try: | |||
| except ImportError: | ||||
|     print("dotenv not installed, skipping...") | ||||
| 
 | ||||
| WEBUI_NAME = "Open WebUI" | ||||
| shutil.copyfile("../build/favicon.png", "./static/favicon.png") | ||||
| 
 | ||||
| #################################### | ||||
| # ENV (dev,test,prod) | ||||
|  | @ -24,7 +30,6 @@ except ImportError: | |||
| 
 | ||||
| ENV = os.environ.get("ENV", "dev") | ||||
| 
 | ||||
| 
 | ||||
| try: | ||||
|     with open(f"../package.json", "r") as f: | ||||
|         PACKAGE_DATA = json.load(f) | ||||
|  | @ -94,6 +99,36 @@ for version in soup.find_all("h2"): | |||
| 
 | ||||
| CHANGELOG = changelog_json | ||||
| 
 | ||||
| 
 | ||||
| #################################### | ||||
| # CUSTOM_NAME | ||||
| #################################### | ||||
| 
 | ||||
| CUSTOM_NAME = os.environ.get("CUSTOM_NAME", "") | ||||
| if CUSTOM_NAME: | ||||
|     try: | ||||
|         r = requests.get(f"https://api.openwebui.com/api/v1/custom/{CUSTOM_NAME}") | ||||
|         data = r.json() | ||||
|         if r.ok: | ||||
|             if "logo" in data: | ||||
|                 url = ( | ||||
|                     f"https://api.openwebui.com{data['logo']}" | ||||
|                     if data["logo"][0] == "/" | ||||
|                     else data["logo"] | ||||
|                 ) | ||||
| 
 | ||||
|                 r = requests.get(url, stream=True) | ||||
|                 if r.status_code == 200: | ||||
|                     with open("./static/favicon.png", "wb") as f: | ||||
|                         r.raw.decode_content = True | ||||
|                         shutil.copyfileobj(r.raw, f) | ||||
| 
 | ||||
|             WEBUI_NAME = data["name"] | ||||
|     except Exception as e: | ||||
|         print(e) | ||||
|         pass | ||||
| 
 | ||||
| 
 | ||||
| #################################### | ||||
| # DATA/FRONTEND BUILD DIR | ||||
| #################################### | ||||
|  | @ -187,7 +222,7 @@ DEFAULT_PROMPT_SUGGESTIONS = ( | |||
| ) | ||||
| 
 | ||||
| 
 | ||||
| DEFAULT_USER_ROLE = "pending" | ||||
| DEFAULT_USER_ROLE = os.getenv("DEFAULT_USER_ROLE", "pending") | ||||
| USER_PERMISSIONS = {"chat": {"deletion": True}} | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ from apps.rag.main import app as rag_app | |||
| 
 | ||||
| from apps.web.main import app as webui_app | ||||
| 
 | ||||
| from config import ENV, VERSION, CHANGELOG, FRONTEND_BUILD_DIR | ||||
| from config import WEBUI_NAME, ENV, VERSION, CHANGELOG, FRONTEND_BUILD_DIR | ||||
| 
 | ||||
| 
 | ||||
| class SPAStaticFiles(StaticFiles): | ||||
|  | @ -72,6 +72,7 @@ async def get_app_config(): | |||
| 
 | ||||
|     return { | ||||
|         "status": True, | ||||
|         "name": WEBUI_NAME, | ||||
|         "version": VERSION, | ||||
|         "images": images_app.state.ENABLED, | ||||
|         "default_models": webui_app.state.DEFAULT_MODELS, | ||||
|  | @ -84,6 +85,9 @@ async def get_app_changelog(): | |||
|     return CHANGELOG | ||||
| 
 | ||||
| 
 | ||||
| app.mount("/static", StaticFiles(directory="static"), name="static") | ||||
| 
 | ||||
| 
 | ||||
| app.mount( | ||||
|     "/", | ||||
|     SPAStaticFiles(directory=FRONTEND_BUILD_DIR, html=True), | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								backend/static/favicon.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								backend/static/favicon.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 6 KiB | 
|  | @ -0,0 +1 @@ | |||
| values-minikube.yaml | ||||
|  | @ -1,5 +1,21 @@ | |||
| apiVersion: v2 | ||||
| name: open-webui | ||||
| description: "Open WebUI: A User-Friendly Web Interface for Chat Interactions 👋" | ||||
| version: 1.0.0 | ||||
| appVersion: "latest" | ||||
| 
 | ||||
| home: https://www.openwebui.com/ | ||||
| icon: https://raw.githubusercontent.com/open-webui/open-webui/main/static/favicon.png | ||||
| 
 | ||||
| description: "Open WebUI: A User-Friendly Web Interface for Chat Interactions 👋" | ||||
| keywords: | ||||
| - llm | ||||
| - chat | ||||
| - web-ui | ||||
| 
 | ||||
| sources: | ||||
| - https://github.com/open-webui/open-webui/tree/main/kubernetes/helm | ||||
| - https://hub.docker.com/r/ollama/ollama | ||||
| - https://github.com/open-webui/open-webui/pkgs/container/open-webui | ||||
| 
 | ||||
| annotations: | ||||
|   licenses: MIT | ||||
|  |  | |||
							
								
								
									
										47
									
								
								kubernetes/helm/templates/_helpers.tpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								kubernetes/helm/templates/_helpers.tpl
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| {{- define "open-webui.name" -}} | ||||
| {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} | ||||
| {{- end -}} | ||||
| 
 | ||||
| {{- define "ollama.name" -}} | ||||
| ollama | ||||
| {{- end -}} | ||||
| 
 | ||||
| {{- define "ollama.url" -}} | ||||
| {{- printf "http://%s.%s.svc.cluster.local:%d/api" (include "ollama.name" .) (.Release.Namespace) (.Values.ollama.service.port | int) }} | ||||
| {{- end }} | ||||
| 
 | ||||
| {{- define "chart.name" -}} | ||||
| {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} | ||||
| {{- end }} | ||||
| 
 | ||||
| {{- define "base.labels" -}} | ||||
| helm.sh/chart: {{ include "chart.name" . }} | ||||
| {{- if .Chart.AppVersion }} | ||||
| app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} | ||||
| {{- end }} | ||||
| app.kubernetes.io/managed-by: {{ .Release.Service }} | ||||
| {{- end }} | ||||
| 
 | ||||
| {{- define "base.selectorLabels" -}} | ||||
| app.kubernetes.io/instance: {{ .Release.Name }} | ||||
| {{- end -}} | ||||
| 
 | ||||
| {{- define "open-webui.selectorLabels" -}} | ||||
| {{ include "base.selectorLabels" . }} | ||||
| app.kubernetes.io/component: {{ .Chart.Name }} | ||||
| {{- end }} | ||||
| 
 | ||||
| {{- define "open-webui.labels" -}} | ||||
| {{ include "base.labels" . }} | ||||
| {{ include "open-webui.selectorLabels" . }} | ||||
| {{- end }} | ||||
| 
 | ||||
| {{- define "ollama.selectorLabels" -}} | ||||
| {{ include "base.selectorLabels" . }} | ||||
| app.kubernetes.io/component: {{ include "ollama.name" . }} | ||||
| {{- end }} | ||||
| 
 | ||||
| {{- define "ollama.labels" -}} | ||||
| {{ include "base.labels" . }} | ||||
| {{ include "ollama.selectorLabels" . }} | ||||
| {{- end }} | ||||
|  | @ -1,4 +0,0 @@ | |||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   name: {{ .Values.namespace }} | ||||
|  | @ -1,13 +1,21 @@ | |||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: ollama-service | ||||
|   namespace: {{ .Values.namespace }} | ||||
|   name: {{ include "ollama.name" . }} | ||||
|   labels: | ||||
|     {{- include "ollama.labels" . | nindent 4 }} | ||||
|   {{- with .Values.ollama.service.annotations }} | ||||
|   annotations: | ||||
|     {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
| spec: | ||||
|   type: {{ .Values.ollama.service.type }} | ||||
|   selector: | ||||
|     app: ollama | ||||
|     {{- include "ollama.selectorLabels" . | nindent 4 }} | ||||
| {{- with .Values.ollama.service }} | ||||
|   type: {{ .type }} | ||||
|   ports: | ||||
|   - protocol: TCP | ||||
|     port: {{ .Values.ollama.servicePort }} | ||||
|     targetPort: {{ .Values.ollama.servicePort }} | ||||
|     name: http | ||||
|     port: {{ .port }} | ||||
|     targetPort: http | ||||
| {{- end }} | ||||
|  |  | |||
|  | @ -1,24 +1,43 @@ | |||
| apiVersion: apps/v1 | ||||
| kind: StatefulSet | ||||
| metadata: | ||||
|   name: ollama | ||||
|   namespace: {{ .Values.namespace }} | ||||
|   name: {{ include "ollama.name" . }} | ||||
|   labels: | ||||
|     {{- include "ollama.labels" . | nindent 4 }} | ||||
|   {{- with .Values.ollama.annotations }} | ||||
|   annotations: | ||||
|     {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
| spec: | ||||
|   serviceName: "ollama" | ||||
|   serviceName: {{ include "ollama.name" . }} | ||||
|   replicas: {{ .Values.ollama.replicaCount }} | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: ollama | ||||
|       {{- include "ollama.selectorLabels" . | nindent 6 }} | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: ollama | ||||
|         {{- include "ollama.labels" . | nindent 8 }} | ||||
|       {{- with .Values.ollama.podAnnotations }} | ||||
|       annotations: | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|     spec: | ||||
|       enableServiceLinks: false | ||||
|       automountServiceAccountToken: false | ||||
|       {{- with .Values.ollama.runtimeClassName }} | ||||
|       runtimeClassName: {{ . }} | ||||
|       {{- end }} | ||||
|       containers: | ||||
|       - name: ollama | ||||
|         image: {{ .Values.ollama.image }} | ||||
|       - name: {{ include "ollama.name" . }} | ||||
|         {{- with .Values.ollama.image }} | ||||
|         image: {{ .repository }}:{{ .tag }} | ||||
|         imagePullPolicy: {{ .pullPolicy }} | ||||
|         {{- end }} | ||||
|         tty: true | ||||
|         ports: | ||||
|         - containerPort: {{ .Values.ollama.servicePort }} | ||||
|         - name: http | ||||
|           containerPort: {{ .Values.ollama.service.containerPort }} | ||||
|         env: | ||||
|         {{- if .Values.ollama.gpu.enabled }} | ||||
|           - name: PATH | ||||
|  | @ -27,29 +46,51 @@ spec: | |||
|             value: /usr/local/nvidia/lib:/usr/local/nvidia/lib64 | ||||
|           - name: NVIDIA_DRIVER_CAPABILITIES | ||||
|             value: compute,utility | ||||
|         {{- end}} | ||||
|         {{- if .Values.ollama.resources }} | ||||
|         resources: {{- toYaml .Values.ollama.resources | nindent 10 }} | ||||
|         {{- end }} | ||||
|         {{- with .Values.ollama.resources }} | ||||
|         resources: {{- toYaml . | nindent 10 }} | ||||
|         {{- end }} | ||||
|         volumeMounts: | ||||
|         - name: ollama-volume | ||||
|         - name: data | ||||
|           mountPath: /root/.ollama | ||||
|         tty: true | ||||
|       {{- with .Values.ollama.nodeSelector }} | ||||
|       nodeSelector: | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- with .Values.ollama.tolerations }} | ||||
|       tolerations: | ||||
|         {{- if .Values.ollama.gpu.enabled }} | ||||
|         - key: nvidia.com/gpu | ||||
|           operator: Exists | ||||
|           effect: NoSchedule | ||||
|         {{- end }} | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       volumes: | ||||
|       {{- if and .Values.ollama.persistence.enabled .Values.ollama.persistence.existingClaim }} | ||||
|       - name: data | ||||
|         persistentVolumeClaim: | ||||
|           claimName: {{ .Values.ollama.persistence.existingClaim }} | ||||
|       {{- else if not .Values.ollama.persistence.enabled }} | ||||
|       - name: data | ||||
|         emptyDir: {} | ||||
|       {{- else if and .Values.ollama.persistence.enabled (not .Values.ollama.persistence.existingClaim) }} | ||||
|         [] | ||||
|   volumeClaimTemplates: | ||||
|   - metadata: | ||||
|       name: ollama-volume | ||||
|       name: data | ||||
|       labels: | ||||
|         {{- include "ollama.selectorLabels" . | nindent 8 }} | ||||
|       {{- with .Values.ollama.persistence.annotations }} | ||||
|       annotations: | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|     spec: | ||||
|       accessModes: [ "ReadWriteOnce" ] | ||||
|       accessModes: | ||||
|         {{- range .Values.ollama.persistence.accessModes }} | ||||
|         - {{ . | quote }} | ||||
|         {{- end }} | ||||
|       resources: | ||||
|         requests: | ||||
|           storage: {{ .Values.ollama.volumeSize }} | ||||
|           storage: {{ .Values.ollama.persistence.size | quote }} | ||||
|       storageClass: {{ .Values.ollama.persistence.storageClass }} | ||||
|       {{- with .Values.ollama.persistence.selector }} | ||||
|       selector: | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- end }} | ||||
|  |  | |||
|  | @ -1,38 +1,62 @@ | |||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   name: open-webui-deployment | ||||
|   namespace: {{ .Values.namespace }} | ||||
|   name: {{ include "open-webui.name" . }} | ||||
|   labels: | ||||
|     {{- include "open-webui.labels" . | nindent 4 }} | ||||
|   {{- with .Values.webui.annotations }} | ||||
|   annotations: | ||||
|     {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
| spec: | ||||
|   replicas: 1 | ||||
|   replicas: {{ .Values.webui.replicaCount }} | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: open-webui | ||||
|       {{- include "open-webui.selectorLabels" . | nindent 6 }} | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: open-webui | ||||
|         {{- include "open-webui.labels" . | nindent 8 }} | ||||
|       {{- with .Values.webui.podAnnotations }} | ||||
|       annotations: | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|     spec: | ||||
|       enableServiceLinks: false | ||||
|       automountServiceAccountToken: false | ||||
|       containers: | ||||
|       - name: open-webui | ||||
|         image: {{ .Values.webui.image }} | ||||
|       - name: {{ .Chart.Name }} | ||||
|         {{- with .Values.webui.image }} | ||||
|         image: {{ .repository }}:{{ .tag | default $.Chart.AppVersion }} | ||||
|         imagePullPolicy: {{ .pullPolicy }} | ||||
|         {{- end }} | ||||
|         ports: | ||||
|         - containerPort: 8080 | ||||
|         {{- if .Values.webui.resources }} | ||||
|         resources: {{- toYaml .Values.webui.resources | nindent 10 }} | ||||
|         - name: http | ||||
|           containerPort: {{ .Values.webui.service.containerPort }} | ||||
|         {{- with .Values.webui.resources }} | ||||
|         resources: {{- toYaml . | nindent 10 }} | ||||
|         {{- end }} | ||||
|         volumeMounts: | ||||
|         - name: webui-volume | ||||
|         - name: data | ||||
|           mountPath: /app/backend/data | ||||
|         env: | ||||
|         - name: OLLAMA_API_BASE_URL | ||||
|           value: "http://ollama-service.{{ .Values.namespace }}.svc.cluster.local:{{ .Values.ollama.servicePort }}/api" | ||||
|           value: {{ include "ollama.url" . | quote }} | ||||
|         tty: true | ||||
|       {{- with .Values.webui.nodeSelector }} | ||||
|       nodeSelector: | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       volumes: | ||||
|       - name: webui-volume | ||||
|       {{- if and .Values.webui.persistence.enabled .Values.webui.persistence.existingClaim }} | ||||
|       - name: data | ||||
|         persistentVolumeClaim: | ||||
|           claimName: open-webui-pvc | ||||
|           claimName: {{ .Values.webui.persistence.existingClaim }} | ||||
|       {{- else if not .Values.webui.persistence.enabled }} | ||||
|       - name: data | ||||
|         emptyDir: {} | ||||
|       {{- else if and .Values.webui.persistence.enabled (not .Values.webui.persistence.existingClaim) }} | ||||
|       - name: data | ||||
|         persistentVolumeClaim: | ||||
|           claimName: {{ include "open-webui.name" . }} | ||||
|       {{- end }} | ||||
|  |  | |||
|  | @ -2,13 +2,23 @@ | |||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: Ingress | ||||
| metadata: | ||||
|   name: open-webui-ingress | ||||
|   namespace: {{ .Values.namespace }} | ||||
| {{- if .Values.webui.ingress.annotations }} | ||||
|   name: {{ include "open-webui.name" . }} | ||||
|   labels: | ||||
|     {{- include "open-webui.labels" . | nindent 4 }} | ||||
|   {{- with .Values.webui.ingress.annotations }} | ||||
|   annotations: | ||||
| {{ toYaml .Values.webui.ingress.annotations | trimSuffix "\n" | indent 4 }} | ||||
| {{- end }} | ||||
|     {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
| spec: | ||||
|   {{- with .Values.webui.ingress.class }} | ||||
|   ingressClassName: {{ . }} | ||||
|   {{- end }} | ||||
|   {{- if .Values.webui.ingress.tls }} | ||||
|   tls: | ||||
|     - hosts: | ||||
|       - {{ .Values.webui.ingress.host | quote }} | ||||
|       secretName: {{ default (printf "%s-tls" .Release.Name) .Values.webui.ingress.existingSecret }} | ||||
|   {{- end }} | ||||
|   rules: | ||||
|   - host: {{ .Values.webui.ingress.host }} | ||||
|     http: | ||||
|  | @ -17,7 +27,7 @@ spec: | |||
|         pathType: Prefix | ||||
|         backend: | ||||
|           service: | ||||
|             name: open-webui-service | ||||
|             name: {{ include "open-webui.name" . }} | ||||
|             port: | ||||
|               number: {{ .Values.webui.servicePort }} | ||||
|               name: http | ||||
| {{- end }} | ||||
|  |  | |||
|  | @ -1,12 +1,25 @@ | |||
| {{- if and .Values.webui.persistence.enabled (not .Values.webui.persistence.existingClaim) }} | ||||
| apiVersion: v1 | ||||
| kind: PersistentVolumeClaim | ||||
| metadata: | ||||
|   name: {{ include "open-webui.name" . }} | ||||
|   labels: | ||||
|     app: open-webui | ||||
|   name: open-webui-pvc | ||||
|   namespace: {{ .Values.namespace }}   | ||||
|     {{- include "open-webui.selectorLabels" . | nindent 4 }} | ||||
|   {{- with .Values.webui.persistence.annotations }} | ||||
|   annotations: | ||||
|     {{- toYaml . | nindent 8 }} | ||||
|   {{- end }} | ||||
| spec: | ||||
|   accessModes: [ "ReadWriteOnce" ] | ||||
|   accessModes: | ||||
|     {{- range .Values.webui.persistence.accessModes }} | ||||
|     - {{ . | quote }} | ||||
|     {{- end }} | ||||
|   resources: | ||||
|     requests: | ||||
|       storage: {{ .Values.webui.volumeSize }} | ||||
|       storage: {{ .Values.webui.persistence.size }} | ||||
|   storageClass: {{ .Values.webui.persistence.storageClass }} | ||||
|   {{- with .Values.webui.persistence.selector }} | ||||
|   selector: | ||||
|     {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
| {{- end }} | ||||
|  |  | |||
|  | @ -1,15 +1,24 @@ | |||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: open-webui-service | ||||
|   namespace: {{ .Values.namespace }} | ||||
|   name: {{ include "open-webui.name" . }} | ||||
|   labels: | ||||
|     {{- include "open-webui.labels" . | nindent 4 }} | ||||
|   {{- with .Values.webui.service.annotations }} | ||||
|   annotations: | ||||
|     {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
| spec: | ||||
|   type: {{ .Values.webui.service.type }} # Default: NodePort  # Use LoadBalancer if you're on a cloud that supports it | ||||
|   selector: | ||||
|     app: open-webui | ||||
|     {{- include "open-webui.selectorLabels" . | nindent 4 }} | ||||
| {{- with .Values.webui.service }} | ||||
|   type: {{ .type }} | ||||
|   ports: | ||||
|     - protocol: TCP | ||||
|       port: {{ .Values.webui.servicePort }} | ||||
|       targetPort: {{ .Values.webui.servicePort }} | ||||
|       # If using NodePort, you can optionally specify the nodePort: | ||||
|       # nodePort: 30000 | ||||
|   - protocol: TCP | ||||
|     name: http | ||||
|     port: {{ .port }} | ||||
|     targetPort: http | ||||
|     {{- if .nodePort }} | ||||
|     nodePort: {{ .nodePort | int }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
|  |  | |||
							
								
								
									
										27
									
								
								kubernetes/helm/values-minikube.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								kubernetes/helm/values-minikube.yaml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| ollama: | ||||
|   resources: | ||||
|     requests: | ||||
|       cpu: "2000m" | ||||
|       memory: "2Gi" | ||||
|     limits: | ||||
|       cpu: "4000m" | ||||
|       memory: "4Gi" | ||||
|       nvidia.com/gpu: "0" | ||||
|   service: | ||||
|     type: ClusterIP | ||||
|   gpu: | ||||
|     enabled: false | ||||
| 
 | ||||
| webui: | ||||
|   resources: | ||||
|     requests: | ||||
|       cpu: "500m" | ||||
|       memory: "500Mi" | ||||
|     limits: | ||||
|       cpu: "1000m" | ||||
|       memory: "1Gi" | ||||
|   ingress: | ||||
|     enabled: true | ||||
|     host: open-webui.minikube.local | ||||
|   service: | ||||
|     type: NodePort | ||||
|  | @ -1,44 +1,72 @@ | |||
| namespace: open-webui | ||||
| nameOverride: "" | ||||
| 
 | ||||
| ollama: | ||||
|   annotations: {} | ||||
|   podAnnotations: {} | ||||
|   replicaCount: 1 | ||||
|   image: ollama/ollama:latest | ||||
|   servicePort: 11434 | ||||
|   resources: | ||||
|     requests: | ||||
|       cpu: "2000m" | ||||
|       memory: "2Gi" | ||||
|     limits: | ||||
|       cpu: "4000m" | ||||
|       memory: "4Gi" | ||||
|       nvidia.com/gpu: "0" | ||||
|   volumeSize: 30Gi | ||||
|   image: | ||||
|     repository: ollama/ollama | ||||
|     tag: latest | ||||
|     pullPolicy: Always | ||||
|   resources: {} | ||||
|   persistence: | ||||
|     enabled: true | ||||
|     size: 30Gi | ||||
|     existingClaim: "" | ||||
|     accessModes: | ||||
|     - ReadWriteOnce | ||||
|     storageClass: "" | ||||
|     selector: {} | ||||
|     annotations: {} | ||||
|   nodeSelector: {} | ||||
|   # -- If using a special runtime container such as nvidia, set it here. | ||||
|   runtimeClassName: "" | ||||
|   tolerations: | ||||
|   - key: nvidia.com/gpu | ||||
|     operator: Exists | ||||
|     effect: NoSchedule | ||||
|   service: | ||||
|     type: ClusterIP | ||||
|     annotations: {} | ||||
|     port: 80 | ||||
|     containerPort: 11434 | ||||
|   gpu: | ||||
|     # -- Enable additional ENV values to help Ollama discover GPU usage | ||||
|     enabled: false | ||||
| 
 | ||||
| webui: | ||||
|   annotations: {} | ||||
|   podAnnotations: {} | ||||
|   replicaCount: 1 | ||||
|   image: | ||||
|     repository: ghcr.io/open-webui/open-webui | ||||
|     tag: "" | ||||
|     pullPolicy: Always | ||||
|   resources: {} | ||||
|   ingress: | ||||
|     enabled: false | ||||
|     class: "" | ||||
|     # -- Use appropriate annotations for your Ingress controller, e.g., for NGINX: | ||||
|     # nginx.ingress.kubernetes.io/rewrite-target: / | ||||
|     annotations: {} | ||||
|     host: "" | ||||
|     tls: false | ||||
|     existingSecret: "" | ||||
|   persistence: | ||||
|     enabled: true | ||||
|     size: 2Gi | ||||
|     existingClaim: "" | ||||
|     # -- If using multiple replicas, you must update accessModes to ReadWriteMany | ||||
|     accessModes: | ||||
|     - ReadWriteOnce | ||||
|     storageClass: "" | ||||
|     selector: {} | ||||
|     annotations: {} | ||||
|   nodeSelector: {} | ||||
|   tolerations: [] | ||||
|   service: | ||||
|     type: ClusterIP | ||||
|   gpu: | ||||
|     enabled: false | ||||
| 
 | ||||
| webui: | ||||
|   replicaCount: 1 | ||||
|   image: ghcr.io/open-webui/open-webui:main | ||||
|   servicePort: 8080 | ||||
|   resources: | ||||
|     requests: | ||||
|       cpu: "500m" | ||||
|       memory: "500Mi" | ||||
|     limits: | ||||
|       cpu: "1000m" | ||||
|       memory: "1Gi" | ||||
|   ingress: | ||||
|     enabled: true | ||||
|     annotations: | ||||
|     # Use appropriate annotations for your Ingress controller, e.g., for NGINX: | ||||
|       # nginx.ingress.kubernetes.io/rewrite-target: / | ||||
|     host: open-webui.minikube.local | ||||
|   volumeSize: 2Gi | ||||
|   nodeSelector: {} | ||||
|   tolerations: [] | ||||
|   service: | ||||
|     type: NodePort | ||||
|     annotations: {} | ||||
|     port: 80 | ||||
|     containerPort: 8080 | ||||
|     nodePort: "" | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ metadata: | |||
|   labels: | ||||
|     app: ollama-webui | ||||
|   name: ollama-webui-pvc | ||||
|   namespace: ollama-namespace | ||||
|   namespace: open-webui | ||||
| spec: | ||||
|   accessModes: ["ReadWriteOnce"] | ||||
|   resources: | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ resources: | |||
| - base/webui-deployment.yaml | ||||
| - base/webui-service.yaml | ||||
| - base/webui-ingress.yaml | ||||
| - base/webui-pvc.yaml | ||||
| 
 | ||||
| apiVersion: kustomize.config.k8s.io/v1beta1 | ||||
| kind: Kustomization | ||||
|  |  | |||
|  | @ -37,8 +37,8 @@ math { | |||
| } | ||||
| 
 | ||||
| ::-webkit-scrollbar { | ||||
| 	height: 0.45rem; | ||||
| 	width: 0.35rem; | ||||
| 	height: 0.4rem; | ||||
| 	width: 0.4rem; | ||||
| } | ||||
| 
 | ||||
| ::-webkit-scrollbar-track { | ||||
|  |  | |||
|  | @ -2,9 +2,9 @@ | |||
| 	import { onMount } from 'svelte'; | ||||
| 	import { Confetti } from 'svelte-confetti'; | ||||
| 
 | ||||
| 	import { config } from '$lib/stores'; | ||||
| 	import { WEBUI_NAME, config } from '$lib/stores'; | ||||
| 
 | ||||
| 	import { WEBUI_NAME, WEB_UI_VERSION } from '$lib/constants'; | ||||
| 	import { WEBUI_VERSION } from '$lib/constants'; | ||||
| 	import { getChangelog } from '$lib/apis'; | ||||
| 
 | ||||
| 	import Modal from './common/Modal.svelte'; | ||||
|  | @ -23,7 +23,7 @@ | |||
| 	<div class="px-5 py-4 dark:text-gray-300"> | ||||
| 		<div class="flex justify-between items-start"> | ||||
| 			<div class="text-xl font-bold"> | ||||
| 				What’s New in {WEBUI_NAME} | ||||
| 				What’s New in {$WEBUI_NAME} | ||||
| 				<Confetti x={[-1, -0.25]} y={[0, 0.5]} /> | ||||
| 			</div> | ||||
| 			<button | ||||
|  | @ -48,7 +48,7 @@ | |||
| 			<div class="text-sm dark:text-gray-200">Release Notes</div> | ||||
| 			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" /> | ||||
| 			<div class="text-sm dark:text-gray-200"> | ||||
| 				v{WEB_UI_VERSION} | ||||
| 				v{WEBUI_VERSION} | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| <script lang="ts"> | ||||
| 	import { WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 	import { onMount } from 'svelte'; | ||||
| 
 | ||||
| 	export let models = []; | ||||
|  | @ -27,14 +28,16 @@ | |||
| 					> | ||||
| 						{#if model in modelfiles} | ||||
| 							<img | ||||
| 								src={modelfiles[model]?.imageUrl ?? './favicon.png'} | ||||
| 								src={modelfiles[model]?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png`} | ||||
| 								alt="modelfile" | ||||
| 								class=" w-14 rounded-full border-[1px] border-gray-200 dark:border-none" | ||||
| 								draggable="false" | ||||
| 							/> | ||||
| 						{:else} | ||||
| 							<img | ||||
| 								src={models.length === 1 ? '/favicon.png' : '/favicon.png'} | ||||
| 								src={models.length === 1 | ||||
| 									? `${WEBUI_BASE_URL}/static/favicon.png` | ||||
| 									: `${WEBUI_BASE_URL}/static/favicon.png`} | ||||
| 								class=" w-14 rounded-full border-[1px] border-gray-200 dark:border-none" | ||||
| 								alt="logo" | ||||
| 								draggable="false" | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ | |||
| 	import Skeleton from './Skeleton.svelte'; | ||||
| 	import CodeBlock from './CodeBlock.svelte'; | ||||
| 	import Image from '$lib/components/common/Image.svelte'; | ||||
| 	import { WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 
 | ||||
| 	export let modelfiles = []; | ||||
| 	export let message; | ||||
|  | @ -298,7 +299,9 @@ | |||
| 
 | ||||
| {#key message.id} | ||||
| 	<div class=" flex w-full message-{message.id}"> | ||||
| 		<ProfileImage src={modelfiles[message.model]?.imageUrl ?? '/favicon.png'} /> | ||||
| 		<ProfileImage | ||||
| 			src={modelfiles[message.model]?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png`} | ||||
| 		/> | ||||
| 
 | ||||
| 		<div class="w-full overflow-hidden"> | ||||
| 			<Name> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <script lang="ts"> | ||||
| 	import { getOllamaVersion } from '$lib/apis/ollama'; | ||||
| 	import { WEBUI_NAME, WEB_UI_VERSION } from '$lib/constants'; | ||||
| 	import { config, showChangelog } from '$lib/stores'; | ||||
| 	import { WEBUI_VERSION } from '$lib/constants'; | ||||
| 	import { WEBUI_NAME, config, showChangelog } from '$lib/stores'; | ||||
| 	import { onMount } from 'svelte'; | ||||
| 
 | ||||
| 	let ollamaVersion = ''; | ||||
|  | @ -17,13 +17,13 @@ | |||
| 		<div> | ||||
| 			<div class=" mb-2.5 text-sm font-medium flex space-x-2 items-center"> | ||||
| 				<div> | ||||
| 					{WEBUI_NAME} Version | ||||
| 					{$WEBUI_NAME} Version | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<div class="flex w-full"> | ||||
| 				<div class="flex-1 text-xs text-gray-700 dark:text-gray-200 flex space-x-1.5 items-center"> | ||||
| 					<div> | ||||
| 						v{WEB_UI_VERSION} | ||||
| 						v{WEBUI_VERSION} | ||||
| 					</div> | ||||
| 
 | ||||
| 					<button | ||||
|  |  | |||
|  | @ -3,8 +3,8 @@ | |||
| 	import toast from 'svelte-french-toast'; | ||||
| 
 | ||||
| 	import { createModel, deleteModel, pullModel } from '$lib/apis/ollama'; | ||||
| 	import { WEBUI_API_BASE_URL, WEBUI_NAME } from '$lib/constants'; | ||||
| 	import { models, user } from '$lib/stores'; | ||||
| 	import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 	import { WEBUI_NAME, models, user } from '$lib/stores'; | ||||
| 	import { splitStream } from '$lib/utils'; | ||||
| 
 | ||||
| 	export let getModels: Function; | ||||
|  | @ -59,9 +59,9 @@ | |||
| 				} else { | ||||
| 					toast.success(`Model '${modelName}' has been successfully downloaded.`); | ||||
| 
 | ||||
| 					const notification = new Notification(WEBUI_NAME, { | ||||
| 					const notification = new Notification($WEBUI_NAME, { | ||||
| 						body: `Model '${modelName}' has been successfully downloaded.`, | ||||
| 						icon: '/favicon.png' | ||||
| 						icon: `${WEBUI_BASE_URL}/static/favicon.png` | ||||
| 					}); | ||||
| 
 | ||||
| 					models.set(await getModels()); | ||||
|  |  | |||
|  | @ -4,14 +4,13 @@ | |||
| 	const { saveAs } = fileSaver; | ||||
| 
 | ||||
| 	import { getChatById } from '$lib/apis/chats'; | ||||
| 	import { chatId, modelfiles, settings } from '$lib/stores'; | ||||
| 	import { WEBUI_NAME, chatId, modelfiles, settings } from '$lib/stores'; | ||||
| 	import ShareChatModal from '../chat/ShareChatModal.svelte'; | ||||
| 	import TagInput from '../common/Tags/TagInput.svelte'; | ||||
| 	import Tags from '../common/Tags.svelte'; | ||||
| 	import { WEBUI_NAME } from '$lib/constants'; | ||||
| 
 | ||||
| 	export let initNewChat: Function; | ||||
| 	export let title: string = WEBUI_NAME; | ||||
| 	export let title: string = $WEBUI_NAME; | ||||
| 	export let shareEnabled: boolean = false; | ||||
| 
 | ||||
| 	export let tags = []; | ||||
|  | @ -102,7 +101,7 @@ | |||
| 			</div> | ||||
| 			<div class=" flex-1 self-center font-medium line-clamp-1"> | ||||
| 				<div> | ||||
| 					{title != '' ? title : WEBUI_NAME} | ||||
| 					{title != '' ? title : $WEBUI_NAME} | ||||
| 				</div> | ||||
| 			</div> | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ | |||
| 	} from '$lib/apis/chats'; | ||||
| 	import toast from 'svelte-french-toast'; | ||||
| 	import { slide } from 'svelte/transition'; | ||||
| 	import { WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 
 | ||||
| 	let show = false; | ||||
| 	let navElement; | ||||
|  | @ -114,7 +115,11 @@ | |||
| 			> | ||||
| 				<div class="flex self-center"> | ||||
| 					<div class="self-center mr-1.5"> | ||||
| 						<img src="/favicon.png" class=" w-7 -translate-x-1.5 rounded-full" alt="logo" /> | ||||
| 						<img | ||||
| 							src="{WEBUI_BASE_URL}/static/favicon.png" | ||||
| 							class=" w-7 -translate-x-1.5 rounded-full" | ||||
| 							alt="logo" | ||||
| 						/> | ||||
| 					</div> | ||||
| 
 | ||||
| 					<div class=" self-center font-medium text-sm">New Chat</div> | ||||
|  | @ -362,27 +367,11 @@ | |||
| 								: ''} transition whitespace-nowrap text-ellipsis" | ||||
| 							href="/c/{chat.id}" | ||||
| 						> | ||||
| 							<div class=" flex self-center flex-1"> | ||||
| 								<div class=" self-center mr-3"> | ||||
| 									<svg | ||||
| 										xmlns="http://www.w3.org/2000/svg" | ||||
| 										fill="none" | ||||
| 										viewBox="0 0 24 24" | ||||
| 										stroke-width="1.5" | ||||
| 										stroke="currentColor" | ||||
| 										class="w-4 h-4" | ||||
| 									> | ||||
| 										<path | ||||
| 											stroke-linecap="round" | ||||
| 											stroke-linejoin="round" | ||||
| 											d="M2.25 12.76c0 1.6 1.123 2.994 2.707 3.227 1.087.16 2.185.283 3.293.369V21l4.076-4.076a1.526 1.526 0 011.037-.443 48.282 48.282 0 005.68-.494c1.584-.233 2.707-1.626 2.707-3.228V6.741c0-1.602-1.123-2.995-2.707-3.228A48.394 48.394 0 0012 3c-2.392 0-4.744.175-7.043.513C3.373 3.746 2.25 5.14 2.25 6.741v6.018z" | ||||
| 										/> | ||||
| 									</svg> | ||||
| 								</div> | ||||
| 							<div class=" flex self-center flex-1 w-full"> | ||||
| 								<div | ||||
| 									class=" text-left self-center overflow-hidden {chat.id === $chatId | ||||
| 										? 'w-[120px]' | ||||
| 										: 'w-[180px]'} " | ||||
| 										? 'w-[160px]' | ||||
| 										: 'w-full'} " | ||||
| 								> | ||||
| 									{#if chatTitleEditId === chat.id} | ||||
| 										<input bind:value={chatTitle} class=" bg-transparent w-full" /> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import { dev } from '$app/environment'; | ||||
| // import { version } from '../../package.json';
 | ||||
| 
 | ||||
| export const WEBUI_NAME = 'Open WebUI'; | ||||
| export const APP_NAME = 'Open WebUI'; | ||||
| export const WEBUI_BASE_URL = dev ? `http://${location.hostname}:8080` : ``; | ||||
| 
 | ||||
| export const WEBUI_API_BASE_URL = `${WEBUI_BASE_URL}/api/v1`; | ||||
|  | @ -11,7 +11,7 @@ export const AUDIO_API_BASE_URL = `${WEBUI_BASE_URL}/audio/api/v1`; | |||
| export const IMAGES_API_BASE_URL = `${WEBUI_BASE_URL}/images/api/v1`; | ||||
| export const RAG_API_BASE_URL = `${WEBUI_BASE_URL}/rag/api/v1`; | ||||
| 
 | ||||
| export const WEB_UI_VERSION = APP_VERSION; | ||||
| export const WEBUI_VERSION = APP_VERSION; | ||||
| export const REQUIRED_OLLAMA_VERSION = '0.1.16'; | ||||
| 
 | ||||
| export const SUPPORTED_FILE_TYPE = [ | ||||
|  |  | |||
|  | @ -1,6 +1,8 @@ | |||
| import { APP_NAME } from '$lib/constants'; | ||||
| import { writable } from 'svelte/store'; | ||||
| 
 | ||||
| // Backend
 | ||||
| export const WEBUI_NAME = writable(APP_NAME); | ||||
| export const config = writable(undefined); | ||||
| export const user = writable(undefined); | ||||
| 
 | ||||
|  |  | |||
|  | @ -36,6 +36,7 @@ | |||
| 	import ModelSelector from '$lib/components/chat/ModelSelector.svelte'; | ||||
| 	import Navbar from '$lib/components/layout/Navbar.svelte'; | ||||
| 	import { RAGTemplate } from '$lib/utils/rag'; | ||||
| 	import { WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 
 | ||||
| 	let stopResponseFlag = false; | ||||
| 	let autoScroll = true; | ||||
|  | @ -334,7 +335,7 @@ | |||
| 						content: $settings.system | ||||
| 				  } | ||||
| 				: undefined, | ||||
| 			...messages.filter(message => !message.deleted) | ||||
| 			...messages.filter((message) => !message.deleted) | ||||
| 		] | ||||
| 			.filter((message) => message) | ||||
| 			.map((message, idx, arr) => ({ | ||||
|  | @ -452,7 +453,7 @@ | |||
| 												: `${model}`, | ||||
| 											{ | ||||
| 												body: responseMessage.content, | ||||
| 												icon: selectedModelfile?.imageUrl ?? '/favicon.png' | ||||
| 												icon: selectedModelfile?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png` | ||||
| 											} | ||||
| 										); | ||||
| 									} | ||||
|  | @ -540,7 +541,7 @@ | |||
| 							content: $settings.system | ||||
| 					  } | ||||
| 					: undefined, | ||||
| 			...messages.filter(message => !message.deleted) | ||||
| 				...messages.filter((message) => !message.deleted) | ||||
| 			] | ||||
| 				.filter((message) => message) | ||||
| 				.map((message, idx, arr) => ({ | ||||
|  | @ -622,7 +623,7 @@ | |||
| 				if ($settings.notificationEnabled && !document.hasFocus()) { | ||||
| 					const notification = new Notification(`OpenAI ${model}`, { | ||||
| 						body: responseMessage.content, | ||||
| 						icon: '/favicon.png' | ||||
| 						icon: `${WEBUI_BASE_URL}/static/favicon.png` | ||||
| 					}); | ||||
| 				} | ||||
| 
 | ||||
|  |  | |||
|  | @ -37,6 +37,7 @@ | |||
| 	import ModelSelector from '$lib/components/chat/ModelSelector.svelte'; | ||||
| 	import Navbar from '$lib/components/layout/Navbar.svelte'; | ||||
| 	import { RAGTemplate } from '$lib/utils/rag'; | ||||
| 	import { WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 
 | ||||
| 	let loaded = false; | ||||
| 
 | ||||
|  | @ -466,7 +467,7 @@ | |||
| 												: `${model}`, | ||||
| 											{ | ||||
| 												body: responseMessage.content, | ||||
| 												icon: selectedModelfile?.imageUrl ?? '/favicon.png' | ||||
| 												icon: selectedModelfile?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png` | ||||
| 											} | ||||
| 										); | ||||
| 									} | ||||
|  | @ -637,7 +638,7 @@ | |||
| 				if ($settings.notificationEnabled && !document.hasFocus()) { | ||||
| 					const notification = new Notification(`OpenAI ${model}`, { | ||||
| 						body: responseMessage.content, | ||||
| 						icon: '/favicon.png' | ||||
| 						icon: `${WEBUI_BASE_URL}/static/favicon.png` | ||||
| 					}); | ||||
| 				} | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <script> | ||||
| 	import { onMount, tick } from 'svelte'; | ||||
| 	import { config, user, theme } from '$lib/stores'; | ||||
| 	import { config, user, theme, WEBUI_NAME } from '$lib/stores'; | ||||
| 	import { goto } from '$app/navigation'; | ||||
| 	import toast, { Toaster } from 'svelte-french-toast'; | ||||
| 
 | ||||
|  | @ -10,7 +10,7 @@ | |||
| 	import '../app.css'; | ||||
| 	import '../tailwind.css'; | ||||
| 	import 'tippy.js/dist/tippy.css'; | ||||
| 	import { WEBUI_NAME } from '$lib/constants'; | ||||
| 	import { WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 
 | ||||
| 	let loaded = false; | ||||
| 
 | ||||
|  | @ -22,6 +22,8 @@ | |||
| 		if (backendConfig) { | ||||
| 			// Save Backend Status to Store | ||||
| 			await config.set(backendConfig); | ||||
| 
 | ||||
| 			await WEBUI_NAME.set(backendConfig.name); | ||||
| 			console.log(backendConfig); | ||||
| 
 | ||||
| 			if ($config) { | ||||
|  | @ -55,7 +57,8 @@ | |||
| </script> | ||||
| 
 | ||||
| <svelte:head> | ||||
| 	<title>{WEBUI_NAME}</title> | ||||
| 	<title>{$WEBUI_NAME}</title> | ||||
| 	<link rel="icon" href="{WEBUI_BASE_URL}/static/favicon.png" /> | ||||
| 
 | ||||
| 	<link rel="stylesheet" type="text/css" href="/themes/rosepine.css" /> | ||||
| 	<link rel="stylesheet" type="text/css" href="/themes/rosepine-dawn.css" /> | ||||
|  |  | |||
|  | @ -1,8 +1,8 @@ | |||
| <script> | ||||
| 	import { goto } from '$app/navigation'; | ||||
| 	import { userSignIn, userSignUp } from '$lib/apis/auths'; | ||||
| 	import { WEBUI_API_BASE_URL, WEBUI_NAME } from '$lib/constants'; | ||||
| 	import { config, user } from '$lib/stores'; | ||||
| 	import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants'; | ||||
| 	import { WEBUI_NAME, config, user } from '$lib/stores'; | ||||
| 	import { onMount } from 'svelte'; | ||||
| 	import toast from 'svelte-french-toast'; | ||||
| 
 | ||||
|  | @ -61,7 +61,7 @@ | |||
| 	<div class="fixed m-10 z-50"> | ||||
| 		<div class="flex space-x-2"> | ||||
| 			<div class=" self-center"> | ||||
| 				<img src="/favicon.png" class=" w-8 rounded-full" alt="logo" /> | ||||
| 				<img src="{WEBUI_BASE_URL}/static/favicon.png" class=" w-8 rounded-full" alt="logo" /> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  | @ -90,12 +90,12 @@ | |||
| 					}} | ||||
| 				> | ||||
| 					<div class=" text-xl md:text-2xl font-bold"> | ||||
| 						{mode === 'signin' ? 'Sign in' : 'Sign up'} to {WEBUI_NAME} | ||||
| 						{mode === 'signin' ? 'Sign in' : 'Sign up'} to {$WEBUI_NAME} | ||||
| 					</div> | ||||
| 
 | ||||
| 					{#if mode === 'signup'} | ||||
| 						<div class=" mt-1 text-xs font-medium text-gray-500"> | ||||
| 							ⓘ {WEBUI_NAME} does not make any external connections, and your data stays securely on | ||||
| 							ⓘ {$WEBUI_NAME} does not make any external connections, and your data stays securely on | ||||
| 							your locally hosted server. | ||||
| 						</div> | ||||
| 					{/if} | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| <script> | ||||
| 	import { goto } from '$app/navigation'; | ||||
| 	import { WEBUI_NAME } from '$lib/constants'; | ||||
| 	import { config } from '$lib/stores'; | ||||
| 	import { WEBUI_NAME, config } from '$lib/stores'; | ||||
| 	import { onMount } from 'svelte'; | ||||
| 
 | ||||
| 	let loaded = false; | ||||
|  | @ -20,7 +19,7 @@ | |||
| 		<div class="absolute rounded-xl w-full h-full backdrop-blur flex justify-center"> | ||||
| 			<div class="m-auto pb-44 flex flex-col justify-center"> | ||||
| 				<div class="max-w-md"> | ||||
| 					<div class="text-center text-2xl font-medium z-50">{WEBUI_NAME} Backend Required</div> | ||||
| 					<div class="text-center text-2xl font-medium z-50">{$WEBUI_NAME} Backend Required</div> | ||||
| 
 | ||||
| 					<div class=" mt-4 text-center text-sm w-full"> | ||||
| 						Oops! You're using an unsupported method (frontend only). Please serve the WebUI from | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy Jaeryang Baek
						Timothy Jaeryang Baek