Skip to content

fix(ci): pin vllm<0.19.1 to restore embedding test correctness - #1251

Merged
slin1237 merged 4 commits into
mainfrom
fix/ci-pin-vllm-under-0.19.1
Apr 20, 2026
Merged

slin1237 merged 4 commits into
mainfrom
fix/ci-pin-vllm-under-0.19.1

Conversation

@slin1237

@slin1237 slin1237 commented Apr 20, 2026 •

Copy link
Copy Markdown
Member

Description

Problem

`e2e-1gpu-embeddings (vllm)` has failed on every main-branch run since ~2026-04-18 16:00 UTC. The failure is not a test infrastructure issue — TestEmbeddingCorrectness::test_semantic_similarity reports self-similarity 0.3342 instead of ~1.0 on `intfloat/e5-mistral-7b-instruct`. That is broken pooling / tokenizer, not numerical drift.

Latest failing run: https://github.com/lightseekorg/smg/actions/runs/24644816475/job/72068881582

Root cause (bisected against main)

Last pass (82a3fb1a, 2026-04-18 04:35) First fail (dcede344, 2026-04-18 16:21)
CI run 24591985132 24608587304
vllm 0.19.0 0.19.1
transformers 4.57.6 5.5.4
torch 2.10.0 2.10.0

Only SMG commit in that 12-hour window was dcede344 feat(protocols): add skills core types — pure protocol types, unrelated to embeddings. scripts/ci_install_vllm.sh runs uv pip install vllm with no version pin, so CI resolves to whatever is current on PyPI. The vLLM 0.19.1 release notes explicitly include a "Transformers v5 library upgrade". Release notes don't document any embedding pooling change, but the vllm 0.19.1 + transformers 5.x pair clearly regresses e5-mistral embedding quality in practice. `e2e-1gpu-embeddings (sglang)` passed on the same commit because sglang has its own embedding pipeline.

Solution

Pin `vllm<0.19.1` in `scripts/ci_install_vllm.sh`. One-line change; reverts CI to the last-known-good combo (vllm==0.19.0 / transformers==4.57.x).

Changes

  • `scripts/ci_install_vllm.sh`: `uv pip install vllm` → `uv pip install "vllm<0.19.1"`. Comment block above the line cites the bisect and run numbers so the next person knows when they can relax the pin.

Test Plan

  • CI itself is the real verification: merging this should turn `e2e-1gpu-embeddings (vllm)` green on the next PR Test run.
  • No Rust, config, protocol, or binding changes; the 5-step contribute gate (fmt/clippy/test/python-dev/commit) is not applicable to a shell-script-only diff. Pre-commit hooks on commit passed: trailing-whitespace, end-of-file-fixer, check-shebang-scripts-are-executable, detect-private-key, mixed-line-ending, no-commit-to-branch, codespell, rustfmt (no Rust diff), clippy (no Rust diff), branch-name-check, dco-check, no-ai-co-author.
  • Commit: conventional `fix(ci):`, DCO sign-off via `git commit -s`, no AI attribution.

Follow-up (not blocking this PR)

This is a temporary pin. Revisit next time vllm publishes a release:

  1. If `vllm 0.19.2+` re-verifies embedding-model correctness post-transformers-v5, bump the pin.
  2. If vllm never revisits it, consider pinning `transformers<5` separately alongside vllm.

Either way, don't relax this pin without re-running the embedding correctness suite against the new combo.

Checklist
  • `cargo +nightly fmt` passes (no Rust diff)
  • `cargo clippy --all-targets --all-features -- -D warnings` passes (no Rust diff)
  • (Optional) Documentation updated (inline comment in the script)
  • (Optional) Please join us on Slack #sig-smg to discuss, review, and merge PRs

Summary by CodeRabbit

  • Chores
    • Constrained vLLM dependency in CI to avoid a regression that causes an unintended transformer upgrade, improving install stability.
    • Updated CI change-detection so dependency/installation updates correctly trigger the relevant test workflows.

vLLM 0.19.1 bundled a transformers v5 upgrade (transformers 4.57.6 → 5.5.4) that broke e5-mistral-7b-instruct embedding quality. e2e-1gpu-embeddings has failed on main since ~2026-04-18 16:00 UTC: TestEmbeddingCorrectness::test_semantic_similarity reports self-similarity 0.3342 (expected ~1.0), and test_relevance_scores reports scores beyond tolerance on both grpc and http paths.

Bisect (main-branch PR Test runs of e2e-1gpu-embeddings (vllm)):
- 24591985132 / 82a3fb1  vllm==0.19.0  transformers==4.57.6  -> SUCCESS (2026-04-18 04:35)
- 24608587304 / dcede34  vllm==0.19.1  transformers==5.5.4   -> FAILURE (2026-04-18 16:21)

