@@ -108,6 +108,11 @@ def handle_speculative_decoding(server_args: "ServerArgs") -> None:
108108 f"speculative_algorithm == EAGLE, got { server_args .speculative_algorithm } ."
109109 )
110110
111+ if server_args .speculative_adaptive :
112+ _maybe_disable_adaptive (server_args )
113+ if server_args .speculative_adaptive :
114+ _init_adaptive_speculative_params (server_args )
115+
111116 if server_args .speculative_algorithm == "DFLASH" :
112117 _handle_dflash (server_args )
113118 elif server_args .speculative_algorithm == "FROZEN_KV_MTP" :
@@ -117,18 +122,6 @@ def handle_speculative_decoding(server_args: "ServerArgs") -> None:
117122 elif server_args .speculative_algorithm == "NGRAM" :
118123 _handle_ngram (server_args )
119124
120- if server_args .speculative_adaptive :
121- _maybe_disable_adaptive (server_args )
122- if server_args .speculative_adaptive :
123- from sglang .srt .speculative .adaptive_spec_params import (
124- validate_adaptive_initial_steps ,
125- )
126-
127- validate_adaptive_initial_steps (
128- server_args .speculative_num_steps ,
129- server_args .speculative_adaptive_config ,
130- )
131-
132125
133126def _handle_dflash (server_args : "ServerArgs" ) -> None :
134127 if server_args .enable_dp_attention :
@@ -356,7 +349,10 @@ def _handle_eagle_family(server_args: "ServerArgs") -> None:
356349 "DeepSeek MTP does not require setting speculative_draft_model_path."
357350 )
358351
359- if server_args .speculative_num_steps is None :
352+ if (
353+ not server_args .speculative_adaptive
354+ and server_args .speculative_num_steps is None
355+ ):
360356 assert (
361357 server_args .speculative_eagle_topk is None
362358 and server_args .speculative_num_draft_tokens is None
@@ -472,3 +468,31 @@ def _maybe_disable_adaptive(server_args: "ServerArgs") -> None:
472468 "Falling back to static speculative params."
473469 )
474470 server_args .speculative_adaptive = False
471+
472+
473+ def _init_adaptive_speculative_params (server_args : "ServerArgs" ) -> None :
474+ from sglang .srt .speculative .adaptive_spec_params import (
475+ resolve_candidate_steps_from_config ,
476+ )
477+
478+ candidate_steps = resolve_candidate_steps_from_config (
479+ cfg_path = server_args .speculative_adaptive_config ,
480+ )
481+
482+ if server_args .speculative_eagle_topk is None :
483+ server_args .speculative_eagle_topk = 1
484+
485+ if server_args .speculative_num_steps is None :
486+ server_args .speculative_num_steps = candidate_steps [len (candidate_steps ) // 2 ]
487+
488+ if server_args .speculative_num_steps not in candidate_steps :
489+ raise ValueError (
490+ f"--speculative-num-steps={ server_args .speculative_num_steps } "
491+ f"is not in the adaptive config candidate_steps { candidate_steps } . "
492+ "Pass one of those values."
493+ )
494+
495+ server_args .speculative_num_draft_tokens = (
496+ server_args .speculative_num_steps + 1
497+ )
498+
0 commit comments