use memra_gguf::config::JsonObj;
use std::collections::BTreeMap;
pub const EP_MAP_ENV: &str = "MEMRA_EP_MAP";
pub const EP_MAP_ENV_GLM5: &str = "MEMRA_GLM5_EP_MAP";
pub fn resolve_ep_map_env(
general: Option<String>,
glm5_alias: Option<String>,
) -> Result<Option<(&'static str, String)>, String> {
match (general, glm5_alias) {
(Some(g), Some(a)) if g != a => Err(format!(
"{EP_MAP_ENV}={g:?} and {EP_MAP_ENV_GLM5}={a:?} disagree — the alias and the \
general flag must name the SAME map (unset one; refused rather than \
silently picking a precedence winner)"
)),
(Some(g), _) => Ok(Some((EP_MAP_ENV, g))),
(None, Some(a)) => Ok(Some((EP_MAP_ENV_GLM5, a))),
(None, None) => Ok(None),
}
}
pub fn ep_map_env() -> Result<Option<(&'static str, String)>, String> {
resolve_ep_map_env(
std::env::var(EP_MAP_ENV).ok(),
std::env::var(EP_MAP_ENV_GLM5).ok(),
)
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EpMap {
pub n_experts: usize,
pub ranks: usize,
pub entry_rank: usize,
pub layers: BTreeMap<usize, Vec<u8>>,
}
fn raw_usize(obj: &JsonObj, key: &str) -> Result<usize, String> {
let v = obj
.raw(key)
.ok_or(format!("ep-map: missing required field {key:?}"))?
.trim();
v.parse::<usize>()
.map_err(|_| format!("ep-map: field {key:?} = {v:?} is not an unsigned integer"))
}
fn split_objects(raw: &str) -> Result<Vec<&str>, String> {
let b = raw.as_bytes();
let mut out = Vec::new();
let mut depth = 0usize;
let mut start = None;
let mut in_str = false;
let mut escaped = false;
for (i, &c) in b.iter().enumerate() {
if in_str {
if escaped {
escaped = false;
} else if c == b'\\' {
escaped = true;
} else if c == b'"' {
in_str = false;
}
continue;
}
match c {
b'"' => in_str = true,
b'{' => {
if depth == 0 {
start = Some(i);
}
depth += 1;
}
b'}' => {
depth = depth
.checked_sub(1)
.ok_or("ep-map: unbalanced braces in layers array")?;
if depth == 0 {
let s = start.take().ok_or("ep-map: object end without start")?;
out.push(&raw[s..=i]);
}
}
_ => {}
}
}
if depth != 0 || in_str {
return Err("ep-map: layers array ends inside an object or string".into());
}
Ok(out)
}
impl EpMap {
pub fn even_owners(n_experts: usize, ranks: usize) -> Vec<u8> {
let per = n_experts / ranks;
(0..n_experts).map(|ex| (ex / per) as u8).collect()
}
pub fn parse(text: &str) -> Result<EpMap, String> {
let obj = JsonObj::parse(text);
match obj.string("format") {
Some(f) if f == "memra-ep-map-v1" => {}
Some(f) => {
return Err(format!(
"ep-map: format {f:?} is not \"memra-ep-map-v1\" (fail-closed: one \
frozen format, no silent best-effort read)"
));
}
None => {
return Err("ep-map: missing \"format\" field (not a memra-ep-map-v1 \
document)"
.into());
}
}
let ranks = raw_usize(&obj, "ranks")?;
let n_experts = raw_usize(&obj, "expert_count")?;
let entry_rank = raw_usize(&obj, "entry_rank")?;
if n_experts == 0 || ranks < 2 {
return Err(format!(
"ep-map: expert_count={n_experts} ranks={ranks} is not a partitionable \
geometry"
));
}
if entry_rank >= ranks {
return Err(format!(
"ep-map: entry_rank {entry_rank} outside the {ranks}-rank map"
));
}
let layers_raw = obj
.raw("layers")
.ok_or("ep-map: missing \"layers\" array")?;
let mut layers: BTreeMap<usize, Vec<u8>> = BTreeMap::new();
for layer_obj in split_objects(layers_raw)? {
let lo = JsonObj::parse(layer_obj);
let layer = raw_usize(&lo, "layer")?;
let assignment = lo
.u32_array("assignment")
.ok_or(format!("ep-map: layer {layer} is missing \"assignment\""))?;
if assignment.len() != n_experts {
return Err(format!(
"ep-map: layer {layer} assignment carries {} entries, the map \
declares expert_count={n_experts}",
assignment.len()
));
}
if let Some(bad) = assignment.iter().find(|&&r| (r as usize) >= ranks) {
return Err(format!(
"ep-map: layer {layer} assigns rank {bad} >= ranks {ranks}"
));
}
for r in 0..ranks {
if !assignment.iter().any(|&a| a as usize == r) {
return Err(format!(
"ep-map: layer {layer} leaves rank {r} with ZERO experts \
(refused: an empty rank slab is an unmeasured degenerate arm)"
));
}
}
let owners: Vec<u8> = assignment.iter().map(|&r| r as u8).collect();
if layers.insert(layer, owners).is_some() {
return Err(format!("ep-map: duplicate row for layer {layer}"));
}
}
if layers.is_empty() {
return Err("ep-map: empty \"layers\" array (fail-closed: an empty map \
places nothing)"
.into());
}
Ok(EpMap {
n_experts,
ranks,
entry_rank,
layers,
})
}
pub fn render(&self) -> String {
let mut out = String::from("{\n");
out.push_str(&format!(" \"entry_rank\": {},\n", self.entry_rank));
out.push_str(&format!(" \"expert_count\": {},\n", self.n_experts));
out.push_str(" \"format\": \"memra-ep-map-v1\",\n");
out.push_str(" \"layers\": [\n");
let rows: Vec<String> = self
.layers
.iter()
.map(|(layer, owners)| {
let a: Vec<String> = owners.iter().map(|r| r.to_string()).collect();
format!(
" {{\"assignment\": [{}], \"layer\": {layer}}}",
a.join(", ")
)
})
.collect();
out.push_str(&rows.join(",\n"));
out.push_str("\n ],\n");
out.push_str(&format!(" \"ranks\": {}\n", self.ranks));
out.push_str("}\n");
out
}
pub fn validate_layer_cover(&self, ep_layers: &[usize]) -> Result<(), String> {
for il in ep_layers {
if !self.layers.contains_key(il) {
return Err(format!(
"ep-map: EP-armed MoE layer {il} has no map row (fail-closed: a missing \
row must never silently fall back to the even split)"
));
}
}
for il in self.layers.keys() {
if !ep_layers.contains(il) {
return Err(format!(
"ep-map: map row for layer {il} does not match any EP-armed MoE layer of \
this load (a map minted for a different arrangement is refused by name)"
));
}
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
fn doc(body: &str) -> String {
format!(
"{{\"format\": \"memra-ep-map-v1\", \"ranks\": 2, \"entry_rank\": 0, \
\"expert_count\": 4, {body}}}"
)
}
#[test]
fn parse_render_roundtrip_and_even_split() {
assert_eq!(EpMap::even_owners(4, 2), vec![0, 0, 1, 1]);
let m = EpMap {
n_experts: 4,
ranks: 2,
entry_rank: 0,
layers: [(1usize, EpMap::even_owners(4, 2)), (2, vec![0, 1, 1, 0])]
.into_iter()
.collect(),
};
let text = m.render();
let back = EpMap::parse(&text).unwrap();
assert_eq!(back, m);
assert_eq!(text, back.render());
}
#[test]
fn parses_the_shared_tools_emission_shape() {
let text = r#"{
"entry_rank": 0,
"expert_count": 4,
"format": "memra-ep-map-v1",
"layers": [
{
"assignment": [0, 1, 1, 0],
"layer": 3,
"stats": {
"even_baseline_expected_max_rank_touch": 2.75,
"expected_max_rank_touch": 2.0,
"intra_rank_coactivation_fraction": 0.58,
"peer_touch_fraction": 0.625
}
}
],
"params": {"balance_tolerance": 0.05, "decode_only": true, "hotness_signal": "pick-count"},
"ranks": 2,
"strategy": "coactivation",
"traces": [{"lines": 59, "path": "odd{path}.txt", "sha256": "ab12"}]
}
"#;
let m = EpMap::parse(text).unwrap();
assert_eq!(m.n_experts, 4);
assert_eq!(m.ranks, 2);
assert_eq!(m.entry_rank, 0);
assert_eq!(m.layers[&3], vec![0, 1, 1, 0]);
}
#[test]
fn parse_refusals_name_the_law() {
let e = EpMap::parse("{\"format\": \"other-v9\"}").unwrap_err();
assert!(e.contains("memra-ep-map-v1"), "{e}");
assert!(EpMap::parse("{}").unwrap_err().contains("format"));
let e =
EpMap::parse(&doc("\"layers\": [{\"layer\": 1, \"assignment\": [0, 1]}]")).unwrap_err();
assert!(
e.contains("2 entries") && e.contains("expert_count=4"),
"{e}"
);
let e = EpMap::parse(&doc(
"\"layers\": [{\"layer\": 1, \"assignment\": [0, 1, 2, 1]}]",
))
.unwrap_err();
assert!(e.contains(">= ranks"), "{e}");
let e = EpMap::parse(&doc(
"\"layers\": [{\"layer\": 1, \"assignment\": [0, 0, 0, 0]}]",
))
.unwrap_err();
assert!(e.contains("ZERO experts"), "{e}");
let e = EpMap::parse(&doc(
"\"layers\": [{\"layer\": 1, \"assignment\": [0, 0, 1, 1]}, \
{\"layer\": 1, \"assignment\": [0, 0, 1, 1]}]",
))
.unwrap_err();
assert!(e.contains("duplicate"), "{e}");
let e = EpMap::parse(&doc("\"layers\": []")).unwrap_err();
assert!(e.contains("empty"), "{e}");
let e = EpMap::parse(
"{\"format\": \"memra-ep-map-v1\", \"ranks\": 2, \"entry_rank\": 2, \
\"expert_count\": 4, \"layers\": [{\"layer\": 1, \"assignment\": [0, 0, 1, 1]}]}",
)
.unwrap_err();
assert!(e.contains("entry_rank"), "{e}");
}
#[test]
fn parses_the_committed_example_map_bytes() {
let text = include_str!(
"../../../research/ep-placement-map-20260831/example-map-coactivation.json"
);
let m = EpMap::parse(text).unwrap();
assert_eq!(m.n_experts, 16);
assert_eq!(m.ranks, 2);
assert_eq!(m.entry_rank, 0);
assert_eq!(m.layers.len(), 2);
for owners in m.layers.values() {
assert_eq!(owners.len(), 16);
assert_eq!(owners.iter().filter(|&&r| r == 0).count(), 8);
}
}
#[test]
fn env_resolution_names_the_armed_flag_and_refuses_disagreement() {
assert_eq!(resolve_ep_map_env(None, None).unwrap(), None);
assert_eq!(
resolve_ep_map_env(Some("m.json".into()), None).unwrap(),
Some((EP_MAP_ENV, "m.json".to_string()))
);
assert_eq!(
resolve_ep_map_env(None, Some("m.json".into())).unwrap(),
Some((EP_MAP_ENV_GLM5, "m.json".to_string()))
);
assert_eq!(
resolve_ep_map_env(Some("m.json".into()), Some("m.json".into())).unwrap(),
Some((EP_MAP_ENV, "m.json".to_string()))
);
let e = resolve_ep_map_env(Some("a.json".into()), Some("b.json".into())).unwrap_err();
assert!(e.contains(EP_MAP_ENV) && e.contains(EP_MAP_ENV_GLM5), "{e}");
assert_eq!(
resolve_ep_map_env(Some(String::new()), None).unwrap(),
Some((EP_MAP_ENV, String::new()))
);
}
#[test]
fn layer_cover_is_exact_both_ways() {
let m = EpMap::parse(&doc(
"\"layers\": [{\"layer\": 1, \"assignment\": [0, 0, 1, 1]}]",
))
.unwrap();
assert!(m.validate_layer_cover(&[1]).is_ok());
assert!(
m.validate_layer_cover(&[1, 2])
.unwrap_err()
.contains("layer 2")
);
assert!(
m.validate_layer_cover(&[2])
.unwrap_err()
.contains("layer 2")
);
}
}