diff --git a/.github/workflows/helm-release.yml b/.github/workflows/helm-release.yml index ca5dbc8..f172921 100644 --- a/.github/workflows/helm-release.yml +++ b/.github/workflows/helm-release.yml @@ -31,6 +31,7 @@ jobs: - name: Add Dependency Repos run: | helm repo add ollama https://otwld.github.io/ollama-helm/ + helm repo add open-webui https://helm.openwebui.com/ - name: Run chart-releaser uses: helm/chart-releaser-action@v1.6.0 diff --git a/charts/open-webui/.helmignore b/charts/open-webui/.helmignore index e806524..260f898 100644 --- a/charts/open-webui/.helmignore +++ b/charts/open-webui/.helmignore @@ -1 +1,25 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +.drone.yml +*.tmproj +.vscode/ values-minikube.yaml diff --git a/charts/open-webui/Chart.lock b/charts/open-webui/Chart.lock index f674b86..c679a29 100644 --- a/charts/open-webui/Chart.lock +++ b/charts/open-webui/Chart.lock @@ -1,6 +1,9 @@ dependencies: - name: ollama repository: https://otwld.github.io/ollama-helm/ - version: 0.25.0 -digest: sha256:3de991d818940927d9b459afba26af05ef24082dd3f123f462c72f7682665946 -generated: "2024-05-09T08:11:03.438421-07:00" + version: 0.33.0 +- name: pipelines + repository: https://helm.openwebui.com + version: 0.0.1 +digest: sha256:1138e9fa48135fabda643adc69845284d4ba08745caeb958a646f10c7a6f9fe1 +generated: "2024-06-04T21:28:16.737572-06:00" diff --git a/charts/open-webui/Chart.yaml b/charts/open-webui/Chart.yaml index b72e418..e163cff 100644 --- a/charts/open-webui/Chart.yaml +++ b/charts/open-webui/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: open-webui -version: 2.1.0 -appVersion: "latest" +version: 3.0.0 +appVersion: "0.2.4" home: https://www.openwebui.com/ icon: https://raw.githubusercontent.com/open-webui/open-webui/main/static/favicon.png @@ -29,3 +29,10 @@ dependencies: - child: service parent: ollama.service condition: ollama.enabled + - name: pipelines + repository: https://helm.openwebui.com + version: ">=0.0.1" + import-values: + - child: service + parent: pipelines.service + condition: pipelines.enabled diff --git a/charts/open-webui/README.md b/charts/open-webui/README.md index a421be3..365862d 100644 --- a/charts/open-webui/README.md +++ b/charts/open-webui/README.md @@ -1,6 +1,6 @@ # open-webui -![Version: 2.0.2](https://img.shields.io/badge/Version-2.0.2-informational?style=flat-square) ![AppVersion: latest](https://img.shields.io/badge/AppVersion-latest-informational?style=flat-square) +![Version: 3.0.0](https://img.shields.io/badge/Version-3.0.0-informational?style=flat-square) ![AppVersion: 0.2.2](https://img.shields.io/badge/AppVersion-0.2.2-informational?style=flat-square) Open WebUI: A User-Friendly Web Interface for Chat Interactions 👋 @@ -32,6 +32,7 @@ helm upgrade --install open-webui open-webui/open-webui | Repository | Name | Version | |------------|------|---------| +| https://helm.openwebui.com | pipelines | >=0.0.1 | | https://otwld.github.io/ollama-helm/ | ollama | >=0.24.0 | ## Values @@ -41,10 +42,8 @@ helm upgrade --install open-webui open-webui/open-webui | affinity | object | `{}` | Affinity for pod assignment | | annotations | object | `{}` | | | clusterDomain | string | `"cluster.local"` | Value of cluster domain | -| extraEnvVars | list | `[]` | Additional environments variables on the output Deployment definition. | -| image.pullPolicy | string | `"Always"` | | -| image.repository | string | `"ghcr.io/open-webui/open-webui"` | | -| image.tag | string | `""` | | +| extraEnvVars | string | `nil` | Additional environments variables on the output Deployment definition. Most up-to-date environment variables can be found here: https://docs.openwebui.com/getting-started/env-configuration/ | +| image | object | `{"pullPolicy":"Always","repository":"ghcr.io/open-webui/open-webui","tag":"latest"}` | Open WebUI image tags can be found here: https://github.com/open-webui/open-webui/pkgs/container/open-webui | | ingress.annotations | object | `{}` | Use appropriate annotations for your Ingress controller, e.g., for NGINX: nginx.ingress.kubernetes.io/rewrite-target: / | | ingress.class | string | `""` | | | ingress.enabled | bool | `false` | | @@ -54,24 +53,22 @@ helm upgrade --install open-webui open-webui/open-webui | nameOverride | string | `""` | | | nodeSelector | object | `{}` | Node labels for pod assignment. | | ollama.enabled | bool | `true` | Automatically install Ollama Helm chart from https://otwld.github.io/ollama-helm/. Use [Helm Values](https://github.com/otwld/ollama-helm/#helm-values) to configure | +| ollama.fullnameOverride | string | `"open-webui-ollama"` | If enabling embedded Ollama, update fullnameOverride to your desired Ollama name value, or else it will use the default ollama.name value from the Ollama chart | | ollamaUrls | list | `[]` | A list of Ollama API endpoints. These can be added in lieu of automatically installing the Ollama Helm chart, or in addition to it. | +| openaiBaseApiUrl | string | `""` | OpenAI base API URL to use. Defaults to the Pipelines service endpoint when Pipelines are enabled, and "https://api.openai.com/v1" if Pipelines are not enabled and this value is blank | | persistence.accessModes | list | `["ReadWriteOnce"]` | If using multiple replicas, you must update accessModes to ReadWriteMany | | persistence.annotations | object | `{}` | | | persistence.enabled | bool | `true` | | -| persistence.existingClaim | string | `""` | | +| persistence.existingClaim | string | `""` | Use existingClaim if you want to re-use an existing Open WebUI PVC instead of creating a new one | | persistence.selector | object | `{}` | | | persistence.size | string | `"2Gi"` | | | persistence.storageClass | string | `""` | | +| pipelines.enabled | bool | `true` | Automatically install Pipelines chart to extend Open WebUI functionality using Pipelines: https://github.com/open-webui/pipelines | +| pipelines.extraEnvVars[0] | object | `{"name":"PIPELINES_API_KEY","value":"0p3n-w3bu!"}` | This is a default password that can and should be updated on your production deployment, and should be stored in a K8s secret | | podAnnotations | object | `{}` | | | replicaCount | int | `1` | | | resources | object | `{}` | | -| service.annotations | object | `{}` | | -| service.containerPort | int | `8080` | | -| service.labels | object | `{}` | | -| service.loadBalancerClass | string | `""` | | -| service.nodePort | string | `""` | | -| service.port | int | `80` | | -| service.type | string | `"ClusterIP"` | | +| service | object | `{"annotations":{},"containerPort":8080,"labels":{},"loadBalancerClass":"","nodePort":"","port":80,"type":"ClusterIP"}` | Service values to expose Open WebUI pods to cluster | | tolerations | list | `[]` | Tolerations for pod assignment | ---------------------------------------------- diff --git a/charts/open-webui/charts/ollama-0.25.0.tgz b/charts/open-webui/charts/ollama-0.25.0.tgz deleted file mode 100644 index c66c3c8..0000000 Binary files a/charts/open-webui/charts/ollama-0.25.0.tgz and /dev/null differ diff --git a/charts/open-webui/charts/ollama-0.33.0.tgz b/charts/open-webui/charts/ollama-0.33.0.tgz new file mode 100644 index 0000000..3feb803 Binary files /dev/null and b/charts/open-webui/charts/ollama-0.33.0.tgz differ diff --git a/charts/open-webui/charts/pipelines-0.0.1.tgz b/charts/open-webui/charts/pipelines-0.0.1.tgz new file mode 100644 index 0000000..6e482c3 Binary files /dev/null and b/charts/open-webui/charts/pipelines-0.0.1.tgz differ diff --git a/charts/open-webui/templates/_helpers.tpl b/charts/open-webui/templates/_helpers.tpl index 2a923e6..90381f5 100644 --- a/charts/open-webui/templates/_helpers.tpl +++ b/charts/open-webui/templates/_helpers.tpl @@ -1,24 +1,52 @@ +{{/* +Set the name of the Open WebUI resources +*/}} {{- define "open-webui.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} {{- end -}} + +{{/* +Set the name of the integrated Ollama resources +*/}} {{- define "ollama.name" -}} -ollama +open-webui-ollama {{- end -}} +{{/* +Set the name of the integrated Pipelines resources +*/}} +{{- define "pipelines.name" -}} +open-webui-pipelines +{{- end -}} + +{{/* +Constructs a semicolon-separated string of Ollama API endpoint URLs from the ollamaUrls list +defined in the values.yaml file +*/}} {{- define "ollamaUrls" -}} {{- if .Values.ollamaUrls }} {{- join ";" .Values.ollamaUrls | trimSuffix "/" }} {{- end }} {{- end }} +{{/* +Generates the URL for accessing the Ollama service within the Kubernetes cluster when the +ollama.enabled value is set to true, which means that the Ollama Helm chart is being installed +as a dependency of the Open WebUI chart +*/}} {{- define "ollamaLocalUrl" -}} {{- if .Values.ollama.enabled -}} {{- $clusterDomain := .Values.clusterDomain }} {{- $ollamaServicePort := .Values.ollama.service.port | toString }} -{{- printf "http://open-webui-%s.%s.svc.%s:%s" (include "ollama.name" .) (.Release.Namespace) $clusterDomain $ollamaServicePort }} +{{- printf "http://%s.%s.svc.%s:%s" (default .Values.ollama.name .Values.ollama.fullnameOverride) (.Release.Namespace) $clusterDomain $ollamaServicePort }} {{- end }} {{- end }} +{{/* +Constructs a string containing the URLs of the Ollama API endpoints that the Open WebUI +application should use based on which values are set for Ollama/ whether the Ollama +subchart is in use +*/}} {{- define "ollamaBaseUrls" -}} {{- $ollamaLocalUrl := include "ollamaLocalUrl" . }} {{- $ollamaUrls := include "ollamaUrls" . }} @@ -31,10 +59,16 @@ ollama {{- end }} {{- end }} +{{/* +Create the chart name and version for the chart label +*/}} {{- define "chart.name" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- end }} +{{/* +Create the base labels to include on chart resources +*/}} {{- define "base.labels" -}} helm.sh/chart: {{ include "chart.name" . }} {{- if .Chart.AppVersion }} @@ -43,26 +77,68 @@ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }} +{{/* +Create selector labels to include on all resources +*/}} {{- define "base.selectorLabels" -}} app.kubernetes.io/instance: {{ .Release.Name }} {{- end -}} +{{/* +Create selector labels to include on all Open WebUI resources +*/}} {{- define "open-webui.selectorLabels" -}} {{ include "base.selectorLabels" . }} app.kubernetes.io/component: {{ .Chart.Name }} {{- end }} +{{/* +Create labels to include on chart all Open WebUI resources +*/}} {{- define "open-webui.labels" -}} {{ include "base.labels" . }} {{ include "open-webui.selectorLabels" . }} {{- end }} +{{/* +Create selector labels to include on chart all Ollama resources +*/}} {{- define "ollama.selectorLabels" -}} {{ include "base.selectorLabels" . }} app.kubernetes.io/component: {{ include "ollama.name" . }} {{- end }} +{{/* +Create labels to include on chart all Ollama resources +*/}} {{- define "ollama.labels" -}} {{ include "base.labels" . }} {{ include "ollama.selectorLabels" . }} {{- end }} + +{{/* +Create selector labels to include on chart all Pipelines resources +*/}} +{{- define "pipelines.selectorLabels" -}} +{{ include "base.selectorLabels" . }} +app.kubernetes.io/component: {{ include "pipelines.name" . }} +{{- end }} + +{{/* +Create labels to include on chart all Pipelines resources +*/}} +{{- define "pipelines.labels" -}} +{{ include "base.labels" . }} +{{ include "pipelines.selectorLabels" . }} +{{- end }} + +{{/* +Create the service endpoint to use for Pipelines if the subchart is used +*/}} +{{- define "pipelines.serviceEndpoint" -}} +{{- if .Values.pipelines.enabled -}} +{{- $clusterDomain := .Values.clusterDomain }} +{{- $pipelinesServicePort := .Values.pipelines.service.port | toString }} +{{- printf "http://%s.%s.svc.%s:%s" (include "pipelines.name" .) (.Release.Namespace) $clusterDomain $pipelinesServicePort }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/open-webui/templates/deployment.yaml b/charts/open-webui/templates/deployment.yaml index 20fdd40..f8a171f 100644 --- a/charts/open-webui/templates/deployment.yaml +++ b/charts/open-webui/templates/deployment.yaml @@ -42,6 +42,16 @@ spec: env: - name: OLLAMA_BASE_URLS value: {{ include "ollamaBaseUrls" . | quote }} + {{ if .Values.pipelines.enabled }} + - name: OPENAI_API_BASE_URL + value: {{ include "pipelines.serviceEndpoint" . }} + {{ else if .Values.openaiBaseApiUrl }} + - name: OPENAI_API_BASE_URL + value: {{ .Values.openaiBaseApiUrl }} + {{ else }} + - name: OPENAI_API_BASE_URL + value: "https://api.openai.com/v1" + {{ end }} {{- if .Values.extraEnvVars }} {{- toYaml .Values.extraEnvVars | nindent 8 }} {{- end }} diff --git a/charts/open-webui/values.yaml b/charts/open-webui/values.yaml index 1cb444c..7d9809e 100644 --- a/charts/open-webui/values.yaml +++ b/charts/open-webui/values.yaml @@ -3,7 +3,9 @@ nameOverride: "" ollama: # -- Automatically install Ollama Helm chart from https://otwld.github.io/ollama-helm/. Use [Helm Values](https://github.com/otwld/ollama-helm/#helm-values) to configure enabled: true - # Example Ollama configuration with nvidia GPU enabled, automatically downloading a model, and deploying a PVC for model persistence + # -- If enabling embedded Ollama, update fullnameOverride to your desired Ollama name value, or else it will use the default ollama.name value from the Ollama chart + fullnameOverride: "open-webui-ollama" + # -- Example Ollama configuration with nvidia GPU enabled, automatically downloading a model, and deploying a PVC for model persistence # ollama: # gpu: # enabled: true @@ -15,6 +17,18 @@ ollama: # persistentVolume: # enabled: true +pipelines: + # -- Automatically install Pipelines chart to extend Open WebUI functionality using Pipelines: https://github.com/open-webui/pipelines + enabled: true + extraEnvVars: + # -- This is a default password that can and should be updated on your production deployment, and should be stored in a K8s secret + - name: PIPELINES_API_KEY + value: "0p3n-w3bu!" + # valueFrom: + # secretKeyRef: + # name: pipelines-api-key + # key: api-key + # -- A list of Ollama API endpoints. These can be added in lieu of automatically installing the Ollama Helm chart, or in addition to it. ollamaUrls: [] @@ -24,9 +38,10 @@ clusterDomain: cluster.local annotations: {} podAnnotations: {} replicaCount: 1 +# -- Open WebUI image tags can be found here: https://github.com/open-webui/open-webui/pkgs/container/open-webui image: repository: ghcr.io/open-webui/open-webui - tag: "" + tag: "latest" pullPolicy: Always resources: {} ingress: @@ -41,6 +56,7 @@ ingress: persistence: enabled: true size: 2Gi + # -- Use existingClaim if you want to re-use an existing Open WebUI PVC instead of creating a new one existingClaim: "" # -- If using multiple replicas, you must update accessModes to ReadWriteMany accessModes: @@ -58,6 +74,7 @@ tolerations: [] # -- Affinity for pod assignment affinity: {} +# -- Service values to expose Open WebUI pods to cluster service: type: ClusterIP annotations: {} @@ -67,7 +84,10 @@ service: labels: {} loadBalancerClass: "" -# -- Additional environments variables on the output Deployment definition. +# -- OpenAI base API URL to use. Defaults to the Pipelines service endpoint when Pipelines are enabled, and "https://api.openai.com/v1" if Pipelines are not enabled and this value is blank +openaiBaseApiUrl: "" + +# -- Additional environments variables on the output Deployment definition. Most up-to-date environment variables can be found here: https://docs.openwebui.com/getting-started/env-configuration/ extraEnvVars: # - name: OPENAI_API_KEY # valueFrom: diff --git a/charts/pipelines/.helmignore b/charts/pipelines/.helmignore new file mode 100644 index 0000000..1e540ba --- /dev/null +++ b/charts/pipelines/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +.drone.yml +*.tmproj +.vscode/ \ No newline at end of file diff --git a/charts/pipelines/Chart.yaml b/charts/pipelines/Chart.yaml index 0355bf4..1c8f693 100644 --- a/charts/pipelines/Chart.yaml +++ b/charts/pipelines/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: pipelines -version: 0.0.1 +version: 0.0.2 appVersion: "alpha" home: https://github.com/open-webui/pipelines diff --git a/charts/pipelines/README.md b/charts/pipelines/README.md index 4d7d2ef..b51c3a7 100644 --- a/charts/pipelines/README.md +++ b/charts/pipelines/README.md @@ -1,6 +1,6 @@ # pipelines -![Version: 0.0.1](https://img.shields.io/badge/Version-0.0.1-informational?style=flat-square) ![AppVersion: alpha](https://img.shields.io/badge/AppVersion-alpha-informational?style=flat-square) +![Version: 0.0.2](https://img.shields.io/badge/Version-0.0.2-informational?style=flat-square) ![AppVersion: alpha](https://img.shields.io/badge/AppVersion-alpha-informational?style=flat-square) Pipelines: UI-Agnostic OpenAI API Plugin Framework diff --git a/charts/pipelines/templates/_helpers.tpl b/charts/pipelines/templates/_helpers.tpl index b4c04e1..b4cb5ab 100644 --- a/charts/pipelines/templates/_helpers.tpl +++ b/charts/pipelines/templates/_helpers.tpl @@ -1,11 +1,20 @@ +{{/* +Set the name of the Pipelines resources +*/}} {{- define "pipelines.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- default .Release.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} {{- end -}} +{{/* +Create the chart name and version for the chart label +*/}} {{- define "chart.name" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- end }} +{{/* +Create the base labels to include on chart resources +*/}} {{- define "base.labels" -}} helm.sh/chart: {{ include "chart.name" . }} {{- if .Chart.AppVersion }} @@ -14,16 +23,32 @@ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }} +{{/* +Create selector labels to include on all resources +*/}} {{- define "base.selectorLabels" -}} app.kubernetes.io/instance: {{ .Release.Name }} {{- end -}} +{{/* +Create selector labels to include on all Pipelines resources +*/}} {{- define "pipelines.selectorLabels" -}} {{ include "base.selectorLabels" . }} app.kubernetes.io/component: {{ .Chart.Name }} {{- end }} +{{/* +Create labels to include on all Pipelines resources +*/}} {{- define "pipelines.labels" -}} {{ include "base.labels" . }} {{ include "pipelines.selectorLabels" . }} {{- end }} + +{{/* +Create the default port to use on the service if none is defined in values +*/}} +{{- define "pipelines.servicePort" -}} +{{- .Values.service.port | default 9099 }} +{{- end }}