Skip to content

MOD-17747: Add self-managed LangCache documentation - #3925

Merged
mich-elle-luna merged 10 commits into
mainfrom
MOD-17747-langcache-onprem-docs
Sep 11, 2026
Merged

MOD-17747: Add self-managed LangCache documentation#3925
mich-elle-luna merged 10 commits into
mainfrom
MOD-17747-langcache-onprem-docs

Conversation

@tptodorov

@tptodorov tptodorov commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Documents LangCache on-prem (self-managed) deployment and usage, per MOD-17747, based on the self-managed Redis Agent Memory (RAM) docs and verified against the LangCache Helm chart and source in the iris monorepo (read-only reference, not part of this repo).

Adds content/operate/iris/langcache/self-managed/:

  • _index.md, prerequisites.md, deploy.md, configuration.md
  • authentication.md
  • control-plane-api-reference.md + a generated openapi-control-plane.json (built from the LangCache Control Plane's own Smithy API via the repo's own Smithy build, not hand-written)
  • operations.md, reference.md, api-examples.md

Also adds one link from the existing LangCache Cloud index page to the new self-managed section, mirroring the "Deployment options" pattern already used on Agent Memory's index page.

Latest update

Pushed a64b87d47 to address the 2026-09-10 deep-review findings:

  • removed the non-effective user-authored controlplane.configData.embedders examples and documented dataplane.embedding.* as the Helm source of truth for provider, model, and dimensions
  • clarified bundled vs. external Identity Service wording and the valid FIPS posture
  • added a Control Plane API bearer-token note and documented defaultTtlMillis: 0

Validation:

  • git diff --check
  • jq empty content/operate/iris/langcache/self-managed/control-plane-api-reference/openapi-control-plane.json
  • Local Hugo render not run because hugo is not installed on this PATH; GitHub build_docs is re-running on the pushed branch.

Structural decision: where the docs live