Only smg commit between them is dcede34 'feat(protocols): add skills core types' — pure protocol types, unrelated to embeddings. The e2e install uses 'uv pip install vllm' with no pin, so CI resolves to whatever is current on PyPI at run time. The vLLM 0.19.1 release notes explicitly include 'Transformers v5 library upgrade'. Release notes do not document any embedding pooling or tokenizer change, but the vllm 0.19.1 + transformers 5.x pair clearly regresses e5-mistral embedding quality in practice; the sglang embeddings job passes on the same commit because it uses its own embedding pipeline. Full job URL: https://github.com/lightseekorg/smg/actions/runs/24644816475/job/72068881582

Fix:
- scripts/ci_install_vllm.sh: change 'uv pip install vllm' to 'uv pip install "vllm<0.19.1"'. One-line change. Reverts CI to the last-known-good vllm version (0.19.0), which in turn transitively pins transformers back to 4.57.x.

This is a temporary pin. Upstream fix path (in priority order):
1. Upstream vllm 0.19.2+ that re-verifies embedding-model correctness post-transformers-v5 — upgrade the pin then.
2. If vllm never re-verifies, pin 'transformers<5' alongside vllm separately.
Either way, this pin should be revisited the next time vllm publishes a new release; leaving this open as follow-up rather than removing the pin on faith.

Signed-off-by: Simo Lin <linsimo.mark@gmail.com>
@coderabbitai

coderabbitai Bot commented Apr 20, 2026 •

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 3c1a8578-4bbd-4bad-94cd-efdefb98aa34

📥 Commits

Reviewing files that changed from the base of the PR and between a7db889 and 2fc2398.

📒 Files selected for processing (1)
  • .github/workflows/pr-test-rust.yml

📝 Walkthrough

Walkthrough

Constrain vLLM install to vllm<0.19.1 with an inline comment documenting a regression where vLLM 0.19.1 bundles transformers v5, and add scripts/ci_install_vllm.sh to the detect-changes common path in .github/workflows/pr-test-rust.yml. No other logic changes.

Changes

Cohort / File(s) Summary
vLLM pin + comment
scripts/ci_install_vllm.sh
Change install from unpinned vllm to vllm<0.19.1; add multi-line inline comment documenting vLLM 0.19.1 bundling transformers v5 and intended dependency behavior. No other install steps or control flow modified.
Workflow trigger update
.github/workflows/pr-test-rust.yml
Include scripts/ci_install_vllm.sh in the detect-changes job's common path filter so changes to the script trigger the workflow's common gating.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested labels

dependencies, tests

Suggested reviewers

  • CatherineSue
  • key4ng
  • gongwei-130
  • XinyueZhang369

Poem

🐰 I nudged a pin and gave a hop,
vLLM settled — no sudden drop,
a tiny comment left to say,
transformers kept the older way,
carrots safe — I munch and bop! 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: pinning vllm to a version below 0.19.1 to fix a regression in embedding tests, which is precisely what the PR accomplishes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ci-pin-vllm-under-0.19.1

Comment @coderabbitai help to get the list of available commands and usage tips.

@claude claude Bot 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.

Clean CI fix. The pin is well-scoped and the comment thoroughly documents the regression (specific CI runs, commits, and the failure signature). No issues found.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request pins the vLLM package to a version below 0.19.1 in the CI installation script to resolve a regression in embedding quality caused by a dependency upgrade. The review feedback suggests pinning to the exact version 0.19.0 instead of using a version range to ensure better stability and reproducibility in the CI environment.

# 72068881582 for the failure signature.
echo "Installing vLLM..."
uv pip install vllm
uv pip install "vllm<0.19.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

To ensure CI stability and consistency with the project's metadata, consider pinning to the exact last-known-good version (vllm==0.19.0). This matches the version cited in the comments and the lower bound defined in grpc_servicer/pyproject.toml. Using an exact pin is generally preferred in CI to ensure reproducibility, especially when a specific version is known to cause regressions. Additionally, since this regression affects core functionality (embedding correctness), this constraint should ideally be reflected in the package metadata (grpc_servicer/pyproject.toml) as well to protect users from installing the broken combination. This approach also adheres to the requirement of using uv pip install for Python package installations in CI scripts for consistency and performance.

