Repository navigation
fix: guidellm harness reports the real cause for an unsupported profile - #1683
Merged
maugustosilva merged 1 commit intoJul 29, 2026
Merged
Conversation
UgaTheDev
requested review from
Vezio,
achandrasekar,
kalantar,
maugustosilva,
mengmeiye and
namasl
as code owners
July 28, 2026 09:32
Contributor
|
Unsigned commits detected! Please sign your commits. For instructions on how to set up GPG/SSH signing and verify your commits, please see GitHub Documentation. |
Collaborator
|
This looks good. Please sign all commits and we can merge. Thanks. |
UgaTheDev
force-pushed
the
fix/guidellm-replay-profile-guard
branch
from
July 28, 2026 16:07
dcb3be0 to
b2def77
Compare
profile: replay (and any other profile not yet supported by the installed guidellm) fails inside guidellm's own argument parsing, but the real error -- "Invalid value for --profile: ... 'synchronous', 'concurrent', 'throughput', 'constant' or 'poisson'" -- gets swallowed and resurfaces as an unrelated "Missing field '--target': Field required", sending operators off to debug the wrong thing. Add a pre-flight check to guidellm-llm-d-benchmark.sh that reads the workload's profile field and asks the installed guidellm (via a small python3 -c introspection of ProfileType | StrategyType) which profiles it actually supports, before guidellm is ever invoked. An unsupported profile now fails fast with a message naming the actual cause and the installed guidellm version, instead of a misleading Pydantic error. Introspection failing for any reason fails open (the guard does not block a run it can't validate), and a scenario with no profile field is unaffected. The error goes to stderr, matching the existing lm-eval-llm-d-benchmark.sh precedent for fatal harness errors. guidellm's own --profile flag already validates against click.Choice(STRATEGY_PROFILE_CHOICES) and would raise this same error for free; the harness doesn't pass --profile because it hands the whole workload file to guidellm via --scenario instead, so that built-in validation never runs. Reproducing the check in shell (rather than also passing --profile) keeps this fix confined to a single harness script and avoids depending on --scenario/--profile precedence behavior that isn't documented. This only addresses the misleading error message. Bumping the guidellm pin so profile: replay itself works is out of scope here -- replay support only exists on guidellm's main branch (e.g. commit 73d91f311bd9); build/Dockerfile already pins an arbitrary git commit (not a PyPI release), so pinning a newer commit is possible, but whether to ship an unreleased guidellm commit is a maintainer decision and out of scope for this fix. Adds tests/test_guidellm_profile_guard.py, which runs the guard block extracted directly from the shipped script (not a copy) against fake yq/python3/guidellm stubs. Signed-off-by: Kush Zingade <[email protected]>
UgaTheDev
force-pushed
the
fix/guidellm-replay-profile-guard
branch
from
July 28, 2026 16:22
b2def77 to
79b3678
Compare
Contributor
Author
|
Signed all commits and registered the SSH signing key on my account, so they verify now. The earlier Apologies for the force-push noise. Signing rewrites the commits, so the SHAs had to change; the diff itself is identical to what you reviewed. |
maugustosilva
approved these changes
Jul 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fixes #1510, specifically the misleading-error half of it (see the note at the end about the image pin).
profile: replay, and any other profile the installed guidellm doesn't know, fails inside guidellm's own argument parsing. The real error gets swallowed and resurfaces as something unrelated. Operators see:when the actual cause is:
so they go and debug
--target, which is fine.This adds a pre-flight check to
guidellm-llm-d-benchmark.shthat reads the workload'sprofilefield and asks the installed guidellm which profiles it actually supports (a smallpython3 -cintrospection ofProfileType | StrategyType) before guidellm is invoked. An unsupported profile now fails fast naming the real cause and the installed guidellm version. If the introspection fails for any reason it fails open, so the guard never blocks a run it couldn't validate, and a workload with noprofilefield is unaffected. The error goes to stderr, matching the precedent inlm-eval-llm-d-benchmark.sh.On why the guard doesn't just pass
--profileand let guidellm validate it: guidellm's--profiledoes validate againstclick.Choice(STRATEGY_PROFILE_CHOICES), but this harness hands the whole workload file over via--scenarioand never passes--profile, so that built-in validation never runs. Reproducing the check in shell keeps the change inside one harness script and avoids depending on--scenario/--profileprecedence that isn't documented.Out of scope: bumping the guidellm pin so
profile: replayactually works.replaycurrently only exists on guidellm's main branch (e.g.73d91f311bd9).build/Dockerfiledoes install from a git commit rather than a PyPI release, so pinning a newer commit is technically possible today, but whether to ship an unreleased guidellm is a maintainer call rather than something this fix should decide.Type of change
How Has This Been Tested?
Added
tests/test_guidellm_profile_guard.py, which extracts the guard block from the shipped script itself (rather than a copy, so the test can't drift from the script) and runs it against fakeyq,python3, andguidellmstubs. Four cases: unsupported profile fails with the real cause, supported profile passes through, a missingprofilefield doesn't block, and introspection failure fails open.Confirmed the tests actually fail without the change by reverting
workload/harnesses/guidellm-llm-d-benchmark.shtomainand re-running: all four fail. Also ranbash -non the script (syntax OK) andruff checkon the new test (clean).Test Configuration
yq/python3/guidellm, so no cluster is involved in exercising it. I don't have a cluster available, so the full standup/run/teardown sequence was not run. Flagging that rather than claiming it.Checklist
./setup/standup.sh->run.sh->./setup/teardown.shsequence completed successfullypre-commit runwas run and all checks passedOn the two unchecked boxes: no cluster available here for the standup/run/teardown sequence, and
pre-commitisn't installed in this environment, so I ranruff checkandpytestdirectly instead. Happy to have CI confirm both. No documentation change seemed warranted for an error-message fix, but say the word if you'd like the profile constraint written down somewhere.