{"record":{"id":"04f43845f3c20fe1","repo":"sgl-project/sglang","slug":"prompt-event-payload-must-be-a-non-empty-string","errorCode":null,"errorMessage":"prompt event payload must be a non-empty string","messagePattern":"prompt event payload must be a non-empty string","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/entrypoints/openai/realtime/adapters/lingbot_world_realtime_adapter.py","lineNumber":184,"sourceCode":"        return state.receive_camera_control_event_payload(\n            payload,\n            event_id=event_id,\n        )\n\n    def _ingest_prompt(\n        self,\n        state: LingBotWorldRealtimeState,\n        payload: Any,\n        event_id: int | None,\n    ) -> str:\n        prompt = self._validate_prompt_payload(payload)\n        state.receive_prompt(prompt, event_id=event_id)\n        return f\"kind=prompt, prompt_len={len(prompt)}\"\n\n    @staticmethod\n    def _validate_prompt_payload(payload: Any) -> str:\n        if not isinstance(payload, str) or not payload:\n            raise ValueError(\"prompt event payload must be a non-empty string\")\n        return payload\n\n    def _ingest_composite_input(\n        self,\n        state: LingBotWorldRealtimeState,\n        payload: Any,\n        event_id: int | None,\n    ) -> str:\n        if not isinstance(payload, dict):\n            raise ValueError(\"composite_input event payload must be a map\")\n        input_types = payload.get(\"input_types\")\n        if not isinstance(input_types, list) or not input_types:\n            raise ValueError(\n                \"composite_input event payload requires non-empty input_types\"\n            )\n\n        parsed_inputs = []\n        for input_type in input_types:","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/entrypoints/openai/realtime/adapters/lingbot_world_realtime_adapter.py#L166-L202","documentation":"_validate_prompt_payload requires the prompt payload (from a prompt event or a composite_input 'prompt' item) to be a non-empty string; None, non-strings, or empty strings are rejected.","triggerScenarios":"Sending a prompt event with payload \"\" or null, or a composite_input item declaring input_types: [\"prompt\"] without a non-empty prompt value.","commonSituations":"Client sends empty prompt to 'kick off' a session; optional prompt field serialized as None by a Python client; whitespace-only is fine but truly empty strings are not.","solutions":["Always include a non-empty prompt string when the event/item declares prompt","Default to a placeholder prompt (e.g. 'continue') if your flow allows empty intent","Skip sending the prompt event entirely when there is no prompt"],"exampleFix":"// before\n{kind: \"prompt\", payload: \"\"}\n// after\n{kind: \"prompt\", payload: \"continue\"}","handlingStrategy":"validation","validationCode":"if not isinstance(prompt, str) or not prompt: prompt = 'continue'","typeGuard":"def is_nonempty_str(x: object) -> bool: return isinstance(x, str) and bool(x)","tryCatchPattern":"except ValueError as e: if 'non-empty string' in str(e): default the prompt and resend","preventionTips":["Default empty prompts client-side","Omit the prompt event when there's nothing to say"],"tags":["realtime","event-validation","prompt","empty-value"],"backgroundTag":"empty-required-field","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}