Suggested change
uv pip install "vllm<0.19.1"
uv pip install "vllm==0.19.0"
References
  1. When installing Python packages in CI scripts, use uv pip install for consistency and performance if uv is already in use for other installations.
  2. Ensure that all external resource versions specified in scripts are accurate and exist, as incorrect versions can lead to build failures.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@scripts/ci_install_vllm.sh`:
- Line 30: Replace the floating vllm constraint in the pip install line that
currently reads 'uv pip install "vllm<0.19.1"' with an exact pin to the
last-known-good release (vllm==0.19.0) so CI uses deterministic dependencies;
update the install command string accordingly to use "vllm==0.19.0".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: f28441f4-febc-4fca-b0c0-ea91fc769859

📥 Commits

Reviewing files that changed from the base of the PR and between 7f45099 and 108bf8b.

📒 Files selected for processing (1)
  • scripts/ci_install_vllm.sh

Comment thread scripts/ci_install_vllm.sh
Addendum to the prior commit on this PR. The original fix pinned only vllm<0.19.1, which relies on vllm 0.19.0's wheel metadata (transformers<5,>=4.56.0) to force transformers back to 4.x. That works today, but it delegates the transformers ceiling to upstream metadata we don't control. If vllm ever publishes a 0.19.0 hotfix that relaxes its transformers constraint, the pin silently regresses.

Adding an explicit transformers<5 ceiling makes the install deterministic even if vllm 0.19.0's metadata changes. Restores the last-known-good combo (vllm==0.19.0, transformers==4.57.6) unambiguously. Still does not isolate whether the underlying regression is in vllm 0.19.1 or transformers 5.x — that's a follow-up experiment; see PR description.

Signed-off-by: Simo Lin <linsimo.mark@gmail.com>
Reverts the second commit on this PR. We should not second-guess vllm's declared transformers range. vllm 0.19.0's wheel already hard-caps transformers<5,>=4.56.0, so pinning vllm<0.19.1 is sufficient to get the last-known-good combo. When we ship vllm in production, users don't pin transformers themselves either — keeping CI aligned with the install shape real users will get.

Signed-off-by: Simo Lin <linsimo.mark@gmail.com>
The detect-changes path filter enumerates which scripts should trigger the GPU e2e matrix. It listed ci_install_sglang.sh but omitted ci_install_vllm.sh — so PRs that only touch the vllm install script (including this one) got every GPU e2e job SKIPPED, leaving no way to verify the vllm-side fix the PR is landing.

Signed-off-by: Simo Lin <linsimo.mark@gmail.com>
@github-actions github-actions Bot added the ci CI/CD configuration changes label Apr 20, 2026

@coderabbitai coderabbitai Bot 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.

♻️ Duplicate comments (1)
scripts/ci_install_vllm.sh (1)

30-36: ⚠️ Potential issue | 🟠 Major

Pinning intent and install constraint are misaligned on Line 30 and Line 36.

The comment says we rely on vLLM 0.19.0 metadata, but vllm<0.19.1 is still a floating selector. For deterministic CI recovery, pin exactly to the known-good version.

🔧 Proposed fix
-# We rely on vllm 0.19.0's own wheel metadata (transformers<5,>=4.56.0) to
+# We rely on vllm 0.19.0's own wheel metadata (transformers<5,>=4.56.0) to
 # force transformers back to 4.x. Not pinning transformers separately — if
 # we ship vllm we don't want to second-guess the library's own dep range;
 # drop this pin whenever vllm publishes a release that re-verifies embedding
 # correctness post-transformers-v5.
 echo "Installing vLLM..."
-uv pip install "vllm<0.19.1"
+uv pip install "vllm==0.19.0"

Use this read-only check to confirm resolver surface and current script intent:

#!/bin/bash
set -euo pipefail

# Verify local script context
cat -n scripts/ci_install_vllm.sh | sed -n '22,37p'

# Inspect published versions to see what "<0.19.1" could resolve to
python - <<'PY'
import json, urllib.request
from packaging.version import Version

data = json.load(urllib.request.urlopen("https://pypi.org/pypi/vllm/json"))
versions = sorted(Version(v) for v in data.get("releases", {}).keys())

lt_0191 = [v for v in versions if v < Version("0.19.1")]
range_0190_0191 = [v for v in versions if Version("0.19.0") <= v < Version("0.19.1")]

print("Latest five versions <0.19.1:", [str(v) for v in lt_0191[-5:]])
print("Candidates in [0.19.0, 0.19.1):", [str(v) for v in range_0190_0191])
PY

Expected result after pinning: install command is vllm==0.19.0, and CI resolution no longer depends on future sub-0.19.1 release changes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/ci_install_vllm.sh` around lines 30 - 36, The comment and install
constraint disagree: update the vLLM install to pin the tested version exactly
rather than a floating range; replace the install invocation that currently uses
the string "vllm<0.19.1" with a fixed "vllm==0.19.0" and adjust the preceding
comment text so it explicitly states we pin to 0.19.0 (refer to the echo
"Installing vLLM..." line and the pip install command in the script).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@scripts/ci_install_vllm.sh`:
- Around line 30-36: The comment and install constraint disagree: update the
vLLM install to pin the tested version exactly rather than a floating range;
replace the install invocation that currently uses the string "vllm<0.19.1" with
a fixed "vllm==0.19.0" and adjust the preceding comment text so it explicitly
states we pin to 0.19.0 (refer to the echo "Installing vLLM..." line and the pip
install command in the script).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 968d5493-9484-49a8-a811-fec9b78e1f7e

📥 Commits

Reviewing files that changed from the base of the PR and between e7ac025 and a7db889.

📒 Files selected for processing (1)
  • scripts/ci_install_vllm.sh

@slin1237
slin1237 merged commit b2f1a8c into main Apr 20, 2026
44 checks passed
@slin1237
slin1237 deleted the fix/ci-pin-vllm-under-0.19.1 branch April 20, 2026 16:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI/CD configuration changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants