diff --git a/charts/pipelines/Chart.yaml b/charts/pipelines/Chart.yaml new file mode 100644 index 0000000..0355bf4 --- /dev/null +++ b/charts/pipelines/Chart.yaml @@ -0,0 +1,20 @@ +apiVersion: v2 +name: pipelines +version: 0.0.1 +appVersion: "alpha" + +home: https://github.com/open-webui/pipelines +icon: https://github.com/open-webui/pipelines/raw/main/header.png + +description: "Pipelines: UI-Agnostic OpenAI API Plugin Framework" +keywords: + - llm + - chat + - web-ui + +sources: + - https://github.com/open-webui/helm-charts + - https://github.com/open-webui/pipelines/pkgs/container/pipelines + +annotations: + licenses: MIT diff --git a/charts/pipelines/README.md b/charts/pipelines/README.md new file mode 100644 index 0000000..a421be3 --- /dev/null +++ b/charts/pipelines/README.md @@ -0,0 +1,79 @@ +# 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) + +Open WebUI: A User-Friendly Web Interface for Chat Interactions 👋 + +**Homepage:** + +## Source Code + +* +* +* +* + +## Installing + +Before you can install, you need to add the `open-webui` repo to [Helm](https://helm.sh) + +```shell +helm repo add open-webui https://helm.openwebui.com/ +helm repo update +``` + +Now you can install the chart: + +```shell +helm upgrade --install open-webui open-webui/open-webui +``` + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| https://otwld.github.io/ollama-helm/ | ollama | >=0.24.0 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| 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 | `""` | | +| 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` | | +| ingress.existingSecret | string | `""` | | +| ingress.host | string | `""` | | +| ingress.tls | bool | `false` | | +| 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 | +| 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. | +| 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.selector | object | `{}` | | +| persistence.size | string | `"2Gi"` | | +| persistence.storageClass | string | `""` | | +| 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"` | | +| tolerations | list | `[]` | Tolerations for pod assignment | + +---------------------------------------------- + +Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/). diff --git a/charts/pipelines/README.md.gotmpl b/charts/pipelines/README.md.gotmpl new file mode 100644 index 0000000..88d437d --- /dev/null +++ b/charts/pipelines/README.md.gotmpl @@ -0,0 +1,36 @@ +{{ template "chart.header" . }} + +{{ template "chart.deprecationWarning" . }} + +{{ template "chart.badgesSection" . }} + +{{ template "chart.description" . }} + +{{ template "chart.homepageLine" . }} + +{{ template "chart.maintainersSection" . }} + +{{ template "chart.sourcesSection" . }} + +## Installing + +Before you can install, you need to add the `open-webui` repo to [Helm](https://helm.sh) + +```shell +helm repo add open-webui https://helm.openwebui.com/ +helm repo update +``` + +Now you can install the chart: + +```shell +helm upgrade --install open-webui open-webui/pipelines +``` + +{{ template "chart.requirementsSection" . }} + +{{ template "chart.valuesSection" . }} + +---------------------------------------------- + +Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/). diff --git a/charts/pipelines/templates/_helpers.tpl b/charts/pipelines/templates/_helpers.tpl new file mode 100644 index 0000000..b4c04e1 --- /dev/null +++ b/charts/pipelines/templates/_helpers.tpl @@ -0,0 +1,29 @@ +{{- define "pipelines.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- 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 "pipelines.selectorLabels" -}} +{{ include "base.selectorLabels" . }} +app.kubernetes.io/component: {{ .Chart.Name }} +{{- end }} + +{{- define "pipelines.labels" -}} +{{ include "base.labels" . }} +{{ include "pipelines.selectorLabels" . }} +{{- end }} diff --git a/charts/pipelines/templates/deployment.yaml b/charts/pipelines/templates/deployment.yaml new file mode 100644 index 0000000..9e53f84 --- /dev/null +++ b/charts/pipelines/templates/deployment.yaml @@ -0,0 +1,108 @@ +# Old manual manifest, used for reference +# apiVersion: apps/v1 +# kind: Deployment +# metadata: +# name: open-webui-pipelines +# spec: +# replicas: 1 +# selector: +# matchLabels: +# app: open-webui-pipelines +# template: +# metadata: +# labels: +# app: open-webui-pipelines +# spec: +# containers: +# - name: open-webui-pipelines +# image: ghcr.io/open-webui/pipelines:main +# imagePullPolicy: Always +# env: +# - name: PIPELINES_URLS +# value: https://github.com/open-webui/pipelines/blob/main/examples/langfuse_filter_pipeline.py +# - name: LANGFUSE_HOST +# value: https://us.cloud.langfuse.com +# - name: LANGFUSE_PUBLIC_KEY +# valueFrom: +# secretKeyRef: +# name: langfuse-keys +# key: public-key +# - name: LANGFUSE_SECRET_KEY +# valueFrom: +# secretKeyRef: +# name: langfuse-keys +# key: secret-key +# ports: +# - containerPort: 9099 + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "pipelines.name" . }} + labels: + {{- include "pipelines.labels" . | nindent 4 }} + {{- with .Values.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "pipelines.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "pipelines.labels" . | nindent 8 }} + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + enableServiceLinks: false + automountServiceAccountToken: false + containers: + - name: {{ .Chart.Name }} + {{- with .Values.image }} + image: {{ .repository }}:{{ .tag | default $.Chart.AppVersion }} + imagePullPolicy: {{ .pullPolicy }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.service.containerPort }} + {{- with .Values.resources }} + resources: {{- toYaml . | nindent 10 }} + {{- end }} + volumeMounts: + - name: data + mountPath: /app/backend/data + env: + {{- if .Values.extraEnvVars }} + {{- toYaml .Values.extraEnvVars | nindent 8 }} + {{- end }} + tty: true + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + volumes: + {{- if and .Values.persistence.enabled .Values.persistence.existingClaim }} + - name: data + persistentVolumeClaim: + claimName: {{ .Values.persistence.existingClaim }} + {{- else if not .Values.persistence.enabled }} + - name: data + emptyDir: {} + {{- else if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} + - name: data + persistentVolumeClaim: + claimName: {{ include "pipelines.name" . }} + {{- end }} \ No newline at end of file diff --git a/charts/pipelines/templates/pvc.yaml b/charts/pipelines/templates/pvc.yaml new file mode 100644 index 0000000..87af4a7 --- /dev/null +++ b/charts/pipelines/templates/pvc.yaml @@ -0,0 +1,27 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "pipelines.name" . }} + labels: + {{- include "pipelines.selectorLabels" . | nindent 4 }} + {{- with .Values.persistence.annotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} +spec: + accessModes: + {{- range .Values.persistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.size }} + {{- if .Values.persistence.storageClass }} + storageClassName: {{ .Values.persistence.storageClass }} + {{- end }} + {{- with .Values.persistence.selector }} + selector: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/pipelines/templates/service.yaml b/charts/pipelines/templates/service.yaml new file mode 100644 index 0000000..811d125 --- /dev/null +++ b/charts/pipelines/templates/service.yaml @@ -0,0 +1,29 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "pipelines.name" . }} + labels: + {{- include "pipelines.labels" . | nindent 4 }} + {{- with .Values.service.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + {{- include "pipelines.selectorLabels" . | nindent 4 }} + type: {{ .Values.service.type | default "ClusterIP" }} + ports: + - protocol: TCP + name: http + port: {{ .Values.service.port }} + targetPort: http + {{- if .Values.service.nodePort }} + nodePort: {{ .Values.service.nodePort | int }} + {{- end }} + {{- if .Values.service.loadBalancerClass }} + loadBalancerClass: {{ .Values.service.loadBalancerClass | quote }} + {{- end }} + \ No newline at end of file diff --git a/charts/pipelines/values.yaml b/charts/pipelines/values.yaml new file mode 100644 index 0000000..345c1f8 --- /dev/null +++ b/charts/pipelines/values.yaml @@ -0,0 +1,68 @@ +nameOverride: "" + +# -- Value of cluster domain +clusterDomain: cluster.local + +annotations: {} +podAnnotations: {} +replicaCount: 1 +image: + repository: ghcr.io/open-webui/pipelines + tag: main + pullPolicy: Always +resources: {} +ingress: + enabled: true + 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: {} + +# -- Node labels for pod assignment. +nodeSelector: {} + +# -- Tolerations for pod assignment +tolerations: [] + +# -- Affinity for pod assignment +affinity: {} + +service: + type: ClusterIP + annotations: {} + port: 9099 + containerPort: 9099 + nodePort: "" + labels: {} + loadBalancerClass: "" + +# -- Additional environments variables on the output Deployment definition. These are used to pull initial Pipeline files, and help configure Pipelines with required values (e.g. Langfuse API keys) +extraEnvVars: + # -- Example pipeline to pull and load on deployment startup, see current pipelines here: https://github.com/open-webui/pipelines/blob/main/examples + - name: PIPELINES_URLS + value: "https://github.com/open-webui/pipelines/blob/main/examples/langfuse_filter_pipeline.py" + - name: LANGFUSE_PUBLIC_KEY + valueFrom: + secretKeyRef: + name: langfuse-keys + key: public-key + - name: LANGFUSE_SECRET_KEY + valueFrom: + secretKeyRef: + name: langfuse-keys + key: secret-key + - name: LANGFUSE_HOST + value: https://us.cloud.langfuse.com