sgl-project/sglang · error · NotImplementedError
MiniMaxH3TextEncodingStage direct Qwen3VL encoder forward re
Error message
MiniMaxH3TextEncodingStage direct Qwen3VL encoder forward requires a canonical minimax_h3 request (resolved plan); legacy prompt-only requests are unsupported.
What it means
The stage only accepts canonical MiniMax H3 requests carrying a resolved plan; if sampling_params still carries a raw prompt or prompt_path (the legacy prompt-only interface), forward() raises NotImplementedError. This is a deliberate gate: direct Qwen3VL encoder forward must be driven by the resolved plan, not free-text prompts.
Source
Thrown at python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/stages/text_encoding.py:80
),
)
self._publish_native_text_conditioning(batch)
if current_platform.is_mps():
self._finish_active_component_use()
except Exception:
from sglang.multimodal_gen.runtime.pipelines_core.stages.model_specific_stages.minimax_h3.material_io import (
minimax_h3_cleanup_temp_dirs,
)
batch.extra.pop(MINIMAX_H3_PREPARED_REFERENCE_VIDEO_EXTRA_KEY, None)
minimax_h3_cleanup_temp_dirs(batch)
raise
return batch
if batch.sampling_params is not None and (
batch.sampling_params.prompt is not None
or batch.sampling_params.prompt_path is not None
):
raise NotImplementedError(
"MiniMaxH3TextEncodingStage direct Qwen3VL encoder forward requires "
"a canonical minimax_h3 request (resolved plan); legacy prompt-only "
"requests are unsupported."
)
return batch
def build_dedup_fingerprint(self, batch: Req, server_args: ServerArgs):
from sglang.multimodal_gen.runtime.pipelines_core.stages.model_specific_stages.minimax_h3.resolved_plan import (
minimax_h3_plan_from_batch,
)
plan = minimax_h3_plan_from_batch(batch)
if plan is None:
return super().build_dedup_fingerprint(batch, server_args)
materials = tuple(
(
item.condition_index,
item.role,View on GitHub (pinned to 0132848349)
Solutions
- Submit requests through the canonical MiniMax H3 request API so they arrive with a resolved plan and no raw prompt fields
- Clear sampling_params.prompt / prompt_path when building batches programmatically
- Update legacy callers to the plan-based request format
Example fix
// before batch.sampling_params.prompt = "a cat playing piano" // after batch.sampling_params.prompt = None # use a resolved minimax_h3 plan instead batch.plan = resolve_minimax_h3_request(request)
Defensive patterns
Strategy: validation
Validate before calling
sp = batch.sampling_params
if sp is not None and (sp.prompt is not None or sp.prompt_path is not None):
batch = resolve_minimax_h3_request(sp) # convert to canonical plan Type guard
def is_canonical_minimax_request(batch) -> bool:
sp = batch.sampling_params
return sp is None or (sp.prompt is None and sp.prompt_path is None) Prevention
- Migrate legacy prompt-based callers to plan-based requests
- Clear prompt fields after plan resolution when building batches
When it happens
Trigger: forward() sees batch.sampling_params is not None and sampling_params.prompt or sampling_params.prompt_path is not None on a request that lacks a usable resolved plan path.
Common situations: Porting old code that passed text prompts directly to the diffusion pipeline; requests routed to the new stage without going through plan resolution; prompt leftover fields not cleared after resolution.
Related errors
- MiniMaxH3AudioEncodingStage direct audio tokenizer encode re
- MiniMax H3 ring parallelism requires the FlashAttention back
- ref2va video preparation requires a video or video_audio ref
- /v1/models ${response.status}
- Unsupported msgpack byte ${b}
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/78272663e81f9849.
Report an issue: GitHub.