{"record":{"id":"c5432cea87a2e9b5","repo":"sgl-project/sglang","slug":"no-embedding-available-for-request-state-req-id","errorCode":null,"errorMessage":"No embedding available for request: {state.req_id}","messagePattern":"No embedding available for request: (.+?)","errorType":"http","errorClass":"InternalError","httpStatus":500,"severity":"error","filePath":"python/sglang/srt/disaggregation/encoder/server.py","lineNumber":669,"sourceCode":"        metadata = state.embedding_data\n        if (\n            metadata is not None\n            and metadata.embedding is None\n            and mm_data.embedding is not None\n            and (metadata.shape != mm_data.shape or metadata.dtype != mm_data.dtype)\n        ):\n            raise InternalError(\n                f\"Embedding metadata mismatch for {mm_data.req_id}: \"\n                f\"expected={metadata.shape}/{metadata.dtype}, \"\n                f\"actual={mm_data.shape}/{mm_data.dtype}\"\n            )\n        state.embedding_data = mm_data\n        state.embedding_ready.set()\n\n    async def _wait_for_embedding(self, state: ReqState) -> EmbeddingData:\n        await state.embedding_ready.wait()\n        if state.embedding_data is None:\n            raise InternalError(f\"No embedding available for request: {state.req_id}\")\n        return state.embedding_data\n\n    async def send_to_destination(\n        self, state: ReqState, destination: SendDestination\n    ) -> None:\n        async with state.lifecycle_condition:\n            if (\n                self.req_states.get(state.req_id) is not state\n                or state.release_requested\n            ):\n                raise InternalError(f\"Encoder request was released: {state.req_id}\")\n            state.active_sends += 1\n        try:\n            await self.delivery.send(state, destination)\n        finally:\n            async with state.lifecycle_condition:\n                state.active_sends -= 1\n                state.lifecycle_condition.notify_all()","sourceCodeStart":651,"sourceCodeEnd":687,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/disaggregation/encoder/server.py#L651-L687","documentation":"After awaiting state.embedding_ready, the embedding_data field is still None, meaning the ready event was set by a completion/failure path that did not attach embedding data. The server raises InternalError because it cannot return an EmbeddingData for the request.","triggerScenarios":"The encode task for a req_id fails or is cancelled and sets embedding_ready without populating state.embedding_data; then _wait_for_embedding (called from send) wakes up and finds None.","commonSituations":"Encoder worker exception or GPU error marking the request ready-to-fail without an error path that surfaces the cause; a release/cancellation path setting the event; race between error handling and the send path; failed encode task leaving the state half-initialized.","solutions":["Inspect encoder logs for the encode-task exception that set embedding_ready without data — the root cause happened earlier","Ensure encode failures store an error on ReqState and callers check it before send","Re-run the request with a fresh req_id after cleaning up state via release_request","If reproducible, attach a debugger around the encode task to see which path sets embedding_ready with embedding_data=None"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    emb = await encoder._wait_for_embedding(state)\nexcept InternalError:\n    log.error('encode produced no embedding for %s', state.req_id)\n    await encoder.release_request(state.req_id)\n    raise","preventionTips":["Surface encode-task exceptions through a state.error field","Always pair embedding_ready.set() with either data or an explicit error","Cancel dependent sends when an encode task fails"],"tags":["internal","encoder","state-machine","race-condition"],"backgroundTag":"internal-state-inconsistency","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}