diff --git a/vllm/model_executor/models/qwen3.py b/vllm/model_executor/models/qwen3.py index a21f5b3b89c..cf136db5be4 100644 --- a/vllm/model_executor/models/qwen3.py +++ b/vllm/model_executor/models/qwen3.py @@ -78,6 +78,7 @@ class Qwen3Attention(nn.Module): prefix: str = "", attn_type: str = AttentionType.DECODER, dual_chunk_attention_config: dict[str, Any] | None = None, + per_layer_sliding_window: int | None = None, ) -> None: super().__init__() self.hidden_size = hidden_size @@ -136,6 +137,7 @@ class Qwen3Attention(nn.Module): num_kv_heads=self.num_kv_heads, cache_config=cache_config, quant_config=quant_config, + per_layer_sliding_window=per_layer_sliding_window, prefix=f"{prefix}.attn", attn_type=attn_type, **{ @@ -175,6 +177,7 @@ class Qwen3DecoderLayer(nn.Module): cache_config: CacheConfig | None = None, quant_config: QuantizationConfig | None = None, prefix: str = "", + per_layer_sliding_window: int | None = None, ) -> None: super().__init__() self.hidden_size = config.hidden_size @@ -206,6 +209,7 @@ class Qwen3DecoderLayer(nn.Module): prefix=f"{prefix}.self_attn", attn_type=attn_type, dual_chunk_attention_config=dual_chunk_attention_config, + per_layer_sliding_window=per_layer_sliding_window, ) self.mlp = Qwen3MLP( hidden_size=self.hidden_size, diff --git a/vllm/model_executor/models/qwen3_eagle3.py b/vllm/model_executor/models/qwen3_eagle3.py index a54d56cc042..3255c65e273 100644 --- a/vllm/model_executor/models/qwen3_eagle3.py +++ b/vllm/model_executor/models/qwen3_eagle3.py @@ -43,11 +43,22 @@ class Qwen3Eagle3DecoderLayer(Qwen3DecoderLayer): cache_config = vllm_config.cache_config quant_config = get_draft_quant_config(vllm_config) + # Resolve per-layer sliding window from draft config + sliding_window = None + layer_types = getattr(config, "layer_types", None) + if ( + layer_types + and layer_idx < len(layer_types) + and layer_types[layer_idx] == "sliding_attention" + ): + sliding_window = getattr(config, "sliding_window", None) + super().__init__( config=config, cache_config=cache_config, quant_config=quant_config, prefix=prefix, + per_layer_sliding_window=sliding_window, ) # First layer uses 2*hidden_size (embeds + hidden_states concatenated)