Repository navigation
fix(llm): honor prompt-open MiniMax M3 reasoning with guided decoding - #18017
Conversation
❌ Dynamo PR CI failed — run 41786205172 (attempt 1) on
|
| Other | Jobs |
|---|---|
| dynamo-runtime | ❌ 2 ✅ 5 |
| planner | ❌ 2 ✅ 3 |
Failure details
4 jobs failed on both amd64 and arm64. 2 planner tests fail because the frontend/worker parser rejects --router-mode power-of-two (invalid choice). The dynamo-runtime sequential jobs also fail test_no_registered_env_var_is_read_from_os_environ, where reject_media_status_code reads 0 from the environment instead of the default 415. No jobs were cancelled.
❌ planner / CPU Test cpu, arm64: --router-mode invalid choice 'power-of-two'
Job: planner / CPU Test cpu, arm64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 126433382032 -R ai-dynamo/dynamo --log-failed
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two] - AssertionError: P4: cannot parse the frontend args: argument --router-mode: invalid choice: 'power-of-two' (choose from 'round-robin', 'random', 'kv', 'direct', 'least-loaded', 'device-aware-weighted')
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3] - SystemExit: 2
============ 2 failed, 4170 passed, 30 skipped in 589.99s (0:09:49) ============
Two tests in test_live_retune_frontend_config.py pass --router-mode power-of-two, and argparse rejects it because power-of-two is not in the --router-mode choices (round-robin, random, kv, direct, least-loaded, device-aware-weighted). The SystemExit: 2 in the worker-parser test is the same argparse error.
❌ planner / CPU Test cpu, amd64: --router-mode invalid choice 'power-of-two'
Job: planner / CPU Test cpu, amd64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 126433382212 -R ai-dynamo/dynamo --log-failed
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two] - AssertionError: P4: cannot parse the frontend args: argument --router-mode: invalid choice: 'power-of-two' (...)
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3] - SystemExit: 2
============ 2 failed, 4170 passed, 30 skipped in 448.91s (0:07:28) ============
Same 2 tests fail with the same error as on arm64.
❌ dynamo-runtime / test / sequential cuda13.0, amd64: reject_media_status_code 0 != 415 + router-mode 'power-of-two'
Job: dynamo-runtime / test / sequential cuda13.0, amd64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 126434707536 -R ai-dynamo/dynamo --log-failed
components/src/dynamo/frontend/tests/test_frontend_parser_builder.py:62: in test_no_registered_env_var_is_read_from_os_environ
assert vars(parser.parse_args([])) == defaults, sentinel
E AssertionError: 0
E Differing items:
E {'reject_media_status_code': 0} != {'reject_media_status_code': 415}
...
FAILED components/src/dynamo/frontend/tests/test_frontend_parser_builder.py::test_no_registered_env_var_is_read_from_os_environ - AssertionError: 0
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two] - AssertionError: P4: cannot parse the frontend args: argument --router-mode: invalid choice: 'power-of-two' (...)
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3] - SystemExit: 2
== 3 failed, 7783 passed, 170 skipped, 2854 deselected in 1534.51s (0:25:34) ===
This job has the same 2 planner power-of-two failures. It also fails test_no_registered_env_var_is_read_from_os_environ: with the sentinel 0 set for each registered env var, the parser still reads one of them for reject_media_status_code and returns 0 instead of the default 415.
❌ dynamo-runtime / test / sequential cuda13.0, arm64: reject_media_status_code 0 != 415 + router-mode 'power-of-two'
Job: dynamo-runtime / test / sequential cuda13.0, arm64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 126434707578 -R ai-dynamo/dynamo --log-failed
FAILED components/src/dynamo/frontend/tests/test_frontend_parser_builder.py::test_no_registered_env_var_is_read_from_os_environ - AssertionError: 0
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two] - AssertionError: P4: cannot parse the frontend args: argument --router-mode: invalid choice: 'power-of-two' (...)
FAILED components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3] - SystemExit: 2
== 3 failed, 7783 passed, 170 skipped, 2854 deselected in 1954.32s (0:32:34) ===
Same 3 failures as the amd64 sequential job.
For agents
{"pr": 18017, "run_id": 41786205172, "run_attempt": 1, "head_sha": "81db071276622e1c29447886f35773ffeafb6a50",
"failures": [
{"job": "planner / CPU Test cpu, arm64", "job_id": 126433382032, "failed_step": "Run CPU-only tests (parallelized)", "signature": "argument --router-mode: invalid choice: 'power-of-two'", "tests": ["components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two]", "components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3]"], "log_cmd": "gh run view --job 126433382032 -R ai-dynamo/dynamo --log-failed"},
{"job": "planner / CPU Test cpu, amd64", "job_id": 126433382212, "failed_step": "Run CPU-only tests (parallelized)", "signature": "argument --router-mode: invalid choice: 'power-of-two'", "tests": ["components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two]", "components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3]"], "log_cmd": "gh run view --job 126433382212 -R ai-dynamo/dynamo --log-failed"},
{"job": "dynamo-runtime / test / sequential cuda13.0, amd64", "job_id": 126434707536, "failed_step": "Run CPU-only tests (parallelized)", "signature": "reject_media_status_code 0 != 415; --router-mode invalid choice 'power-of-two'", "tests": ["components/src/dynamo/frontend/tests/test_frontend_parser_builder.py::test_no_registered_env_var_is_read_from_os_environ", "components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two]", "components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3]"], "log_cmd": "gh run view --job 126434707536 -R ai-dynamo/dynamo --log-failed"},
{"job": "dynamo-runtime / test / sequential cuda13.0, arm64", "job_id": 126434707578, "failed_step": "Run CPU-only tests (parallelized)", "signature": "reject_media_status_code 0 != 415; --router-mode invalid choice 'power-of-two'", "tests": ["components/src/dynamo/frontend/tests/test_frontend_parser_builder.py::test_no_registered_env_var_is_read_from_os_environ", "components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_effective_argv[command7-args7-power_of_two]", "components/src/dynamo/planner/tests/unit/test_live_retune_frontend_config.py::test_worker_router_mode_matches_the_real_worker_parser[args3-env3]"], "log_cmd": "gh run view --job 126434707578 -R ai-dynamo/dynamo --log-failed"}
]}Posted automatically by Devin for run 41786205172. Updated on every full-CI run of this PR.
|
No actionable comments were generated in the recent review. WalkthroughMiniMax M3 explicit guided requests now preserve reasoning when the rendered prompt opens a reasoning section across Unified and legacy parsing. Unified parser prefill decisions no longer use the separate ChangesMiniMax M3 guided reasoning
Estimated code review effort: 3 (Moderate) | ~25 minutes Merge Risk:
|
Signed-off-by: furionw <qiwa@nvidia.com>
Signed-off-by: furionw <qiwa@nvidia.com>
The routing table's auto row pointed readers at the reasoning-only Qwen/Nemotron exception, which reviewers found more confusing than helpful. The exception stays documented in the paragraph below. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: furionw <qiwa@nvidia.com>
81db071 to
794fc22
Compare
Overview
MiniMax M3 explicit
guided_*overrides a prompt-open reasoning state, buffering thoughts and returning truncated or bracket-led reasoning as content. Trust the rendered prompt and defer SGLang's answer grammar through its existing request signal. Workers must configure both Dynamo and engine reasoning parsers.Key Changes
32 added core-logic lines, excluding tests, comments, and whitespace; 56 removed.
explicit_guidanceand its output probes.Validation
test_minimax_m3_explicit_guidance_keeps_prompt_seeded_reasoningandtest_minimax_m3_explicit_guidance_defers_grammar_only_for_prompt_opened_reasoningfail on base182039dbb5and pass here. All 18 focused M3 tests pass, including isolated Auto/V1/V2 runs and HTTP aggregation options.guided_*, prompt ends in<mm:think>require_reasoning=falserequire_reasoning=trueThe earlier full-library run at
1590553f84had 3,773 passes, 13 ignored tests, and five failures. Three networking failures passed isolated reruns. The remaining gRPC metrics-bind timeout and mocker handoff KV-visibility assertion also fail on unchanged base production code.CPU frontend verification only; engine fixes and model qualification remain separate.
Issues and Ongoing Work
Closes DIS-3338. Routing documentation also refs DYN-5376.
Follows #17236, which already streams answers to prompts without an open thought on the default route; this PR does not change that, and
DYN_PARSER_VERSION=1still delivers them in the final chunk. #18015 and #14934 cover keep-alives and generic EOF handling.Pull Request Checklist
/pr-checklistskill.Summary by CodeRabbit