The ticket's recommended default was content/operate/iris/langcache/self-managed/*, mirroring Agent Memory's current (post-move) location. While investigating, I found the LangCache Cloud page had already been moved to content/operate/iris/langcache/_index.md (the old rc/context-engine/langcache path is now just a redirect stub) — so I used that clearer, already-established precedent: the new docs sit at content/operate/iris/langcache/self-managed/*, a sibling of the migrated Cloud page, exactly mirroring content/operate/iris/agent-memory/self-managed/*.

What this product actually looks like today (verified against the real 0.0.1 release)

The self-managed LangCache product moved fast underneath this PR — twice. My first pass documented a Data-Plane-only Helm chart with a hand-rolled Control Plane manifest and no public registry; that was accurate for the code at the time, but superseded within the same work window by MOD-17459 ("Evolve langcache/helm into the canonical LangCache on-prem chart") and MOD-17460 (removing the on-prem Data Plane's own database registry). I rewrote the docs against that.

Then an actual chart release shipped (langcache chart v0.0.1), and I re-verified everything against the real, live artifacts rather than the reference repo alone:

  • https://helm.redis.io/ai/index.yaml now genuinely serves langcache (confirmed live, not inferred) — same public Helm repository as self-managed Redis Agent Memory. deploy.md and operations.md now use the real helm repo add redis-ai https://helm.redis.io/ai / helm install langcache redis-ai/langcache --version <chart-version> flow instead of a "contact your Redis rep for coordinates" placeholder.
  • The synced chart in RedisLabs/redis-enterprise-helm (ai/charts/langcache) is byte-identical to what's in the iris monorepo's langcache/helm/, except default image tags are now pinned to 0.0.1 — so everything else I'd already documented (config schema, overlay-Secret mechanism, ports, image names, FIPS/support-bundle/preflight behavior) needed no changes.
  • The container images are genuinely public on Docker Hub (redislabs/iris-langcache-data, -control, and iris-identity-service) — confirmed via Docker Hub's public API, no auth needed. Split reference.md's "contact your Redis representative" row so it only covers the license key now, not chart/image access.

One deliberate simplification, per explicit instruction mid-review: static caches / "Data Plane only" self-managed LangCache isn't a real deployment shape for this product (the chart always installs Data Plane + Control Plane + Identity Service together), so that material was dropped entirely rather than kept as a stale "also supported" path — including the legacy per-cache token auth mode, which doesn't exist for this product's self-managed form.

Verification approach

Every config key, endpoint, port, and Secret/resource name in these docs was checked against langcache/helm/values.yaml and README.md, the Go config-validation source for the Control Plane and Data Plane, the Control Plane's Smithy API (and its generated OpenAPI, shipped as-is rather than hand-written), the real dev-stack config files under development/langcache/onprem/, and — for this latest revision — the actual published chart and Docker Hub images. Two rounds of a Codex content/meaning review against the rendered staging pages also caught and fixed several bugs earlier in this PR (wrong default port, a missing required config field, an incorrect FIPS claim, and a Helm chart-value convention copied from RAM that didn't actually exist in LangCache's chart at the time).

🤖 Generated with Claude Code


Note

Low Risk
Documentation-only changes with no application code, auth, or data-path modifications.

Overview
Adds a full self-managed LangCache doc tree under content/operate/iris/langcache/self-managed/, mirroring the Redis Agent Memory on-prem pattern. The LangCache on Redis Cloud index now links to this section as an alternative deployment path.

The new guides cover the canonical langcache Helm chart install (Data Plane, Control Plane, and bundled or external Identity Service), overlay Secrets for Redis and embeddings, agent-key auth via Identity Service, Helm deploy/upgrade from https://helm.redis.io/ai, operations (backups, secret rotation, FIPS posture, support bundles), curl API examples, and a Control Plane OpenAPI reference (openapi-control-plane.json). Docs state that embedding provider/model/dimensions come from dataplane.embedding.*, not per-cache Control Plane fields, and that there is no Data-Plane-only self-managed install.

Reviewed by Cursor Bugbot for commit 2a7e460. Bugbot is set up for automated code reviews on this repo. Configure here.

@CLAassistant

CLAassistant commented Sep 4, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 11 related items from repository history (1 new this commit):

Memory updated at 2a7e460

@mich-elle-luna mich-elle-luna self-assigned this Sep 4, 2026

@mich-elle-luna mich-elle-luna left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! This is looking good so far, just a few small suggestions.

Comment thread content/operate/iris/langcache/self-managed/_index.md Outdated
Comment thread content/operate/iris/langcache/self-managed/_index.md Outdated
Comment thread content/operate/iris/langcache/self-managed/_index.md Outdated
Comment thread content/operate/iris/langcache/self-managed/_index.md Outdated
Comment thread content/operate/iris/langcache/self-managed/authentication.md Outdated
Comment thread content/operate/iris/langcache/self-managed/deploy.md
Comment thread content/operate/iris/langcache/self-managed/operations.md
Comment thread content/operate/iris/langcache/self-managed/prerequisites.md Outdated
Comment thread content/operate/iris/langcache/self-managed/prerequisites.md Outdated
Comment thread content/operate/iris/langcache/self-managed/prerequisites.md
tptodorov added a commit that referenced this pull request Sep 10, 2026
Applied all 22 inline review suggestions from PR #3925:

- _index.md: wording fixes ("faster", "either returns a", "no
  lighter-weight install of only the Data Plane", period instead of
  em-dash).
- authentication.md: reworded the admin/internal-token-mismatch sentence
  and the bundled-mode intro; renamed "### Bundled" to "### Bundled
  Identity Service" (matching "### External Identity Service") with an
  explicit "choose either ... or ..." lead-in; added the missing article
  to the external credential sentence; added a "Next steps" section.
- configuration.md: split the overlay-mechanism sentence for clarity,
  reworded the `authorized: true` rule and the bundled Identity Service
  metadata intro; added a "Next steps" section.
- deploy.md: dropped "(by default)"/"(default)" qualifiers now that
  bundled vs. external is chosen explicitly one section down; added a
  "Next steps" section.
- operations.md: added a "See also" section.
- prerequisites.md: dropped the same "(by default)"/"(bundled)"
  qualifiers; added a "Next steps" section.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@tptodorov

Copy link
Copy Markdown
Contributor Author

Addressed all 22 review comments in ea4ff94:

  • Applied all wording suggestions as-is (_index.md, authentication.md, configuration.md, deploy.md, prerequisites.md).
  • Renamed ### Bundled to ### Bundled Identity Service in authentication.md to match ### External Identity Service, with an explicit "choose either ... or ..." lead-in.
  • Added "Next steps" sections to authentication.md, configuration.md, deploy.md, and prerequisites.md.
  • Added a "See also" section to operations.md.

Ready for another look, @mich-elle-luna 🙏

tptodorov and others added 6 commits September 10, 2026 15:20
Document LangCache on-prem (self-managed) deployment and usage, based on
the self-managed Redis Agent Memory (RAM) docs and verified against the
LangCache ADR/TDD, Helm chart, and controlplane-onprem/dataplane source.

Adds content/operate/iris/langcache/self-managed/:
- _index.md, plan-deployment.md, prerequisites.md
- deploy-static.md, deploy-control-plane.md, data-plane-configuration.md
- authentication.md
- control-plane-api-reference.md + generated openapi-control-plane.json
- operations.md, reference.md, api-examples.md

Also adds one link from the existing LangCache Cloud index page
(content/operate/iris/langcache/_index.md) to the new self-managed section,
mirroring the Agent Memory index's "Deployment options" pattern.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- _index.md: split the single Data Plane port entry into static-caches
  (8080) vs. Control Plane managed caches (9000) — they're different
  binaries with different defaults, and the single row was misleading.
- data-plane-configuration.md: add the required embedding.endpoint.base_url
  to the Control Plane managed caches example; pkg/inference.Config.Validate
  requires it for non-noop providers, so the example would fail startup
  without it.
- operations.md: correct the FIPS posture claim. The on-prem-hardened
  binaries are FIPS-*capable* (GOFIPS140), but ship with runtime FIPS mode
  off by default (GODEBUG=fips140=off); the strict rediss:// checks are
  opt-in, not automatic just from using the hardened image.
- deploy-control-plane.md: add the missing Secret-mount steps (license,
  Identity Service introspection token) for the Data Plane, since the
  config example referenced mount paths the chart doesn't wire up on its
  own; uses the chart's existing generic volumes/volumeMounts passthrough.
- authentication.md: strengthen the Identity Service caveat to note it
  needs its own control credential, a per-Data-Plane introspection
  credential, and product wiring — not just one extra container.

Found via a Codex content/meaning review of the rendered staging pages,
cross-checked against the actual Go source in the iris monorepo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The langcache chart takes dataplane.config.yaml inline as the `config`
value, rendered into a ConfigMap — it has no existingSecret/
existingSecretChecksum option for it (that's an RS-Agent-Memory-chart
convention I'd copied without checking against this chart's actual
values.yaml/configmap.yaml). Corrected across deploy-static.md,
deploy-control-plane.md, prerequisites.md, reference.md, and operations.md:

- Config is now shown inline under `config:` in the Helm values examples,
  with an explicit callout that this renders to a ConfigMap (not a Secret)
  so the values file itself should be treated as sensitive.
- License and Identity Service introspection-token files (which the chart
  doesn't support at all) are now mounted via the chart's generic
  volumes/volumeMounts passthrough, using dedicated directories
  (/etc/license, /etc/introspection) instead of subPath mounts into
  /etc/langcache — subPath mounts don't pick up Secret updates without a
  pod restart, whole-directory mounts do.
- Removed the SHA-256-checksum-based rollout pattern for config/license
  (it assumed a chart field, existingSecretChecksum, that doesn't exist);
  replaced with explicit `kubectl rollout restart` guidance for license and
  introspection-token rotation in operations.md.
- Added `nameOverride`/`fullnameOverride: langcache` to the values examples
  so the chart's actual default resource names (derived from
  nameOverride=langcache-app) don't silently mismatch the `svc/langcache`,
  `deploy/langcache`, and `app.kubernetes.io/name=langcache` used throughout
  the verification commands.
- deploy-control-plane.md: added `service.port: 9000` since the
  managed-cache Data Plane binary's default port doesn't match the chart's
  default service.port (8080); fixed the intro note, which claimed the page
  deploys the Identity Service when it doesn't.
- authentication.md: `full` grant wording corrected to not imply it grants
  Control Plane admin API access.
- api-examples.md: noted the 8080/9000 port split for static vs.
  Control-Plane-managed Data Plane calls.

Found via a second Codex content/meaning review pass, cross-checked against
the actual Go source, Helm chart, and Kubernetes subPath semantics.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…m chart

Static caches / "Data Plane only" self-managed LangCache is no longer a
thing: since MOD-17459 ("Evolve langcache/helm into the canonical LangCache
on-prem chart") and MOD-17460 (removing the on-prem Data Plane's own
database registry), the langcache chart always installs the Data Plane,
Control Plane, and a bundled-or-external Identity Service together. There
is no deployment-mode choice anymore and no supported no-Control-Plane
path — the previous docs described an earlier, now-superseded shape of the
product (a DP-only chart, a hand-rolled CP manifest, no public images).

Rewritten against langcache/helm/{values.yaml,README.md,Chart.yaml},
controlplane-onprem/dataplane on-prem config structs, and
development/langcache/onprem/*.config.yaml at origin/main (HEAD's checkout
of this reference repo was 15 commits behind and missing all of this):

- Removed plan-deployment.md and deploy-static.md — no modes to choose.
- Renamed deploy-control-plane.md -> deploy.md: one `helm install` now
  stands up DP+CP+IdS together; no more manual Control Plane Deployment
  manifest, the chart templates it.
- Renamed data-plane-configuration.md -> configuration.md: config is now a
  values.yaml (non-secret structure) + per-component overlay Secret
  (Redis URLs, database registry, embedding credential) split, chart-native
  end to end, replacing the old hand-mounted subPath workarounds.
- authentication.md: agent-key auth via Identity Service (bundled or
  external) is the only Data Plane auth mode; dropped the legacy
  static-cache-token material entirely, since static caches aren't part of
  this product's self-managed shape anymore.
- operations.md: rotation now uses the chart's real
  `*.existingSecretChecksum` mechanism; added the chart's own FIPS posture,
  support bundle, and preflight features, all newly chart-native.
- _index.md/reference.md: updated component list, ports, and images
  (redislabs/iris-langcache-data, iris-langcache-control,
  iris-identity-service — now published to public Docker Hub, closing the
  "no public registry" gap noted in the previous revision).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Verified against the real release: RedisLabs/redis-enterprise-helm now
carries ai/charts/langcache (chart v0.0.1, synced from langcache/helm at
origin/main — content is byte-identical except default image tags now
pinned to 0.0.1 instead of empty), and https://helm.redis.io/ai/index.yaml
actually serves a "langcache" entry as of today. This confirms, rather than
just infers by analogy with RAM, the chart's public distribution channel.

- prerequisites.md/reference.md: state the chart is published to
  https://helm.redis.io/ai (same repo as self-managed Redis Agent Memory)
  instead of "contact your Redis representative for exact coordinates."
  Split the reference.md "contact your rep" row so it only covers the
  license key now, not chart/image access (both of which are public).
- deploy.md/operations.md: install/upgrade/helm-test commands now use
  `helm repo add redis-ai https://helm.redis.io/ai` +
  `helm install/upgrade langcache redis-ai/langcache --version <chart-version>`,
  matching the real, now-public flow, with a note for anyone still
  installing from a local chart checkout or package instead.

No other content changed — the chart's actual config schema, ports,
overlay mechanism, and image names documented in the previous revision all
matched the published release exactly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Applied all 22 inline review suggestions from PR #3925:

- _index.md: wording fixes ("faster", "either returns a", "no
  lighter-weight install of only the Data Plane", period instead of
  em-dash).
- authentication.md: reworded the admin/internal-token-mismatch sentence
  and the bundled-mode intro; renamed "### Bundled" to "### Bundled
  Identity Service" (matching "### External Identity Service") with an
  explicit "choose either ... or ..." lead-in; added the missing article
  to the external credential sentence; added a "Next steps" section.
- configuration.md: split the overlay-mechanism sentence for clarity,
  reworded the `authorized: true` rule and the bundled Identity Service
  metadata intro; added a "Next steps" section.
- deploy.md: dropped "(by default)"/"(default)" qualifiers now that
  bundled vs. external is chosen explicitly one section down; added a
  "Next steps" section.
- operations.md: added a "See also" section.
- prerequisites.md: dropped the same "(by default)"/"(bundled)"
  qualifiers; added a "Next steps" section.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@tptodorov
tptodorov force-pushed the MOD-17747-langcache-onprem-docs branch from ea4ff94 to 1cdc3aa Compare September 10, 2026 12:20
tptodorov and others added 3 commits September 10, 2026 15:32
Downloaded the actual published chart tarball (langcache-0.0.1.tgz from the
helm.redis.io/ai release) and cross-checked every technical claim in the
PR against its templates/_helpers.tpl, values.yaml, and NOTES.txt, plus
the identity-service, controlplane-onprem, and dataplane Smithy/Go source
at origin/main. Everything else held up exactly as documented (ports,
resource names, secret keys, overlay mount paths, FIPS validation
messages, the Identity Service's Grant/CreateAPIKey shapes, the internal
grant-validation path, and the /health endpoints all matched byte-for-byte
or field-for-field).

One place was more hedged than it needed to be: operations.md's
auto-generated-token rotation guidance said to "confirm which behavior
your chart version implements" because I hadn't verified the underlying
mechanism. controlplane-secrets.yaml and identity-service-secrets.yaml
both show the real mechanism directly: a lookup-or-generate helper that
re-reads the existing Secret on every helm upgrade (keeping it stable) plus
a helm.sh/resource-policy: keep annotation, so deleting the Secret and
re-running helm upgrade does mint a fresh token. Replaced the hedge with
that confirmed explanation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- _index.md: split "Cache entries" table row so flush's real path
  (/v1/caches/{cacheId}/flush) isn't implied to live under /entries; added
  a note that the shared LangCache API reference doesn't yet cover
  conversational search or cache health (confirmed: content/develop/ai/
  context-engine/langcache/api-reference/api.yaml only has entries/search,
  entries, entries/{entryId}, and flush — both endpoints are real on the
  actual Data Plane per the Smithy source, just missing from that shared
  spec, which is out of scope to edit here).
- api-examples.md: added a real "Search using conversation history"
  example (verified against ConversationalSearchBody/-Output in the DP
  Smithy source: prompt, context as chronological turns, actualPrompt in
  the response) instead of just claiming conversational search was
  covered by a reference that doesn't include it.
- reference.md: replaced a troubleshooting row describing a 400 for
  "per-cache embedding fields" on CreateCache — CreateCacheRequestContent
  has no embedding-related field at all, so that scenario can't occur as
  described. Replaced with the request fields that actually exist and can
  fail validation.
- authentication.md: added the missing Secret name and retrieval command
  for the Data Plane's own auto-generated Identity Service runtime
  credential (langcache-identity-service-dp-credential) — previously
  mentioned as existing but never given a name, unlike the other three
  auto-generated tokens.

Not changed: the generated openapi-control-plane.json's PATCH /v1/caches
returning 201 with no body. Verified directly against the Smithy source
(@http(method: "PATCH", ..., code: 201), no output) — that's what the real
API does, however unusual; "fixing" it to 200 would misrepresent it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@teoparvanov teoparvanov left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, with a single comment:

Comment thread content/operate/iris/langcache/self-managed/_index.md Outdated

@mich-elle-luna mich-elle-luna left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you!

@mich-elle-luna

Copy link
Copy Markdown
Collaborator

Looks good, with the one additional change from Teo and please also sign the license agreement.

Per teoparvanov's review: conversational search isn't fully supported yet,
so remove its coverage from the self-managed LangCache docs for now
(_index.md's API surfaces table and component summary, and the
api-examples.md endpoint example and its cross-reference note).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@tptodorov

Copy link
Copy Markdown
Contributor Author

Addressed in 2a7e460: dropped conversational search from the self-managed docs per @teoparvanov's comment — removed it from _index.md's component summary and API surfaces table, and removed the /v1/caches/{cacheId}/conversations/search example and its cross-reference note from api-examples.md.

@mich-elle-luna re: the CLA — that's on Todor to sign directly, not something I can do on his behalf.

@tptodorov

Copy link
Copy Markdown
Contributor Author

@mich-elle-luna I addressed the comments. Could you please proceed with publishing.

@kaitlynmichael kaitlynmichael added the iris Iris context engine docs label Sep 11, 2026
@mich-elle-luna
mich-elle-luna merged commit 5b7c794 into main Sep 11, 2026
97 checks passed
@mich-elle-luna
mich-elle-luna deleted the MOD-17747-langcache-onprem-docs branch September 11, 2026 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

iris Iris context engine docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants