This Helm chart deploys the ChatGPT Retrieval Plugin.
To install the chart with the release name mychatgpt:
# OCI
helm install mychatgpt oci://ghcr.io/icoretech/charts/chatgpt-retrieval-plugin
helm repo add icoretech https://icoretech.github.io/helm
helm install mychatgpt icoretech/chatgpt-retrieval-plugin
Please ensure that you select the correct Docker image flavor based on the supported vector database provider you intend to use. Refer to the Supported Vector Database Providers for more information.
You must set the values for web.extraEnvs.
The following table lists the configurable parameters of the ChatGPT Retrieval Plugin chart and their default values.
| Parameter | Description | Default | 
|---|---|---|
| nameOverride | Overrides part of the chart’s fullname. Useful when integrating with other charts. | "" | 
| fullnameOverride | Completely overrides the chart’s fullname. Useful for custom naming conventions. | "" | 
| web.image | Docker image for the plugin, including the tag. | ghcr.io/icoretech/chatgpt-retrieval-plugin-docker:postgres-9969191-1685433326 | 
| web.imagePullPolicy | Policy for pulling images: Always,IfNotPresent,Never. | IfNotPresent | 
| web.imagePullSecrets | Secrets for pulling images from private registries. Must exist in namespace. Format as string name of the secret. | "" | 
| web.replicaCount | Number of pod replicas for the deployment. | 1 | 
| web.updateStrategy | Strategy for updating pods. Supports RollingUpdate(default) orRecreate. | RollingUpdate | 
| web.hpa.enabled | Enables horizontal pod autoscaling based on CPU/memory usage or HTTP requests. | false | 
| web.ingress.enabled | Enables ingress for external access. Configure hostsandtlsas needed. | false | 
| web.service.enabled | Enables a Kubernetes service for internal networking. | true | 
| web.service.type | Type of the Kubernetes service, e.g., ClusterIP,NodePort,LoadBalancer. | ClusterIP | 
| web.service.port | Port exposed by the service. | 8080 | 
| web.livenessProbe.enabled | Enables a liveness probe. Currently not available ( false). | false | 
| web.readinessProbe.enabled | Enables a readiness probe. Currently not available ( false). | false | 
| web.resources | CPU/memory resources allocation. Use for limits and requests. | {} | 
| web.nodeSelector | Node labels for pod assignment. Helps ensure pods are deployed on specified nodes. | {} | 
| web.tolerations | Tolerations for pod assignment. Allows scheduling on tainted nodes. | [] | 
| web.affinity | Affinity and anti-affinity rules. Controls pod scheduling preferences. | {} | 
| web.extraEnvs | Additional environment variables for customization. Useful for setting up external integrations. | [] | 
| web.extraEnvFromSecret | Sources environment variables from a Kubernetes secret. Useful for sensitive configs. Format as list of secret names. | [] | 
| web.config.aiPluginJson | Configuration for the AI plugin in JSON format. Defines plugin metadata and API details. | "" | 
| web.config.openApiYaml | OpenAPI spec for the plugin’s API. Defines endpoints and operations. | "" | 
To customize the configuration, you can provide your own values by creating a values.yaml file and overriding the desired parameters.
Here’s an example values.yaml file with the web.config options:
web:
  config:
    aiPluginJson:
      schema_version: "v1"
      name_for_model: "retrieval"
      name_for_human: "Retrieval Plugin"
      description_for_model: "Plugin for searching through the user's documents (such as files, emails, and more) to find answers to questions and retrieve relevant information. Use it whenever a user asks something that might be found in their personal information."
      description_for_human: "Search through your documents."
      auth:
        type: "none"
      api:
        type: "openapi"
        url: "https://mychatgpt.zyx/.well-known/openapi.yaml"
      logo_url: "https://mychatgpt.zyx/.well-known/logo.png"
      contact_email: "hello@mychatgpt.zyx"
      legal_info_url: "https://mychatgpt.zyx/legal"
    openApiYaml: |
      openapi: 3.0.2
      info:
        title: Retrieval Plugin API
        description: A retrieval API for querying and filtering documents based on natural language queries and metadata
        version: 1.0.0
      servers:
        - url: https://your-app-url.com
      ...
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
  name: icoretech
spec:
  interval: 30m
  type: oci
  url: oci://ghcr.io/icoretech/charts
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
  name: chatgpt-retrieval-plugin-docker
  namespace: flux-system
spec:
  image: ghcr.io/icoretech/chatgpt-retrieval-plugin-docker
  interval: 1h0m0s
# weaviate flavour
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
  name: chatgpt-retrieval-plugin-weaviate
  namespace: flux-system
spec:
  imageRepositoryRef:
    name: chatgpt-retrieval-plugin-docker
  filterTags:
    pattern: '^weaviate-[a-fA-F0-9]+-(?P<ts>.*)'
    extract: '$ts'
  policy:
    numerical:
      order: asc
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: chatgpt-retrieval-plugin
  namespace: chatgpt-retrieval-plugin
spec:
  releaseName: chatgpt-retrieval-plugin
  chart:
    spec:
      chart: chatgpt-retrieval-plugin
      version: ">= 0.0.8"
      sourceRef:
        kind: HelmRepository
        name: icoretech
        namespace: flux-system
  interval: 10m0s
  install:
    remediation:
      retries: 4
  upgrade:
    remediation:
      retries: 4
  values:
    web:
      image: ghcr.io/icoretech/chatgpt-retrieval-plugin-docker:weaviate-9969191-1685462163 # {"$imagepolicy": "flux-system:chatgpt-retrieval-plugin-weaviate"}
      replicaCount: 1
      config:
        aiPluginJson:
          schema_version: "v1"
          name_for_model: "retrieval"
          name_for_human: "Retrieval Plugin"
          description_for_model: "Plugin for searching through the user's documents (such as files, emails, and more) to find answers to questions and retrieve relevant information. Use it whenever a user asks something that might be found in their personal information."
          description_for_human: "Search through your documents."
          auth:
            type: "none"
          api:
            type: "openapi"
            url: "https://mygpt.xxxx.ch/.well-known/openapi.yaml"
          logo_url: "https://mygpt.xxxx.ch/.well-known/logo.png"
          contact_email: "mygpt@xxxx.ch"
          legal_info_url: "https://mygpt.xxxx.ch/legal"
      hpa:
        enabled: true
        maxReplicas: 5
        cpu: 100
      resources:
        requests:
          cpu: 1500m # example values
          memory: 500M # example values
        limits:
          cpu: 1500m # example values
          memory: 500M # example values
      extraEnvs:
        - name: DATASTORE
          value: "xxxx"
        - name: BEARER_TOKEN
          value: "xxxxx"
        - name: OPENAI_API_KEY
          value: "xxxxx"
        - name: WEAVIATE_URL
          value: http://weaviate:80
        # and more https://github.com/openai/chatgpt-retrieval-plugin/tree/main#quickstart
      ingress:
        enabled: true
        ingressClassName: nginx
        annotations:
          cert-manager.io/cluster-issuer: letsencrypt
          external-dns.alpha.kubernetes.io/cloudflare-proxied: 'false'
          nginx.ingress.kubernetes.io/configuration-snippet: |
            real_ip_header proxy_protocol;
        hosts:
          - host: mychatgpt.mydomain.com
            paths:
              - '/'
        tls:
          - hosts:
              - mychatgpt.mydomain.com