---
id: pr-vllm-30623
repo: vllm-project/vllm
pr: 30623
title: '[MoE Refactor] Separate Router into OO Classes'
author: bnellnm
date: '2026-01-18'
url: https://github.com/vllm-project/vllm/pull/30623
source_category: upstream-code
architectures:
- sm100
tags: []
techniques: []
hardware_features: []
kernel_types: []
languages: []
captured_at: '2026-05-16'
status: merged
merge_sha: 327a02d8db86e57f2488779b0c1b133da5f03fb5
inclusion_reason: defer
changed_paths:
- tests/kernels/moe/modular_kernel_tools/common.py
- tests/kernels/moe/test_batched_moe.py
- tests/kernels/moe/test_block_fp8.py
- tests/kernels/moe/test_cutlass_moe.py
- tests/kernels/moe/test_flashinfer_moe.py
- tests/kernels/moe/test_grouped_topk.py
- tests/kernels/moe/test_moe.py
- tests/kernels/moe/test_moe_permute_unpermute.py
- tests/kernels/moe/test_nvfp4_moe.py
- tests/kernels/moe/test_pplx_cutlass_moe.py
- tests/kernels/moe/test_routing.py
- tests/kernels/moe/test_routing_simulator.py
- tests/model_executor/test_enabled_custom_ops.py
- vllm/distributed/eplb/eplb_state.py
- vllm/model_executor/layers/fused_moe/__init__.py
- vllm/model_executor/layers/fused_moe/config.py
- vllm/model_executor/layers/fused_moe/fused_moe.py
- vllm/model_executor/layers/fused_moe/fused_moe_method_base.py
- vllm/model_executor/layers/fused_moe/fused_moe_modular_method.py
- vllm/model_executor/layers/fused_moe/layer.py
- vllm/model_executor/layers/fused_moe/router/__init__.py
- vllm/model_executor/layers/fused_moe/router/base_router.py
- vllm/model_executor/layers/fused_moe/router/custom_routing_router.py
- vllm/model_executor/layers/fused_moe/router/fused_moe_router.py
- vllm/model_executor/layers/fused_moe/router/fused_topk_bias_router.py
- vllm/model_executor/layers/fused_moe/router/fused_topk_router.py
- vllm/model_executor/layers/fused_moe/router/grouped_topk_router.py
- vllm/model_executor/layers/fused_moe/router/router_factory.py
- vllm/model_executor/layers/fused_moe/router/routing_simulator_router.py
- vllm/model_executor/layers/fused_moe/unquantized_fused_moe_method.py
- vllm/model_executor/layers/quantization/awq_marlin.py
- vllm/model_executor/layers/quantization/bitsandbytes.py
- vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe.py
- vllm/model_executor/layers/quantization/experts_int8.py
- vllm/model_executor/layers/quantization/fp8.py
- vllm/model_executor/layers/quantization/gguf.py
- vllm/model_executor/layers/quantization/gptq_marlin.py
- vllm/model_executor/layers/quantization/ipex_quant.py
- vllm/model_executor/layers/quantization/modelopt.py
- vllm/model_executor/layers/quantization/moe_wna16.py
- vllm/model_executor/layers/quantization/mxfp4.py
- vllm/model_executor/layers/quantization/quark/quark_moe.py
- vllm/model_executor/layers/quantization/rtn.py
- vllm/model_executor/models/ernie45_moe.py
- vllm/model_executor/models/ernie45_vl_moe.py
artifact_dir: evidence/pull-bundles/vllm/gh-30623
head_ref_oid: 525ffc6b0e4d06b9bbd73b36abce7d573f52e769
---
# [MoE Refactor] Separate Router into OO Classes

- Repository: `vllm-project/vllm`
- PR: [30623](https://github.com/vllm-project/vllm/pull/30623)
- Decision: `defer`
- Reason: defer

## Changed Paths

- `tests/kernels/moe/modular_kernel_tools/common.py`
- `tests/kernels/moe/test_batched_moe.py`
- `tests/kernels/moe/test_block_fp8.py`
- `tests/kernels/moe/test_cutlass_moe.py`
- `tests/kernels/moe/test_flashinfer_moe.py`
- `tests/kernels/moe/test_grouped_topk.py`
- `tests/kernels/moe/test_moe.py`
- `tests/kernels/moe/test_moe_permute_unpermute.py`
- `tests/kernels/moe/test_nvfp4_moe.py`
- `tests/kernels/moe/test_pplx_cutlass_moe.py`
- `tests/kernels/moe/test_routing.py`
- `tests/kernels/moe/test_routing_simulator.py`
- `tests/model_executor/test_enabled_custom_ops.py`
- `vllm/distributed/eplb/eplb_state.py`
- `vllm/model_executor/layers/fused_moe/__init__.py`
- `vllm/model_executor/layers/fused_moe/config.py`
- `vllm/model_executor/layers/fused_moe/fused_moe.py`
- `vllm/model_executor/layers/fused_moe/fused_moe_method_base.py`
- `vllm/model_executor/layers/fused_moe/fused_moe_modular_method.py`
- `vllm/model_executor/layers/fused_moe/layer.py`
- `vllm/model_executor/layers/fused_moe/router/__init__.py`
- `vllm/model_executor/layers/fused_moe/router/base_router.py`
- `vllm/model_executor/layers/fused_moe/router/custom_routing_router.py`
- `vllm/model_executor/layers/fused_moe/router/fused_moe_router.py`
- `vllm/model_executor/layers/fused_moe/router/fused_topk_bias_router.py`
- `vllm/model_executor/layers/fused_moe/router/fused_topk_router.py`
- `vllm/model_executor/layers/fused_moe/router/grouped_topk_router.py`
- `vllm/model_executor/layers/fused_moe/router/router_factory.py`
- `vllm/model_executor/layers/fused_moe/router/routing_simulator_router.py`
- `vllm/model_executor/layers/fused_moe/unquantized_fused_moe_method.py`
- `vllm/model_executor/layers/quantization/awq_marlin.py`
- `vllm/model_executor/layers/quantization/bitsandbytes.py`
- `vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe.py`
- `vllm/model_executor/layers/quantization/experts_int8.py`
- `vllm/model_executor/layers/quantization/fp8.py`
- `vllm/model_executor/layers/quantization/gguf.py`
- `vllm/model_executor/layers/quantization/gptq_marlin.py`
- `vllm/model_executor/layers/quantization/ipex_quant.py`
- `vllm/model_executor/layers/quantization/modelopt.py`
- `vllm/model_executor/layers/quantization/moe_wna16.py`
- `vllm/model_executor/layers/quantization/mxfp4.py`
- `vllm/model_executor/layers/quantization/quark/quark_moe.py`
- `vllm/model_executor/layers/quantization/rtn.py`
- `vllm/model_executor/models/ernie45_moe.py`
- `vllm/model_executor/models/ernie45_vl_moe.py`

## Evidence Bundle

`evidence/pull-bundles/vllm/gh-30623`
