{"record":{"id":"0b8d86d7845b22aa","repo":"sgl-project/sglang","slug":"data-parallel-rank-is-deprecated-use-routed-dp-0b8d86","errorCode":null,"errorMessage":"'data_parallel_rank' is deprecated, use 'routed_dp_rank' instead.","messagePattern":"'data_parallel_rank' is deprecated, use 'routed_dp_rank' instead\\.","errorType":"console","errorClass":"DeprecationWarning","httpStatus":null,"severity":"warning","filePath":"python/sglang/srt/entrypoints/openai/protocol.py","lineNumber":318,"sourceCode":"    error_file_id: Optional[str] = None\n    created_at: int\n    in_progress_at: Optional[int] = None\n    expires_at: Optional[int] = None\n    finalizing_at: Optional[int] = None\n    completed_at: Optional[int] = None\n    failed_at: Optional[int] = None\n    expired_at: Optional[int] = None\n    cancelling_at: Optional[int] = None\n    cancelled_at: Optional[int] = None\n    request_counts: Optional[dict] = None\n    metadata: Optional[dict] = None\n\n\ndef _migrate_deprecated_dp_rank(values: dict) -> dict:\n    if isinstance(values, dict) and values.get(\"data_parallel_rank\") is not None:\n        import warnings\n\n        warnings.warn(\n            \"'data_parallel_rank' is deprecated, use 'routed_dp_rank' instead.\",\n            DeprecationWarning,\n            stacklevel=2,\n        )\n        if values.get(\"routed_dp_rank\") is None:\n            values[\"routed_dp_rank\"] = values[\"data_parallel_rank\"]\n    return values\n\n\nclass CompletionRequest(BaseModel):\n    # Ordered by official OpenAI API documentation\n    # https://platform.openai.com/docs/api-reference/completions/create\n    model: str = Field(\n        default=DEFAULT_MODEL_NAME,\n        description=\"Model name. Supports LoRA adapters via 'base-model:adapter-name' syntax.\",\n    )\n    prompt: Union[List[int], List[List[int]], str, List[str]]\n    best_of: Optional[int] = None","sourceCodeStart":300,"sourceCodeEnd":336,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/entrypoints/openai/protocol.py#L300-L336","documentation":"OpenAI-style protocol requests accepted a data_parallel_rank field. The request model migrates it to routed_dp_rank (only when routed_dp_rank is absent) and warns. Requests keep working during the transition period.","triggerScenarios":"Sending a JSON request body containing data_parallel_rank to an sglang OpenAI-compatible endpoint (/generate, /v1/chat/completions variants that accept it).","commonSituations":"Client SDKs or load-test scripts written against older sglang releases; DP routing middleware that pins a rank per request.","solutions":["Change the request field to routed_dp_rank","Audit clients/SDKs for the old field name and update","Add a CI lint/grep for data_parallel_rank to catch regressions before the alias is removed"],"exampleFix":"# before\n{\"text\": \"hi\", \"sampling_params\": {...}, \"data_parallel_rank\": 1}\n# after\n{\"text\": \"hi\", \"sampling_params\": {...}, \"routed_dp_rank\": 1}","handlingStrategy":"validation","validationCode":"body.pop(\"data_parallel_rank\", None)\nbody.setdefault(\"routed_dp_rank\", old_rank) if old_rank is not None else None","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep client SDK field names in sync with server release notes","Contract tests that reject deprecated request fields"],"tags":["deprecation","openai-api","data-parallel","protocol","migration"],"backgroundTag":"deprecated-request-field","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}