{"record":{"id":"c98b44f61820209b","repo":"sgl-project/sglang","slug":"unknown-req-type-req-type-r-expected-generate","errorCode":null,"errorMessage":"Unknown req_type: {req_type!r} (expected 'generate' or 'embed')","messagePattern":"Unknown req_type: (.+?) \\(expected 'generate' or 'embed'\\)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/entrypoints/grpc_bridge.py","lineNumber":294,"sourceCode":"            _GrpcRequest(is_disconnected_fn=is_disconnected_fn)\n            if is_disconnected_fn is not None\n            else None\n        )\n        if req_type == \"generate\":\n            from sglang.srt.managers.io_struct import GenerateReqInput\n\n            obj = GenerateReqInput(**req_dict)\n            stream = req_dict.get(\"stream\", False)\n            self._submit_on_tm_loop(\n                self._run_generate(obj, chunk_callback, stream, mock_request)\n            )\n        elif req_type == \"embed\":\n            from sglang.srt.managers.io_struct import EmbeddingReqInput\n\n            obj = EmbeddingReqInput(**req_dict)\n            self._submit_on_tm_loop(self._run_embed(obj, chunk_callback, mock_request))\n        else:\n            raise ValueError(\n                f\"Unknown req_type: {req_type!r} (expected 'generate' or 'embed')\"\n            )\n\n    async def _run_generate(self, obj, chunk_callback, stream: bool, request):\n        ready_event = None\n        gen = None\n        try:\n            ready_event = self._install_on_ready(chunk_callback)\n            gen = self.tokenizer_manager.generate_request(obj, request=request)\n            if stream:\n                completed_choices = set()\n                # generate_request does not normalize obj until iteration begins.\n                sampling_params = obj.sampling_params or {}\n                expected_choices = max(1, int(sampling_params.get(\"n\", 1)))\n                async for chunk in gen:\n                    choice_finished = (\n                        chunk.get(\"meta_info\", {}).get(\"finish_reason\") is not None\n                    )","sourceCodeStart":276,"sourceCodeEnd":312,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/entrypoints/grpc_bridge.py#L276-L312","documentation":"Raised by submit_request in sglang's gRPC bridge when the request dict carries a req_type that is neither 'generate' nor 'embed'. The bridge dispatches solely on those two literals, so any other value (typo, null, or a new request kind) is rejected before an input object is constructed.","triggerScenarios":"Calling submit_request with req_dict['req_type'] set to anything except 'generate' or 'embed' — e.g. 'chat', 'completion', None, or a misspelled key/value — from a gRPC client or a custom servicer adapter.","commonSituations":"Client/server version skew where a newer client sends a new req_type; hand-written request dicts with typos; JSON deserialization defaulting req_type to null when the field was omitted.","solutions":["Set req_type to exactly 'generate' or 'embed' in the request payload before calling submit_request","Validate/normalize req_type on the client before dispatch: map 'chat'/'completion'-style intents to 'generate'","If you need a new request type, patch the dispatch chain in grpc_bridge.py to handle it upstream rather than passing it through"],"exampleFix":"# before\nawait bridge.submit_request({\"req_type\": \"chat\", \"text\": \"hi\"})\n# after\nawait bridge.submit_request({\"req_type\": \"generate\", \"text\": \"hi\"})","handlingStrategy":"validation","validationCode":"req = {\"req_type\": \"generate\", \"text\": \"hi\"}\nassert req.get(\"req_type\") in {\"generate\", \"embed\"}, f\"bad req_type: {req.get('req_type')!r}\"","typeGuard":"def is_valid_req_type(req_dict: dict) -> bool:\n    return req_dict.get(\"req_type\") in (\"generate\", \"embed\")","tryCatchPattern":"try:\n    await bridge.submit_request(req_dict)\nexcept ValueError as e:\n    if \"Unknown req_type\" in str(e):\n        raise ValueError(\"req_type must be 'generate' or 'embed'\") from e\n    raise","preventionTips":["Always set req_type explicitly rather than relying on defaults","Validate request dicts against the bridge's supported req_type set before submission"],"tags":["grpc","request-validation","dispatch","sglang"],"backgroundTag":"invalid-request-payload","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}