sgl-project/sglang · error · ValueError

Unsupported dots note omni video_config fields: {sorted fiel

Error message

Unsupported dots note omni video_config fields: {sorted fields joined by ', '}

What it means

Raised by process_mm_data_async when, after popping the known keys (_question, seq, audio_cap, audio_sr, k_mode), video_config still contains entries. Only those whitelisted fields are supported.

Source

Thrown at python/sglang/srt/multimodal/processors/dots_note_omni.py:411

        request_images = len(image_data) if image_data else 0
        request_audios = len(audio_data) if audio_data else 0
        logger.info(
            "[dots_mm] rid=%s request videos=%d images=%d audios=%d",
            request_obj.rid,
            request_videos,
            request_images,
            request_audios,
        )

        if video_data:
            video_config = dict(request_obj.video_config or {})
            question = video_config.pop("_question", "") or ""
            seq = video_config.pop("seq", 131072)
            audio_cap = video_config.pop("audio_cap", 1.0)
            audio_sr = video_config.pop("audio_sr", 16000)
            k_mode = video_config.pop("k_mode", "eval_ek")
            if video_config:
                raise ValueError(
                    "Unsupported dots note omni video_config fields: "
                    + ", ".join(sorted(video_config))
                )
            sampling_params = request_obj.sampling_params or {}
            if not isinstance(sampling_params, dict):
                raise ValueError(
                    "Dots note omni video preprocessing requires one request's "
                    "sampling_params as a dictionary."
                )
            max_new_tokens = sampling_params.get("max_new_tokens") or 0
            loop = asyncio.get_running_loop()
            preprocess_started = time.perf_counter()
            video_media = {}
            total_content_items = 0
            total_frames = 0
            total_audio_segments = 0
            for video_index, video in enumerate(video_data):
                content = await loop.run_in_executor(

View on GitHub (pinned to 0132848349)

Solutions

  1. Remove unsupported keys; keep only seq, audio_cap, audio_sr, k_mode (and internal _question)
  2. Check the error message — it lists the exact offending field names
  3. Fix typos: audio_sr not audio_sample_rate, audio_cap not audio_ratio

Example fix

// before
video_config = {"seq": 131072, "fps": 2, "max_pixels": 224*224}
// after
video_config = {"seq": 131072}
Defensive patterns

Strategy: validation

Validate before calling

ALLOWED = {'seq', 'audio_cap', 'audio_sr', 'k_mode', '_question'}
extra = set(video_config) - ALLOWED
assert not extra, f'unsupported video_config fields: {sorted(extra)}'

Type guard

def valid_video_config(cfg: dict) -> bool:
    return set(cfg) <= {'seq', 'audio_cap', 'audio_sr', 'k_mode', '_question'}

Prevention

When it happens

Trigger: Passing video_config with extra keys such as {"fps": 2, "max_pixels": ...} — anything beyond seq/audio_cap/audio_sr/k_mode/_question triggers the error listing the offending sorted field names.

Common situations: Copy-pasting a video_config from another model's docs (Qwen-VL style fps/max_bytes etc.) into a Dots Note Omni request; or typos like 'audio_sample_rate' instead of 'audio_sr'.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/4730dc8b0badc2df. Report an issue: GitHub.