diff --git a/vllm/config.py b/vllm/config.py index 86c3b9eae64cb..1dfc746e2002d 100644 --- a/vllm/config.py +++ b/vllm/config.py @@ -723,11 +723,16 @@ class ModelConfig: ) # Workaround for Gemma 2 which uses interleaved sliding window - # attention, but it's not specified in its config. TODO: remove this - # when Gemma 2 is fixed in Transformers. + # attention, but it's not specified in its config. + # TODO: remove this when Gemma 2 config updated in HuggingFace. if self.hf_text_config.model_type == "gemma2": self.hf_text_config.sliding_window_pattern = 2 + # TODO: remove this when Gemma 3n config updated in HuggingFace. + if self.hf_text_config.model_type == "gemma3n_text": + # 4 sliding window attention followed by 1 full attention + self.hf_text_config.sliding_window_pattern = "LLLLG" + sliding_window = getattr(self.hf_text_config, "sliding_window", None) sliding_window_pattern = getattr(self.hf_text_config, "sliding_window_pattern", None) diff --git a/vllm/model_executor/models/gemma3n.py b/vllm/model_executor/models/gemma3n.py index 7d163320e0d6a..168665cc29655 100644 --- a/vllm/model_executor/models/gemma3n.py +++ b/vllm/model_executor/models/gemma3n.py @@ -297,8 +297,13 @@ class Gemma3nAttention(nn.Module): has_weight=False) layer_idx = extract_layer_index(prefix) - if config.layer_types[layer_idx] == "sliding_attention": - self.sliding_window = config.sliding_window + + is_sliding_window = ( + getattr(config, "interleaved_sliding_window", None) is not None + and config.layer_types[layer_idx] == "sliding_attention") + + if is_sliding_window: + self.sliding_window = config.interleaved_sliding_window rope_theta = config.rope_local_base_freq rope_scaling = {"rope_type": "default"} else: