Add a new request to the queue. Args: task: Request A dictionary representing the request. sampling_params: A dictionary representing the sampling parameters. Returns: None
(self, task, sampling_params=None, **kwargs)
| 253 | ) |
| 254 | |
| 255 | def add_requests(self, task, sampling_params=None, **kwargs): |
| 256 | """ |
| 257 | Add a new request to the queue. |
| 258 | |
| 259 | Args: |
| 260 | task: Request A dictionary representing the request. |
| 261 | sampling_params: A dictionary representing the sampling parameters. |
| 262 | |
| 263 | Returns: |
| 264 | None |
| 265 | """ |
| 266 | # TODO 输入输出长度确认 |
| 267 | |
| 268 | if sampling_params is not None: |
| 269 | task.update(asdict(sampling_params)) |
| 270 | request = Request.from_dict(task) |
| 271 | request.metrics.scheduler_recv_req_time = time.time() |
| 272 | llm_logger.info(f"Receive request {request}") |
| 273 | if sampling_params is not None: |
| 274 | if sampling_params.temperature is not None and abs(sampling_params.temperature) < 1e-06: |
| 275 | sampling_params.temperature = 1e-06 |
| 276 | request.sampling_params = sampling_params |
| 277 | request.metrics.preprocess_start_time = time.time() |
| 278 | chat_template_kwargs = kwargs.get("chat_template_kwargs") or {} |
| 279 | chat_template_kwargs["chat_template"] = kwargs.get("chat_template") |
| 280 | kwargs["chat_template_kwargs"] = chat_template_kwargs |
| 281 | request = self.engine.data_processor.process_request(request, self.cfg.model_config.max_model_len, **kwargs) |
| 282 | request.prompt_token_ids_len = len(request.prompt_token_ids) |
| 283 | request.need_prefill_tokens = request.prompt_token_ids_len |
| 284 | input_ids_len = request.prompt_token_ids_len |
| 285 | request.set( |
| 286 | "max_tokens", |
| 287 | min( |
| 288 | self.cfg.model_config.max_model_len - input_ids_len, |
| 289 | request.get("max_tokens"), |
| 290 | ), |
| 291 | ) |
| 292 | min_tokens = request.get("min_tokens") |
| 293 | if input_ids_len + min_tokens >= self.cfg.model_config.max_model_len: |
| 294 | error_msg = ( |
| 295 | f"Input text is too long, length of prompt token({input_ids_len}) " |
| 296 | f"+ min_dec_len ({min_tokens}) >= max_model_len " |
| 297 | ) |
| 298 | llm_logger.error(error_msg) |
| 299 | raise EngineError(error_msg, error_code=400) |
| 300 | |
| 301 | if input_ids_len > self.cfg.model_config.max_model_len: |
| 302 | error_msg = f"Length of input token({input_ids_len}) exceeds the limit max_model_len({self.cfg.model_config.max_model_len})." |
| 303 | llm_logger.error(error_msg) |
| 304 | raise EngineError(error_msg, error_code=400) |
| 305 | |
| 306 | if request.get("stop_seqs_len") is not None: |
| 307 | stop_seqs_len = request.get("stop_seqs_len") |
| 308 | max_stop_seqs_num = envs.FD_MAX_STOP_SEQS_NUM |
| 309 | if len(stop_seqs_len) > max_stop_seqs_num: |
| 310 | error_msg = ( |
| 311 | f"Length of stop ({stop_seqs_len}) exceeds the limit max_stop_seqs_num({max_stop_seqs_num})." |
| 312 | "Please reduce the number of stop or set a lager max_stop_seqs_num by `FD_MAX_STOP_SEQS_NUM`" |