| 239 | |
| 240 | @classmethod |
| 241 | def from_generic_request( |
| 242 | cls, |
| 243 | req: T, |
| 244 | request_id: Optional[str] = None, |
| 245 | prompt: Optional[Union[str, list[int]]] = None, |
| 246 | pooling_params: Optional[PoolingParams] = None, |
| 247 | ): |
| 248 | if request_id is not None: |
| 249 | setattr(req, "request_id", request_id) |
| 250 | |
| 251 | if pooling_params is None: |
| 252 | sampling_params = SamplingParams.from_generic_request(req) |
| 253 | else: |
| 254 | sampling_params = SamplingParams() |
| 255 | |
| 256 | guided_json_object = cls._process_guided_json(req) |
| 257 | |
| 258 | metrics = RequestMetrics() |
| 259 | request = cls( |
| 260 | request_id=getattr(req, "request_id", None), |
| 261 | prompt_token_ids=getattr(req, "prompt_token_ids", None), |
| 262 | prompt=prompt, |
| 263 | sampling_params=sampling_params, |
| 264 | pooling_params=pooling_params, |
| 265 | metrics=metrics, |
| 266 | guided_json_object=guided_json_object, |
| 267 | disaggregate_info=getattr(req, "disaggregate_info", None), |
| 268 | guided_json=getattr(req, "guided_json", None), |
| 269 | guided_regex=getattr(req, "guided_regex", None), |
| 270 | guided_choice=getattr(req, "guided_choice", None), |
| 271 | guided_grammar=getattr(req, "guided_grammar", None), |
| 272 | user=getattr(req, "user", None), |
| 273 | response_format=( |
| 274 | getattr(req, "response_format", None).model_dump() |
| 275 | if (hasattr(getattr(req, "response_format", None), "model_dump")) |
| 276 | else None |
| 277 | ), |
| 278 | mm_hashes=getattr(req, "mm_hashes", None), |
| 279 | add_special_tokens=getattr(req, "add_special_tokens", False), |
| 280 | ) |
| 281 | |
| 282 | if hasattr(req, "messages"): |
| 283 | if hasattr(req, "prompt_token_ids") and not req.prompt_token_ids: |
| 284 | # If disable_chat_template is set, then the first message in messages will be used as the prompt. |
| 285 | assert len(req.messages) > 0, "messages can not be an empty list, unless prompt_token_ids is passed" |
| 286 | if req.disable_chat_template: |
| 287 | request.prompt = req.messages[0]["content"] |
| 288 | request.messages = [] |
| 289 | request.messages = getattr(req, "messages", None) |
| 290 | request.tools = ( |
| 291 | [tool.model_dump() for tool in getattr(req, "tools", [])] if getattr(req, "tools", None) else None |
| 292 | ) |
| 293 | request.reasoning_max_tokens = getattr(req, "reasoning_max_tokens", None) |
| 294 | request.disable_chat_template = getattr(req, "disable_chat_template", None) |
| 295 | request.top_logprobs = getattr(req, "top_logprobs", None) |
| 296 | request.structural_tag = getattr(req, "structural_tag", None) |
| 297 | request.chat_template = getattr(req, "chat_template", None) |
| 298 | request.ic_req_data = getattr(req, "ic_req_data", None) |