@@ -7,7 +7,7 @@ use crate::openai::distributed::{
77 embedding, Comm , ReplicatedLinear , VarBuilder , VocabParallelLinear ,
88} ;
99use crate :: openai:: models:: layers:: moe:: {
10- FusedMoe , FusedMoeFp8 , FusedMoeISQ , FusedMoeMxfp4 , FusedMoeNvfp4 ,
10+ FusedMoe , FusedMoeFp8 , FusedMoeISQ , FusedMoeMxfp4 , FusedMoeNvfp4 , FusedMoeWNA16 ,
1111} ;
1212use crate :: openai:: models:: layers:: others:: { rms_norm, NormX } ;
1313use crate :: openai:: models:: mask:: get_attention_causal_mask;
@@ -201,6 +201,7 @@ enum Gemma4MoE {
201201 FusedMoeFp8 ( FusedMoeFp8 ) ,
202202 FusedMoeMxfp4 ( FusedMoeMxfp4 ) ,
203203 FusedMoeNvfp4 ( FusedMoeNvfp4 ) ,
204+ FusedMoeWNA16 ( FusedMoeWNA16 ) ,
204205}
205206
206207impl Gemma4MoE {
@@ -211,6 +212,7 @@ impl Gemma4MoE {
211212 Self :: FusedMoeFp8 ( m) => m. forward ( xs, is_prefill) ,
212213 Self :: FusedMoeMxfp4 ( m) => m. forward ( xs, is_prefill) ,
213214 Self :: FusedMoeNvfp4 ( m) => m. forward ( xs, is_prefill) ,
215+ Self :: FusedMoeWNA16 ( m) => m. forward ( xs, is_prefill) ,
214216 }
215217 }
216218
@@ -231,6 +233,9 @@ impl Gemma4MoE {
231233 Self :: FusedMoeNvfp4 ( m) => {
232234 m. forward_with_routing ( xs, topk_weights, topk_ids, is_prefill)
233235 }
236+ Self :: FusedMoeWNA16 ( m) => {
237+ m. forward_with_routing ( xs, topk_weights, topk_ids, is_prefill)
238+ }
234239 }
235240 }
236241}
@@ -333,6 +338,16 @@ impl Gemma4DecoderLayer {
333338 comm. clone ( ) ,
334339 dtype,
335340 ) ?)
341+ } else if quant_cfg. is_compressed_tensors {
342+ Gemma4MoE :: FusedMoeWNA16 ( FusedMoeWNA16 :: new_with_gate (
343+ cfg,
344+ vb. pp ( "router" ) . pp ( "proj" ) ,
345+ vb. pp ( "experts" ) ,
346+ & vb,
347+ comm. clone ( ) ,
348+ dtype,
349+ quant_cfg,
350+ ) ?)
336351 } else {
337352 candle:: bail!(
338353 "Unsupported quantization for Gemma4 MoE: {}" ,
0 commit comments