From ba6d51cf6b36228ee7c7f5627808588ac0a367d3 Mon Sep 17 00:00:00 2001 From: Jordan Dubrick Date: Tue, 1 Sep 2026 11:01:49 -0400 Subject: [PATCH 1/2] feat: lightspeed to intelligent-assistant rebrand Signed-off-by: Jordan Dubrick --- .github/CODEOWNERS | 4 +- .github/actions/test-charts/action.yml | 8 +- .github/workflows/nightly.yaml | 2 +- .../workflows/sync-lightspeed-configs.yaml | 42 +++++++--- .github/workflows/test.yaml | 2 +- CONTRIBUTING.md | 8 +- charts/rhdh/ci/default-values.yaml | 2 +- .../ci/with-custom-configuration-values.yaml | 2 +- charts/rhdh/ci/with-external-db-values.yaml | 2 +- ...ntelligent-assistant-disabled-values.yaml} | 2 +- .../config.yaml | 2 +- .../lightspeed-stack.yaml | 2 +- .../rhdh-profile.py | 0 .../secret.example.yaml | 6 +- charts/rhdh/templates/_helpers.tpl | 45 ++++++---- charts/rhdh/templates/deployment.yaml | 82 +++++++++---------- .../templates/dynamic-plugins-configmap.yaml | 6 +- .../intelligent-assistant-configmaps.yaml} | 12 +-- charts/rhdh/values.schema.json | 22 ++--- charts/rhdh/values.schema.tmpl.json | 16 ++-- charts/rhdh/values.yaml | 18 ++-- hack/sync-lightspeed-configs.sh | 37 +-------- 22 files changed, 160 insertions(+), 162 deletions(-) rename charts/rhdh/ci/{with-lightspeed-disabled-values.yaml => with-intelligent-assistant-disabled-values.yaml} (92%) rename charts/rhdh/files/{lightspeed => intelligent-assistant}/config.yaml (99%) rename charts/rhdh/files/{lightspeed => intelligent-assistant}/lightspeed-stack.yaml (96%) rename charts/rhdh/files/{lightspeed => intelligent-assistant}/rhdh-profile.py (100%) rename charts/rhdh/files/{lightspeed => intelligent-assistant}/secret.example.yaml (81%) rename charts/rhdh/templates/{lightspeed/lightspeed-configmaps.yaml => intelligent-assistant/intelligent-assistant-configmaps.yaml} (52%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 76852274..cb5a07c2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -18,6 +18,6 @@ *.md.gotmpl @redhat-developer/RHDH-content /README.md @redhat-developer/RHDH-content -# Lightspeed: +# Intelligent Assistant: /charts/backstage/files/lightspeed/ @redhat-developer/rhdh-ai -/charts/rhdh/files/lightspeed/ @redhat-developer/rhdh-ai +/charts/rhdh/files/intelligent-assistant/ @redhat-developer/rhdh-ai diff --git a/.github/actions/test-charts/action.yml b/.github/actions/test-charts/action.yml index 2b1adc25..d5c193fe 100644 --- a/.github/actions/test-charts/action.yml +++ b/.github/actions/test-charts/action.yml @@ -254,16 +254,16 @@ runs: # --namespace ct-charts \ # --from-literal=.npmrc=$'@myscope:registry=https://my-registry.example.com\n//my-registry.example.com:_authToken=foo' - # Lightspeed existing-resource test (with-lightspeed-existing-config-values.yaml) + # Intelligent Assistant existing-resource test (with-custom-configuration-values.yaml) kubectl create configmap test-lightspeed-stack \ --namespace ct-charts \ - --from-file=lightspeed-stack.yaml=charts/rhdh/files/lightspeed/lightspeed-stack.yaml + --from-file=lightspeed-stack.yaml=charts/rhdh/files/intelligent-assistant/lightspeed-stack.yaml kubectl create configmap test-lightspeed-server \ --namespace ct-charts \ - --from-file=config.yaml=charts/rhdh/files/lightspeed/config.yaml + --from-file=config.yaml=charts/rhdh/files/intelligent-assistant/config.yaml kubectl create configmap test-lightspeed-profile \ --namespace ct-charts \ - --from-file=rhdh-profile.py=charts/rhdh/files/lightspeed/rhdh-profile.py + --from-file=rhdh-profile.py=charts/rhdh/files/intelligent-assistant/rhdh-profile.py kubectl create secret generic test-lightspeed-secret \ --namespace ct-charts \ --from-literal=LLAMA_STACK_LOGGING=info diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml index 542031d6..495dc815 100644 --- a/.github/workflows/nightly.yaml +++ b/.github/workflows/nightly.yaml @@ -123,7 +123,7 @@ jobs: - name: Generate nightly values override for rhdh chart if: steps.check.outputs.exists == 'true' && matrix.chart == 'rhdh' run: | - yq e '{"dynamicPlugins": {"includes": .dynamicPlugins.includes}, "lightspeed": {"plugins": .lightspeed.plugins}, "orchestrator": {"plugins": .orchestrator.plugins}}' \ + yq e '{"dynamicPlugins": {"includes": .dynamicPlugins.includes}, "intelligentAssistant": {"plugins": .intelligentAssistant.plugins}, "orchestrator": {"plugins": .orchestrator.plugins}}' \ charts/rhdh/values.yaml > /tmp/rhdh-nightly-values.yaml - name: Test charts diff --git a/.github/workflows/sync-lightspeed-configs.yaml b/.github/workflows/sync-lightspeed-configs.yaml index 0f3da780..1da0a3a3 100644 --- a/.github/workflows/sync-lightspeed-configs.yaml +++ b/.github/workflows/sync-lightspeed-configs.yaml @@ -1,4 +1,4 @@ -name: Sync Lightspeed Configs +name: Sync Lightspeed Core Configs on: schedule: @@ -7,7 +7,7 @@ on: jobs: sync-lightspeed: - name: Sync Lightspeed Configs (${{ matrix.branch }}) + name: Sync Lightspeed Core Configs (${{ matrix.branch }}) runs-on: ubuntu-latest strategy: @@ -31,6 +31,24 @@ jobs: ref: ${{ matrix.branch }} fetch-depth: 0 + - name: Resolve vendored config paths + id: paths + run: | + # Scheduled workflows run from the default branch YAML, then check out + # matrix.branch. Only release-1.10 still vendors Lightspeed under the + # backstage chart; main and later release branches use rhdh. + BRANCH="${{ matrix.branch }}" + if [[ "${BRANCH}" == "release-1.10" ]]; then + FILES_DIR="charts/backstage/files/lightspeed" + CHART_YAML="charts/backstage/Chart.yaml" + else + FILES_DIR="charts/rhdh/files/intelligent-assistant" + CHART_YAML="charts/rhdh/Chart.yaml" + fi + echo "files_dir=${FILES_DIR}" >> "$GITHUB_OUTPUT" + echo "chart_yaml=${CHART_YAML}" >> "$GITHUB_OUTPUT" + echo "Using ${FILES_DIR} and ${CHART_YAML} for ${BRANCH}" + - name: Set up Helm uses: azure/setup-helm@9bc31f4ebc9c6b171d7bfbaa5d006ae7abdb4310 # v5.0.1 with: @@ -59,13 +77,13 @@ jobs: git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - - name: Sync Lightspeed config files + - name: Sync Lightspeed Core config files run: ./hack/sync-lightspeed-configs.sh --ref ${{ matrix.branch }} - name: Check for changes id: changes run: | - if git diff --quiet charts/backstage/files/lightspeed/; then + if git diff --quiet "${{ steps.paths.outputs.files_dir }}"; then echo "No changes from upstream." echo "has_changes=false" >> "$GITHUB_OUTPUT" else @@ -78,7 +96,7 @@ jobs: id: get_version uses: mikefarah/yq@c14f446382944492701b16c1ddb48bb9dbe683e3 # v4.53.6 with: - cmd: yq '.version' charts/backstage/Chart.yaml + cmd: yq '.version' "${{ steps.paths.outputs.chart_yaml }}" - name: Compute next patch version if: steps.changes.outputs.has_changes == 'true' @@ -92,7 +110,7 @@ jobs: if: steps.changes.outputs.has_changes == 'true' uses: mikefarah/yq@c14f446382944492701b16c1ddb48bb9dbe683e3 # v4.53.6 with: - cmd: yq -i '.version = "${{ steps.semver.outputs.new_version }}"' charts/backstage/Chart.yaml + cmd: yq -i '.version = "${{ steps.semver.outputs.new_version }}"' "${{ steps.paths.outputs.chart_yaml }}" - name: Run pre-commit if: steps.changes.outputs.has_changes == 'true' @@ -105,8 +123,9 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} NEW_VERSION: ${{ steps.semver.outputs.new_version }} TARGET_BRANCH: ${{ matrix.branch }} + FILES_DIR: ${{ steps.paths.outputs.files_dir }} run: | - TITLE="chore(lightspeed): sync config files and bump chart to ${NEW_VERSION}" + TITLE="chore(intelligent-assistant): sync Lightspeed Core config files and bump chart to ${NEW_VERSION}" BRANCH="chore/sync-lightspeed-configs-${TARGET_BRANCH}" EXISTING_PR=$(gh pr list --head "${BRANCH}" --base "${TARGET_BRANCH}" --state open --json number --jq '.[0].number // empty') @@ -126,16 +145,15 @@ jobs: else git push origin "${BRANCH}" + SYNCED_FILES=$(git diff --name-only HEAD~1 -- "${FILES_DIR}" | sed 's/^/- `/;s/$/`/') + BODY=$(cat < [!CAUTION] > Please review the upstream changes carefully before merging. diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 2daa57c5..e7a91a8f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -78,7 +78,7 @@ jobs: - name: Generate full-plugins values for template sanity check if: matrix.chart == 'rhdh' run: | - yq e '{"dynamicPlugins": {"includes": .dynamicPlugins.includes}, "lightspeed": {"plugins": .lightspeed.plugins}, "orchestrator": {"plugins": .orchestrator.plugins}}' \ + yq e '{"dynamicPlugins": {"includes": .dynamicPlugins.includes}, "intelligentAssistant": {"plugins": .intelligentAssistant.plugins}, "orchestrator": {"plugins": .orchestrator.plugins}}' \ charts/rhdh/values.yaml > /tmp/rhdh-full-plugins-values.yaml - name: Test charts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 89180690..9eadce45 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,9 +11,9 @@ Before making a contribution to the charts in this repository, you will need to - JSON Schema template updated and re-generated the raw schema via the `pre-commit` hook. - [ ] If you updated the [orchestrator-infra](./charts/orchestrator-infra) chart, make sure the versions of the [Knative CRDs](./charts/orchestrator-infra/crds) are aligned with the versions of the CRDs installed by the OpenShift Serverless operators declared in the [values.yaml](./charts/orchestrator-infra/values.yaml) file. See [Installing Knative Eventing and Knative Serving CRDs](./charts/orchestrator-infra/README.md#installing-knative-eventing-and-knative-serving-crds) for more details. -## Sync Lightspeed vendored config files +## Sync Lightspeed Core vendored config files -The Lightspeed config files under [`charts/rhdh/files/lightspeed`](./charts/rhdh/files/lightspeed) are synced from the upstream [redhat-ai-dev/lightspeed-configs](https://github.com/redhat-ai-dev/lightspeed-configs) repository by [`hack/sync-lightspeed-configs.sh`](./hack/sync-lightspeed-configs.sh). +The Lightspeed Core config files under [`charts/rhdh/files/intelligent-assistant`](./charts/rhdh/files/intelligent-assistant) are synced from the upstream [redhat-ai-dev/lightspeed-configs](https://github.com/redhat-ai-dev/lightspeed-configs) repository by [`hack/sync-lightspeed-configs.sh`](./hack/sync-lightspeed-configs.sh). Use the default upstream branch: @@ -34,5 +34,5 @@ Verify the vendored files are already in sync without writing changes: ./hack/sync-lightspeed-configs.sh --ref main --check ``` -The script copies the upstream config files directly, except it appends the chart-managed `mcp_servers` block to `lightspeed-stack.yaml` and renders `secret.yaml` from upstream `env/default-values.env` by dropping comment lines plus `LIGHTSPEED_CORE_IMAGE` and `RAG_CONTENT_IMAGE`, then converting each remaining `KEY=value` line into the chart's YAML secret payload. -Choose the upstream branch or tag that matches the Lightspeed release you want to vendor. +The script copies the upstream `lightspeed-stack.yaml`, `config.yaml`, and `rhdh-profile.py` files into [`charts/rhdh/files/intelligent-assistant`](./charts/rhdh/files/intelligent-assistant). The RHDH chart does not vendor a Lightspeed Core `secret.yaml`; supply provider credentials with `intelligentAssistant.existingSecret`. +Choose the upstream branch or tag that matches the Lightspeed Core release you want to vendor. diff --git a/charts/rhdh/ci/default-values.yaml b/charts/rhdh/ci/default-values.yaml index fae0f887..30397465 100644 --- a/charts/rhdh/ci/default-values.yaml +++ b/charts/rhdh/ci/default-values.yaml @@ -2,7 +2,7 @@ # The chart features under test (deployment, config, probes, etc.) don't depend on actual plugins. dynamicPlugins: includes: [] -lightspeed: +intelligentAssistant: plugins: [] orchestrator: plugins: [] diff --git a/charts/rhdh/ci/with-custom-configuration-values.yaml b/charts/rhdh/ci/with-custom-configuration-values.yaml index 4af67995..1c31f5b4 100644 --- a/charts/rhdh/ci/with-custom-configuration-values.yaml +++ b/charts/rhdh/ci/with-custom-configuration-values.yaml @@ -5,7 +5,7 @@ dynamicPlugins: extraAppConfig: - configMapRef: "my-app-config" filename: "app-config-custom.yaml" -lightspeed: +intelligentAssistant: plugins: [] existingSecret: "test-lightspeed-secret" config: diff --git a/charts/rhdh/ci/with-external-db-values.yaml b/charts/rhdh/ci/with-external-db-values.yaml index 2aee9da4..f7a29bf7 100644 --- a/charts/rhdh/ci/with-external-db-values.yaml +++ b/charts/rhdh/ci/with-external-db-values.yaml @@ -11,7 +11,7 @@ externalDatabase: existingSecretRef: name: "ext-db-password" key: "password" -lightspeed: +intelligentAssistant: plugins: [] orchestrator: enabled: true diff --git a/charts/rhdh/ci/with-lightspeed-disabled-values.yaml b/charts/rhdh/ci/with-intelligent-assistant-disabled-values.yaml similarity index 92% rename from charts/rhdh/ci/with-lightspeed-disabled-values.yaml rename to charts/rhdh/ci/with-intelligent-assistant-disabled-values.yaml index 88c0228b..853e90d5 100644 --- a/charts/rhdh/ci/with-lightspeed-disabled-values.yaml +++ b/charts/rhdh/ci/with-intelligent-assistant-disabled-values.yaml @@ -2,7 +2,7 @@ # The chart features under test (deployment, config, probes, etc.) don't depend on actual plugins. dynamicPlugins: includes: [] -lightspeed: +intelligentAssistant: enabled: false plugins: [] orchestrator: diff --git a/charts/rhdh/files/lightspeed/config.yaml b/charts/rhdh/files/intelligent-assistant/config.yaml similarity index 99% rename from charts/rhdh/files/lightspeed/config.yaml rename to charts/rhdh/files/intelligent-assistant/config.yaml index d7bc261b..31cecc76 100644 --- a/charts/rhdh/files/lightspeed/config.yaml +++ b/charts/rhdh/files/intelligent-assistant/config.yaml @@ -17,7 +17,7 @@ # This file is kept separate from values.yaml intentionally. It is large, # deeply nested, and contains a multi-paragraph safety prompt — inlining it # into values.yaml would hurt readability. It is deployed as a ConfigMap -# unless overridden via lightspeed.config.server.existingConfigMap. +# unless overridden via intelligentAssistant.config.server.existingConfigMap. version: 3 distro_name: developer-lightspeed-lls-0.5.x apis: diff --git a/charts/rhdh/files/lightspeed/lightspeed-stack.yaml b/charts/rhdh/files/intelligent-assistant/lightspeed-stack.yaml similarity index 96% rename from charts/rhdh/files/lightspeed/lightspeed-stack.yaml rename to charts/rhdh/files/intelligent-assistant/lightspeed-stack.yaml index 3cecb277..7a0d86aa 100644 --- a/charts/rhdh/files/lightspeed/lightspeed-stack.yaml +++ b/charts/rhdh/files/intelligent-assistant/lightspeed-stack.yaml @@ -17,7 +17,7 @@ # This file is kept separate from values.yaml intentionally. It references # hardcoded mount paths (/app-root/*, /tmp/*) that are coupled to the # deployment template. It is deployed as a ConfigMap unless overridden via -# lightspeed.config.stack.existingConfigMap. +# intelligentAssistant.config.stack.existingConfigMap. name: lightspeed-core-stack service: host: ${env.SERVICE_HOST:=127.0.0.1} diff --git a/charts/rhdh/files/lightspeed/rhdh-profile.py b/charts/rhdh/files/intelligent-assistant/rhdh-profile.py similarity index 100% rename from charts/rhdh/files/lightspeed/rhdh-profile.py rename to charts/rhdh/files/intelligent-assistant/rhdh-profile.py diff --git a/charts/rhdh/files/lightspeed/secret.example.yaml b/charts/rhdh/files/intelligent-assistant/secret.example.yaml similarity index 81% rename from charts/rhdh/files/lightspeed/secret.example.yaml rename to charts/rhdh/files/intelligent-assistant/secret.example.yaml index 1c50287e..83187bc7 100644 --- a/charts/rhdh/files/lightspeed/secret.example.yaml +++ b/charts/rhdh/files/intelligent-assistant/secret.example.yaml @@ -1,7 +1,7 @@ # This file is a reference template — it is NOT deployed by the chart. # # Use it as a starting point to create your own Kubernetes Secret for the -# Lightspeed inference providers. Only include the keys for the providers +# Intelligent Assistant inference providers. Only include the keys for the providers # you intend to use. # # Example: @@ -9,8 +9,8 @@ # --from-env-file=<(grep -v '^#' secret.example.yaml | grep -v '^$') # # Then set in your values override: -# lightspeed: -# existingSecretRef: "my-lightspeed-secret" +# intelligentAssistant: +# existingSecret: "my-lightspeed-secret" ENABLE_VLLM: "" ENABLE_VERTEX_AI: "" diff --git a/charts/rhdh/templates/_helpers.tpl b/charts/rhdh/templates/_helpers.tpl index 9323caf8..2faf8fae 100644 --- a/charts/rhdh/templates/_helpers.tpl +++ b/charts/rhdh/templates/_helpers.tpl @@ -180,55 +180,64 @@ When enabled, appends -primary when postgresql.architecture is "replication". {{- end -}} {{/* -Return resolved Lightspeed values from .Values.lightspeed with validation. +Return resolved Intelligent Assistant values from .Values.intelligentAssistant with validation. */}} -{{- define "rhdh.lightspeed" -}} -{{- $lightspeed := deepCopy .Values.lightspeed -}} -{{- if $lightspeed.enabled -}} - {{- $volType := default "emptyDir" $lightspeed.runtimeVolume.type -}} +{{- define "rhdh.intelligentAssistant" -}} +{{- $intelligentAssistant := deepCopy .Values.intelligentAssistant -}} +{{- if $intelligentAssistant.enabled -}} + {{- $volType := default "emptyDir" $intelligentAssistant.runtimeVolume.type -}} {{- if and (ne $volType "emptyDir") (ne $volType "persistentVolumeClaim") -}} - {{- fail "lightspeed.runtimeVolume.type must be emptyDir or persistentVolumeClaim" -}} + {{- fail "intelligentAssistant.runtimeVolume.type must be emptyDir or persistentVolumeClaim" -}} {{- end -}} {{- if eq $volType "persistentVolumeClaim" -}} - {{- if or (not (kindIs "map" $lightspeed.runtimeVolume.persistentVolumeClaim)) (empty $lightspeed.runtimeVolume.persistentVolumeClaim.claimName) -}} - {{- fail "lightspeed.runtimeVolume.persistentVolumeClaim.claimName is required when type=persistentVolumeClaim" -}} + {{- if or (not (kindIs "map" $intelligentAssistant.runtimeVolume.persistentVolumeClaim)) (empty $intelligentAssistant.runtimeVolume.persistentVolumeClaim.claimName) -}} + {{- fail "intelligentAssistant.runtimeVolume.persistentVolumeClaim.claimName is required when type=persistentVolumeClaim" -}} {{- end -}} {{- end -}} {{- end -}} -{{- toYaml $lightspeed -}} +{{- toYaml $intelligentAssistant -}} {{- end -}} {{/* -Return the bundled filename for a Lightspeed config key. +Return the bundled filename for an Intelligent Assistant config key. */}} -{{- define "rhdh.lightspeed.configFile" -}} +{{- define "rhdh.intelligentAssistant.configFile" -}} {{- $map := dict "stack" "lightspeed-stack.yaml" "server" "config.yaml" "profile" "rhdh-profile.py" -}} -{{- get $map . | required (printf "unknown lightspeed config key: %s" .) -}} +{{- get $map . | required (printf "unknown intelligentAssistant config key: %s" .) -}} {{- end -}} {{/* -Return the Lightspeed ConfigMap name for a given key. +Return the Intelligent Assistant ConfigMap name for a given key. If existingConfigMap.name is set, use it; otherwise generate from release name. Expects: dict "root" $ "key" "entry" + +Kubernetes names are limited to 63 characters. Using the infix "-ia-" (Intelligent +Assistant) instead of "-intelligent-assistant-" leaves more of the fullname intact. +Still truncate the fullname prefix (not the whole string) so "-ia-stack", +"-ia-server", and "-ia-profile" are never chopped off the right side — Helm's +`trunc 63` would otherwise make those three names collide when fullname is long. */}} -{{- define "rhdh.lightspeed.configMapName" -}} +{{- define "rhdh.intelligentAssistant.configMapName" -}} {{- if .entry.existingConfigMap.name -}} {{- .entry.existingConfigMap.name -}} {{- else -}} - {{- printf "%s-lightspeed-%s" (include "rhdh.fullname" .root) .key | trunc 63 | trimSuffix "-" -}} + {{- $suffix := printf "-ia-%s" .key -}} + {{- $maxPrefix := int (sub 63 (len $suffix)) -}} + {{- $prefix := include "rhdh.fullname" .root | trunc $maxPrefix | trimSuffix "-" -}} + {{- printf "%s%s" $prefix $suffix -}} {{- end -}} {{- end -}} {{/* -Return the key to use for a Lightspeed ConfigMap volume mount. +Return the key to use for an Intelligent Assistant ConfigMap volume mount. If existingConfigMap.key is set, use it; otherwise use the bundled filename. Expects: dict "key" "entry" */}} -{{- define "rhdh.lightspeed.configMapKey" -}} +{{- define "rhdh.intelligentAssistant.configMapKey" -}} {{- if .entry.existingConfigMap.key -}} {{- .entry.existingConfigMap.key -}} {{- else -}} - {{- include "rhdh.lightspeed.configFile" .key -}} + {{- include "rhdh.intelligentAssistant.configFile" .key -}} {{- end -}} {{- end -}} diff --git a/charts/rhdh/templates/deployment.yaml b/charts/rhdh/templates/deployment.yaml index 3ee43c56..ce43a363 100644 --- a/charts/rhdh/templates/deployment.yaml +++ b/charts/rhdh/templates/deployment.yaml @@ -1,5 +1,5 @@ {{- $installDir := "/opt/app-root/src" -}} -{{- $lightspeed := include "rhdh.lightspeed" . | fromYaml -}} +{{- $intelligentAssistant := include "rhdh.intelligentAssistant" . | fromYaml -}} {{- $extraCatalogImages := include "rhdh.catalogIndex.extraImagesEnvValue" . | trim -}} apiVersion: apps/v1 kind: Deployment @@ -37,9 +37,9 @@ spec: {{- end }} annotations: checksum/app-config: {{ include "common.tplvalues.render" (dict "value" .Values.appConfig "context" $) | sha256sum }} - checksum/dynamic-plugins: {{ include "common.tplvalues.render" (dict "value" (dict "dynamicPlugins" .Values.dynamicPlugins "lightspeed" (dict "enabled" $lightspeed.enabled "plugins" $lightspeed.plugins)) "context" $) | sha256sum }} - {{- if $lightspeed.enabled }} - checksum/lightspeed-config: {{ toJson $lightspeed.config | sha256sum }} + checksum/dynamic-plugins: {{ include "common.tplvalues.render" (dict "value" (dict "dynamicPlugins" .Values.dynamicPlugins "intelligentAssistant" (dict "enabled" $intelligentAssistant.enabled "plugins" $intelligentAssistant.plugins)) "context" $) | sha256sum }} + {{- if $intelligentAssistant.enabled }} + checksum/lightspeed-config: {{ toJson $intelligentAssistant.config | sha256sum }} {{- end }} {{- with .Values.podAnnotations }} {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 8 }} @@ -129,23 +129,23 @@ spec: configMap: name: {{ .configMapRef }} {{- end }} - {{- if $lightspeed.enabled }} + {{- if $intelligentAssistant.enabled }} - name: lightspeed-data - {{- if eq $lightspeed.runtimeVolume.type "persistentVolumeClaim" }} + {{- if eq $intelligentAssistant.runtimeVolume.type "persistentVolumeClaim" }} persistentVolumeClaim: - {{- include "common.tplvalues.render" (dict "value" $lightspeed.runtimeVolume.persistentVolumeClaim "context" $) | nindent 12 }} + {{- include "common.tplvalues.render" (dict "value" $intelligentAssistant.runtimeVolume.persistentVolumeClaim "context" $) | nindent 12 }} {{- else }} emptyDir: - {{- include "common.tplvalues.render" (dict "value" $lightspeed.runtimeVolume.emptyDir "context" $) | nindent 12 }} + {{- include "common.tplvalues.render" (dict "value" $intelligentAssistant.runtimeVolume.emptyDir "context" $) | nindent 12 }} {{- end }} - name: lightspeed-rag emptyDir: {} {{- range $key := list "stack" "server" "profile" }} - {{- $entry := index $lightspeed.config $key }} - {{- $cmKey := include "rhdh.lightspeed.configMapKey" (dict "key" $key "entry" $entry) }} + {{- $entry := index $intelligentAssistant.config $key }} + {{- $cmKey := include "rhdh.intelligentAssistant.configMapKey" (dict "key" $key "entry" $entry) }} - name: {{ printf "lightspeed-config-%s" $key }} configMap: - name: {{ include "rhdh.lightspeed.configMapName" (dict "root" $ "key" $key "entry" $entry) }} + name: {{ include "rhdh.intelligentAssistant.configMapName" (dict "root" $ "key" $key "entry" $entry) }} items: - key: {{ $cmKey | quote }} path: {{ $cmKey | quote }} @@ -229,42 +229,42 @@ spec: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} workingDir: /opt/app-root/src - {{- if $lightspeed.enabled }} + {{- if $intelligentAssistant.enabled }} - name: lightspeed-rag-init - image: {{ include "rhdh.image.render" (dict "image" $lightspeed.ragInit.image "global" .Values.global) | quote }} - imagePullPolicy: {{ $lightspeed.ragInit.imagePullPolicy | quote }} - {{- with $lightspeed.ragInit.securityContext }} + image: {{ include "rhdh.image.render" (dict "image" $intelligentAssistant.ragInit.image "global" .Values.global) | quote }} + imagePullPolicy: {{ $intelligentAssistant.ragInit.imagePullPolicy | quote }} + {{- with $intelligentAssistant.ragInit.securityContext }} securityContext: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} - {{- if $lightspeed.ragInit.commandOverride }} + {{- if $intelligentAssistant.ragInit.commandOverride }} command: - {{- include "common.tplvalues.render" (dict "value" $lightspeed.ragInit.commandOverride "context" $) | nindent 12 }} + {{- include "common.tplvalues.render" (dict "value" $intelligentAssistant.ragInit.commandOverride "context" $) | nindent 12 }} {{- else }} command: ["sh", "-c"] {{- end }} - {{- if $lightspeed.ragInit.argsOverride }} + {{- if $intelligentAssistant.ragInit.argsOverride }} args: - {{- include "common.tplvalues.render" (dict "value" $lightspeed.ragInit.argsOverride "context" $) | nindent 12 }} + {{- include "common.tplvalues.render" (dict "value" $intelligentAssistant.ragInit.argsOverride "context" $) | nindent 12 }} {{- else }} args: - >- mkdir -p /tmp/data && - echo 'Copying Lightspeed RAG data...' && + echo 'Copying Intelligent Assistant RAG data...' && cp -r --no-preserve=mode,ownership /rag/vector_db /rag-content/ && cp -r --no-preserve=mode,ownership /rag/embeddings_model /rag-content/ && mkdir -p /rag-content/vector_db/notebooks && chmod -R a+rwX /rag-content/embeddings_model /rag-content/vector_db && echo 'Copy complete.' - {{- range $lightspeed.ragInit.extraArgs }} + {{- range $intelligentAssistant.ragInit.extraArgs }} - {{ . | quote }} {{- end }} {{- end }} - {{- with $lightspeed.ragInit.extraEnv }} + {{- with $intelligentAssistant.ragInit.extraEnv }} env: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} - {{- with $lightspeed.ragInit.resources }} + {{- with $intelligentAssistant.ragInit.resources }} resources: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} @@ -273,7 +273,7 @@ spec: mountPath: "/tmp" - name: lightspeed-rag mountPath: "/rag-content" - {{- with $lightspeed.ragInit.extraVolumeMounts }} + {{- with $intelligentAssistant.ragInit.extraVolumeMounts }} {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} {{- end }} @@ -437,24 +437,24 @@ spec: {{- with .Values.extraVolumeMounts }} {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} - {{- if $lightspeed.enabled }} + {{- if $intelligentAssistant.enabled }} - name: lightspeed-core - image: {{ include "rhdh.image.render" (dict "image" $lightspeed.core.image "global" .Values.global) | quote }} - imagePullPolicy: {{ $lightspeed.core.imagePullPolicy | quote }} - {{- with $lightspeed.core.securityContext }} + image: {{ include "rhdh.image.render" (dict "image" $intelligentAssistant.core.image "global" .Values.global) | quote }} + imagePullPolicy: {{ $intelligentAssistant.core.imagePullPolicy | quote }} + {{- with $intelligentAssistant.core.securityContext }} securityContext: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} - {{- with $lightspeed.core.commandOverride }} + {{- with $intelligentAssistant.core.commandOverride }} command: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} - {{- if $lightspeed.core.argsOverride }} + {{- if $intelligentAssistant.core.argsOverride }} args: - {{- include "common.tplvalues.render" (dict "value" $lightspeed.core.argsOverride "context" $) | nindent 12 }} - {{- else if $lightspeed.core.extraArgs }} + {{- include "common.tplvalues.render" (dict "value" $intelligentAssistant.core.argsOverride "context" $) | nindent 12 }} + {{- else if $intelligentAssistant.core.extraArgs }} args: - {{- range $lightspeed.core.extraArgs }} + {{- range $intelligentAssistant.core.extraArgs }} - {{ . | quote }} {{- end }} {{- end }} @@ -462,16 +462,16 @@ spec: - name: http-lightspeed containerPort: 8080 protocol: TCP - {{- if $lightspeed.existingSecret }} + {{- if $intelligentAssistant.existingSecret }} envFrom: - secretRef: - name: {{ $lightspeed.existingSecret }} + name: {{ $intelligentAssistant.existingSecret }} {{- end }} - {{- with $lightspeed.core.extraEnv }} + {{- with $intelligentAssistant.core.extraEnv }} env: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} - {{- with $lightspeed.core.resources }} + {{- with $intelligentAssistant.core.resources }} resources: {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} @@ -481,15 +481,15 @@ spec: - name: lightspeed-rag mountPath: "/rag-content" {{- range $key := list "stack" "server" "profile" }} - {{- $entry := index $lightspeed.config $key }} - {{- $file := include "rhdh.lightspeed.configFile" $key }} - {{- $cmKey := include "rhdh.lightspeed.configMapKey" (dict "key" $key "entry" $entry) }} + {{- $entry := index $intelligentAssistant.config $key }} + {{- $file := include "rhdh.intelligentAssistant.configFile" $key }} + {{- $cmKey := include "rhdh.intelligentAssistant.configMapKey" (dict "key" $key "entry" $entry) }} - name: {{ printf "lightspeed-config-%s" $key }} mountPath: {{ printf "/app-root/%s" $file | quote }} subPath: {{ $cmKey | quote }} readOnly: true {{- end }} - {{- with $lightspeed.core.extraVolumeMounts }} + {{- with $intelligentAssistant.core.extraVolumeMounts }} {{- include "common.tplvalues.render" (dict "value" . "context" $) | nindent 12 }} {{- end }} {{- end }} diff --git a/charts/rhdh/templates/dynamic-plugins-configmap.yaml b/charts/rhdh/templates/dynamic-plugins-configmap.yaml index 33cc48ce..d6f2dce8 100644 --- a/charts/rhdh/templates/dynamic-plugins-configmap.yaml +++ b/charts/rhdh/templates/dynamic-plugins-configmap.yaml @@ -10,7 +10,7 @@ metadata: {{- end }} data: dynamic-plugins.yaml: | - {{- $lightspeed := include "rhdh.lightspeed" . | fromYaml }} + {{- $intelligentAssistant := include "rhdh.intelligentAssistant" . | fromYaml }} {{- $dynamic := dict "includes" .Values.dynamicPlugins.includes }} {{- $plugins := list }} @@ -24,8 +24,8 @@ data: {{- end }} {{- end }} - {{- if $lightspeed.enabled }} - {{- range $lightspeed.plugins }} + {{- if $intelligentAssistant.enabled }} + {{- range $intelligentAssistant.plugins }} {{- $plugins = append $plugins . }} {{- end }} {{- end }} diff --git a/charts/rhdh/templates/lightspeed/lightspeed-configmaps.yaml b/charts/rhdh/templates/intelligent-assistant/intelligent-assistant-configmaps.yaml similarity index 52% rename from charts/rhdh/templates/lightspeed/lightspeed-configmaps.yaml rename to charts/rhdh/templates/intelligent-assistant/intelligent-assistant-configmaps.yaml index a08e53cb..217efda0 100644 --- a/charts/rhdh/templates/lightspeed/lightspeed-configmaps.yaml +++ b/charts/rhdh/templates/intelligent-assistant/intelligent-assistant-configmaps.yaml @@ -1,18 +1,18 @@ -{{- $lightspeed := include "rhdh.lightspeed" . | fromYaml -}} -{{- if $lightspeed.enabled }} +{{- $intelligentAssistant := include "rhdh.intelligentAssistant" . | fromYaml -}} +{{- if $intelligentAssistant.enabled }} {{- $first := true }} {{- range $key := list "stack" "server" "profile" }} -{{- $entry := index $lightspeed.config $key }} +{{- $entry := index $intelligentAssistant.config $key }} {{- if not $entry.existingConfigMap.name }} {{- if not $first }} --- {{- end }} {{- $first = false }} -{{- $file := include "rhdh.lightspeed.configFile" $key }} +{{- $file := include "rhdh.intelligentAssistant.configFile" $key }} apiVersion: v1 kind: ConfigMap metadata: - name: {{ include "rhdh.lightspeed.configMapName" (dict "root" $ "key" $key "entry" $entry) }} + name: {{ include "rhdh.intelligentAssistant.configMapName" (dict "root" $ "key" $key "entry" $entry) }} labels: {{- include "rhdh.labels" $ | nindent 4 }} {{- with $.Values.commonAnnotations }} @@ -21,7 +21,7 @@ metadata: {{- end }} data: {{ $file }}: | -{{ $.Files.Get (printf "files/lightspeed/%s" $file) | nindent 4 }} +{{ $.Files.Get (printf "files/intelligent-assistant/%s" $file) | nindent 4 }} {{- end }} {{- end }} {{- end }} diff --git a/charts/rhdh/values.schema.json b/charts/rhdh/values.schema.json index 5b117670..82d38fc8 100644 --- a/charts/rhdh/values.schema.json +++ b/charts/rhdh/values.schema.json @@ -246,7 +246,7 @@ "type": "RuntimeDefault" } }, - "title": "Security context for the main RHDH container (not the Lightspeed sidecar or init containers).", + "title": "Security context for the main RHDH container (not the Lightspeed Core sidecar or init containers).", "type": "object" }, "deploymentAnnotations": { @@ -513,7 +513,7 @@ }, "extraContainers": { "default": [], - "title": "Additional sidecar containers. These are ADDED to system containers (e.g. Lightspeed sidecar), never replacing them.", + "title": "Additional sidecar containers. These are ADDED to system containers (e.g. Lightspeed Core sidecar), never replacing them.", "type": "array" }, "extraEnv": { @@ -528,7 +528,7 @@ }, "extraInitContainers": { "default": [], - "title": "Additional init containers. These are ADDED after system init containers (install-dynamic-plugins, Lightspeed RAG init), never replacing them.", + "title": "Additional init containers. These are ADDED after system init containers (install-dynamic-plugins, Intelligent Assistant RAG init), never replacing them.", "type": "array" }, "extraVolumeMounts": { @@ -714,7 +714,7 @@ "title": "Kubernetes Ingress configuration.", "type": "object" }, - "lightspeed": { + "intelligentAssistant": { "additionalProperties": false, "default": { "config": { @@ -779,11 +779,11 @@ "plugins": [ { "enabled": true, - "package": "oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed:{{ \"{{inherit}}\" }}" + "package": "ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant" }, { "enabled": true, - "package": "oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed-backend:{{ \"{{inherit}}\" }}" + "package": "ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend" } ], "ragInit": { @@ -1198,7 +1198,7 @@ }, "enabled": { "default": true, - "title": "Enable or disable the built-in Lightspeed feature.", + "title": "Enable or disable the built-in Intelligent Assistant feature.", "type": "boolean" }, "existingSecret": { @@ -1210,11 +1210,11 @@ "default": [ { "enabled": true, - "package": "oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed:{{ \"{{inherit}}\" }}" + "package": "ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant" }, { "enabled": true, - "package": "oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed-backend:{{ \"{{inherit}}\" }}" + "package": "ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend" } ], "items": { @@ -1242,7 +1242,7 @@ ], "type": "object" }, - "title": "Lightspeed plugins and their configuration. Override package references for disconnected environments.", + "title": "Intelligent Assistant plugins and their configuration. Override package references for disconnected environments.", "type": "array" }, "ragInit": { @@ -1587,7 +1587,7 @@ "type": "object" } }, - "title": "Built-in Lightspeed AI feature configuration.", + "title": "Built-in Intelligent Assistant feature configuration.", "type": "object" }, "livenessProbe": { diff --git a/charts/rhdh/values.schema.tmpl.json b/charts/rhdh/values.schema.tmpl.json index 3e1d6393..7b1445f6 100644 --- a/charts/rhdh/values.schema.tmpl.json +++ b/charts/rhdh/values.schema.tmpl.json @@ -143,7 +143,7 @@ "default": {} }, "containerSecurityContext": { - "title": "Security context for the main RHDH container (not the Lightspeed sidecar or init containers).", + "title": "Security context for the main RHDH container (not the Lightspeed Core sidecar or init containers).", "type": "object", "default": {} }, @@ -487,7 +487,7 @@ "default": [] }, "extraContainers": { - "title": "Additional sidecar containers. These are ADDED to system containers (e.g. Lightspeed sidecar), never replacing them.", + "title": "Additional sidecar containers. These are ADDED to system containers (e.g. Lightspeed Core sidecar), never replacing them.", "type": "array", "default": [] }, @@ -497,7 +497,7 @@ "default": [] }, "extraInitContainers": { - "title": "Additional init containers. These are ADDED after system init containers (install-dynamic-plugins, Lightspeed RAG init), never replacing them.", + "title": "Additional init containers. These are ADDED after system init containers (install-dynamic-plugins, Intelligent Assistant RAG init), never replacing them.", "type": "array", "default": [] }, @@ -786,21 +786,21 @@ } } }, - "lightspeed": { - "title": "Built-in Lightspeed AI feature configuration.", + "intelligentAssistant": { + "title": "Built-in Intelligent Assistant feature configuration.", "type": "object", "default": {}, "additionalProperties": false, "properties": { "enabled": { - "title": "Enable or disable the built-in Lightspeed feature.", + "title": "Enable or disable the built-in Intelligent Assistant feature.", "type": "boolean", "default": true }, "plugins": { - "title": "Lightspeed plugins and their configuration. Override package references for disconnected environments.", + "title": "Intelligent Assistant plugins and their configuration. Override package references for disconnected environments.", "type": "array", - "default": [{"package": "oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed:{{inherit}}", "enabled": true}, {"package": "oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed-backend:{{inherit}}", "enabled": true}], + "default": [{"package": "ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant", "enabled": true}, {"package": "ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend", "enabled": true}], "items": { "type": "object", "properties": { diff --git a/charts/rhdh/values.yaml b/charts/rhdh/values.yaml index 4fcf98b7..a62983eb 100644 --- a/charts/rhdh/values.yaml +++ b/charts/rhdh/values.yaml @@ -222,7 +222,7 @@ podLabels: {} # -- Pod-level security context. podSecurityContext: {} -# -- Security context for the main RHDH container (not the Lightspeed sidecar or init containers). +# -- Security context for the main RHDH container (not the Lightspeed Core sidecar or init containers). containerSecurityContext: readOnlyRootFilesystem: true allowPrivilegeEscalation: false @@ -286,7 +286,7 @@ extraVolumes: [] extraVolumeMounts: [] # -- Additional sidecar containers. These are ADDED to system containers -# (e.g. Lightspeed sidecar), never replacing them. +# (e.g. Lightspeed Core sidecar), never replacing them. extraContainers: [] # -- Init containers to run BEFORE the system init containers @@ -294,7 +294,7 @@ extraContainers: [] preInitContainers: [] # -- Additional init containers. These are ADDED after system init containers -# (install-dynamic-plugins, Lightspeed RAG init), never replacing them. +# (install-dynamic-plugins, Intelligent Assistant RAG init), never replacing them. extraInitContainers: [] # -- Node labels for pod assignment. @@ -479,14 +479,14 @@ metrics: # ── Built-in features ────────────────────────────────────── -# -- Built-in Lightspeed AI feature configuration. -lightspeed: +# -- Built-in Intelligent Assistant feature configuration. +intelligentAssistant: enabled: true - # -- Lightspeed dynamic plugin packages. + # -- Intelligent Assistant dynamic plugin packages. plugins: - - package: 'oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed:{{ "{{inherit}}" }}' + - package: 'ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant' enabled: true - - package: 'oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed-backend:{{ "{{inherit}}" }}' + - package: 'ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend' enabled: true # -- Configuration files mounted into the sidecar. # By default, the chart creates ConfigMaps from bundled source files. @@ -528,7 +528,7 @@ lightspeed: # ENABLE_OLLAMA, OLLAMA_URL, # ENABLE_VALIDATION, VALIDATION_PROVIDER, VALIDATION_MODEL_NAME, # LLAMA_STACK_LOGGING - # See files/lightspeed/secret.example.yaml for a reference template. + # See files/intelligent-assistant/secret.example.yaml for a reference template. existingSecret: "" # -- Writable scratch volume for the sidecar (/tmp). runtimeVolume: diff --git a/hack/sync-lightspeed-configs.sh b/hack/sync-lightspeed-configs.sh index 7eebed50..948549b7 100755 --- a/hack/sync-lightspeed-configs.sh +++ b/hack/sync-lightspeed-configs.sh @@ -7,14 +7,13 @@ DEFAULT_REF="main" SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)" -LIGHTSPEED_DIR="${REPO_ROOT}/charts/backstage/files/lightspeed" +LIGHTSPEED_DIR="${REPO_ROOT}/charts/rhdh/files/intelligent-assistant" # Format: upstream_path|destination_path|transform_function TARGETS=( "lightspeed-core-configs/lightspeed-stack.yaml|${LIGHTSPEED_DIR}/lightspeed-stack.yaml|copy_fetched_file" "llama-stack-configs/config.yaml|${LIGHTSPEED_DIR}/config.yaml|copy_fetched_file" "lightspeed-core-configs/rhdh-profile.py|${LIGHTSPEED_DIR}/rhdh-profile.py|copy_fetched_file" - "env/default-values.env|${LIGHTSPEED_DIR}/secret.yaml|render_secret_yaml_from_env" ) copy_fetched_file() { @@ -23,40 +22,12 @@ copy_fetched_file() { cp "${source_file}" "${destination_file}" } -render_secret_yaml_from_env() { - local source_file=$1 - local destination_file=$2 - - awk ' - /^[[:space:]]*$/ { next } - # Skip comments from the upstream .env file. - /^[[:space:]]*#/ { next } - { - separator = index($0, "=") - if (separator == 0) { - printf "error: unsupported env line: %s\n", $0 > "/dev/stderr" - exit 1 - } - - key = substr($0, 1, separator - 1) - # These image settings are intentionally not part of the chart-managed secret payload. - if (key == "LIGHTSPEED_CORE_IMAGE" || key == "RAG_CONTENT_IMAGE") { - next - } - - value = substr($0, separator + 1) - gsub(/\\/, "\\\\", value) - gsub(/"/, "\\\"", value) - printf "%s: \"%s\"\n", key, value - } - ' "${source_file}" > "${destination_file}" -} usage() { cat <&2 + echo "Lightspeed Core config sync is required for ${changed_count} file(s)" >&2 exit 1 fi - echo "lightspeed config files are already synced" + echo "Lightspeed Core config files are already synced" else echo "sync complete from ${repo}@${ref}" fi From a3881085c7d482e17a2e415f9a63ea76207630c7 Mon Sep 17 00:00:00 2001 From: Jordan Dubrick Date: Tue, 1 Sep 2026 11:02:00 -0400 Subject: [PATCH 2/2] chart version update Signed-off-by: Jordan Dubrick --- charts/rhdh/Chart.yaml | 2 +- charts/rhdh/README.md | 80 ++++++++++++++++++------------------ charts/rhdh/README.md.gotmpl | 18 ++++---- 3 files changed, 52 insertions(+), 48 deletions(-) diff --git a/charts/rhdh/Chart.yaml b/charts/rhdh/Chart.yaml index 78b9bcb2..29620c62 100644 --- a/charts/rhdh/Chart.yaml +++ b/charts/rhdh/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: redhat-developer-hub type: application -version: 1.0.2 +version: 2.0.0 appVersion: 2.1.0 annotations: artifacthub.io/category: integration-delivery diff --git a/charts/rhdh/README.md b/charts/rhdh/README.md index 32154235..d359da0d 100644 --- a/charts/rhdh/README.md +++ b/charts/rhdh/README.md @@ -1,7 +1,7 @@ # RHDH Helm Chart for OpenShift and Kubernetes -![Version: 1.0.2](https://img.shields.io/badge/Version-1.0.2-informational?style=flat-square) +![Version: 2.0.0](https://img.shields.io/badge/Version-2.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) A Helm chart for deploying Red Hat Developer Hub, which is a Red Hat supported version of Backstage. @@ -36,7 +36,7 @@ For the **Generally Available** version of this chart, see: helm repo add bitnami https://charts.bitnami.com/bitnami helm repo add redhat-developer https://redhat-developer.github.io/rhdh-chart -helm install my-rhdh redhat-developer/redhat-developer-hub --version 1.0.2 +helm install my-rhdh redhat-developer/redhat-developer-hub --version 2.0.0 ``` ## Introduction @@ -191,7 +191,7 @@ Kubernetes: `>= 1.31.0-0` | commandOverride | Override the container command. | list | `[]` | | commonAnnotations | Annotations applied to ALL chart resources. | object | `{}` | | commonLabels | Labels applied to ALL chart resources. | object | `{}` | -| containerSecurityContext | Security context for the main RHDH container (not the Lightspeed sidecar or init containers). | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}` | +| containerSecurityContext | Security context for the main RHDH container (not the Lightspeed Core sidecar or init containers). | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}` | | deploymentAnnotations | Annotations for the Deployment resource (not the pod). | object | `{}` | | dynamicPlugins | Dynamic plugin system configuration. | object | `{"includes":["dynamic-plugins.default.yaml"],"initContainer":{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"resources":{"limits":{"cpu":"1000m","ephemeral-storage":"5Gi","memory":"2.5Gi"},"requests":{"cpu":"250m","memory":"256Mi"}},"securityContext":{}},"maxEntrySize":40000000,"plugins":[],"volume":{"emptyDir":{},"ephemeral":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"5Gi"}},"storageClassName":""},"pvc":{"claimName":""},"type":"ephemeral"}}` | | dynamicPlugins.includes | Array of YAML files listing dynamic plugins to include. Relative paths are resolved from the working directory of the initContainer (`/opt/app-root/src`). | list | `["dynamic-plugins.default.yaml"]` | @@ -224,10 +224,10 @@ Kubernetes: `>= 1.31.0-0` | externalDatabase.user | External database user. | string | `"postgres"` | | extraAppConfig | Additional app-config files from existing ConfigMaps. | list | `[]` | | extraArgs | Extra arguments appended after the system config flags. | list | `[]` | -| extraContainers | Additional sidecar containers. These are ADDED to system containers (e.g. Lightspeed sidecar), never replacing them. | list | `[]` | +| extraContainers | Additional sidecar containers. These are ADDED to system containers (e.g. Lightspeed Core sidecar), never replacing them. | list | `[]` | | extraEnv | Extra environment variables appended after the system env vars. | list | `[]` | | extraEnvFrom | Extra envFrom entries appended to the container. Accepts raw Kubernetes envFrom entries (configMapRef, secretRef, prefix). | list | `[]` | -| extraInitContainers | Additional init containers. These are ADDED after system init containers (install-dynamic-plugins, Lightspeed RAG init), never replacing them. | list | `[]` | +| extraInitContainers | Additional init containers. These are ADDED after system init containers (install-dynamic-plugins, Intelligent Assistant RAG init), never replacing them. | list | `[]` | | extraVolumeMounts | Additional volume mounts to add to the main container. These are ADDED to system-required mounts, never replacing them. | list | `[]` | | extraVolumes | Additional volumes to add to the pod. These are ADDED to system-required volumes (dynamic-plugins-root, temp, npmcacache, etc.), never replacing them. | list | `[]` | | fullnameOverride | Override the full resource name. | string | `""` | @@ -243,32 +243,32 @@ Kubernetes: `>= 1.31.0-0` | image.digest | Overrides the image tag with an image digest. | string | `""` | | imagePullSecrets | Secrets for pulling images from private registries (merged with global.imagePullSecrets). | list | `[]` | | ingress | Kubernetes Ingress configuration. | object | `{"annotations":{},"className":"","enabled":false,"hosts":[{"host":"{{ .Values.host }}","paths":[{"path":"/","pathType":"ImplementationSpecific"}]}],"tls":[]}` | -| lightspeed | Built-in Lightspeed AI feature configuration. | object | `{"config":{"profile":{"existingConfigMap":{"key":"","name":""}},"server":{"existingConfigMap":{"key":"","name":""}},"stack":{"existingConfigMap":{"key":"","name":""}}},"core":{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"lightspeed-core/lightspeed-stack","tag":"0.6.2"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"1000m","memory":"2Gi"},"requests":{"cpu":"100m","memory":"512Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}},"enabled":true,"existingSecret":"","plugins":[{"enabled":true,"package":"oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed:{{ \"{{inherit}}\" }}"},{"enabled":true,"package":"oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed-backend:{{ \"{{inherit}}\" }}"}],"ragInit":{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"redhat-ai-dev/rag-content","tag":"release-1.10-lls-0.5.0-8c231a3b5177f12fff9db042dfa4091d8f2f26b3"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"100m","memory":"500Mi"},"requests":{"cpu":"50m","memory":"150Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}},"runtimeVolume":{"emptyDir":{},"persistentVolumeClaim":{},"type":"emptyDir"}}` | -| lightspeed.config | Configuration files mounted into the sidecar. By default, the chart creates ConfigMaps from bundled source files. Set existingConfigMap to use a pre-existing ConfigMap instead. | object | `{"profile":{"existingConfigMap":{"key":"","name":""}},"server":{"existingConfigMap":{"key":"","name":""}},"stack":{"existingConfigMap":{"key":"","name":""}}}` | -| lightspeed.config.profile | Python profile with prompt templates (rhdh-profile.py). | object | `{"existingConfigMap":{"key":"","name":""}}` | -| lightspeed.config.profile.existingConfigMap | Use an existing ConfigMap instead of the bundled default. | object | Created from bundled rhdh-profile.py | -| lightspeed.config.profile.existingConfigMap.key | Key within the ConfigMap that holds the file content. Defaults to the bundled filename (rhdh-profile.py) if not set. | string | `""` | -| lightspeed.config.profile.existingConfigMap.name | Name of the existing ConfigMap. | string | `""` | -| lightspeed.config.server | Llama Stack server configuration (config.yaml). | object | `{"existingConfigMap":{"key":"","name":""}}` | -| lightspeed.config.server.existingConfigMap | Use an existing ConfigMap instead of the bundled default. | object | Created from bundled config.yaml | -| lightspeed.config.server.existingConfigMap.key | Key within the ConfigMap that holds the file content. Defaults to the bundled filename (config.yaml) if not set. | string | `""` | -| lightspeed.config.server.existingConfigMap.name | Name of the existing ConfigMap. | string | `""` | -| lightspeed.config.stack | Lightspeed Core service configuration (lightspeed-stack.yaml). | object | `{"existingConfigMap":{"key":"","name":""}}` | -| lightspeed.config.stack.existingConfigMap | Use an existing ConfigMap instead of the bundled default. | object | Created from bundled lightspeed-stack.yaml | -| lightspeed.config.stack.existingConfigMap.key | Key within the ConfigMap that holds the file content. Defaults to the bundled filename (lightspeed-stack.yaml) if not set. | string | `""` | -| lightspeed.config.stack.existingConfigMap.name | Name of the existing ConfigMap. | string | `""` | -| lightspeed.core | Lightspeed Core sidecar container. | object | `{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"lightspeed-core/lightspeed-stack","tag":"0.6.2"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"1000m","memory":"2Gi"},"requests":{"cpu":"100m","memory":"512Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}}` | -| lightspeed.core.argsOverride | Override the container's default args. Leave empty to use the image defaults. | list | `[]` | -| lightspeed.core.commandOverride | Override the container's default command. Leave empty to use the image entrypoint. | list | `[]` | -| lightspeed.core.extraArgs | Extra arguments appended after the default arguments. Ignored when argsOverride is set. | list | `[]` | -| lightspeed.existingSecret | Name of an existing Secret to inject via envFrom into the lightspeed-core container. If empty, no secret is mounted. Expected keys (all optional — only set the ones for the providers you use): ENABLE_VLLM, VLLM_URL, VLLM_API_KEY, VLLM_MAX_TOKENS, VLLM_TLS_VERIFY, ENABLE_OPENAI, OPENAI_API_KEY, ENABLE_VERTEX_AI, VERTEX_AI_PROJECT, VERTEX_AI_LOCATION, GOOGLE_APPLICATION_CREDENTIALS, ENABLE_OLLAMA, OLLAMA_URL, ENABLE_VALIDATION, VALIDATION_PROVIDER, VALIDATION_MODEL_NAME, LLAMA_STACK_LOGGING See files/lightspeed/secret.example.yaml for a reference template. | string | `""` | -| lightspeed.plugins | Lightspeed dynamic plugin packages. | list | `[{"enabled":true,"package":"oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed:{{ \"{{inherit}}\" }}"},{"enabled":true,"package":"oci://registry.access.redhat.com/rhdh/red-hat-developer-hub-backstage-plugin-lightspeed-backend:{{ \"{{inherit}}\" }}"}]` | -| lightspeed.ragInit | RAG data bootstrap init container. | object | `{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"redhat-ai-dev/rag-content","tag":"release-1.10-lls-0.5.0-8c231a3b5177f12fff9db042dfa4091d8f2f26b3"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"100m","memory":"500Mi"},"requests":{"cpu":"50m","memory":"150Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}}` | -| lightspeed.ragInit.argsOverride | Override the default arguments for the RAG init container. | list | `[]` | -| lightspeed.ragInit.commandOverride | Override the default command for the RAG init container. | list | `[]` | -| lightspeed.ragInit.extraArgs | Extra arguments appended after the default arguments. Ignored when argsOverride is set. | list | `[]` | -| lightspeed.runtimeVolume | Writable scratch volume for the sidecar (/tmp). | object | `{"emptyDir":{},"persistentVolumeClaim":{},"type":"emptyDir"}` | -| lightspeed.runtimeVolume.type | Volume type: "emptyDir" or "persistentVolumeClaim". | string | `"emptyDir"` | +| intelligentAssistant | Built-in Intelligent Assistant feature configuration. | object | `{"config":{"profile":{"existingConfigMap":{"key":"","name":""}},"server":{"existingConfigMap":{"key":"","name":""}},"stack":{"existingConfigMap":{"key":"","name":""}}},"core":{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"lightspeed-core/lightspeed-stack","tag":"0.6.2"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"1000m","memory":"2Gi"},"requests":{"cpu":"100m","memory":"512Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}},"enabled":true,"existingSecret":"","plugins":[{"enabled":true,"package":"ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant"},{"enabled":true,"package":"ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend"}],"ragInit":{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"redhat-ai-dev/rag-content","tag":"release-1.10-lls-0.5.0-8c231a3b5177f12fff9db042dfa4091d8f2f26b3"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"100m","memory":"500Mi"},"requests":{"cpu":"50m","memory":"150Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}},"runtimeVolume":{"emptyDir":{},"persistentVolumeClaim":{},"type":"emptyDir"}}` | +| intelligentAssistant.config | Configuration files mounted into the sidecar. By default, the chart creates ConfigMaps from bundled source files. Set existingConfigMap to use a pre-existing ConfigMap instead. | object | `{"profile":{"existingConfigMap":{"key":"","name":""}},"server":{"existingConfigMap":{"key":"","name":""}},"stack":{"existingConfigMap":{"key":"","name":""}}}` | +| intelligentAssistant.config.profile | Python profile with prompt templates (rhdh-profile.py). | object | `{"existingConfigMap":{"key":"","name":""}}` | +| intelligentAssistant.config.profile.existingConfigMap | Use an existing ConfigMap instead of the bundled default. | object | Created from bundled rhdh-profile.py | +| intelligentAssistant.config.profile.existingConfigMap.key | Key within the ConfigMap that holds the file content. Defaults to the bundled filename (rhdh-profile.py) if not set. | string | `""` | +| intelligentAssistant.config.profile.existingConfigMap.name | Name of the existing ConfigMap. | string | `""` | +| intelligentAssistant.config.server | Llama Stack server configuration (config.yaml). | object | `{"existingConfigMap":{"key":"","name":""}}` | +| intelligentAssistant.config.server.existingConfigMap | Use an existing ConfigMap instead of the bundled default. | object | Created from bundled config.yaml | +| intelligentAssistant.config.server.existingConfigMap.key | Key within the ConfigMap that holds the file content. Defaults to the bundled filename (config.yaml) if not set. | string | `""` | +| intelligentAssistant.config.server.existingConfigMap.name | Name of the existing ConfigMap. | string | `""` | +| intelligentAssistant.config.stack | Lightspeed Core service configuration (lightspeed-stack.yaml). | object | `{"existingConfigMap":{"key":"","name":""}}` | +| intelligentAssistant.config.stack.existingConfigMap | Use an existing ConfigMap instead of the bundled default. | object | Created from bundled lightspeed-stack.yaml | +| intelligentAssistant.config.stack.existingConfigMap.key | Key within the ConfigMap that holds the file content. Defaults to the bundled filename (lightspeed-stack.yaml) if not set. | string | `""` | +| intelligentAssistant.config.stack.existingConfigMap.name | Name of the existing ConfigMap. | string | `""` | +| intelligentAssistant.core | Lightspeed Core sidecar container. | object | `{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"lightspeed-core/lightspeed-stack","tag":"0.6.2"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"1000m","memory":"2Gi"},"requests":{"cpu":"100m","memory":"512Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}}` | +| intelligentAssistant.core.argsOverride | Override the container's default args. Leave empty to use the image defaults. | list | `[]` | +| intelligentAssistant.core.commandOverride | Override the container's default command. Leave empty to use the image entrypoint. | list | `[]` | +| intelligentAssistant.core.extraArgs | Extra arguments appended after the default arguments. Ignored when argsOverride is set. | list | `[]` | +| intelligentAssistant.existingSecret | Name of an existing Secret to inject via envFrom into the lightspeed-core container. If empty, no secret is mounted. Expected keys (all optional — only set the ones for the providers you use): ENABLE_VLLM, VLLM_URL, VLLM_API_KEY, VLLM_MAX_TOKENS, VLLM_TLS_VERIFY, ENABLE_OPENAI, OPENAI_API_KEY, ENABLE_VERTEX_AI, VERTEX_AI_PROJECT, VERTEX_AI_LOCATION, GOOGLE_APPLICATION_CREDENTIALS, ENABLE_OLLAMA, OLLAMA_URL, ENABLE_VALIDATION, VALIDATION_PROVIDER, VALIDATION_MODEL_NAME, LLAMA_STACK_LOGGING See files/intelligent-assistant/secret.example.yaml for a reference template. | string | `""` | +| intelligentAssistant.plugins | Intelligent Assistant dynamic plugin packages. | list | `[{"enabled":true,"package":"ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant"},{"enabled":true,"package":"ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend"}]` | +| intelligentAssistant.ragInit | RAG data bootstrap init container. | object | `{"argsOverride":[],"commandOverride":[],"extraArgs":[],"extraEnv":[],"extraVolumeMounts":[],"image":{"digest":"","registry":"quay.io","repository":"redhat-ai-dev/rag-content","tag":"release-1.10-lls-0.5.0-8c231a3b5177f12fff9db042dfa4091d8f2f26b3"},"imagePullPolicy":"IfNotPresent","resources":{"limits":{"cpu":"100m","memory":"500Mi"},"requests":{"cpu":"50m","memory":"150Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}}` | +| intelligentAssistant.ragInit.argsOverride | Override the default arguments for the RAG init container. | list | `[]` | +| intelligentAssistant.ragInit.commandOverride | Override the default command for the RAG init container. | list | `[]` | +| intelligentAssistant.ragInit.extraArgs | Extra arguments appended after the default arguments. Ignored when argsOverride is set. | list | `[]` | +| intelligentAssistant.runtimeVolume | Writable scratch volume for the sidecar (/tmp). | object | `{"emptyDir":{},"persistentVolumeClaim":{},"type":"emptyDir"}` | +| intelligentAssistant.runtimeVolume.type | Volume type: "emptyDir" or "persistentVolumeClaim". | string | `"emptyDir"` | | livenessProbe | Liveness probe configuration. | object | `{"failureThreshold":3,"httpGet":{"path":"/.backstage/health/v1/liveness","port":"backend","scheme":"HTTP"},"periodSeconds":10,"successThreshold":1,"timeoutSeconds":4}` | | metrics | Prometheus metrics configuration. | object | `{"serviceMonitor":{"annotations":{},"enabled":false,"interval":"","labels":{},"path":"/metrics","port":"http-metrics"}}` | | nameOverride | Override the chart name used in resource naming. | string | `""` | @@ -321,7 +321,7 @@ Features enabled by the default chart configuration: 1. Uses [rhdh](https://github.com/redhat-developer/rhdh/) that pre-loads a lot of useful plugins and features 2. Exposes a `Route` for easy access to the instance 3. Enables OpenShift-compatible PostgreSQL database storage -4. Built-in Lightspeed AI feature (enabled by default) +4. Built-in Intelligent Assistant feature (enabled by default) 5. Dynamic plugins system with catalog index support For additional instance features please consult the [documentation for `rhdh`](https://github.com/redhat-developer/rhdh/tree/main/showcase-docs). @@ -354,7 +354,7 @@ System-required volumes, volume mounts, environment variables, init containers, - `extraVolumes` — appended after dynamic-plugins-root, temp, npmcacache, extensions-catalog, etc. - `extraVolumeMounts` — appended after dynamic-plugins-root, extensions, temp mounts - `extraEnv` — appended after APP_CONFIG_backend_listen_port, BACKEND_SECRET, POSTGRES_* vars -- `extraInitContainers` — appended after install-dynamic-plugins and Lightspeed RAG init +- `extraInitContainers` — appended after install-dynamic-plugins and Intelligent Assistant RAG init - `extraContainers` — appended after the Lightspeed Core sidecar This means you never need to copy system defaults to add your own entries. @@ -409,17 +409,19 @@ You can also configure additional catalog index images via `catalogIndex.extraIm For detailed information on configuring the catalog index, including how to override the default image, use a private registry, or add extra catalog index images, see the [Catalog Index Configuration documentation](../../docs/catalog-index-configuration.md). -### Lightspeed +### Intelligent Assistant -Use `lightspeed.enabled` to enable or disable the built-in Lightspeed feature. +Use `intelligentAssistant.enabled` to enable or disable the built-in Intelligent Assistant feature. -When enabled, the chart adds the default Lightspeed dynamic plugins, a RAG bootstrap init container, a Lightspeed Core sidecar listening on port `8080`, chart-generated ConfigMaps, a chart-generated Secret, and separate runtime and RAG data volumes. Override `lightspeed.plugins` for disconnected environments. +When enabled, the chart adds the default Intelligent Assistant dynamic plugins (`ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant` and `ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend`), a RAG bootstrap init container, a Lightspeed Core sidecar listening on port `8080`, chart-generated ConfigMaps, and separate runtime and RAG data volumes. Override `intelligentAssistant.plugins` for disconnected environments. Configure an LLM provider with `intelligentAssistant.existingSecret`; the chart does not create that Secret. Plugin app-config uses the `intelligent-assistant:` namespace (not `lightspeed:`). -Use `lightspeed.runtimeVolume` to change the writable `/tmp` runtime storage between `emptyDir` and an existing PVC reference. The chart mounts that volume at `/tmp` so both generated temp files and `/tmp/data` remain writable. The `/rag-content` volume stays chart-managed and `emptyDir`-backed because the RAG assets are repopulated by the init container on each Pod start. +This is a breaking change from chart 1.x: rename `lightspeed:` to `intelligentAssistant:` in your values. Chart-generated ConfigMaps are named `{fullname}-ia-{stack,server,profile}` instead of `{fullname}-lightspeed-*`, so Helm replaces those objects on upgrade. The `ia` infix is used because Kubernetes names are limited to 63 characters. -When using the built-in Lightspeed feature, do not also keep Lightspeed plugin packages in `dynamicPlugins.plugins`. Existing installations that previously configured Lightspeed there should remove those entries if the built-in defaults are sufficient, or move their custom package definitions to `lightspeed.plugins`; otherwise the rendered `dynamic-plugins.yaml` will contain duplicate Lightspeed plugin entries. +Use `intelligentAssistant.runtimeVolume` to change the writable `/tmp` runtime storage between `emptyDir` and an existing PVC reference. The chart mounts that volume at `/tmp` so both generated temp files and `/tmp/data` remain writable. The `/rag-content` volume stays chart-managed and `emptyDir`-backed because the RAG assets are repopulated by the init container on each Pod start. -The Lightspeed Core sidecar loads the chart-created Lightspeed Secret as environment variables. If you update that Secret outside of Helm, Kubernetes does not guarantee that the Backstage Pod restarts automatically. Use a no-op `helm upgrade` or manually restart the Backstage deployment after changing the secret data. +When using the built-in Intelligent Assistant feature, do not also keep those plugin packages in `dynamicPlugins.plugins`. Existing installations that previously configured Lightspeed or Intelligent Assistant there should remove those entries if the built-in defaults are sufficient, or move their custom package definitions to `intelligentAssistant.plugins`; otherwise the rendered `dynamic-plugins.yaml` will contain duplicate plugin entries. + +The Lightspeed Core sidecar loads `intelligentAssistant.existingSecret` as environment variables. If you update that Secret outside of Helm, Kubernetes does not guarantee that the Backstage Pod restarts automatically. Use a no-op `helm upgrade` or manually restart the Backstage deployment after changing the secret data. ### Vanilla Kubernetes compatibility mode diff --git a/charts/rhdh/README.md.gotmpl b/charts/rhdh/README.md.gotmpl index 4c7f9e89..8f25764e 100644 --- a/charts/rhdh/README.md.gotmpl +++ b/charts/rhdh/README.md.gotmpl @@ -167,7 +167,7 @@ Features enabled by the default chart configuration: 1. Uses [rhdh](https://github.com/redhat-developer/rhdh/) that pre-loads a lot of useful plugins and features 2. Exposes a `Route` for easy access to the instance 3. Enables OpenShift-compatible PostgreSQL database storage -4. Built-in Lightspeed AI feature (enabled by default) +4. Built-in Intelligent Assistant feature (enabled by default) 5. Dynamic plugins system with catalog index support For additional instance features please consult the [documentation for `rhdh`](https://github.com/redhat-developer/rhdh/tree/main/showcase-docs). @@ -200,7 +200,7 @@ System-required volumes, volume mounts, environment variables, init containers, - `extraVolumes` — appended after dynamic-plugins-root, temp, npmcacache, extensions-catalog, etc. - `extraVolumeMounts` — appended after dynamic-plugins-root, extensions, temp mounts - `extraEnv` — appended after APP_CONFIG_backend_listen_port, BACKEND_SECRET, POSTGRES_* vars -- `extraInitContainers` — appended after install-dynamic-plugins and Lightspeed RAG init +- `extraInitContainers` — appended after install-dynamic-plugins and Intelligent Assistant RAG init - `extraContainers` — appended after the Lightspeed Core sidecar This means you never need to copy system defaults to add your own entries. @@ -255,17 +255,19 @@ You can also configure additional catalog index images via `catalogIndex.extraIm For detailed information on configuring the catalog index, including how to override the default image, use a private registry, or add extra catalog index images, see the [Catalog Index Configuration documentation](../../docs/catalog-index-configuration.md). -### Lightspeed +### Intelligent Assistant -Use `lightspeed.enabled` to enable or disable the built-in Lightspeed feature. +Use `intelligentAssistant.enabled` to enable or disable the built-in Intelligent Assistant feature. -When enabled, the chart adds the default Lightspeed dynamic plugins, a RAG bootstrap init container, a Lightspeed Core sidecar listening on port `8080`, chart-generated ConfigMaps, a chart-generated Secret, and separate runtime and RAG data volumes. Override `lightspeed.plugins` for disconnected environments. +When enabled, the chart adds the default Intelligent Assistant dynamic plugins (`ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant` and `ref://red-hat-developer-hub-backstage-plugin-intelligent-assistant-backend`), a RAG bootstrap init container, a Lightspeed Core sidecar listening on port `8080`, chart-generated ConfigMaps, and separate runtime and RAG data volumes. Override `intelligentAssistant.plugins` for disconnected environments. Configure an LLM provider with `intelligentAssistant.existingSecret`; the chart does not create that Secret. Plugin app-config uses the `intelligent-assistant:` namespace (not `lightspeed:`). -Use `lightspeed.runtimeVolume` to change the writable `/tmp` runtime storage between `emptyDir` and an existing PVC reference. The chart mounts that volume at `/tmp` so both generated temp files and `/tmp/data` remain writable. The `/rag-content` volume stays chart-managed and `emptyDir`-backed because the RAG assets are repopulated by the init container on each Pod start. +This is a breaking change from chart 1.x: rename `lightspeed:` to `intelligentAssistant:` in your values. Chart-generated ConfigMaps are named `{fullname}-ia-{stack,server,profile}` instead of `{fullname}-lightspeed-*`, so Helm replaces those objects on upgrade. The `ia` infix is used because Kubernetes names are limited to 63 characters. -When using the built-in Lightspeed feature, do not also keep Lightspeed plugin packages in `dynamicPlugins.plugins`. Existing installations that previously configured Lightspeed there should remove those entries if the built-in defaults are sufficient, or move their custom package definitions to `lightspeed.plugins`; otherwise the rendered `dynamic-plugins.yaml` will contain duplicate Lightspeed plugin entries. +Use `intelligentAssistant.runtimeVolume` to change the writable `/tmp` runtime storage between `emptyDir` and an existing PVC reference. The chart mounts that volume at `/tmp` so both generated temp files and `/tmp/data` remain writable. The `/rag-content` volume stays chart-managed and `emptyDir`-backed because the RAG assets are repopulated by the init container on each Pod start. -The Lightspeed Core sidecar loads the chart-created Lightspeed Secret as environment variables. If you update that Secret outside of Helm, Kubernetes does not guarantee that the Backstage Pod restarts automatically. Use a no-op `helm upgrade` or manually restart the Backstage deployment after changing the secret data. +When using the built-in Intelligent Assistant feature, do not also keep those plugin packages in `dynamicPlugins.plugins`. Existing installations that previously configured Lightspeed or Intelligent Assistant there should remove those entries if the built-in defaults are sufficient, or move their custom package definitions to `intelligentAssistant.plugins`; otherwise the rendered `dynamic-plugins.yaml` will contain duplicate plugin entries. + +The Lightspeed Core sidecar loads `intelligentAssistant.existingSecret` as environment variables. If you update that Secret outside of Helm, Kubernetes does not guarantee that the Backstage Pod restarts automatically. Use a no-op `helm upgrade` or manually restart the Backstage deployment after changing the secret data. ### Vanilla Kubernetes compatibility mode