Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
7eac3b7
Initial commit
simondanielsson Apr 23, 2026
a6374a4
feat: first impl of async (WRITE) mode and raise if mori used without…
simondanielsson Apr 23, 2026
1584560
fix: add do_remote_* to WRITE path creation of kv transfer params
simondanielsson Apr 27, 2026
19a72b4
refactor: use tokio::join! rather than spawn to avoid race condition
simondanielsson Apr 27, 2026
462f6b1
Merge remote-tracking branch 'upstream/main' into feature/mori-write-…
simondanielsson Apr 29, 2026
da39023
chore: move docstring to generate_transfer_id
simondanielsson Apr 29, 2026
7d2f7e2
chroe: rename build_decode_kv_params
simondanielsson Apr 29, 2026
0846eed
docs: mention mori in module docstring in vllm_service_discovery
simondanielsson Apr 29, 2026
79d7efd
chore: cargo fmt
simondanielsson Apr 29, 2026
12f7fba
chore: shorten docstring for MoriIOServiceRegistratoin
simondanielsson Apr 29, 2026
6ddf9af
chore: add trackking issue in comment for why remote_tp_size is 1
simondanielsson Apr 29, 2026
d605ce2
feat: error if dispatching before registration
simondanielsson Apr 29, 2026
4528365
refactor: make more DRY with extract_base_http_and_dp_ran
simondanielsson Apr 29, 2026
0f1d3fd
Move prefill stop profiling into big else block
simondanielsson Apr 29, 2026
988d995
chore: cargo fmt
simondanielsson Apr 29, 2026
ec42d8a
feat: support prefill profiling in WRITE mode
simondanielsson Apr 29, 2026
7a42f50
refactor: make more DRY by adding handle_decode_response
simondanielsson Apr 29, 2026
e39f17a
fix: revert all changes in process_vllm_two_stage_request as mori doe…
simondanielsson Apr 29, 2026
2b497bd
refactor: make more DRY!
simondanielsson Apr 29, 2026
d3d6233
chore: fix clippy
simondanielsson Apr 29, 2026
898650b
fix: propagate prefill errors
simondanielsson Apr 30, 2026
1a820dd
fix: support logsprobs from prefill also in WRITE mode
simondanielsson Apr 30, 2026
b04a049
fix: enforce mori runs with zmq svc discovery
simondanielsson Apr 30, 2026
0d08cda
fix: commit xfer mode only after registration validation succeeds
simondanielsson Apr 30, 2026
6657952
fix: use send_client_request for prefill request in WRITE mode
simondanielsson Apr 30, 2026
3dbd46e
fix: record failed prefills in WRITE mode with record_pd_prefill_error
simondanielsson Apr 30, 2026
45ee5b4
fix: stop profile decode instance upon prefill error in WRITE mode
simondanielsson Apr 30, 2026
11dba53
chore: update comments and rename variables to concurrent dispatch is…
simondanielsson May 5, 2026
14d2d2f
Merge remote-tracking branch 'upstream/main' into feature/mori-write-…
simondanielsson May 5, 2026
8a5a448
Merge remote-tracking branch 'upstream/main' into feature/mori-write-…
simondanielsson May 6, 2026
a800f2d
fix: stop profiling decode upon decode error
simondanielsson May 6, 2026
ffbc9ca
fix: pass in stored transfer mode to parse_registration and improve t…
simondanielsson May 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 61 additions & 2 deletions src/config/validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -394,8 +394,18 @@ impl ConfigValidator {
// All policies are now supported for both router types thanks to the unified trait design
// No mode/policy restrictions needed anymore

// Check if service discovery is enabled for worker count validation
let has_service_discovery = config.discovery.as_ref().is_some_and(|d| d.enabled);
// Check if service discovery is enabled for worker count validation.
// This covers both K8s service discovery (config.discovery) and vLLM ZMQ
// service discovery (VllmPrefillDecode { discovery_address: Some(_) }).
let has_vllm_discovery = matches!(
&config.mode,
RoutingMode::VllmPrefillDecode {
discovery_address: Some(_),
..
}
);
let has_service_discovery =
config.discovery.as_ref().is_some_and(|d| d.enabled) || has_vllm_discovery;
Comment thread
simondanielsson marked this conversation as resolved.

// Only validate worker counts if service discovery is disabled
if !has_service_discovery {
Expand Down Expand Up @@ -443,6 +453,17 @@ impl ConfigValidator {
// DP-aware routing is now automatically enabled when data_parallel_size > 1
// and is compatible with service discovery

// MoRI-IO requires service discovery: ZMQ addresses are obtained via instance
// registration and are not available in direct URL mode.
if config.kv_connector == KvConnector::MoriIO && !has_vllm_discovery {
return Err(ConfigError::IncompatibleConfig {
reason: "MoRI-IO KV connector requires service discovery to be enabled \
(ZMQ addresses are obtained via instance registration). Please \
run with `--vllm-discovery-address ${address}`"
.to_string(),
});
}

Ok(())
}

Expand Down Expand Up @@ -727,4 +748,42 @@ mod tests {
assert!(e.to_string().contains("prefill requires at least 2"));
}
}

#[test]
fn test_moriio_requires_service_discovery() {
let mut config = RouterConfig::new(
RoutingMode::Regular {
worker_urls: vec!["http://worker:8000".to_string()],
},
PolicyConfig::Random,
);
config.kv_connector = KvConnector::MoriIO;
config.discovery = None;

let result = ConfigValidator::validate(&config);
assert!(result.is_err());
if let Err(e) = result {
assert!(e
.to_string()
.contains("MoRI-IO KV connector requires service discovery"));
}
}

#[test]
fn test_moriio_with_service_discovery_is_valid() {
let mut config = RouterConfig::new(
RoutingMode::VllmPrefillDecode {
prefill_urls: vec![],
decode_urls: vec![],
prefill_policy: None,
decode_policy: None,
discovery_address: Some("0.0.0.0:36367".to_string()),
},
PolicyConfig::Random,
);
config.kv_connector = KvConnector::MoriIO;

let result = ConfigValidator::validate(&config);
assert!(result.is_ok());
}
}
Loading