Skip to content

docs(sglang): rewrite the (sglang, LMCache) sample for the shipped MP data plane#161

Open
EdHasNoLife wants to merge 3 commits into
mainfrom
docs/sglang-mp-sample
Open

docs(sglang): rewrite the (sglang, LMCache) sample for the shipped MP data plane#161
EdHasNoLife wants to merge 3 commits into
mainfrom
docs/sglang-mp-sample

Conversation

@EdHasNoLife

Copy link
Copy Markdown
Collaborator

The (sglang, LMCache) sample still described the pre-MP lm:// model with a "KNOWN LIMITATION (GPU-validated, fix pending) … this pair can reconcile Ready while caching nothing" header — which is now false. #149 landed the SGLang LMCache MP data plane, so SGLang genuinely offloads. An operator copying the sample today is told a working feature is broken.

Rewrite it to the shipped MP model:

  • redisImage for the managed Redis L2 store the MP worker offloads to — replaces the lm:// serverImage (lm:// is not a valid MP --l2-adapter type, so SGLang doesn't render the standalone lmcache-server).
  • The engine wire it actually gets (--enable-lmcache, --lmcache-config-file, LMCACHE_USE_EXPERIMENTAL), and the fact that the old lm:// env / VLLM_USE_V1 / PYTHONHASHSEED are not injected for SGLang.
  • The Kubernetes ≥ 1.29 requirement (the MP worker is a native sidecar).
  • The MP worker tunables (workerImage / chunkSize / mpPort / l1SizeGB) as optional reference.

make verify-samples passes (server-side admission dry-run): cachebackend-sglang.yaml — OK.

Scope note. While scoping this I found the cachebackend-api.md SGLang section was already rewritten to MP (part of the #149 line) — so only the sample was stale here. The reference-stack (docs/reference-stack/manifests/sglang-lmcache/) is also still on the lm:// model, but it's a GPU-validated hand manifest that wants kind re-validation, not a blind edit — it stays tracked in CAC-251 along with the missing VERSIONS.md tuple and the MP smoke assert.

CAC-251.

… data plane

The sample still described the pre-MP lm:// model with a 'KNOWN LIMITATION /
caches nothing / fix pending' warning — now false: SGLang offloads via the MP
data plane (managed Redis L2 + node-local MP-worker sidecar + --lmcache-config-file).
Rewrite the sample to that model: redisImage (not the lm:// serverImage), the
K8s>=1.29 native-sidecar requirement, and the MP worker tunables. verify-samples
passes.
@github-actions

Copy link
Copy Markdown

Codex review

Files reviewed

config/samples/

  • [reviewed] cachebackend-sglang.yaml

Findings

Blocking

None.

Should-fix

  • config/samples/cachebackend-sglang.yaml:29 — The collision behavior is misstated. Existing reserved args or environment variables in the user’s pod template are upserted by the adapter, while only conflicting spec.integration.engineOverrides entries are rejected by CacheBackend admission; clarify which input surface is being described.

Nit

None.

Per-category coverage

  1. Vendor-neutral naming: Clean
  2. Contract & spec / docs sync: findings above at: config/samples/cachebackend-sglang.yaml:29
  3. gRPC fail-open semantics: Clean
  4. Quality (tests / error wrapping / package placement / generated drift): Clean

Verdict

changes-requested

Distinguish the two input surfaces: a pod-template value colliding with an
adapter-owned key is upserted (overwritten), while the hard-reject at admission
is specifically for engineOverrides that touch a reserved arg/env.
@linear-code

linear-code Bot commented Jul 23, 2026

Copy link
Copy Markdown

CAC-251

@github-actions

Copy link
Copy Markdown

Codex review

Files reviewed

  • config/samples/
    • [reviewed] cachebackend-sglang.yaml

Findings

Blocking

None.

Should-fix

None.

Nit

config/samples/cachebackend-sglang.yaml:25 — The list abbreviates environment-variable names and omits LMCACHE_MAX_LOCAL_CPU_SIZE. Use the exact names and complete list so readers do not infer that the omitted legacy variable remains injected.

config/samples/cachebackend-sglang.yaml:74 — This comment is 109 characters and breaks the surrounding wrapping style. Wrap it onto another line for consistency and readability.

Per-category coverage

  1. Vendor-neutral naming: Clean
  2. Contract & spec / docs sync: findings above at: config/samples/cachebackend-sglang.yaml:25
  3. gRPC fail-open semantics: Clean
  4. Quality (tests / error wrapping / package placement / generated drift): findings above at: config/samples/cachebackend-sglang.yaml:74

Verdict

approve-with-nits

@EdHasNoLife
EdHasNoLife force-pushed the docs/sglang-mp-sample branch from 2eb3018 to a3031d6 Compare July 23, 2026 20:46
@EdHasNoLife
EdHasNoLife force-pushed the docs/sglang-mp-sample branch from a3031d6 to 858ec19 Compare July 23, 2026 20:47
@github-actions

Copy link
Copy Markdown

Codex review

Files reviewed

Findings

Blocking

None.

Should-fix

None.

Nit

None.

Per-category coverage

  1. Vendor-neutral naming: Clean
  2. Contract & spec / docs sync: Clean
  3. gRPC fail-open semantics: Clean
  4. Quality (tests / error wrapping / package placement / generated drift): Clean

Verdict

approve

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant